From 17740966e5dc1581e91f87c616aedc9df8838f1c Mon Sep 17 00:00:00 2001 From: gingerBill Date: Sun, 18 Aug 2024 12:06:58 +0100 Subject: Fix #4040 --- src/check_stmt.cpp | 10 ++++++++++ 1 file changed, 10 insertions(+) (limited to 'src/check_stmt.cpp') 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); -- cgit v1.2.3