From 8a46b493fda7cafa5320a9f2bfbd3c0317038545 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Tue, 5 Nov 2019 19:40:08 +0000 Subject: [PATCH] Fix Slice passed incorrectly in LLVM IR to procedure called via procedure pointer #465 --- examples/demo/demo.odin | 12 +----------- src/check_type.cpp | 13 +++++++++++++ 2 files changed, 14 insertions(+), 11 deletions(-) diff --git a/examples/demo/demo.odin b/examples/demo/demo.odin index 168efb434..8dc5340c9 100644 --- a/examples/demo/demo.odin +++ b/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(); diff --git a/src/check_type.cpp b/src/check_type.cpp index c733cfb4c..c0be3cbff 100644 --- a/src/check_type.cpp +++ b/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);