From 4f6caf19f01701d794a4a1fd5b05494edd5dc069 Mon Sep 17 00:00:00 2001 From: Harold Brenes Date: Mon, 23 Mar 2026 21:15:12 -0400 Subject: [PATCH] Ensure checking for proc property equality before checking param assignability --- src/check_expr.cpp | 2 +- src/types.cpp | 13 ++++++++----- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/src/check_expr.cpp b/src/check_expr.cpp index 597c641a2..d6c91ce94 100644 --- a/src/check_expr.cpp +++ b/src/check_expr.cpp @@ -929,7 +929,7 @@ gb_internal i64 check_distance_between_types(CheckerContext *c, Operand *operand return 4; } - if (is_type_proc(src) && check_proc_params_assignable(c, dst, src)) { + if (is_type_proc(src) && are_proc_properties_identical(dst,src) && check_proc_params_assignable(c, dst, src)) { return 4; } } diff --git a/src/types.cpp b/src/types.cpp index 6d033eeb3..ffd0fc196 100644 --- a/src/types.cpp +++ b/src/types.cpp @@ -3058,6 +3058,13 @@ gb_internal bool are_types_identical_unique_tuples(Type *x, Type *y) { return are_types_identical_internal(x, y, true); } +gb_internal bool are_proc_properties_identical(Type *x, Type *y) { + return x->Proc.calling_convention == y->Proc.calling_convention && + x->Proc.c_vararg == y->Proc.c_vararg && + x->Proc.variadic == y->Proc.variadic && + x->Proc.diverging == y->Proc.diverging && + x->Proc.optional_ok == y->Proc.optional_ok; +} gb_internal bool are_types_identical_internal(Type *x, Type *y, bool check_tuple_names) { if (x == y) { @@ -3262,11 +3269,7 @@ gb_internal bool are_types_identical_internal(Type *x, Type *y, bool check_tuple break; case Type_Proc: - return x->Proc.calling_convention == y->Proc.calling_convention && - x->Proc.c_vararg == y->Proc.c_vararg && - x->Proc.variadic == y->Proc.variadic && - x->Proc.diverging == y->Proc.diverging && - x->Proc.optional_ok == y->Proc.optional_ok && + return are_proc_properties_identical(x, y) && are_types_identical_internal(x->Proc.params, y->Proc.params, check_tuple_names) && are_types_identical_internal(x->Proc.results, y->Proc.results, check_tuple_names);