@@ -8499,6 +8499,7 @@ fn zirArrayCat(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Ai
8499
8499
const tracy = trace(@src());
8500
8500
defer tracy.end();
8501
8501
8502
+ const target = sema.mod.getTarget();
8502
8503
const inst_data = sema.code.instructions.items(.data)[inst].pl_node;
8503
8504
const extra = sema.code.extraData(Zir.Inst.Bin, inst_data.payload_index).data;
8504
8505
const lhs = sema.resolveInst(extra.lhs);
@@ -8573,6 +8574,16 @@ fn zirArrayCat(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Ai
8573
8574
const decl = try anon_decl.finish(ty, val, 0);
8574
8575
if (lhs_single_ptr or rhs_single_ptr) {
8575
8576
return sema.analyzeDeclRef(decl);
8577
+ } else if (lhs_ty.isSlice() or rhs_ty.isSlice()) {
8578
+ const slice_ty = try Type.ptr(sema.arena, target, .{
8579
+ .pointee_type = decl.ty.childType(),
8580
+ .sentinel = decl.ty.sentinel(),
8581
+ .@"addrspace" = .generic,
8582
+ .mutable = false,
8583
+ .size = .Slice,
8584
+ });
8585
+ const ptr_to_array = try sema.analyzeDeclRef(decl);
8586
+ return sema.coerceArrayPtrToSlice(block, slice_ty, ptr_to_array, .unneeded);
8576
8587
} else {
8577
8588
return sema.analyzeDeclVal(block, .unneeded, decl);
8578
8589
}
@@ -8677,6 +8688,7 @@ fn zirArrayMul(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Ai
8677
8688
const tracy = trace(@src());
8678
8689
defer tracy.end();
8679
8690
8691
+ const target = sema.mod.getTarget();
8680
8692
const inst_data = sema.code.instructions.items(.data)[inst].pl_node;
8681
8693
const extra = sema.code.extraData(Zir.Inst.Bin, inst_data.payload_index).data;
8682
8694
const lhs = sema.resolveInst(extra.lhs);
@@ -8746,6 +8758,16 @@ fn zirArrayMul(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Ai
8746
8758
const decl = try anon_decl.finish(final_ty, val, 0);
8747
8759
if (is_single_ptr) {
8748
8760
return sema.analyzeDeclRef(decl);
8761
+ } else if (lhs_ty.isSlice()) {
8762
+ const slice_ty = try Type.ptr(sema.arena, target, .{
8763
+ .pointee_type = decl.ty.childType(),
8764
+ .sentinel = decl.ty.sentinel(),
8765
+ .@"addrspace" = .generic,
8766
+ .mutable = false,
8767
+ .size = .Slice,
8768
+ });
8769
+ const ptr_to_array = try sema.analyzeDeclRef(decl);
8770
+ return sema.coerceArrayPtrToSlice(block, slice_ty, ptr_to_array, .unneeded);
8749
8771
} else {
8750
8772
return sema.analyzeDeclVal(block, .unneeded, decl);
8751
8773
}
0 commit comments