Browse Source

Fix Slice passed incorrectly in LLVM IR to procedure called via procedure pointer #465

gingerBill 5 years ago
parent
commit
8a46b493fd
2 changed files with 14 additions and 11 deletions
  1. 1 11
      examples/demo/demo.odin
  2. 13 0
      src/check_type.cpp

+ 1 - 11
examples/demo/demo.odin

@@ -1350,17 +1350,7 @@ soa_struct_layout :: proc() {
 }
 
 main :: proc() {
-	id: typeid;
-	id = typeid_of(int);
-
-	if id == bool {
-		fmt.println("HERE1");
-	}
-	fmt.println("HERE2");
-
-
-
-	when false {
+	when true {
 		extra_general_stuff();
 		union_type();
 		parametric_polymorphism();

+ 13 - 0
src/check_type.cpp

@@ -2407,6 +2407,19 @@ void set_procedure_abi_types(gbAllocator allocator, Type *type) {
 		}
 	}
 
+	for (i32 i = 0; i < type->Proc.param_count; i++) {
+		Entity *e = type->Proc.params->Tuple.variables[i];
+		if (e->kind == Entity_Variable) {
+			set_procedure_abi_types(allocator, e->type);
+		}
+	}
+	for (i32 i = 0; i < type->Proc.result_count; i++) {
+		Entity *e = type->Proc.results->Tuple.variables[i];
+		if (e->kind == Entity_Variable) {
+			set_procedure_abi_types(allocator, e->type);
+		}
+	}
+
 	// NOTE(bill): The types are the same
 	type->Proc.abi_compat_result_type = type_to_abi_compat_result_type(allocator, type->Proc.results, type->Proc.calling_convention);
 	type->Proc.return_by_pointer = abi_compat_return_by_pointer(allocator, type->Proc.calling_convention, type->Proc.abi_compat_result_type);