aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorVeikka Tuominen <git@vexu.eu>2022-11-04 22:28:14 +0200
committerVeikka Tuominen <git@vexu.eu>2022-11-05 13:22:21 +0200
commitf96748ebc19b0c083569e7677f65fe4454c32b57 (patch)
tree8d77d29226a5033b37c2b2822b9d108189db70a7 /src
parentf92e7bed7b6b83b2cdfe2bfed047e3a7bcdd2116 (diff)
downloadzig-f96748ebc19b0c083569e7677f65fe4454c32b57.tar.gz
zig-f96748ebc19b0c083569e7677f65fe4454c32b57.zip
Sema: coerce elements of array cat
Closes #13347
Diffstat (limited to 'src')
-rw-r--r--src/Sema.zig12
1 files changed, 10 insertions, 2 deletions
diff --git a/src/Sema.zig b/src/Sema.zig
index d7fce06e7f..3259a0831b 100644
--- a/src/Sema.zig
+++ b/src/Sema.zig
@@ -11995,10 +11995,18 @@ fn zirArrayCat(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Ai
const element_vals = try sema.arena.alloc(Value, final_len_including_sent);
var elem_i: usize = 0;
while (elem_i < lhs_len) : (elem_i += 1) {
- element_vals[elem_i] = try lhs_sub_val.elemValue(sema.mod, sema.arena, elem_i);
+ const elem_val = try lhs_sub_val.elemValue(sema.mod, sema.arena, elem_i);
+ const elem_val_inst = try sema.addConstant(lhs_info.elem_type, elem_val);
+ const coerced_elem_val_inst = try sema.coerce(block, resolved_elem_ty, elem_val_inst, .unneeded);
+ const coereced_elem_val = try sema.resolveConstMaybeUndefVal(block, .unneeded, coerced_elem_val_inst, "");
+ element_vals[elem_i] = coereced_elem_val;
}
while (elem_i < result_len) : (elem_i += 1) {
- element_vals[elem_i] = try rhs_sub_val.elemValue(sema.mod, sema.arena, elem_i - lhs_len);
+ const elem_val = try rhs_sub_val.elemValue(sema.mod, sema.arena, elem_i - lhs_len);
+ const elem_val_inst = try sema.addConstant(lhs_info.elem_type, elem_val);
+ const coerced_elem_val_inst = try sema.coerce(block, resolved_elem_ty, elem_val_inst, .unneeded);
+ const coereced_elem_val = try sema.resolveConstMaybeUndefVal(block, .unneeded, coerced_elem_val_inst, "");
+ element_vals[elem_i] = coereced_elem_val;
}
if (res_sent_val) |sent_val| {
element_vals[result_len] = sent_val;