aboutsummaryrefslogtreecommitdiff
path: root/lib/std
diff options
context:
space:
mode:
authorAndrew Kelley <andrew@ziglang.org>2025-08-28 18:29:48 -0700
committerAndrew Kelley <andrew@ziglang.org>2025-08-28 18:30:57 -0700
commit530cc2c1111699d9d02ad9ebef94efa6b99f5205 (patch)
treecba09d5ab895b2bfe3dedfbb741db10580ce6dc3 /lib/std
parent46b60dc06945152eee8280b8ff5b1e629ed74553 (diff)
downloadzig-530cc2c1111699d9d02ad9ebef94efa6b99f5205.tar.gz
zig-530cc2c1111699d9d02ad9ebef94efa6b99f5205.zip
std.Io.Reader: work around llvm backend bug
tracked by #25067 and I already have a fix cooking in another branch
Diffstat (limited to 'lib/std')
-rw-r--r--lib/std/Io/Reader.zig12
1 files changed, 10 insertions, 2 deletions
diff --git a/lib/std/Io/Reader.zig b/lib/std/Io/Reader.zig
index a1092b3980..5be8413c74 100644
--- a/lib/std/Io/Reader.zig
+++ b/lib/std/Io/Reader.zig
@@ -1163,7 +1163,11 @@ pub inline fn takeStruct(r: *Reader, comptime T: type, endian: std.builtin.Endia
.@"struct" => |info| switch (info.layout) {
.auto => @compileError("ill-defined memory layout"),
.@"extern" => {
- var res = (try r.takeStructPointer(T)).*;
+ // This code works around https://github.com/ziglang/zig/issues/25067
+ // by avoiding a call to `peekStructPointer`.
+ const struct_bytes = try r.takeArray(@sizeOf(T));
+ var res: T = undefined;
+ @memcpy(@as([]u8, @ptrCast(&res)), struct_bytes);
if (native_endian != endian) std.mem.byteSwapAllFields(T, &res);
return res;
},
@@ -1188,7 +1192,11 @@ pub inline fn peekStruct(r: *Reader, comptime T: type, endian: std.builtin.Endia
.@"struct" => |info| switch (info.layout) {
.auto => @compileError("ill-defined memory layout"),
.@"extern" => {
- var res = (try r.peekStructPointer(T)).*;
+ // This code works around https://github.com/ziglang/zig/issues/25067
+ // by avoiding a call to `peekStructPointer`.
+ const struct_bytes = try r.peekArray(@sizeOf(T));
+ var res: T = undefined;
+ @memcpy(@as([]u8, @ptrCast(&res)), struct_bytes);
if (native_endian != endian) std.mem.byteSwapAllFields(T, &res);
return res;
},