aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorgingerBill <bill@gingerbill.org>2024-08-18 12:06:58 +0100
committergingerBill <bill@gingerbill.org>2024-08-18 12:06:58 +0100
commit17740966e5dc1581e91f87c616aedc9df8838f1c (patch)
treea0f2070bd0b8704aeba758b2cae59e4ab6dc3694 /src
parent5c06fcd346813a132c4cbaf09e0a410294371a3d (diff)
Fix #4040
Diffstat (limited to 'src')
-rw-r--r--src/check_stmt.cpp10
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);