aboutsummaryrefslogtreecommitdiff
path: root/src/check_expr.cpp
diff options
context:
space:
mode:
authorAlex Riedl <alexanderbriedl@gmail.com>2025-08-09 10:47:09 -0500
committerAlex Riedl <alexanderbriedl@gmail.com>2025-08-09 10:47:09 -0500
commita8dca3920e16f0bf3156d71174eafb52eb939c1b (patch)
treec7193c9c4213851cf5cc7745b140788e964f3f24 /src/check_expr.cpp
parent277c6cac7175d78bd2e42db17e7ca7475ec6d574 (diff)
parentd3736d765a537145ad3f31b912f76d14d162e07d (diff)
Merge branch 'master' of github.com:odin-lang/Odin
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;
}