aboutsummaryrefslogtreecommitdiff
path: root/src/check_expr.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/check_expr.cpp')
-rw-r--r--src/check_expr.cpp9
1 files changed, 7 insertions, 2 deletions
diff --git a/src/check_expr.cpp b/src/check_expr.cpp
index 27e750668..891378b99 100644
--- a/src/check_expr.cpp
+++ b/src/check_expr.cpp
@@ -4431,9 +4431,14 @@ gb_internal void convert_to_typed(CheckerContext *c, Operand *operand, Type *tar
defer (gb_string_free(type_str));
if (valid_count == 1) {
+ Type *new_type = t->Union.variants[first_success_index];
+ target_type = new_type;
+ if (is_type_union(new_type)) {
+ convert_to_typed(c, operand, new_type);
+ break;
+ }
+ operand->type = new_type;
operand->mode = Addressing_Value;
- operand->type = t->Union.variants[first_success_index];
- target_type = t->Union.variants[first_success_index];
break;
} else if (valid_count > 1) {
ERROR_BLOCK();