aboutsummaryrefslogtreecommitdiff
path: root/src/check_expr.cpp
diff options
context:
space:
mode:
authorJeroen van Rijn <Kelimion@users.noreply.github.com>2025-08-09 05:03:39 +0200
committerGitHub <noreply@github.com>2025-08-09 05:03:39 +0200
commitd3736d765a537145ad3f31b912f76d14d162e07d (patch)
tree29aed4117325dfba816379f836070a3371dfffe9 /src/check_expr.cpp
parent786d454443a6ba3bc6d97b922305c6646776b1e2 (diff)
parent5db6ea8354ec19b0800839d770f6216fde6027c5 (diff)
Merge pull request #5564 from janga-perlind/pr/group-check
Do not check for explicit allocators when determining proc in proc group
Diffstat (limited to 'src/check_expr.cpp')
-rw-r--r--src/check_expr.cpp18
1 files changed, 10 insertions, 8 deletions
diff --git a/src/check_expr.cpp b/src/check_expr.cpp
index b4cfaaf00..6a50b553e 100644
--- a/src/check_expr.cpp
+++ b/src/check_expr.cpp
@@ -6147,7 +6147,8 @@ gb_internal CallArgumentError check_call_arguments_internal(CheckerContext *c, A
Entity *entity, Type *proc_type,
Array<Operand> positional_operands, Array<Operand> const &named_operands,
CallArgumentErrorMode show_error_mode,
- CallArgumentData *data) {
+ CallArgumentData *data,
+ bool checking_proc_group) {
TEMPORARY_ALLOCATOR_GUARD();
CallArgumentError err = CallArgumentError_None;
@@ -6314,7 +6315,7 @@ gb_internal CallArgumentError check_call_arguments_internal(CheckerContext *c, A
bool context_allocator_error = false;
if (e->kind == Entity_Variable) {
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
if (e->Variable.param_value.original_ast_expr->kind == Ast_SelectorExpr) {
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,
Array<Operand> const &positional_operands, Array<Operand> const &named_operands,
CallArgumentErrorMode show_error_mode,
- CallArgumentData *data) {
+ CallArgumentData *data,
+ bool checking_proc_group) {
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);
- 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) {
return false;
}
@@ -6919,7 +6921,7 @@ gb_internal CallArgumentData check_call_arguments_proc_group(CheckerContext *c,
e, e->type,
positional_operands, named_operands,
CallArgumentErrorMode::ShowErrors,
- &data);
+ &data, false);
}
return data;
}
@@ -7063,7 +7065,7 @@ gb_internal CallArgumentData check_call_arguments_proc_group(CheckerContext *c,
p, pt,
positional_operands, named_operands,
CallArgumentErrorMode::NoErrors,
- &data);
+ &data, true);
if (!is_a_candidate) {
continue;
}
@@ -7372,7 +7374,7 @@ gb_internal CallArgumentData check_call_arguments_proc_group(CheckerContext *c,
e, e->type,
positional_operands, named_operands,
CallArgumentErrorMode::ShowErrors,
- &data);
+ &data, false);
return data;
}
@@ -7485,7 +7487,7 @@ gb_internal CallArgumentData check_call_arguments(CheckerContext *c, Operand *op
nullptr, proc_type,
positional_operands, named_operands,
CallArgumentErrorMode::ShowErrors,
- &data);
+ &data, false);
} else if (pt) {
data.result_type = pt->results;
}