From 4e399ef62c962d0179f715afa3e50343b2825e7d Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Sun, 9 May 2021 18:10:29 +0200 Subject: [PATCH 1/2] Initialize the Stat structure The system `stat` structure includes padding, and, on some operating systems such as all BSDs, "spare" bytes at the end. We can't reliably compare two `Stat` values if these are uninitialized, while being later compared. This is what was causing the `fstatat` test to fail on FreeBSD since the update to LLVM 12. It was previously only passing by accident. --- lib/std/os.zig | 4 ++-- lib/std/os/test.zig | 4 ---- 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/lib/std/os.zig b/lib/std/os.zig index ef6d6a85cd..5ef1767c12 100644 --- a/lib/std/os.zig +++ b/lib/std/os.zig @@ -3408,7 +3408,7 @@ pub fn fstat(fd: fd_t) FStatError!Stat { @compileError("fstat is not yet implemented on Windows"); } - var stat: Stat = undefined; + var stat: Stat = mem.zeroes(Stat); switch (errno(system.fstat(fd, &stat))) { 0 => return stat, EINVAL => unreachable, @@ -3459,7 +3459,7 @@ pub fn fstatatWasi(dirfd: fd_t, pathname: []const u8, flags: u32) FStatAtError!S /// Same as `fstatat` but `pathname` is null-terminated. /// See also `fstatat`. pub fn fstatatZ(dirfd: fd_t, pathname: [*:0]const u8, flags: u32) FStatAtError!Stat { - var stat: Stat = undefined; + var stat: Stat = mem.zeroes(Stat); switch (errno(system.fstatat(dirfd, pathname, &stat, flags))) { 0 => return stat, EINVAL => unreachable, diff --git a/lib/std/os/test.zig b/lib/std/os/test.zig index 7f10671b35..a677e63757 100644 --- a/lib/std/os/test.zig +++ b/lib/std/os/test.zig @@ -263,10 +263,6 @@ test "linkat with different directories" { test "fstatat" { // enable when `fstat` and `fstatat` are implemented on Windows if (builtin.os.tag == .windows) return error.SkipZigTest; - if (builtin.os.tag == .freebsd and builtin.mode == .ReleaseFast) { - // https://github.com/ziglang/zig/issues/8538 - return error.SkipZigTest; - } var tmp = tmpDir(.{}); defer tmp.cleanup(); From c3675d9351e78e80d337f410f8334f2ed9fae6d0 Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Sun, 9 May 2021 18:17:09 +0200 Subject: [PATCH 2/2] Shorten --- lib/std/os.zig | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/std/os.zig b/lib/std/os.zig index 5ef1767c12..4cdecf5231 100644 --- a/lib/std/os.zig +++ b/lib/std/os.zig @@ -3408,7 +3408,7 @@ pub fn fstat(fd: fd_t) FStatError!Stat { @compileError("fstat is not yet implemented on Windows"); } - var stat: Stat = mem.zeroes(Stat); + var stat = mem.zeroes(Stat); switch (errno(system.fstat(fd, &stat))) { 0 => return stat, EINVAL => unreachable, @@ -3459,7 +3459,7 @@ pub fn fstatatWasi(dirfd: fd_t, pathname: []const u8, flags: u32) FStatAtError!S /// Same as `fstatat` but `pathname` is null-terminated. /// See also `fstatat`. pub fn fstatatZ(dirfd: fd_t, pathname: [*:0]const u8, flags: u32) FStatAtError!Stat { - var stat: Stat = mem.zeroes(Stat); + var stat = mem.zeroes(Stat); switch (errno(system.fstatat(dirfd, pathname, &stat, flags))) { 0 => return stat, EINVAL => unreachable,