diff --git a/src/check_expr.cpp b/src/check_expr.cpp index 1d59f0530..995582f64 100644 --- a/src/check_expr.cpp +++ b/src/check_expr.cpp @@ -5731,9 +5731,13 @@ Entity **populate_proc_parameter_list(CheckerContext *c, Type *proc_type, isize } } else { // NOTE(bill): Create 'lhs' list in order to ignore parameters which are polymorphic - lhs_count = pt->params->Tuple.variables.count; + if (pt->params == nullptr) { + lhs_count = 0; + } else { + lhs_count = pt->params->Tuple.variables.count; + } lhs = gb_alloc_array(heap_allocator(), Entity *, lhs_count); - for_array(i, pt->params->Tuple.variables) { + for (isize i = 0; i < lhs_count; i++) { Entity *e = pt->params->Tuple.variables[i]; if (!is_type_polymorphic(e->type)) { lhs[i] = e; diff --git a/src/check_type.cpp b/src/check_type.cpp index 9f8310e44..c733cfb4c 100644 --- a/src/check_type.cpp +++ b/src/check_type.cpp @@ -2507,6 +2507,16 @@ bool check_procedure_type(CheckerContext *ctx, Type *type, Ast *proc_type_node, break; } } + for (isize i = 0; i < result_count; i++) { + Entity *e = results->Tuple.variables[i]; + if (e->kind != Entity_Variable) { + is_polymorphic = true; + break; + } else if (is_type_polymorphic(e->type)) { + is_polymorphic = true; + break; + } + } type->Proc.is_polymorphic = is_polymorphic; return success;