| ... | @@ -14626,7 +14626,7 @@ fn zirShl( | ... | @@ -14626,7 +14626,7 @@ fn zirShl( |
| 14626 | }), | 14626 | }), |
| 14627 | } }, | 14627 | } }, |
| 14628 | }); | 14628 | }); |
| 14629 | const ov_bit = try sema.tupleFieldValByIndex(block, src, op_ov, 1, op_ov_tuple_ty); | 14629 | const ov_bit = try sema.tupleFieldValByIndex(block, op_ov, 1, op_ov_tuple_ty); |
| 14630 | const any_ov_bit = if (lhs_ty.zigTypeTag(zcu) == .vector) | 14630 | const any_ov_bit = if (lhs_ty.zigTypeTag(zcu) == .vector) |
| 14631 | try block.addInst(.{ | 14631 | try block.addInst(.{ |
| 14632 | .tag = if (block.float_mode == .optimized) .reduce_optimized else .reduce, | 14632 | .tag = if (block.float_mode == .optimized) .reduce_optimized else .reduce, |
| ... | @@ -14641,7 +14641,7 @@ fn zirShl( | ... | @@ -14641,7 +14641,7 @@ fn zirShl( |
| 14641 | const no_ov = try block.addBinOp(.cmp_eq, any_ov_bit, zero_ov); | 14641 | const no_ov = try block.addBinOp(.cmp_eq, any_ov_bit, zero_ov); |
| 14642 | | 14642 | |
| 14643 | try sema.addSafetyCheck(block, src, no_ov, .shl_overflow); | 14643 | try sema.addSafetyCheck(block, src, no_ov, .shl_overflow); |
| 14644 | return sema.tupleFieldValByIndex(block, src, op_ov, 0, op_ov_tuple_ty); | 14644 | return sema.tupleFieldValByIndex(block, op_ov, 0, op_ov_tuple_ty); |
| 14645 | } | 14645 | } |
| 14646 | } | 14646 | } |
| 14647 | return block.addBinOp(air_tag, lhs, new_rhs); | 14647 | return block.addBinOp(air_tag, lhs, new_rhs); |
| ... | @@ -14969,20 +14969,12 @@ fn analyzeTupleCat( | ... | @@ -14969,20 +14969,12 @@ fn analyzeTupleCat( |
| 14969 | const element_refs = try sema.arena.alloc(Air.Inst.Ref, final_len); | 14969 | const element_refs = try sema.arena.alloc(Air.Inst.Ref, final_len); |
| 14970 | var i: u32 = 0; | 14970 | var i: u32 = 0; |
| 14971 | while (i < lhs_len) : (i += 1) { | 14971 | while (i < lhs_len) : (i += 1) { |
| 14972 | const operand_src = block.src(.{ .array_cat_lhs = .{ | 14972 | element_refs[i] = try sema.tupleFieldValByIndex(block, lhs, i, lhs_ty); |
| 14973 | .array_cat_offset = src_node, | | |
| 14974 | .elem_index = i, | | |
| 14975 | } }); | | |
| 14976 | element_refs[i] = try sema.tupleFieldValByIndex(block, operand_src, lhs, i, lhs_ty); | | |
| 14977 | } | 14973 | } |
| 14978 | i = 0; | 14974 | i = 0; |
| 14979 | while (i < rhs_len) : (i += 1) { | 14975 | while (i < rhs_len) : (i += 1) { |
| 14980 | const operand_src = block.src(.{ .array_cat_rhs = .{ | | |
| 14981 | .array_cat_offset = src_node, | | |
| 14982 | .elem_index = i, | | |
| 14983 | } }); | | |
| 14984 | element_refs[i + lhs_len] = | 14976 | element_refs[i + lhs_len] = |
| 14985 | try sema.tupleFieldValByIndex(block, operand_src, rhs, i, rhs_ty); | 14977 | try sema.tupleFieldValByIndex(block, rhs, i, rhs_ty); |
| 14986 | } | 14978 | } |
| 14987 | | 14979 | |
| 14988 | return block.addAggregateInit(Type.fromInterned(tuple_ty), element_refs); | 14980 | return block.addAggregateInit(Type.fromInterned(tuple_ty), element_refs); |
| ... | @@ -15400,11 +15392,7 @@ fn analyzeTupleMul( | ... | @@ -15400,11 +15392,7 @@ fn analyzeTupleMul( |
| 15400 | const element_refs = try sema.arena.alloc(Air.Inst.Ref, final_len); | 15392 | const element_refs = try sema.arena.alloc(Air.Inst.Ref, final_len); |
| 15401 | var i: u32 = 0; | 15393 | var i: u32 = 0; |
| 15402 | while (i < tuple_len) : (i += 1) { | 15394 | while (i < tuple_len) : (i += 1) { |
| 15403 | const operand_src = block.src(.{ .array_cat_lhs = .{ | 15395 | element_refs[i] = try sema.tupleFieldValByIndex(block, operand, @intCast(i), operand_ty); |
| 15404 | .array_cat_offset = src_node, | | |
| 15405 | .elem_index = i, | | |
| 15406 | } }); | | |
| 15407 | element_refs[i] = try sema.tupleFieldValByIndex(block, operand_src, operand, @intCast(i), operand_ty); | | |
| 15408 | } | 15396 | } |
| 15409 | i = 1; | 15397 | i = 1; |
| 15410 | while (i < factor) : (i += 1) { | 15398 | while (i < factor) : (i += 1) { |
| ... | @@ -17502,7 +17490,7 @@ fn analyzeArithmetic( | ... | @@ -17502,7 +17490,7 @@ fn analyzeArithmetic( |
| 17502 | }), | 17490 | }), |
| 17503 | } }, | 17491 | } }, |
| 17504 | }); | 17492 | }); |
| 17505 | const ov_bit = try sema.tupleFieldValByIndex(block, src, op_ov, 1, op_ov_tuple_ty); | 17493 | const ov_bit = try sema.tupleFieldValByIndex(block, op_ov, 1, op_ov_tuple_ty); |
| 17506 | const any_ov_bit = if (resolved_type.zigTypeTag(zcu) == .vector) | 17494 | const any_ov_bit = if (resolved_type.zigTypeTag(zcu) == .vector) |
| 17507 | try block.addInst(.{ | 17495 | try block.addInst(.{ |
| 17508 | .tag = if (block.float_mode == .optimized) .reduce_optimized else .reduce, | 17496 | .tag = if (block.float_mode == .optimized) .reduce_optimized else .reduce, |
| ... | @@ -17517,7 +17505,7 @@ fn analyzeArithmetic( | ... | @@ -17517,7 +17505,7 @@ fn analyzeArithmetic( |
| 17517 | const no_ov = try block.addBinOp(.cmp_eq, any_ov_bit, zero_ov); | 17505 | const no_ov = try block.addBinOp(.cmp_eq, any_ov_bit, zero_ov); |
| 17518 | | 17506 | |
| 17519 | try sema.addSafetyCheck(block, src, no_ov, .integer_overflow); | 17507 | try sema.addSafetyCheck(block, src, no_ov, .integer_overflow); |
| 17520 | return sema.tupleFieldValByIndex(block, src, op_ov, 0, op_ov_tuple_ty); | 17508 | return sema.tupleFieldValByIndex(block, op_ov, 0, op_ov_tuple_ty); |
| 17521 | } | 17509 | } |
| 17522 | } | 17510 | } |
| 17523 | } | 17511 | } |
| ... | @@ -25725,7 +25713,7 @@ fn zirBuiltinCall(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError | ... | @@ -25725,7 +25713,7 @@ fn zirBuiltinCall(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError |
| 25725 | | 25713 | |
| 25726 | const resolved_args: []Air.Inst.Ref = try sema.arena.alloc(Air.Inst.Ref, args_ty.structFieldCount(zcu)); | 25714 | const resolved_args: []Air.Inst.Ref = try sema.arena.alloc(Air.Inst.Ref, args_ty.structFieldCount(zcu)); |
| 25727 | for (resolved_args, 0..) |*resolved, i| { | 25715 | for (resolved_args, 0..) |*resolved, i| { |
| 25728 | resolved.* = try sema.tupleFieldValByIndex(block, args_src, args, @intCast(i), args_ty); | 25716 | resolved.* = try sema.tupleFieldValByIndex(block, args, @intCast(i), args_ty); |
| 25729 | } | 25717 | } |
| 25730 | | 25718 | |
| 25731 | const callee_ty = sema.typeOf(func); | 25719 | const callee_ty = sema.typeOf(func); |
| ... | @@ -28113,7 +28101,7 @@ fn fieldVal( | ... | @@ -28113,7 +28101,7 @@ fn fieldVal( |
| 28113 | const field_ptr = try sema.structFieldPtr(block, src, object, field_name, field_name_src, inner_ty, false); | 28101 | const field_ptr = try sema.structFieldPtr(block, src, object, field_name, field_name_src, inner_ty, false); |
| 28114 | return sema.analyzeLoad(block, src, field_ptr, object_src); | 28102 | return sema.analyzeLoad(block, src, field_ptr, object_src); |
| 28115 | } else { | 28103 | } else { |
| 28116 | return sema.structFieldVal(block, src, object, field_name, field_name_src, inner_ty); | 28104 | return sema.structFieldVal(block, object, field_name, field_name_src, inner_ty); |
| 28117 | }, | 28105 | }, |
| 28118 | .@"union" => if (is_pointer_to) { | 28106 | .@"union" => if (is_pointer_to) { |
| 28119 | // Avoid loading the entire union by fetching a pointer and loading that | 28107 | // Avoid loading the entire union by fetching a pointer and loading that |
| ... | @@ -28733,14 +28721,12 @@ fn structFieldPtrByIndex( | ... | @@ -28733,14 +28721,12 @@ fn structFieldPtrByIndex( |
| 28733 | return Air.internedToRef(val); | 28721 | return Air.internedToRef(val); |
| 28734 | } | 28722 | } |
| 28735 | | 28723 | |
| 28736 | try sema.requireRuntimeBlock(block, src, null); | | |
| 28737 | return block.addStructFieldPtr(struct_ptr, field_index, ptr_field_ty); | 28724 | return block.addStructFieldPtr(struct_ptr, field_index, ptr_field_ty); |
| 28738 | } | 28725 | } |
| 28739 | | 28726 | |
| 28740 | fn structFieldVal( | 28727 | fn structFieldVal( |
| 28741 | sema: *Sema, | 28728 | sema: *Sema, |
| 28742 | block: *Block, | 28729 | block: *Block, |
| 28743 | src: LazySrcLoc, | | |
| 28744 | struct_byval: Air.Inst.Ref, | 28730 | struct_byval: Air.Inst.Ref, |
| 28745 | field_name: InternPool.NullTerminatedString, | 28731 | field_name: InternPool.NullTerminatedString, |
| 28746 | field_name_src: LazySrcLoc, | 28732 | field_name_src: LazySrcLoc, |
| ... | @@ -28776,12 +28762,11 @@ fn structFieldVal( | ... | @@ -28776,12 +28762,11 @@ fn structFieldVal( |
| 28776 | return Air.internedToRef((try struct_val.fieldValue(pt, field_index)).toIntern()); | 28762 | return Air.internedToRef((try struct_val.fieldValue(pt, field_index)).toIntern()); |
| 28777 | } | 28763 | } |
| 28778 | | 28764 | |
| 28779 | try sema.requireRuntimeBlock(block, src, null); | | |
| 28780 | try field_ty.resolveLayout(pt); | 28765 | try field_ty.resolveLayout(pt); |
| 28781 | return block.addStructFieldVal(struct_byval, field_index, field_ty); | 28766 | return block.addStructFieldVal(struct_byval, field_index, field_ty); |
| 28782 | }, | 28767 | }, |
| 28783 | .tuple_type => { | 28768 | .tuple_type => { |
| 28784 | return sema.tupleFieldVal(block, src, struct_byval, field_name, field_name_src, struct_ty); | 28769 | return sema.tupleFieldVal(block, struct_byval, field_name, field_name_src, struct_ty); |
| 28785 | }, | 28770 | }, |
| 28786 | else => unreachable, | 28771 | else => unreachable, |
| 28787 | } | 28772 | } |
| ... | @@ -28790,7 +28775,6 @@ fn structFieldVal( | ... | @@ -28790,7 +28775,6 @@ fn structFieldVal( |
| 28790 | fn tupleFieldVal( | 28775 | fn tupleFieldVal( |
| 28791 | sema: *Sema, | 28776 | sema: *Sema, |
| 28792 | block: *Block, | 28777 | block: *Block, |
| 28793 | src: LazySrcLoc, | | |
| 28794 | tuple_byval: Air.Inst.Ref, | 28778 | tuple_byval: Air.Inst.Ref, |
| 28795 | field_name: InternPool.NullTerminatedString, | 28779 | field_name: InternPool.NullTerminatedString, |
| 28796 | field_name_src: LazySrcLoc, | 28780 | field_name_src: LazySrcLoc, |
| ... | @@ -28802,7 +28786,7 @@ fn tupleFieldVal( | ... | @@ -28802,7 +28786,7 @@ fn tupleFieldVal( |
| 28802 | return pt.intRef(Type.usize, tuple_ty.structFieldCount(zcu)); | 28786 | return pt.intRef(Type.usize, tuple_ty.structFieldCount(zcu)); |
| 28803 | } | 28787 | } |
| 28804 | const field_index = try sema.tupleFieldIndex(block, tuple_ty, field_name, field_name_src); | 28788 | const field_index = try sema.tupleFieldIndex(block, tuple_ty, field_name, field_name_src); |
| 28805 | return sema.tupleFieldValByIndex(block, src, tuple_byval, field_index, tuple_ty); | 28789 | return sema.tupleFieldValByIndex(block, tuple_byval, field_index, tuple_ty); |
| 28806 | } | 28790 | } |
| 28807 | | 28791 | |
| 28808 | /// Asserts that `field_name` is not "len". | 28792 | /// Asserts that `field_name` is not "len". |
| ... | @@ -28831,7 +28815,6 @@ fn tupleFieldIndex( | ... | @@ -28831,7 +28815,6 @@ fn tupleFieldIndex( |
| 28831 | fn tupleFieldValByIndex( | 28815 | fn tupleFieldValByIndex( |
| 28832 | sema: *Sema, | 28816 | sema: *Sema, |
| 28833 | block: *Block, | 28817 | block: *Block, |
| 28834 | src: LazySrcLoc, | | |
| 28835 | tuple_byval: Air.Inst.Ref, | 28818 | tuple_byval: Air.Inst.Ref, |
| 28836 | field_index: u32, | 28819 | field_index: u32, |
| 28837 | tuple_ty: Type, | 28820 | tuple_ty: Type, |
| ... | @@ -28861,7 +28844,6 @@ fn tupleFieldValByIndex( | ... | @@ -28861,7 +28844,6 @@ fn tupleFieldValByIndex( |
| 28861 | }; | 28844 | }; |
| 28862 | } | 28845 | } |
| 28863 | | 28846 | |
| 28864 | try sema.requireRuntimeBlock(block, src, null); | | |
| 28865 | try field_ty.resolveLayout(pt); | 28847 | try field_ty.resolveLayout(pt); |
| 28866 | return block.addStructFieldVal(tuple_byval, field_index, field_ty); | 28848 | return block.addStructFieldVal(tuple_byval, field_index, field_ty); |
| 28867 | } | 28849 | } |
| ... | @@ -28959,7 +28941,6 @@ fn unionFieldPtr( | ... | @@ -28959,7 +28941,6 @@ fn unionFieldPtr( |
| 28959 | return Air.internedToRef(field_ptr_val.toIntern()); | 28941 | return Air.internedToRef(field_ptr_val.toIntern()); |
| 28960 | } | 28942 | } |
| 28961 | | 28943 | |
| 28962 | try sema.requireRuntimeBlock(block, src, null); | | |
| 28963 | if (!initializing and union_obj.flagsUnordered(ip).layout == .auto and block.wantSafety() and | 28944 | if (!initializing and union_obj.flagsUnordered(ip).layout == .auto and block.wantSafety() and |
| 28964 | union_ty.unionTagTypeSafety(zcu) != null and union_obj.field_types.len > 1) | 28945 | union_ty.unionTagTypeSafety(zcu) != null and union_obj.field_types.len > 1) |
| 28965 | { | 28946 | { |
| ... | @@ -29036,7 +29017,6 @@ fn unionFieldVal( | ... | @@ -29036,7 +29017,6 @@ fn unionFieldVal( |
| 29036 | } | 29017 | } |
| 29037 | } | 29018 | } |
| 29038 | | 29019 | |
| 29039 | try sema.requireRuntimeBlock(block, src, null); | | |
| 29040 | if (union_obj.flagsUnordered(ip).layout == .auto and block.wantSafety() and | 29020 | if (union_obj.flagsUnordered(ip).layout == .auto and block.wantSafety() and |
| 29041 | union_ty.unionTagTypeSafety(zcu) != null and union_obj.field_types.len > 1) | 29021 | union_ty.unionTagTypeSafety(zcu) != null and union_obj.field_types.len > 1) |
| 29042 | { | 29022 | { |
| ... | @@ -29115,16 +29095,15 @@ fn elemPtrOneLayerOnly( | ... | @@ -29115,16 +29095,15 @@ fn elemPtrOneLayerOnly( |
| 29115 | .Many, .C => { | 29095 | .Many, .C => { |
| 29116 | const maybe_ptr_val = try sema.resolveDefinedValue(block, indexable_src, indexable); | 29096 | const maybe_ptr_val = try sema.resolveDefinedValue(block, indexable_src, indexable); |
| 29117 | const maybe_index_val = try sema.resolveDefinedValue(block, elem_index_src, elem_index); | 29097 | const maybe_index_val = try sema.resolveDefinedValue(block, elem_index_src, elem_index); |
| 29118 | const runtime_src = rs: { | 29098 | ct: { |
| 29119 | const ptr_val = maybe_ptr_val orelse break :rs indexable_src; | 29099 | const ptr_val = maybe_ptr_val orelse break :ct; |
| 29120 | const index_val = maybe_index_val orelse break :rs elem_index_src; | 29100 | const index_val = maybe_index_val orelse break :ct; |
| 29121 | const index: usize = @intCast(try index_val.toUnsignedIntSema(pt)); | 29101 | const index: usize = @intCast(try index_val.toUnsignedIntSema(pt)); |
| 29122 | const elem_ptr = try ptr_val.ptrElem(index, pt); | 29102 | const elem_ptr = try ptr_val.ptrElem(index, pt); |
| 29123 | return Air.internedToRef(elem_ptr.toIntern()); | 29103 | return Air.internedToRef(elem_ptr.toIntern()); |
| 29124 | }; | 29104 | } |
| 29125 | const result_ty = try indexable_ty.elemPtrType(null, pt); | 29105 | const result_ty = try indexable_ty.elemPtrType(null, pt); |
| 29126 | | 29106 | |
| 29127 | try sema.requireRuntimeBlock(block, src, runtime_src); | | |
| 29128 | return block.addPtrElemPtr(indexable, elem_index, result_ty); | 29107 | return block.addPtrElemPtr(indexable, elem_index, result_ty); |
| 29129 | }, | 29108 | }, |
| 29130 | .One => { | 29109 | .One => { |
| ... | @@ -29172,22 +29151,19 @@ fn elemVal( | ... | @@ -29172,22 +29151,19 @@ fn elemVal( |
| 29172 | const maybe_indexable_val = try sema.resolveDefinedValue(block, indexable_src, indexable); | 29151 | const maybe_indexable_val = try sema.resolveDefinedValue(block, indexable_src, indexable); |
| 29173 | const maybe_index_val = try sema.resolveDefinedValue(block, elem_index_src, elem_index); | 29152 | const maybe_index_val = try sema.resolveDefinedValue(block, elem_index_src, elem_index); |
| 29174 | | 29153 | |
| 29175 | const runtime_src = rs: { | 29154 | ct: { |
| 29176 | const indexable_val = maybe_indexable_val orelse break :rs indexable_src; | 29155 | const indexable_val = maybe_indexable_val orelse break :ct; |
| 29177 | const index_val = maybe_index_val orelse break :rs elem_index_src; | 29156 | const index_val = maybe_index_val orelse break :ct; |
| 29178 | const index: usize = @intCast(try index_val.toUnsignedIntSema(pt)); | 29157 | const index: usize = @intCast(try index_val.toUnsignedIntSema(pt)); |
| 29179 | const elem_ty = indexable_ty.elemType2(zcu); | 29158 | const elem_ty = indexable_ty.elemType2(zcu); |
| 29180 | const many_ptr_ty = try pt.manyConstPtrType(elem_ty); | 29159 | const many_ptr_ty = try pt.manyConstPtrType(elem_ty); |
| 29181 | const many_ptr_val = try pt.getCoerced(indexable_val, many_ptr_ty); | 29160 | const many_ptr_val = try pt.getCoerced(indexable_val, many_ptr_ty); |
| 29182 | const elem_ptr_ty = try pt.singleConstPtrType(elem_ty); | 29161 | const elem_ptr_ty = try pt.singleConstPtrType(elem_ty); |
| 29183 | const elem_ptr_val = try many_ptr_val.ptrElem(index, pt); | 29162 | const elem_ptr_val = try many_ptr_val.ptrElem(index, pt); |
| 29184 | if (try sema.pointerDeref(block, indexable_src, elem_ptr_val, elem_ptr_ty)) |elem_val| { | 29163 | const elem_val = try sema.pointerDeref(block, indexable_src, elem_ptr_val, elem_ptr_ty) orelse break :ct; |
| 29185 | return Air.internedToRef((try pt.getCoerced(elem_val, elem_ty)).toIntern()); | 29164 | return Air.internedToRef((try pt.getCoerced(elem_val, elem_ty)).toIntern()); |
| 29186 | } | 29165 | } |
| 29187 | break :rs indexable_src; | | |
| 29188 | }; | | |
| 29189 | | 29166 | |
| 29190 | try sema.requireRuntimeBlock(block, src, runtime_src); | | |
| 29191 | return block.addBinOp(.ptr_elem_val, indexable, elem_index); | 29167 | return block.addBinOp(.ptr_elem_val, indexable, elem_index); |
| 29192 | }, | 29168 | }, |
| 29193 | .One => { | 29169 | .One => { |
| ... | @@ -29300,7 +29276,6 @@ fn tupleFieldPtr( | ... | @@ -29300,7 +29276,6 @@ fn tupleFieldPtr( |
| 29300 | try sema.validateRuntimeElemAccess(block, field_index_src, field_ty, tuple_ty, tuple_ptr_src); | 29276 | try sema.validateRuntimeElemAccess(block, field_index_src, field_ty, tuple_ty, tuple_ptr_src); |
| 29301 | } | 29277 | } |
| 29302 | | 29278 | |
| 29303 | try sema.requireRuntimeBlock(block, tuple_ptr_src, null); | | |
| 29304 | return block.addStructFieldPtr(tuple_ptr, field_index, ptr_field_ty); | 29279 | return block.addStructFieldPtr(tuple_ptr, field_index, ptr_field_ty); |
| 29305 | } | 29280 | } |
| 29306 | | 29281 | |
| ... | @@ -29343,7 +29318,6 @@ fn tupleField( | ... | @@ -29343,7 +29318,6 @@ fn tupleField( |
| 29343 | | 29318 | |
| 29344 | try sema.validateRuntimeElemAccess(block, field_index_src, field_ty, tuple_ty, tuple_src); | 29319 | try sema.validateRuntimeElemAccess(block, field_index_src, field_ty, tuple_ty, tuple_src); |
| 29345 | | 29320 | |
| 29346 | try sema.requireRuntimeBlock(block, tuple_src, null); | | |
| 29347 | try field_ty.resolveLayout(pt); | 29321 | try field_ty.resolveLayout(pt); |
| 29348 | return block.addStructFieldVal(tuple, field_index, field_ty); | 29322 | return block.addStructFieldVal(tuple, field_index, field_ty); |
| 29349 | } | 29323 | } |
| ... | @@ -29399,7 +29373,6 @@ fn elemValArray( | ... | @@ -29399,7 +29373,6 @@ fn elemValArray( |
| 29399 | | 29373 | |
| 29400 | try sema.validateRuntimeElemAccess(block, elem_index_src, elem_ty, array_ty, array_src); | 29374 | try sema.validateRuntimeElemAccess(block, elem_index_src, elem_ty, array_ty, array_src); |
| 29401 | | 29375 | |
| 29402 | const runtime_src = if (maybe_undef_array_val != null) elem_index_src else array_src; | | |
| 29403 | if (oob_safety and block.wantSafety()) { | 29376 | if (oob_safety and block.wantSafety()) { |
| 29404 | // Runtime check is only needed if unable to comptime check. | 29377 | // Runtime check is only needed if unable to comptime check. |
| 29405 | if (maybe_index_val == null) { | 29378 | if (maybe_index_val == null) { |
| ... | @@ -29412,7 +29385,6 @@ fn elemValArray( | ... | @@ -29412,7 +29385,6 @@ fn elemValArray( |
| 29412 | if (try sema.typeHasOnePossibleValue(elem_ty)) |elem_val| | 29385 | if (try sema.typeHasOnePossibleValue(elem_ty)) |elem_val| |
| 29413 | return Air.internedToRef(elem_val.toIntern()); | 29386 | return Air.internedToRef(elem_val.toIntern()); |
| 29414 | | 29387 | |
| 29415 | try sema.requireRuntimeBlock(block, src, runtime_src); | | |
| 29416 | return block.addBinOp(.array_elem_val, array, elem_index); | 29388 | return block.addBinOp(.array_elem_val, array, elem_index); |
| 29417 | } | 29389 | } |
| 29418 | | 29390 | |
| ... | @@ -29466,9 +29438,6 @@ fn elemPtrArray( | ... | @@ -29466,9 +29438,6 @@ fn elemPtrArray( |
| 29466 | try sema.validateRuntimeElemAccess(block, elem_index_src, array_ty.elemType2(zcu), array_ty, array_ptr_src); | 29438 | try sema.validateRuntimeElemAccess(block, elem_index_src, array_ty.elemType2(zcu), array_ty, array_ptr_src); |
| 29467 | } | 29439 | } |
| 29468 | | 29440 | |
| 29469 | const runtime_src = if (maybe_undef_array_ptr_val != null) elem_index_src else array_ptr_src; | | |
| 29470 | try sema.requireRuntimeBlock(block, src, runtime_src); | | |
| 29471 | | | |
| 29472 | // Runtime check is only needed if unable to comptime check. | 29441 | // Runtime check is only needed if unable to comptime check. |
| 29473 | if (oob_safety and block.wantSafety() and offset == null) { | 29442 | if (oob_safety and block.wantSafety() and offset == null) { |
| 29474 | const len_inst = try pt.intRef(Type.usize, array_len); | 29443 | const len_inst = try pt.intRef(Type.usize, array_len); |
| ... | @@ -29525,7 +29494,6 @@ fn elemValSlice( | ... | @@ -29525,7 +29494,6 @@ fn elemValSlice( |
| 29525 | | 29494 | |
| 29526 | try sema.validateRuntimeElemAccess(block, elem_index_src, elem_ty, slice_ty, slice_src); | 29495 | try sema.validateRuntimeElemAccess(block, elem_index_src, elem_ty, slice_ty, slice_src); |
| 29527 | | 29496 | |
| 29528 | try sema.requireRuntimeBlock(block, src, runtime_src); | | |
| 29529 | if (oob_safety and block.wantSafety()) { | 29497 | if (oob_safety and block.wantSafety()) { |
| 29530 | const len_inst = if (maybe_slice_val) |slice_val| | 29498 | const len_inst = if (maybe_slice_val) |slice_val| |
| 29531 | try pt.intRef(Type.usize, try slice_val.sliceLen(pt)) | 29499 | try pt.intRef(Type.usize, try slice_val.sliceLen(pt)) |
| ... | @@ -29582,8 +29550,6 @@ fn elemPtrSlice( | ... | @@ -29582,8 +29550,6 @@ fn elemPtrSlice( |
| 29582 | | 29550 | |
| 29583 | try sema.validateRuntimeElemAccess(block, elem_index_src, elem_ptr_ty, slice_ty, slice_src); | 29551 | try sema.validateRuntimeElemAccess(block, elem_index_src, elem_ptr_ty, slice_ty, slice_src); |
| 29584 | | 29552 | |
| 29585 | const runtime_src = if (maybe_undef_slice_val != null) elem_index_src else slice_src; | | |
| 29586 | try sema.requireRuntimeBlock(block, src, runtime_src); | | |
| 29587 | if (oob_safety and block.wantSafety()) { | 29553 | if (oob_safety and block.wantSafety()) { |
| 29588 | const len_inst = len: { | 29554 | const len_inst = len: { |
| 29589 | if (maybe_undef_slice_val) |slice_val| | 29555 | if (maybe_undef_slice_val) |slice_val| |