Do not check for explicit allocators when determining proc in proc group

This commit is contained in:
janga-perlind
2025-08-09 12:37:15 +10:00
parent 786d454443
commit 5db6ea8354
+10 -8
View File
@@ -6147,7 +6147,8 @@ gb_internal CallArgumentError check_call_arguments_internal(CheckerContext *c, A
Entity *entity, Type *proc_type, Entity *entity, Type *proc_type,
Array<Operand> positional_operands, Array<Operand> const &named_operands, Array<Operand> positional_operands, Array<Operand> const &named_operands,
CallArgumentErrorMode show_error_mode, CallArgumentErrorMode show_error_mode,
CallArgumentData *data) { CallArgumentData *data,
bool checking_proc_group) {
TEMPORARY_ALLOCATOR_GUARD(); TEMPORARY_ALLOCATOR_GUARD();
CallArgumentError err = CallArgumentError_None; CallArgumentError err = CallArgumentError_None;
@@ -6314,7 +6315,7 @@ gb_internal CallArgumentError check_call_arguments_internal(CheckerContext *c, A
bool context_allocator_error = false; bool context_allocator_error = false;
if (e->kind == Entity_Variable) { if (e->kind == Entity_Variable) {
if (e->Variable.param_value.kind != ParameterValue_Invalid) { if (e->Variable.param_value.kind != ParameterValue_Invalid) {
if (ast_file_vet_explicit_allocators(c->file)) { if (ast_file_vet_explicit_allocators(c->file) && !checking_proc_group) {
// NOTE(lucas): check if we are trying to default to context.allocator or context.temp_allocator // NOTE(lucas): check if we are trying to default to context.allocator or context.temp_allocator
if (e->Variable.param_value.original_ast_expr->kind == Ast_SelectorExpr) { if (e->Variable.param_value.original_ast_expr->kind == Ast_SelectorExpr) {
auto& expr = e->Variable.param_value.original_ast_expr->SelectorExpr.expr; auto& expr = e->Variable.param_value.original_ast_expr->SelectorExpr.expr;
@@ -6741,7 +6742,8 @@ gb_internal bool check_call_arguments_single(CheckerContext *c, Ast *call, Opera
Entity *e, Type *proc_type, Entity *e, Type *proc_type,
Array<Operand> const &positional_operands, Array<Operand> const &named_operands, Array<Operand> const &positional_operands, Array<Operand> const &named_operands,
CallArgumentErrorMode show_error_mode, CallArgumentErrorMode show_error_mode,
CallArgumentData *data) { CallArgumentData *data,
bool checking_proc_group) {
bool return_on_failure = show_error_mode == CallArgumentErrorMode::NoErrors; bool return_on_failure = show_error_mode == CallArgumentErrorMode::NoErrors;
@@ -6765,7 +6767,7 @@ gb_internal bool check_call_arguments_single(CheckerContext *c, Ast *call, Opera
} }
GB_ASSERT(proc_type->kind == Type_Proc); GB_ASSERT(proc_type->kind == Type_Proc);
CallArgumentError err = check_call_arguments_internal(c, call, e, proc_type, positional_operands, named_operands, show_error_mode, data); CallArgumentError err = check_call_arguments_internal(c, call, e, proc_type, positional_operands, named_operands, show_error_mode, data, checking_proc_group);
if (return_on_failure && err != CallArgumentError_None) { if (return_on_failure && err != CallArgumentError_None) {
return false; return false;
} }
@@ -6919,7 +6921,7 @@ gb_internal CallArgumentData check_call_arguments_proc_group(CheckerContext *c,
e, e->type, e, e->type,
positional_operands, named_operands, positional_operands, named_operands,
CallArgumentErrorMode::ShowErrors, CallArgumentErrorMode::ShowErrors,
&data); &data, false);
} }
return data; return data;
} }
@@ -7063,7 +7065,7 @@ gb_internal CallArgumentData check_call_arguments_proc_group(CheckerContext *c,
p, pt, p, pt,
positional_operands, named_operands, positional_operands, named_operands,
CallArgumentErrorMode::NoErrors, CallArgumentErrorMode::NoErrors,
&data); &data, true);
if (!is_a_candidate) { if (!is_a_candidate) {
continue; continue;
} }
@@ -7372,7 +7374,7 @@ gb_internal CallArgumentData check_call_arguments_proc_group(CheckerContext *c,
e, e->type, e, e->type,
positional_operands, named_operands, positional_operands, named_operands,
CallArgumentErrorMode::ShowErrors, CallArgumentErrorMode::ShowErrors,
&data); &data, false);
return data; return data;
} }
@@ -7485,7 +7487,7 @@ gb_internal CallArgumentData check_call_arguments(CheckerContext *c, Operand *op
nullptr, proc_type, nullptr, proc_type,
positional_operands, named_operands, positional_operands, named_operands,
CallArgumentErrorMode::ShowErrors, CallArgumentErrorMode::ShowErrors,
&data); &data, false);
} else if (pt) { } else if (pt) {
data.result_type = pt->results; data.result_type = pt->results;
} }