diff options
| author | Laytan Laats <laytanlaats@hotmail.com> | 2024-11-21 19:18:17 +0100 |
|---|---|---|
| committer | Laytan Laats <laytanlaats@hotmail.com> | 2024-11-21 19:18:17 +0100 |
| commit | 83bf0c6ab82ed035f3ba133de3411f6e01c1f8d4 (patch) | |
| tree | 435b53641531a05f3c5f44c2bb824044346fe042 /src/check_expr.cpp | |
| parent | a88ac1d21078d3b786a6ba6ed39daba013d57ff4 (diff) | |
checker: only error with -vet-cast when it is actually castable
Diffstat (limited to 'src/check_expr.cpp')
| -rw-r--r-- | src/check_expr.cpp | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/src/check_expr.cpp b/src/check_expr.cpp index cb4647f33..53d407b51 100644 --- a/src/check_expr.cpp +++ b/src/check_expr.cpp @@ -3541,6 +3541,8 @@ gb_internal bool check_transmute(CheckerContext *c, Ast *node, Operand *o, Type return false; } + Operand src = *o; + Type *src_t = o->type; Type *dst_t = t; Type *src_bt = base_type(src_t); @@ -3629,7 +3631,8 @@ gb_internal bool check_transmute(CheckerContext *c, Ast *node, Operand *o, Type // identical casts that cannot be foreseen or otherwise // forbidden, so just skip them. if (forbid_identical && check_vet_flags(c) & VetFlag_Cast && - (c->curr_proc_sig == nullptr || !is_type_polymorphic(c->curr_proc_sig))) { + (c->curr_proc_sig == nullptr || !is_type_polymorphic(c->curr_proc_sig)) && + check_is_castable_to(c, &src, dst_t)) { if (are_types_identical(src_t, dst_t)) { gbString oper_str = expr_to_string(o->expr); gbString to_type = type_to_string(dst_t); |