| ... | ... | @@ -4544,7 +4544,7 @@ fn zirValidateArrayInit( |
| 4544 | 4544 | // any ZIR instructions at comptime; we need to do that here. |
| 4545 | 4545 | if (array_ty.sentinel()) |sentinel_val| { |
| 4546 | 4546 | const array_len_ref = try sema.addIntUnsigned(Type.usize, array_len); |
| 4547 | | const sentinel_ptr = try sema.elemPtrArray(block, init_src, init_src, array_ptr, init_src, array_len_ref, true); |
| 4547 | const sentinel_ptr = try sema.elemPtrArray(block, init_src, init_src, array_ptr, init_src, array_len_ref, true, true); |
| 4548 | 4548 | const sentinel = try sema.addConstant(array_ty.childType(), sentinel_val); |
| 4549 | 4549 | try sema.storePtr2(block, init_src, sentinel_ptr, init_src, sentinel, init_src, .store); |
| 4550 | 4550 | } |
| ... | ... | @@ -9691,7 +9691,7 @@ fn zirElemVal(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air |
| 9691 | 9691 | const extra = sema.code.extraData(Zir.Inst.Bin, inst_data.payload_index).data; |
| 9692 | 9692 | const array = try sema.resolveInst(extra.lhs); |
| 9693 | 9693 | const elem_index = try sema.resolveInst(extra.rhs); |
| 9694 | | return sema.elemVal(block, src, array, elem_index, src); |
| 9694 | return sema.elemVal(block, src, array, elem_index, src, false); |
| 9695 | 9695 | } |
| 9696 | 9696 | |
| 9697 | 9697 | fn zirElemValNode(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air.Inst.Ref { |
| ... | ... | @@ -9704,7 +9704,7 @@ fn zirElemValNode(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError |
| 9704 | 9704 | const extra = sema.code.extraData(Zir.Inst.Bin, inst_data.payload_index).data; |
| 9705 | 9705 | const array = try sema.resolveInst(extra.lhs); |
| 9706 | 9706 | const elem_index = try sema.resolveInst(extra.rhs); |
| 9707 | | return sema.elemVal(block, src, array, elem_index, elem_index_src); |
| 9707 | return sema.elemVal(block, src, array, elem_index, elem_index_src, true); |
| 9708 | 9708 | } |
| 9709 | 9709 | |
| 9710 | 9710 | fn zirElemPtr(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air.Inst.Ref { |
| ... | ... | @@ -9731,7 +9731,7 @@ fn zirElemPtr(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air |
| 9731 | 9731 | }; |
| 9732 | 9732 | return sema.failWithOwnedErrorMsg(msg); |
| 9733 | 9733 | } |
| 9734 | | return sema.elemPtrOneLayerOnly(block, src, array_ptr, elem_index, src, false); |
| 9734 | return sema.elemPtrOneLayerOnly(block, src, array_ptr, elem_index, src, false, false); |
| 9735 | 9735 | } |
| 9736 | 9736 | |
| 9737 | 9737 | fn zirElemPtrNode(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air.Inst.Ref { |
| ... | ... | @@ -9744,7 +9744,7 @@ fn zirElemPtrNode(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError |
| 9744 | 9744 | const extra = sema.code.extraData(Zir.Inst.Bin, inst_data.payload_index).data; |
| 9745 | 9745 | const array_ptr = try sema.resolveInst(extra.lhs); |
| 9746 | 9746 | const elem_index = try sema.resolveInst(extra.rhs); |
| 9747 | | return sema.elemPtr(block, src, array_ptr, elem_index, elem_index_src, false); |
| 9747 | return sema.elemPtr(block, src, array_ptr, elem_index, elem_index_src, false, true); |
| 9748 | 9748 | } |
| 9749 | 9749 | |
| 9750 | 9750 | fn zirElemPtrImm(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air.Inst.Ref { |
| ... | ... | @@ -9756,7 +9756,7 @@ fn zirElemPtrImm(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError! |
| 9756 | 9756 | const extra = sema.code.extraData(Zir.Inst.ElemPtrImm, inst_data.payload_index).data; |
| 9757 | 9757 | const array_ptr = try sema.resolveInst(extra.ptr); |
| 9758 | 9758 | const elem_index = try sema.addIntUnsigned(Type.usize, extra.index); |
| 9759 | | return sema.elemPtr(block, src, array_ptr, elem_index, src, true); |
| 9759 | return sema.elemPtr(block, src, array_ptr, elem_index, src, true, true); |
| 9760 | 9760 | } |
| 9761 | 9761 | |
| 9762 | 9762 | fn zirSliceStart(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air.Inst.Ref { |
| ... | ... | @@ -12521,14 +12521,14 @@ fn zirArrayCat(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Ai |
| 12521 | 12521 | while (elem_i < lhs_len) : (elem_i += 1) { |
| 12522 | 12522 | const elem_index = try sema.addIntUnsigned(Type.usize, elem_i); |
| 12523 | 12523 | const elem_ptr = try block.addPtrElemPtr(alloc, elem_index, elem_ptr_ty); |
| 12524 | | const init = try sema.elemVal(block, lhs_src, lhs, elem_index, src); |
| 12524 | const init = try sema.elemVal(block, lhs_src, lhs, elem_index, src, true); |
| 12525 | 12525 | try sema.storePtr2(block, src, elem_ptr, src, init, lhs_src, .store); |
| 12526 | 12526 | } |
| 12527 | 12527 | while (elem_i < result_len) : (elem_i += 1) { |
| 12528 | 12528 | const elem_index = try sema.addIntUnsigned(Type.usize, elem_i); |
| 12529 | 12529 | const rhs_index = try sema.addIntUnsigned(Type.usize, elem_i - lhs_len); |
| 12530 | 12530 | const elem_ptr = try block.addPtrElemPtr(alloc, elem_index, elem_ptr_ty); |
| 12531 | | const init = try sema.elemVal(block, rhs_src, rhs, rhs_index, src); |
| 12531 | const init = try sema.elemVal(block, rhs_src, rhs, rhs_index, src, true); |
| 12532 | 12532 | try sema.storePtr2(block, src, elem_ptr, src, init, rhs_src, .store); |
| 12533 | 12533 | } |
| 12534 | 12534 | if (res_sent_val) |sent_val| { |
| ... | ... | @@ -12546,12 +12546,12 @@ fn zirArrayCat(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Ai |
| 12546 | 12546 | var elem_i: usize = 0; |
| 12547 | 12547 | while (elem_i < lhs_len) : (elem_i += 1) { |
| 12548 | 12548 | const index = try sema.addIntUnsigned(Type.usize, elem_i); |
| 12549 | | const init = try sema.elemVal(block, lhs_src, lhs, index, src); |
| 12549 | const init = try sema.elemVal(block, lhs_src, lhs, index, src, true); |
| 12550 | 12550 | element_refs[elem_i] = try sema.coerce(block, resolved_elem_ty, init, lhs_src); |
| 12551 | 12551 | } |
| 12552 | 12552 | while (elem_i < result_len) : (elem_i += 1) { |
| 12553 | 12553 | const index = try sema.addIntUnsigned(Type.usize, elem_i - lhs_len); |
| 12554 | | const init = try sema.elemVal(block, rhs_src, rhs, index, src); |
| 12554 | const init = try sema.elemVal(block, rhs_src, rhs, index, src, true); |
| 12555 | 12555 | element_refs[elem_i] = try sema.coerce(block, resolved_elem_ty, init, rhs_src); |
| 12556 | 12556 | } |
| 12557 | 12557 | } |
| ... | ... | @@ -12771,7 +12771,7 @@ fn zirArrayMul(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Ai |
| 12771 | 12771 | elem_i += 1; |
| 12772 | 12772 | const lhs_index = try sema.addIntUnsigned(Type.usize, lhs_i); |
| 12773 | 12773 | const elem_ptr = try block.addPtrElemPtr(alloc, elem_index, elem_ptr_ty); |
| 12774 | | const init = try sema.elemVal(block, lhs_src, lhs, lhs_index, src); |
| 12774 | const init = try sema.elemVal(block, lhs_src, lhs, lhs_index, src, true); |
| 12775 | 12775 | try sema.storePtr2(block, src, elem_ptr, src, init, lhs_src, .store); |
| 12776 | 12776 | } |
| 12777 | 12777 | } |
| ... | ... | @@ -12791,7 +12791,7 @@ fn zirArrayMul(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Ai |
| 12791 | 12791 | var lhs_i: usize = 0; |
| 12792 | 12792 | while (lhs_i < lhs_len) : (lhs_i += 1) { |
| 12793 | 12793 | const lhs_index = try sema.addIntUnsigned(Type.usize, lhs_i); |
| 12794 | | const init = try sema.elemVal(block, lhs_src, lhs, lhs_index, src); |
| 12794 | const init = try sema.elemVal(block, lhs_src, lhs, lhs_index, src, true); |
| 12795 | 12795 | element_refs[elem_i] = init; |
| 12796 | 12796 | elem_i += 1; |
| 12797 | 12797 | } |
| ... | ... | @@ -24145,6 +24145,7 @@ fn elemPtr( |
| 24145 | 24145 | elem_index: Air.Inst.Ref, |
| 24146 | 24146 | elem_index_src: LazySrcLoc, |
| 24147 | 24147 | init: bool, |
| 24148 | oob_safety: bool, |
| 24148 | 24149 | ) CompileError!Air.Inst.Ref { |
| 24149 | 24150 | const indexable_ptr_src = src; // TODO better source location |
| 24150 | 24151 | const indexable_ptr_ty = sema.typeOf(indexable_ptr); |
| ... | ... | @@ -24154,7 +24155,7 @@ fn elemPtr( |
| 24154 | 24155 | else => return sema.fail(block, indexable_ptr_src, "expected pointer, found '{}'", .{indexable_ptr_ty.fmt(sema.mod)}), |
| 24155 | 24156 | }; |
| 24156 | 24157 | switch (indexable_ty.zigTypeTag()) { |
| 24157 | | .Array, .Vector => return sema.elemPtrArray(block, src, indexable_ptr_src, indexable_ptr, elem_index_src, elem_index, init), |
| 24158 | .Array, .Vector => return sema.elemPtrArray(block, src, indexable_ptr_src, indexable_ptr, elem_index_src, elem_index, init, oob_safety), |
| 24158 | 24159 | .Struct => { |
| 24159 | 24160 | // Tuple field access. |
| 24160 | 24161 | const index_val = try sema.resolveConstValue(block, elem_index_src, elem_index, "tuple field access index must be comptime-known"); |
| ... | ... | @@ -24163,11 +24164,12 @@ fn elemPtr( |
| 24163 | 24164 | }, |
| 24164 | 24165 | else => { |
| 24165 | 24166 | const indexable = try sema.analyzeLoad(block, indexable_ptr_src, indexable_ptr, indexable_ptr_src); |
| 24166 | | return elemPtrOneLayerOnly(sema, block, src, indexable, elem_index, elem_index_src, init); |
| 24167 | return elemPtrOneLayerOnly(sema, block, src, indexable, elem_index, elem_index_src, init, oob_safety); |
| 24167 | 24168 | }, |
| 24168 | 24169 | } |
| 24169 | 24170 | } |
| 24170 | 24171 | |
| 24172 | /// Asserts that the type of indexable is pointer. |
| 24171 | 24173 | fn elemPtrOneLayerOnly( |
| 24172 | 24174 | sema: *Sema, |
| 24173 | 24175 | block: *Block, |
| ... | ... | @@ -24176,6 +24178,7 @@ fn elemPtrOneLayerOnly( |
| 24176 | 24178 | elem_index: Air.Inst.Ref, |
| 24177 | 24179 | elem_index_src: LazySrcLoc, |
| 24178 | 24180 | init: bool, |
| 24181 | oob_safety: bool, |
| 24179 | 24182 | ) CompileError!Air.Inst.Ref { |
| 24180 | 24183 | const indexable_src = src; // TODO better source location |
| 24181 | 24184 | const indexable_ty = sema.typeOf(indexable); |
| ... | ... | @@ -24184,33 +24187,28 @@ fn elemPtrOneLayerOnly( |
| 24184 | 24187 | } |
| 24185 | 24188 | const target = sema.mod.getTarget(); |
| 24186 | 24189 | |
| 24187 | | switch (indexable_ty.zigTypeTag()) { |
| 24188 | | .Pointer => { |
| 24189 | | switch (indexable_ty.ptrSize()) { |
| 24190 | | .Slice => return sema.elemPtrSlice(block, src, indexable_src, indexable, elem_index_src, elem_index), |
| 24191 | | .Many, .C => { |
| 24192 | | const maybe_ptr_val = try sema.resolveDefinedValue(block, indexable_src, indexable); |
| 24193 | | const maybe_index_val = try sema.resolveDefinedValue(block, elem_index_src, elem_index); |
| 24194 | | const runtime_src = rs: { |
| 24195 | | const ptr_val = maybe_ptr_val orelse break :rs indexable_src; |
| 24196 | | const index_val = maybe_index_val orelse break :rs elem_index_src; |
| 24197 | | const index = @intCast(usize, index_val.toUnsignedInt(target)); |
| 24198 | | const elem_ptr = try ptr_val.elemPtr(indexable_ty, sema.arena, index, sema.mod); |
| 24199 | | const result_ty = try sema.elemPtrType(indexable_ty, index); |
| 24200 | | return sema.addConstant(result_ty, elem_ptr); |
| 24201 | | }; |
| 24202 | | const result_ty = try sema.elemPtrType(indexable_ty, null); |
| 24190 | switch (indexable_ty.ptrSize()) { |
| 24191 | .Slice => return sema.elemPtrSlice(block, src, indexable_src, indexable, elem_index_src, elem_index, oob_safety), |
| 24192 | .Many, .C => { |
| 24193 | const maybe_ptr_val = try sema.resolveDefinedValue(block, indexable_src, indexable); |
| 24194 | const maybe_index_val = try sema.resolveDefinedValue(block, elem_index_src, elem_index); |
| 24195 | const runtime_src = rs: { |
| 24196 | const ptr_val = maybe_ptr_val orelse break :rs indexable_src; |
| 24197 | const index_val = maybe_index_val orelse break :rs elem_index_src; |
| 24198 | const index = @intCast(usize, index_val.toUnsignedInt(target)); |
| 24199 | const elem_ptr = try ptr_val.elemPtr(indexable_ty, sema.arena, index, sema.mod); |
| 24200 | const result_ty = try sema.elemPtrType(indexable_ty, index); |
| 24201 | return sema.addConstant(result_ty, elem_ptr); |
| 24202 | }; |
| 24203 | const result_ty = try sema.elemPtrType(indexable_ty, null); |
| 24203 | 24204 | |
| 24204 | | try sema.requireRuntimeBlock(block, src, runtime_src); |
| 24205 | | return block.addPtrElemPtr(indexable, elem_index, result_ty); |
| 24206 | | }, |
| 24207 | | .One => { |
| 24208 | | assert(indexable_ty.childType().zigTypeTag() == .Array); // Guaranteed by isIndexable |
| 24209 | | return sema.elemPtrArray(block, src, indexable_src, indexable, elem_index_src, elem_index, init); |
| 24210 | | }, |
| 24211 | | } |
| 24205 | try sema.requireRuntimeBlock(block, src, runtime_src); |
| 24206 | return block.addPtrElemPtr(indexable, elem_index, result_ty); |
| 24207 | }, |
| 24208 | .One => { |
| 24209 | assert(indexable_ty.childType().zigTypeTag() == .Array); // Guaranteed by isIndexable |
| 24210 | return sema.elemPtrArray(block, src, indexable_src, indexable, elem_index_src, elem_index, init, oob_safety); |
| 24212 | 24211 | }, |
| 24213 | | else => unreachable, |
| 24214 | 24212 | } |
| 24215 | 24213 | } |
| 24216 | 24214 | |
| ... | ... | @@ -24221,6 +24219,7 @@ fn elemVal( |
| 24221 | 24219 | indexable: Air.Inst.Ref, |
| 24222 | 24220 | elem_index_uncasted: Air.Inst.Ref, |
| 24223 | 24221 | elem_index_src: LazySrcLoc, |
| 24222 | oob_safety: bool, |
| 24224 | 24223 | ) CompileError!Air.Inst.Ref { |
| 24225 | 24224 | const indexable_src = src; // TODO better source location |
| 24226 | 24225 | const indexable_ty = sema.typeOf(indexable); |
| ... | ... | @@ -24236,7 +24235,7 @@ fn elemVal( |
| 24236 | 24235 | |
| 24237 | 24236 | switch (indexable_ty.zigTypeTag()) { |
| 24238 | 24237 | .Pointer => switch (indexable_ty.ptrSize()) { |
| 24239 | | .Slice => return sema.elemValSlice(block, src, indexable_src, indexable, elem_index_src, elem_index), |
| 24238 | .Slice => return sema.elemValSlice(block, src, indexable_src, indexable, elem_index_src, elem_index, oob_safety), |
| 24240 | 24239 | .Many, .C => { |
| 24241 | 24240 | const maybe_indexable_val = try sema.resolveDefinedValue(block, indexable_src, indexable); |
| 24242 | 24241 | const maybe_index_val = try sema.resolveDefinedValue(block, elem_index_src, elem_index); |
| ... | ... | @@ -24257,14 +24256,14 @@ fn elemVal( |
| 24257 | 24256 | }, |
| 24258 | 24257 | .One => { |
| 24259 | 24258 | assert(indexable_ty.childType().zigTypeTag() == .Array); // Guaranteed by isIndexable |
| 24260 | | const elem_ptr = try sema.elemPtr(block, indexable_src, indexable, elem_index, elem_index_src, false); |
| 24259 | const elem_ptr = try sema.elemPtr(block, indexable_src, indexable, elem_index, elem_index_src, false, oob_safety); |
| 24261 | 24260 | return sema.analyzeLoad(block, indexable_src, elem_ptr, elem_index_src); |
| 24262 | 24261 | }, |
| 24263 | 24262 | }, |
| 24264 | | .Array => return sema.elemValArray(block, src, indexable_src, indexable, elem_index_src, elem_index), |
| 24263 | .Array => return sema.elemValArray(block, src, indexable_src, indexable, elem_index_src, elem_index, oob_safety), |
| 24265 | 24264 | .Vector => { |
| 24266 | 24265 | // TODO: If the index is a vector, the result should be a vector. |
| 24267 | | return sema.elemValArray(block, src, indexable_src, indexable, elem_index_src, elem_index); |
| 24266 | return sema.elemValArray(block, src, indexable_src, indexable, elem_index_src, elem_index, oob_safety); |
| 24268 | 24267 | }, |
| 24269 | 24268 | .Struct => { |
| 24270 | 24269 | // Tuple field access. |
| ... | ... | @@ -24409,6 +24408,7 @@ fn elemValArray( |
| 24409 | 24408 | array: Air.Inst.Ref, |
| 24410 | 24409 | elem_index_src: LazySrcLoc, |
| 24411 | 24410 | elem_index: Air.Inst.Ref, |
| 24411 | oob_safety: bool, |
| 24412 | 24412 | ) CompileError!Air.Inst.Ref { |
| 24413 | 24413 | const array_ty = sema.typeOf(array); |
| 24414 | 24414 | const array_sent = array_ty.sentinel(); |
| ... | ... | @@ -24452,7 +24452,7 @@ fn elemValArray( |
| 24452 | 24452 | |
| 24453 | 24453 | const runtime_src = if (maybe_undef_array_val != null) elem_index_src else array_src; |
| 24454 | 24454 | try sema.requireRuntimeBlock(block, src, runtime_src); |
| 24455 | | if (block.wantSafety()) { |
| 24455 | if (oob_safety and block.wantSafety()) { |
| 24456 | 24456 | // Runtime check is only needed if unable to comptime check |
| 24457 | 24457 | if (maybe_index_val == null) { |
| 24458 | 24458 | const len_inst = try sema.addIntUnsigned(Type.usize, array_len); |
| ... | ... | @@ -24472,6 +24472,7 @@ fn elemPtrArray( |
| 24472 | 24472 | elem_index_src: LazySrcLoc, |
| 24473 | 24473 | elem_index: Air.Inst.Ref, |
| 24474 | 24474 | init: bool, |
| 24475 | oob_safety: bool, |
| 24475 | 24476 | ) CompileError!Air.Inst.Ref { |
| 24476 | 24477 | const target = sema.mod.getTarget(); |
| 24477 | 24478 | const array_ptr_ty = sema.typeOf(array_ptr); |
| ... | ... | @@ -24515,7 +24516,7 @@ fn elemPtrArray( |
| 24515 | 24516 | try sema.requireRuntimeBlock(block, src, runtime_src); |
| 24516 | 24517 | |
| 24517 | 24518 | // Runtime check is only needed if unable to comptime check. |
| 24518 | | if (block.wantSafety() and offset == null) { |
| 24519 | if (oob_safety and block.wantSafety() and offset == null) { |
| 24519 | 24520 | const len_inst = try sema.addIntUnsigned(Type.usize, array_len); |
| 24520 | 24521 | const cmp_op: Air.Inst.Tag = if (array_sent) .cmp_lte else .cmp_lt; |
| 24521 | 24522 | try sema.panicIndexOutOfBounds(block, elem_index, len_inst, cmp_op); |
| ... | ... | @@ -24532,6 +24533,7 @@ fn elemValSlice( |
| 24532 | 24533 | slice: Air.Inst.Ref, |
| 24533 | 24534 | elem_index_src: LazySrcLoc, |
| 24534 | 24535 | elem_index: Air.Inst.Ref, |
| 24536 | oob_safety: bool, |
| 24535 | 24537 | ) CompileError!Air.Inst.Ref { |
| 24536 | 24538 | const slice_ty = sema.typeOf(slice); |
| 24537 | 24539 | const slice_sent = slice_ty.sentinel() != null; |
| ... | ... | @@ -24568,7 +24570,7 @@ fn elemValSlice( |
| 24568 | 24570 | try sema.validateRuntimeElemAccess(block, elem_index_src, elem_ty, slice_ty, slice_src); |
| 24569 | 24571 | |
| 24570 | 24572 | try sema.requireRuntimeBlock(block, src, runtime_src); |
| 24571 | | if (block.wantSafety()) { |
| 24573 | if (oob_safety and block.wantSafety()) { |
| 24572 | 24574 | const len_inst = if (maybe_slice_val) |slice_val| |
| 24573 | 24575 | try sema.addIntUnsigned(Type.usize, slice_val.sliceLen(sema.mod)) |
| 24574 | 24576 | else |
| ... | ... | @@ -24588,6 +24590,7 @@ fn elemPtrSlice( |
| 24588 | 24590 | slice: Air.Inst.Ref, |
| 24589 | 24591 | elem_index_src: LazySrcLoc, |
| 24590 | 24592 | elem_index: Air.Inst.Ref, |
| 24593 | oob_safety: bool, |
| 24591 | 24594 | ) CompileError!Air.Inst.Ref { |
| 24592 | 24595 | const target = sema.mod.getTarget(); |
| 24593 | 24596 | const slice_ty = sema.typeOf(slice); |
| ... | ... | @@ -24625,7 +24628,7 @@ fn elemPtrSlice( |
| 24625 | 24628 | |
| 24626 | 24629 | const runtime_src = if (maybe_undef_slice_val != null) elem_index_src else slice_src; |
| 24627 | 24630 | try sema.requireRuntimeBlock(block, src, runtime_src); |
| 24628 | | if (block.wantSafety()) { |
| 24631 | if (oob_safety and block.wantSafety()) { |
| 24629 | 24632 | const len_inst = len: { |
| 24630 | 24633 | if (maybe_undef_slice_val) |slice_val| |
| 24631 | 24634 | if (!slice_val.isUndef()) |
| ... | ... | @@ -26330,7 +26333,7 @@ fn storePtr2( |
| 26330 | 26333 | const elem_src = operand_src; // TODO better source location |
| 26331 | 26334 | const elem = try sema.tupleField(block, operand_src, uncasted_operand, elem_src, i); |
| 26332 | 26335 | const elem_index = try sema.addIntUnsigned(Type.usize, i); |
| 26333 | | const elem_ptr = try sema.elemPtr(block, ptr_src, ptr, elem_index, elem_src, false); |
| 26336 | const elem_ptr = try sema.elemPtr(block, ptr_src, ptr, elem_index, elem_src, false, true); |
| 26334 | 26337 | try sema.storePtr2(block, src, elem_ptr, elem_src, elem, elem_src, .store); |
| 26335 | 26338 | } |
| 26336 | 26339 | return; |
| ... | ... | @@ -27782,7 +27785,7 @@ fn coerceArrayLike( |
| 27782 | 27785 | ); |
| 27783 | 27786 | const src = inst_src; // TODO better source location |
| 27784 | 27787 | const elem_src = inst_src; // TODO better source location |
| 27785 | | const elem_ref = try sema.elemValArray(block, src, inst_src, inst, elem_src, index_ref); |
| 27788 | const elem_ref = try sema.elemValArray(block, src, inst_src, inst, elem_src, index_ref, true); |
| 27786 | 27789 | const coerced = try sema.coerce(block, dest_elem_ty, elem_ref, elem_src); |
| 27787 | 27790 | element_refs[i] = coerced; |
| 27788 | 27791 | if (runtime_src == null) { |