diff options
| author | gingerBill <gingerBill@users.noreply.github.com> | 2026-01-07 13:42:14 +0000 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2026-01-07 13:42:14 +0000 |
| commit | f9d9166ff11f3b6eeedb4355dfa930d69c40be8a (patch) | |
| tree | 13d7d6337d318f063624b287b840b855b2177fcc /src/check_expr.cpp | |
| parent | 94cc5d9e6193389bc59da709d08458e3f506abd4 (diff) | |
| parent | 91c1950b9f198ab844b83dabb0f381810965a3ce (diff) | |
Merge pull request #6110 from ske2004/fix-constant-conversion-checks
Fix constant conversion checks (#6104)
Diffstat (limited to 'src/check_expr.cpp')
| -rw-r--r-- | src/check_expr.cpp | 23 |
1 files changed, 6 insertions, 17 deletions
diff --git a/src/check_expr.cpp b/src/check_expr.cpp index 3b32d734a..2b2ae09cc 100644 --- a/src/check_expr.cpp +++ b/src/check_expr.cpp @@ -3526,28 +3526,17 @@ gb_internal bool check_cast_internal(CheckerContext *c, Operand *x, Type *type) Type *elem = core_array_type(bt); if (core_type(bt)->kind == Type_Basic) { - if (check_representable_as_constant(c, x->value, type, &x->value)) { - return true; - } - goto check_castable; - } else if (!are_types_identical(elem, bt) && - elem->kind == Type_Basic && - check_representable_as_constant(c, x->value, elem, &x->value)) { - if (check_representable_as_constant(c, x->value, type, &x->value)) { - return true; - } - goto check_castable; + return check_representable_as_constant(c, x->value, type, &x->value) || + (is_type_pointer(type) && check_is_castable_to(c, x, type)); + } else if (!are_types_identical(elem, bt) && elem->kind == Type_Basic) { + return check_representable_as_constant(c, x->value, elem, &x->value) || + (is_type_pointer(elem) && check_is_castable_to(c, x, elem)); } else if (check_is_castable_to(c, x, type)) { x->value = {}; x->mode = Addressing_Value; return true; } - - return false; - } - -check_castable: - if (check_is_castable_to(c, x, type)) { + } else if (check_is_castable_to(c, x, type)) { if (x->mode != Addressing_Constant) { x->mode = Addressing_Value; } else if (is_type_slice(type) && is_type_string(x->type)) { |