mirror of
https://github.com/ziglang/zig.git
synced 2026-02-13 04:48:20 +00:00
parent
05f9608115
commit
dff6efe369
@ -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),
|
||||
|
||||
11
test/cases/compile_errors/indexing_non-tuple_struct.zig
Normal file
11
test/cases/compile_errors/indexing_non-tuple_struct.zig
Normal file
@ -0,0 +1,11 @@
|
||||
export fn a() void {
|
||||
const S = struct { x: i32, y: i32 };
|
||||
var s: S = undefined;
|
||||
s[0] = 10;
|
||||
}
|
||||
|
||||
// error
|
||||
// backend=stage2
|
||||
// target=native
|
||||
//
|
||||
// :4:6: error: element access of non-indexable type 'tmp.a.S'
|
||||
Loading…
x
Reference in New Issue
Block a user