diff options
| author | r00ster91 <r00ster91@proton.me> | 2023-04-29 02:12:42 +0200 |
|---|---|---|
| committer | Veikka Tuominen <git@vexu.eu> | 2023-04-29 14:28:36 +0300 |
| commit | dff6efe3697581beffa2604f68900768da5c0297 (patch) | |
| tree | 07d96f941d5deff564c18bddabd5b8dff535c7ea /src/Sema.zig | |
| parent | 05f9608115a48fb7312ebf38c1240ae10b770c88 (diff) | |
| download | zig-dff6efe3697581beffa2604f68900768da5c0297.tar.gz zig-dff6efe3697581beffa2604f68900768da5c0297.zip | |
Sema: disallow indexing non-tuple struct
Fixes #15497
Diffstat (limited to 'src/Sema.zig')
| -rw-r--r-- | src/Sema.zig | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/src/Sema.zig b/src/Sema.zig index 327ff3800f..df199be97c 100644 --- a/src/Sema.zig +++ b/src/Sema.zig @@ -24597,10 +24597,15 @@ fn elemPtr( const indexable_ptr_src = src; // TODO better source location const indexable_ptr_ty = sema.typeOf(indexable_ptr); const target = sema.mod.getTarget(); + const indexable_ty = switch (indexable_ptr_ty.zigTypeTag()) { .Pointer => indexable_ptr_ty.elemType(), else => return sema.fail(block, indexable_ptr_src, "expected pointer, found '{}'", .{indexable_ptr_ty.fmt(sema.mod)}), }; + if (!indexable_ty.isIndexable()) { + return sema.fail(block, src, "element access of non-indexable type '{}'", .{indexable_ty.fmt(sema.mod)}); + } + switch (indexable_ty.zigTypeTag()) { .Array, .Vector => return sema.elemPtrArray(block, src, indexable_ptr_src, indexable_ptr, elem_index_src, elem_index, init, oob_safety), .Struct => { @@ -24629,10 +24634,11 @@ fn elemPtrOneLayerOnly( ) CompileError!Air.Inst.Ref { const indexable_src = src; // TODO better source location const indexable_ty = sema.typeOf(indexable); + const target = sema.mod.getTarget(); + if (!indexable_ty.isIndexable()) { return sema.fail(block, src, "element access of non-indexable type '{}'", .{indexable_ty.fmt(sema.mod)}); } - const target = sema.mod.getTarget(); switch (indexable_ty.ptrSize()) { .Slice => return sema.elemPtrSlice(block, src, indexable_src, indexable, elem_index_src, elem_index, oob_safety), |
