Sema: validate deref operator type and value

This commit is contained in:
Veikka Tuominen
2022-06-30 17:22:16 +03:00
parent 3c73f71177
commit ae7b32eb62
20 changed files with 91 additions and 43 deletions

View File

@@ -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'

View File

@@ -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

View File

@@ -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'

View File

@@ -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'

View 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'

View File

@@ -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'

View File

@@ -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'

View File

@@ -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'

View File

@@ -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'

View File

@@ -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'

View File

@@ -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'

View File

@@ -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'