| ... | @@ -24597,10 +24597,15 @@ fn elemPtr( | ... | @@ -24597,10 +24597,15 @@ fn elemPtr( |
| 24597 | const indexable_ptr_src = src; // TODO better source location | 24597 | const indexable_ptr_src = src; // TODO better source location |
| 24598 | const indexable_ptr_ty = sema.typeOf(indexable_ptr); | 24598 | const indexable_ptr_ty = sema.typeOf(indexable_ptr); |
| 24599 | const target = sema.mod.getTarget(); | 24599 | const target = sema.mod.getTarget(); |
| | 24600 | |
| 24600 | const indexable_ty = switch (indexable_ptr_ty.zigTypeTag()) { | 24601 | const indexable_ty = switch (indexable_ptr_ty.zigTypeTag()) { |
| 24601 | .Pointer => indexable_ptr_ty.elemType(), | 24602 | .Pointer => indexable_ptr_ty.elemType(), |
| 24602 | else => return sema.fail(block, indexable_ptr_src, "expected pointer, found '{}'", .{indexable_ptr_ty.fmt(sema.mod)}), | 24603 | else => return sema.fail(block, indexable_ptr_src, "expected pointer, found '{}'", .{indexable_ptr_ty.fmt(sema.mod)}), |
| 24603 | }; | 24604 | }; |
| | 24605 | if (!indexable_ty.isIndexable()) { |
| | 24606 | return sema.fail(block, src, "element access of non-indexable type '{}'", .{indexable_ty.fmt(sema.mod)}); |
| | 24607 | } |
| | 24608 | |
| 24604 | switch (indexable_ty.zigTypeTag()) { | 24609 | switch (indexable_ty.zigTypeTag()) { |
| 24605 | .Array, .Vector => return sema.elemPtrArray(block, src, indexable_ptr_src, indexable_ptr, elem_index_src, elem_index, init, oob_safety), | 24610 | .Array, .Vector => return sema.elemPtrArray(block, src, indexable_ptr_src, indexable_ptr, elem_index_src, elem_index, init, oob_safety), |
| 24606 | .Struct => { | 24611 | .Struct => { |
| ... | @@ -24629,10 +24634,11 @@ fn elemPtrOneLayerOnly( | ... | @@ -24629,10 +24634,11 @@ fn elemPtrOneLayerOnly( |
| 24629 | ) CompileError!Air.Inst.Ref { | 24634 | ) CompileError!Air.Inst.Ref { |
| 24630 | const indexable_src = src; // TODO better source location | 24635 | const indexable_src = src; // TODO better source location |
| 24631 | const indexable_ty = sema.typeOf(indexable); | 24636 | const indexable_ty = sema.typeOf(indexable); |
| | 24637 | const target = sema.mod.getTarget(); |
| | 24638 | |
| 24632 | if (!indexable_ty.isIndexable()) { | 24639 | if (!indexable_ty.isIndexable()) { |
| 24633 | return sema.fail(block, src, "element access of non-indexable type '{}'", .{indexable_ty.fmt(sema.mod)}); | 24640 | return sema.fail(block, src, "element access of non-indexable type '{}'", .{indexable_ty.fmt(sema.mod)}); |
| 24634 | } | 24641 | } |
| 24635 | const target = sema.mod.getTarget(); | | |
| 24636 | | 24642 | |
| 24637 | switch (indexable_ty.ptrSize()) { | 24643 | switch (indexable_ty.ptrSize()) { |
| 24638 | .Slice => return sema.elemPtrSlice(block, src, indexable_src, indexable, elem_index_src, elem_index, oob_safety), | 24644 | .Slice => return sema.elemPtrSlice(block, src, indexable_src, indexable, elem_index_src, elem_index, oob_safety), |