From 86570b3e2c58da76d7e94531c1aa8017012b0521 Mon Sep 17 00:00:00 2001 From: Cody Tapscott Date: Tue, 5 Jul 2022 00:58:47 -0700 Subject: [PATCH 1/4] stage2: Fix corrupted Type when de-referencing field pointer --- src/Sema.zig | 4 ++-- test/behavior.zig | 1 + test/behavior/bugs/12003.zig | 7 +++++++ 3 files changed, 10 insertions(+), 2 deletions(-) create mode 100644 test/behavior/bugs/12003.zig diff --git a/src/Sema.zig b/src/Sema.zig index e234255c6e..60d636b81e 100644 --- a/src/Sema.zig +++ b/src/Sema.zig @@ -21614,10 +21614,10 @@ fn beginComptimePtrLoad( deref.ty_without_well_defined_layout = field_ptr.container_ty; } - const tv = &(deref.pointee orelse { + const tv = deref.pointee orelse { deref.pointee = null; break :blk deref; - }); + }; const coerce_in_mem_ok = (try sema.coerceInMemoryAllowed(block, field_ptr.container_ty, tv.ty, false, target, src, src)) == .ok or (try sema.coerceInMemoryAllowed(block, tv.ty, field_ptr.container_ty, false, target, src, src)) == .ok; diff --git a/test/behavior.zig b/test/behavior.zig index 18e65564ad..087b821c7d 100644 --- a/test/behavior.zig +++ b/test/behavior.zig @@ -82,6 +82,7 @@ test { _ = @import("behavior/bugs/11179.zig"); _ = @import("behavior/bugs/11181.zig"); _ = @import("behavior/bugs/11213.zig"); + _ = @import("behavior/bugs/12003.zig"); _ = @import("behavior/byteswap.zig"); _ = @import("behavior/byval_arg_var.zig"); _ = @import("behavior/call.zig"); diff --git a/test/behavior/bugs/12003.zig b/test/behavior/bugs/12003.zig new file mode 100644 index 0000000000..98c74b77ab --- /dev/null +++ b/test/behavior/bugs/12003.zig @@ -0,0 +1,7 @@ +test { + comptime { + const tuple_with_ptrs = .{ &0, &0 }; + const field_ptr = (&tuple_with_ptrs.@"0"); + _ = field_ptr.*; + } +} From 93ac87c1bdc40e6cc11bcad1948d767af3725018 Mon Sep 17 00:00:00 2001 From: Jonathan Marler Date: Sat, 18 Jun 2022 16:00:40 -0600 Subject: [PATCH 2/4] Mark fstype argument to mount as optional The fstype argument to the mount system call can be null. To see an example run "strace -e trace=mount unshare -m": ``` mount("none", "/", NULL, MS_REC|MS_PRIVATE, NULL) = 0 ... ``` --- lib/std/os/linux.zig | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/std/os/linux.zig b/lib/std/os/linux.zig index 9a01b90142..ab421c4d32 100644 --- a/lib/std/os/linux.zig +++ b/lib/std/os/linux.zig @@ -376,7 +376,7 @@ pub fn mknodat(dirfd: i32, path: [*:0]const u8, mode: u32, dev: u32) usize { return syscall4(.mknodat, @bitCast(usize, @as(isize, dirfd)), @ptrToInt(path), mode, dev); } -pub fn mount(special: [*:0]const u8, dir: [*:0]const u8, fstype: [*:0]const u8, flags: u32, data: usize) usize { +pub fn mount(special: [*:0]const u8, dir: [*:0]const u8, fstype: ?[*:0]const u8, flags: u32, data: usize) usize { return syscall5(.mount, @ptrToInt(special), @ptrToInt(dir), @ptrToInt(fstype), flags, data); } From 844b77e3bc91960b3be11c3b4bf08bdb3aedd756 Mon Sep 17 00:00:00 2001 From: Andrew Kelley Date: Tue, 5 Jul 2022 16:09:40 -0700 Subject: [PATCH 3/4] remove sparc64 test case which is tripping llvm assertion See #12011 --- test/cases/sparc64-linux/hello_world.zig | 22 ---------------------- 1 file changed, 22 deletions(-) delete mode 100644 test/cases/sparc64-linux/hello_world.zig diff --git a/test/cases/sparc64-linux/hello_world.zig b/test/cases/sparc64-linux/hello_world.zig deleted file mode 100644 index b5a2562c44..0000000000 --- a/test/cases/sparc64-linux/hello_world.zig +++ /dev/null @@ -1,22 +0,0 @@ -const msg = "Hello, World!\n"; - -fn length() usize { - return msg.len; -} - -pub fn main() void { - asm volatile ("ta 0x6d" - : - : [number] "{g1}" (4), - [arg1] "{o0}" (1), - [arg2] "{o1}" (@ptrToInt(msg)), - [arg3] "{o2}" (length()), - : "o0", "o1", "o2", "o3", "o4", "o5", "o6", "o7", "memory" - ); -} - -// run -// target=sparc64-linux -// -// Hello, World! -// From f639cb33a9acf71e32fb69882cf59250148cfaff Mon Sep 17 00:00:00 2001 From: Andrew Kelley Date: Tue, 5 Jul 2022 16:22:07 -0700 Subject: [PATCH 4/4] fix expected error messages in test cases --- test/cases/compile_errors/asm_at_compile_time.zig | 3 ++- test/cases/compile_errors/duplicate_error_in_switch.zig | 6 +++--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/test/cases/compile_errors/asm_at_compile_time.zig b/test/cases/compile_errors/asm_at_compile_time.zig index ba4aa81170..601c89da9e 100644 --- a/test/cases/compile_errors/asm_at_compile_time.zig +++ b/test/cases/compile_errors/asm_at_compile_time.zig @@ -14,4 +14,5 @@ fn doSomeAsm() void { // backend=llvm // target=native // -// :6:5: error: unable to evaluate constant expression +// :6:5: error: unable to resolve comptime value +// :2:14: note: called from here diff --git a/test/cases/compile_errors/duplicate_error_in_switch.zig b/test/cases/compile_errors/duplicate_error_in_switch.zig index 6e9b1e9099..aaaed396fa 100644 --- a/test/cases/compile_errors/duplicate_error_in_switch.zig +++ b/test/cases/compile_errors/duplicate_error_in_switch.zig @@ -8,8 +8,8 @@ export fn entry() void { } fn foo(x: i32) !void { switch (x) { - 0 ... 10 => return error.Foo, - 11 ... 20 => return error.Bar, + 0...10 => return error.Foo, + 11...20 => return error.Bar, else => {}, } } @@ -19,4 +19,4 @@ fn foo(x: i32) !void { // target=native // // :5:9: error: duplicate switch value -// :3:9: note: other value here +// :3:9: note: previous value here