Sema: validate deref operator type and value
This commit is contained in:
@@ -0,0 +1,9 @@
|
||||
export fn entry() void {
|
||||
'a'.* = 1;
|
||||
}
|
||||
|
||||
// error
|
||||
// backend=stage2
|
||||
// target=native
|
||||
//
|
||||
// :2:8: error: cannot dereference non-pointer type 'comptime_int'
|
||||
@@ -4,7 +4,7 @@ comptime {
|
||||
}
|
||||
|
||||
// error
|
||||
// backend=stage1
|
||||
// backend=stage2
|
||||
// target=native
|
||||
//
|
||||
// tmp.zig:3:9: error: attempt to dereference undefined value
|
||||
// :3:10: error: cannot dereference undefined value
|
||||
@@ -4,7 +4,7 @@ export fn entry() void {
|
||||
}
|
||||
|
||||
// error
|
||||
// backend=stage1
|
||||
// backend=stage2
|
||||
// target=native
|
||||
//
|
||||
// tmp.zig:3:10: error: attempt to dereference non-pointer type '[]u8'
|
||||
// :3:10: error: index syntax required for slice type '[]u8'
|
||||
@@ -5,10 +5,10 @@ pub fn pass(in: []u8) []u8 {
|
||||
return out.*[0..1];
|
||||
}
|
||||
|
||||
export fn entry() usize { return @sizeOf(@TypeOf(pass)); }
|
||||
export fn entry() usize { return @sizeOf(@TypeOf(&pass)); }
|
||||
|
||||
// error
|
||||
// backend=stage1
|
||||
// backend=stage2
|
||||
// target=native
|
||||
//
|
||||
// tmp.zig:4:10: error: attempt to dereference non-pointer type '[10]u8'
|
||||
// :4:10: error: cannot dereference non-pointer type '[10]u8'
|
||||
12
test/cases/compile_errors/dereference_slice.zig
Normal file
12
test/cases/compile_errors/dereference_slice.zig
Normal file
@@ -0,0 +1,12 @@
|
||||
fn entry(x: []i32) i32 {
|
||||
return x.*;
|
||||
}
|
||||
comptime {
|
||||
_ = entry;
|
||||
}
|
||||
|
||||
// error
|
||||
// backend=stage2
|
||||
// target=native
|
||||
//
|
||||
// :2:13: error: index syntax required for slice type '[]i32'
|
||||
@@ -0,0 +1,9 @@
|
||||
export fn entry(x: [*]i32) i32 {
|
||||
return x.*;
|
||||
}
|
||||
|
||||
// error
|
||||
// backend=stage2
|
||||
// target=native
|
||||
//
|
||||
// :2:13: error: index syntax required for unknown-length pointer type '[*]i32'
|
||||
@@ -11,7 +11,7 @@ const Tile = enum {
|
||||
};
|
||||
|
||||
// error
|
||||
// backend=stage1
|
||||
// backend=stage2
|
||||
// target=native
|
||||
//
|
||||
// tmp.zig:3:17: error: attempt to dereference non-pointer type 'Tile'
|
||||
// :3:17: error: cannot dereference non-pointer type 'tmp.Tile'
|
||||
@@ -12,8 +12,8 @@ pub const Box = struct {
|
||||
};
|
||||
|
||||
// error
|
||||
// backend=stage1
|
||||
// backend=stage2
|
||||
// target=native
|
||||
//
|
||||
// tmp.zig:3:8: error: attempt to dereference non-pointer type 'Box'
|
||||
// tmp.zig:8:13: error: attempt to dereference non-pointer type 'Box'
|
||||
// :3:8: error: cannot dereference non-pointer type 'tmp.Box'
|
||||
// :8:13: error: cannot dereference non-pointer type 'tmp.Box'
|
||||
@@ -1,9 +0,0 @@
|
||||
export fn entry() void {
|
||||
'a'.* = 1;
|
||||
}
|
||||
|
||||
// error
|
||||
// backend=stage1
|
||||
// target=native
|
||||
//
|
||||
// tmp.zig:2:8: error: attempt to dereference non-pointer type 'comptime_int'
|
||||
@@ -1,9 +0,0 @@
|
||||
export fn entry(x: [*]i32) i32 {
|
||||
return x.*;
|
||||
}
|
||||
|
||||
// error
|
||||
// backend=stage1
|
||||
// target=native
|
||||
//
|
||||
// tmp.zig:2:13: error: index syntax required for unknown-length pointer type '[*]i32'
|
||||
@@ -1,10 +0,0 @@
|
||||
export fn entry() void {
|
||||
const x = 'a'.*[0..];
|
||||
_ = x;
|
||||
}
|
||||
|
||||
// error
|
||||
// backend=stage1
|
||||
// target=native
|
||||
//
|
||||
// tmp.zig:2:18: error: attempt to dereference non-pointer type 'comptime_int'
|
||||
@@ -0,0 +1,10 @@
|
||||
export fn entry() void {
|
||||
const x = 'a'.*[0..];
|
||||
_ = x;
|
||||
}
|
||||
|
||||
// error
|
||||
// backend=stage2
|
||||
// target=native
|
||||
//
|
||||
// :2:18: error: cannot dereference non-pointer type 'comptime_int'
|
||||
Reference in New Issue
Block a user