Ensure checking for proc property equality before checking param assignability

This commit is contained in:
Harold Brenes
2026-03-23 21:15:12 -04:00
parent 147542b5cc
commit 4f6caf19f0
2 changed files with 9 additions and 6 deletions

View File

@@ -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;
}
}

View File

@@ -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);