diff options
| author | gingerBill <bill@gingerbill.org> | 2024-08-18 12:06:58 +0100 |
|---|---|---|
| committer | gingerBill <bill@gingerbill.org> | 2024-08-18 12:06:58 +0100 |
| commit | 17740966e5dc1581e91f87c616aedc9df8838f1c (patch) | |
| tree | a0f2070bd0b8704aeba758b2cae59e4ab6dc3694 /src/check_stmt.cpp | |
| parent | 5c06fcd346813a132c4cbaf09e0a410294371a3d (diff) | |
Fix #4040
Diffstat (limited to 'src/check_stmt.cpp')
| -rw-r--r-- | src/check_stmt.cpp | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/src/check_stmt.cpp b/src/check_stmt.cpp index cc3671ad2..de127b79c 100644 --- a/src/check_stmt.cpp +++ b/src/check_stmt.cpp @@ -2496,6 +2496,16 @@ gb_internal void check_return_stmt(CheckerContext *ctx, Ast *node) { continue; } Ast *expr = unparen_expr(o.expr); + while (expr->kind == Ast_CallExpr && expr->CallExpr.proc->tav.mode == Addressing_Type) { + if (expr->CallExpr.args.count != 1) { + break; + } + Ast *arg = expr->CallExpr.args[0]; + if (arg->kind == Ast_FieldValue || !are_types_identical(arg->tav.type, expr->tav.type)) { + break; + } + expr = unparen_expr(arg); + } auto unsafe_return_error = [](Operand const &o, char const *msg, Type *extra_type=nullptr) { gbString s = expr_to_string(o.expr); |