aboutsummaryrefslogtreecommitdiff
path: root/src/check_type.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/check_type.cpp')
-rw-r--r--src/check_type.cpp15
1 files changed, 13 insertions, 2 deletions
diff --git a/src/check_type.cpp b/src/check_type.cpp
index 35b0c7644..612a11593 100644
--- a/src/check_type.cpp
+++ b/src/check_type.cpp
@@ -2101,8 +2101,15 @@ Type *type_to_abi_compat_param_type(gbAllocator a, Type *original_type, ProcCall
}
break;
}
- case Type_Pointer: break;
- case Type_Proc: break; // NOTE(bill): Just a pointer
+ case Type_Pointer:
+ if (is_type_struct(bt->Pointer.elem)) {
+ // Force to a raw pointer
+ new_type = t_rawptr;
+ }
+ break;
+ case Type_Proc:
+ new_type = t_rawptr;
+ break; // NOTE(bill): Just a pointer
// Odin specific
case Type_Slice:
@@ -2194,6 +2201,10 @@ Type *type_to_abi_compat_result_type(gbAllocator a, Type *original_type, ProcCal
return new_type;
}
+ if (is_type_pointer(single_type)) {
+ // NOTE(bill): Force a cast to prevent a possible type cycle
+ return t_rawptr;
+ }
if (build_context.ODIN_OS == "windows") {
if (build_context.ODIN_ARCH == "amd64") {