@zigc/lib 0.15.0-dev.0 → 0.15.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (92) hide show
  1. package/README.md +1 -5
  2. package/build-web/fuzz.zig +6 -6
  3. package/build-web/time_report.zig +13 -14
  4. package/compiler/reduce/Walk.zig +9 -10
  5. package/compiler/reduce.zig +20 -19
  6. package/compiler/resinator/compile.zig +1 -1
  7. package/compiler_rt/arm.zig +1 -1
  8. package/init/build.zig +1 -1
  9. package/libc/freebsd/lib/csu/aarch64/crt.h +1 -0
  10. package/libc/freebsd/lib/csu/aarch64/crt1_c.c +33 -0
  11. package/libc/freebsd/lib/csu/aarch64/crt1_s.S +68 -0
  12. package/libc/freebsd/lib/csu/amd64/crt.h +30 -0
  13. package/libc/freebsd/lib/csu/amd64/crt1_c.c +30 -0
  14. package/libc/freebsd/lib/csu/amd64/crt1_s.S +89 -0
  15. package/libc/freebsd/lib/csu/arm/crt.h +1 -0
  16. package/libc/freebsd/lib/csu/arm/crt1_c.c +80 -0
  17. package/libc/freebsd/lib/csu/arm/crt1_s.S +77 -0
  18. package/libc/freebsd/lib/csu/common/crtbegin.c +95 -0
  19. package/libc/freebsd/lib/csu/common/crtbrand.S +55 -0
  20. package/libc/freebsd/lib/csu/common/crtend.c +65 -0
  21. package/libc/freebsd/lib/csu/common/csu_common.h +50 -0
  22. package/libc/freebsd/lib/csu/common/feature_note.S +47 -0
  23. package/libc/freebsd/lib/csu/common/ignore_init_note.S +48 -0
  24. package/libc/freebsd/lib/csu/common/notes.h +32 -0
  25. package/libc/freebsd/lib/csu/i386/crt.h +30 -0
  26. package/libc/freebsd/lib/csu/i386/crt1_c.c +30 -0
  27. package/libc/freebsd/lib/csu/i386/crt1_s.S +91 -0
  28. package/libc/freebsd/lib/csu/powerpc/crt.h +31 -0
  29. package/libc/freebsd/lib/csu/powerpc/crt1_c.c +89 -0
  30. package/libc/freebsd/lib/csu/powerpc/crtsavres.S +189 -0
  31. package/libc/freebsd/lib/csu/powerpc64/crt.h +31 -0
  32. package/libc/freebsd/lib/csu/powerpc64/crt1_c.c +83 -0
  33. package/libc/freebsd/lib/csu/riscv/crt.h +8 -0
  34. package/libc/freebsd/lib/csu/riscv/crt1_c.c +51 -0
  35. package/libc/freebsd/lib/csu/riscv/crt1_s.S +51 -0
  36. package/libc/freebsd/lib/libc/include/libc_private.h +450 -0
  37. package/libc/include/generic-glibc/arpa/inet.h +0 -3
  38. package/libc/netbsd/lib/csu/arch/aarch64/crt0.S +45 -0
  39. package/libc/netbsd/lib/csu/arch/earm/crt0.S +61 -0
  40. package/libc/netbsd/lib/csu/arch/i386/crt0.S +48 -0
  41. package/libc/netbsd/lib/csu/arch/m68k/crt0.S +47 -0
  42. package/libc/netbsd/lib/csu/arch/mips/crt0.S +59 -0
  43. package/libc/netbsd/lib/csu/arch/powerpc/crt0.S +56 -0
  44. package/libc/netbsd/lib/csu/arch/sparc/crt0.S +55 -0
  45. package/libc/netbsd/lib/csu/arch/sparc64/crt0.S +59 -0
  46. package/libc/netbsd/lib/csu/arch/x86_64/crt0.S +48 -0
  47. package/libc/netbsd/lib/csu/common/crt0-common.c +351 -0
  48. package/libc/netbsd/lib/csu/common/crtbegin.c +135 -0
  49. package/libc/netbsd/lib/csu/common/csu-common.h +38 -0
  50. package/libc/netbsd/lib/csu/common/sysident.S +89 -0
  51. package/libc/netbsd/lib/csu/common/sysident_assym.h +17 -0
  52. package/package.json +2 -2
  53. package/std/Build/Step/Compile.zig +1 -20
  54. package/std/Build/Step/TranslateC.zig +0 -6
  55. package/std/Build/WebServer.zig +1 -1
  56. package/std/Build.zig +1 -4
  57. package/std/Io/Reader/Limited.zig +0 -44
  58. package/std/Io/Reader.zig +28 -128
  59. package/std/Io/Writer.zig +6 -31
  60. package/std/Target.zig +0 -8
  61. package/std/Thread.zig +4 -3
  62. package/std/c.zig +26 -87
  63. package/std/crypto/aes_ocb.zig +3 -32
  64. package/std/crypto/tls/Client.zig +8 -19
  65. package/std/debug.zig +1 -1
  66. package/std/fs/Dir.zig +1 -2
  67. package/std/fs/File.zig +104 -105
  68. package/std/http/Client.zig +2 -3
  69. package/std/json/static.zig +3 -3
  70. package/std/math/big/int.zig +4 -3
  71. package/std/math/powi.zig +0 -1
  72. package/std/mem/Allocator.zig +1 -3
  73. package/std/mem.zig +1 -3
  74. package/std/net.zig +2 -3
  75. package/std/os/linux/bpf.zig +2 -2
  76. package/std/os/linux/powerpc.zig +12 -74
  77. package/std/os/linux/powerpc64.zig +12 -74
  78. package/std/os/linux.zig +2 -7
  79. package/std/os/uefi/protocol/service_binding.zig +1 -1
  80. package/std/os/uefi/tables.zig +1 -1
  81. package/std/pie.zig +1 -1
  82. package/std/posix.zig +4 -6
  83. package/std/process/Child.zig +1 -5
  84. package/std/process.zig +2 -16
  85. package/std/sort/pdq.zig +1 -48
  86. package/std/testing.zig +0 -60
  87. package/std/zig/llvm/BitcodeReader.zig +1 -5
  88. package/std/zig/system/linux.zig +4 -1
  89. package/std/zig/system.zig +2 -3
  90. package/std/zon/parse.zig +0 -1
  91. package/ubsan_rt.zig +3 -3
  92. package/libc/musl/src/fenv/loongarch64/fenv-sf.c +0 -3
@@ -15,125 +15,84 @@ const sockaddr = linux.sockaddr;
15
15
  const timespec = linux.timespec;
16
16
 
17
17
  pub fn syscall0(number: SYS) usize {
18
- // r0 is both an input register and a clobber. musl and glibc achieve this with
19
- // a "+" constraint, which isn't supported in Zig, so instead we separately list
20
- // r0 as both an input and an output. (Listing it as an input and a clobber would
21
- // cause the C backend to emit invalid code; see #25209.)
22
- var r0_out: usize = undefined;
23
18
  return asm volatile (
24
19
  \\ sc
25
20
  \\ bns+ 1f
26
21
  \\ neg 3, 3
27
22
  \\ 1:
28
23
  : [ret] "={r3}" (-> usize),
29
- [r0_out] "={r0}" (r0_out),
30
24
  : [number] "{r0}" (@intFromEnum(number)),
31
- : .{ .memory = true, .cr0 = true, .r4 = true, .r5 = true, .r6 = true, .r7 = true, .r8 = true, .r9 = true, .r10 = true, .r11 = true, .r12 = true, .ctr = true, .xer = true });
25
+ : .{ .memory = true, .cr0 = true, .r0 = true, .r4 = true, .r5 = true, .r6 = true, .r7 = true, .r8 = true, .r9 = true, .r10 = true, .r11 = true, .r12 = true });
32
26
  }
33
27
 
34
28
  pub fn syscall1(number: SYS, arg1: usize) usize {
35
- // r0 is both an input and a clobber.
36
- var r0_out: usize = undefined;
37
29
  return asm volatile (
38
30
  \\ sc
39
31
  \\ bns+ 1f
40
32
  \\ neg 3, 3
41
33
  \\ 1:
42
34
  : [ret] "={r3}" (-> usize),
43
- [r0_out] "={r0}" (r0_out),
44
35
  : [number] "{r0}" (@intFromEnum(number)),
45
36
  [arg1] "{r3}" (arg1),
46
- : .{ .memory = true, .cr0 = true, .r4 = true, .r5 = true, .r6 = true, .r7 = true, .r8 = true, .r9 = true, .r10 = true, .r11 = true, .r12 = true, .ctr = true, .xer = true });
37
+ : .{ .memory = true, .cr0 = true, .r0 = true, .r4 = true, .r5 = true, .r6 = true, .r7 = true, .r8 = true, .r9 = true, .r10 = true, .r11 = true, .r12 = true });
47
38
  }
48
39
 
49
40
  pub fn syscall2(number: SYS, arg1: usize, arg2: usize) usize {
50
- // These registers are both inputs and clobbers.
51
- var r0_out: usize = undefined;
52
- var r4_out: usize = undefined;
53
41
  return asm volatile (
54
42
  \\ sc
55
43
  \\ bns+ 1f
56
44
  \\ neg 3, 3
57
45
  \\ 1:
58
46
  : [ret] "={r3}" (-> usize),
59
- [r0_out] "={r0}" (r0_out),
60
- [r4_out] "={r4}" (r4_out),
61
47
  : [number] "{r0}" (@intFromEnum(number)),
62
48
  [arg1] "{r3}" (arg1),
63
49
  [arg2] "{r4}" (arg2),
64
- : .{ .memory = true, .cr0 = true, .r5 = true, .r6 = true, .r7 = true, .r8 = true, .r9 = true, .r10 = true, .r11 = true, .r12 = true, .ctr = true, .xer = true });
50
+ : .{ .memory = true, .cr0 = true, .r0 = true, .r4 = true, .r5 = true, .r6 = true, .r7 = true, .r8 = true, .r9 = true, .r10 = true, .r11 = true, .r12 = true });
65
51
  }
66
52
 
67
53
  pub fn syscall3(number: SYS, arg1: usize, arg2: usize, arg3: usize) usize {
68
- // These registers are both inputs and clobbers.
69
- var r0_out: usize = undefined;
70
- var r4_out: usize = undefined;
71
- var r5_out: usize = undefined;
72
54
  return asm volatile (
73
55
  \\ sc
74
56
  \\ bns+ 1f
75
57
  \\ neg 3, 3
76
58
  \\ 1:
77
59
  : [ret] "={r3}" (-> usize),
78
- [r0_out] "={r0}" (r0_out),
79
- [r4_out] "={r4}" (r4_out),
80
- [r5_out] "={r5}" (r5_out),
81
60
  : [number] "{r0}" (@intFromEnum(number)),
82
61
  [arg1] "{r3}" (arg1),
83
62
  [arg2] "{r4}" (arg2),
84
63
  [arg3] "{r5}" (arg3),
85
- : .{ .memory = true, .cr0 = true, .r6 = true, .r7 = true, .r8 = true, .r9 = true, .r10 = true, .r11 = true, .r12 = true, .ctr = true, .xer = true });
64
+ : .{ .memory = true, .cr0 = true, .r0 = true, .r4 = true, .r5 = true, .r6 = true, .r7 = true, .r8 = true, .r9 = true, .r10 = true, .r11 = true, .r12 = true });
86
65
  }
87
66
 
88
67
  pub fn syscall4(number: SYS, arg1: usize, arg2: usize, arg3: usize, arg4: usize) usize {
89
- // These registers are both inputs and clobbers.
90
- var r0_out: usize = undefined;
91
- var r4_out: usize = undefined;
92
- var r5_out: usize = undefined;
93
- var r6_out: usize = undefined;
94
68
  return asm volatile (
95
69
  \\ sc
96
70
  \\ bns+ 1f
97
71
  \\ neg 3, 3
98
72
  \\ 1:
99
73
  : [ret] "={r3}" (-> usize),
100
- [r0_out] "={r0}" (r0_out),
101
- [r4_out] "={r4}" (r4_out),
102
- [r5_out] "={r5}" (r5_out),
103
- [r6_out] "={r6}" (r6_out),
104
74
  : [number] "{r0}" (@intFromEnum(number)),
105
75
  [arg1] "{r3}" (arg1),
106
76
  [arg2] "{r4}" (arg2),
107
77
  [arg3] "{r5}" (arg3),
108
78
  [arg4] "{r6}" (arg4),
109
- : .{ .memory = true, .cr0 = true, .r7 = true, .r8 = true, .r9 = true, .r10 = true, .r11 = true, .r12 = true, .ctr = true, .xer = true });
79
+ : .{ .memory = true, .cr0 = true, .r0 = true, .r4 = true, .r5 = true, .r6 = true, .r7 = true, .r8 = true, .r9 = true, .r10 = true, .r11 = true, .r12 = true });
110
80
  }
111
81
 
112
82
  pub fn syscall5(number: SYS, arg1: usize, arg2: usize, arg3: usize, arg4: usize, arg5: usize) usize {
113
- // These registers are both inputs and clobbers.
114
- var r0_out: usize = undefined;
115
- var r4_out: usize = undefined;
116
- var r5_out: usize = undefined;
117
- var r6_out: usize = undefined;
118
- var r7_out: usize = undefined;
119
83
  return asm volatile (
120
84
  \\ sc
121
85
  \\ bns+ 1f
122
86
  \\ neg 3, 3
123
87
  \\ 1:
124
88
  : [ret] "={r3}" (-> usize),
125
- [r0_out] "={r0}" (r0_out),
126
- [r4_out] "={r4}" (r4_out),
127
- [r5_out] "={r5}" (r5_out),
128
- [r6_out] "={r6}" (r6_out),
129
- [r7_out] "={r7}" (r7_out),
130
89
  : [number] "{r0}" (@intFromEnum(number)),
131
90
  [arg1] "{r3}" (arg1),
132
91
  [arg2] "{r4}" (arg2),
133
92
  [arg3] "{r5}" (arg3),
134
93
  [arg4] "{r6}" (arg4),
135
94
  [arg5] "{r7}" (arg5),
136
- : .{ .memory = true, .cr0 = true, .r8 = true, .r9 = true, .r10 = true, .r11 = true, .r12 = true, .ctr = true, .xer = true });
95
+ : .{ .memory = true, .cr0 = true, .r0 = true, .r4 = true, .r5 = true, .r6 = true, .r7 = true, .r8 = true, .r9 = true, .r10 = true, .r11 = true, .r12 = true });
137
96
  }
138
97
 
139
98
  pub fn syscall6(
@@ -145,25 +104,12 @@ pub fn syscall6(
145
104
  arg5: usize,
146
105
  arg6: usize,
147
106
  ) usize {
148
- // These registers are both inputs and clobbers.
149
- var r0_out: usize = undefined;
150
- var r4_out: usize = undefined;
151
- var r5_out: usize = undefined;
152
- var r6_out: usize = undefined;
153
- var r7_out: usize = undefined;
154
- var r8_out: usize = undefined;
155
107
  return asm volatile (
156
108
  \\ sc
157
109
  \\ bns+ 1f
158
110
  \\ neg 3, 3
159
111
  \\ 1:
160
112
  : [ret] "={r3}" (-> usize),
161
- [r0_out] "={r0}" (r0_out),
162
- [r4_out] "={r4}" (r4_out),
163
- [r5_out] "={r5}" (r5_out),
164
- [r6_out] "={r6}" (r6_out),
165
- [r7_out] "={r7}" (r7_out),
166
- [r8_out] "={r8}" (r8_out),
167
113
  : [number] "{r0}" (@intFromEnum(number)),
168
114
  [arg1] "{r3}" (arg1),
169
115
  [arg2] "{r4}" (arg2),
@@ -171,7 +117,7 @@ pub fn syscall6(
171
117
  [arg4] "{r6}" (arg4),
172
118
  [arg5] "{r7}" (arg5),
173
119
  [arg6] "{r8}" (arg6),
174
- : .{ .memory = true, .cr0 = true, .r9 = true, .r10 = true, .r11 = true, .r12 = true, .ctr = true, .xer = true });
120
+ : .{ .memory = true, .cr0 = true, .r0 = true, .r4 = true, .r5 = true, .r6 = true, .r7 = true, .r8 = true, .r9 = true, .r10 = true, .r11 = true, .r12 = true });
175
121
  }
176
122
 
177
123
  pub fn clone() callconv(.naked) usize {
@@ -232,19 +178,11 @@ pub fn clone() callconv(.naked) usize {
232
178
  pub const restore = restore_rt;
233
179
 
234
180
  pub fn restore_rt() callconv(.naked) noreturn {
235
- switch (@import("builtin").zig_backend) {
236
- .stage2_c => asm volatile (
237
- \\ li 0, %[number]
238
- \\ sc
239
- :
240
- : [number] "i" (@intFromEnum(SYS.rt_sigreturn)),
241
- : .{ .memory = true, .cr0 = true, .r4 = true, .r5 = true, .r6 = true, .r7 = true, .r8 = true, .r9 = true, .r10 = true, .r11 = true, .r12 = true }),
242
- else => _ = asm volatile (
243
- \\ sc
244
- :
245
- : [number] "{r0}" (@intFromEnum(SYS.rt_sigreturn)),
246
- : .{ .memory = true, .cr0 = true, .r4 = true, .r5 = true, .r6 = true, .r7 = true, .r8 = true, .r9 = true, .r10 = true, .r11 = true, .r12 = true }),
247
- }
181
+ asm volatile (
182
+ \\ sc
183
+ :
184
+ : [number] "{r0}" (@intFromEnum(SYS.rt_sigreturn)),
185
+ : .{ .memory = true, .cr0 = true, .r4 = true, .r5 = true, .r6 = true, .r7 = true, .r8 = true, .r9 = true, .r10 = true, .r11 = true, .r12 = true });
248
186
  }
249
187
 
250
188
  pub const F = struct {
package/std/os/linux.zig CHANGED
@@ -1238,14 +1238,11 @@ pub fn access(path: [*:0]const u8, mode: u32) usize {
1238
1238
  if (@hasField(SYS, "access")) {
1239
1239
  return syscall2(.access, @intFromPtr(path), mode);
1240
1240
  } else {
1241
- return faccessat(AT.FDCWD, path, mode, 0);
1241
+ return syscall4(.faccessat, @as(usize, @bitCast(@as(isize, AT.FDCWD))), @intFromPtr(path), mode, 0);
1242
1242
  }
1243
1243
  }
1244
1244
 
1245
1245
  pub fn faccessat(dirfd: i32, path: [*:0]const u8, mode: u32, flags: u32) usize {
1246
- if (flags == 0) {
1247
- return syscall3(.faccessat, @as(usize, @bitCast(@as(isize, dirfd))), @intFromPtr(path), mode);
1248
- }
1249
1246
  return syscall4(.faccessat2, @as(usize, @bitCast(@as(isize, dirfd))), @intFromPtr(path), mode, flags);
1250
1247
  }
1251
1248
 
@@ -9802,9 +9799,7 @@ pub const wrapped = struct {
9802
9799
  };
9803
9800
 
9804
9801
  pub fn copy_file_range(fd_in: fd_t, off_in: ?*i64, fd_out: fd_t, off_out: ?*i64, len: usize, flags: u32) CopyFileRangeError!usize {
9805
- const use_c = std.c.versionCheck(if (builtin.abi.isAndroid()) .{ .major = 34, .minor = 0, .patch = 0 } else .{ .major = 2, .minor = 27, .patch = 0 });
9806
- const sys = if (use_c) std.c else std.os.linux;
9807
- const rc = sys.copy_file_range(fd_in, off_in, fd_out, off_out, len, flags);
9802
+ const rc = system.copy_file_range(fd_in, off_in, fd_out, off_out, len, flags);
9808
9803
  switch (errno(rc)) {
9809
9804
  .SUCCESS => return @intCast(rc),
9810
9805
  .BADF => return error.BadFileFlags,
@@ -1,5 +1,5 @@
1
1
  const std = @import("std");
2
- const uefi = std.os.uefi;
2
+ const uefi = std.uefi;
3
3
  const Guid = uefi.Guid;
4
4
  const Handle = uefi.Handle;
5
5
  const Status = uefi.Status;
@@ -90,7 +90,7 @@ pub const MemoryType = enum(u32) {
90
90
  return @truncate(as_int - vendor_start);
91
91
  }
92
92
 
93
- pub fn format(self: MemoryType, w: *std.io.Writer) std.io.Writer.Error!void {
93
+ pub fn format(self: MemoryType, w: *std.io.Writer) std.io.WriteError!void {
94
94
  if (self.toOem()) |oemval|
95
95
  try w.print("OEM({X})", .{oemval})
96
96
  else if (self.toVendor()) |vendorval|
package/std/pie.zig CHANGED
@@ -177,7 +177,7 @@ inline fn getDynamicSymbol() [*]const elf.Dyn {
177
177
  \\ jg 2f
178
178
  \\ 1: .quad _DYNAMIC - .
179
179
  \\ 2:
180
- : [ret] "=a" (-> [*]const elf.Dyn),
180
+ : [ret] "=r" (-> [*]const elf.Dyn),
181
181
  ),
182
182
  // The compiler does not necessarily have any obligation to load the `l7` register (pointing
183
183
  // to the GOT), so do it ourselves just in case.
package/std/posix.zig CHANGED
@@ -6387,16 +6387,14 @@ pub const CopyFileRangeError = error{
6387
6387
  ///
6388
6388
  /// Maximum offsets on Linux and FreeBSD are `maxInt(i64)`.
6389
6389
  pub fn copy_file_range(fd_in: fd_t, off_in: u64, fd_out: fd_t, off_out: u64, len: usize, flags: u32) CopyFileRangeError!usize {
6390
- if (builtin.os.tag == .freebsd or builtin.os.tag == .linux) {
6391
- const use_c = native_os != .linux or
6392
- std.c.versionCheck(if (builtin.abi.isAndroid()) .{ .major = 34, .minor = 0, .patch = 0 } else .{ .major = 2, .minor = 27, .patch = 0 });
6393
- const sys = if (use_c) std.c else linux;
6394
-
6390
+ if (builtin.os.tag == .freebsd or
6391
+ (comptime builtin.os.tag == .linux and std.c.versionCheck(if (builtin.abi.isAndroid()) .{ .major = 34, .minor = 0, .patch = 0 } else .{ .major = 2, .minor = 27, .patch = 0 })))
6392
+ {
6395
6393
  var off_in_copy: i64 = @bitCast(off_in);
6396
6394
  var off_out_copy: i64 = @bitCast(off_out);
6397
6395
 
6398
6396
  while (true) {
6399
- const rc = sys.copy_file_range(fd_in, &off_in_copy, fd_out, &off_out_copy, len, flags);
6397
+ const rc = system.copy_file_range(fd_in, &off_in_copy, fd_out, &off_out_copy, len, flags);
6400
6398
  if (native_os == .freebsd) {
6401
6399
  switch (errno(rc)) {
6402
6400
  .SUCCESS => return @intCast(rc),
@@ -52,8 +52,6 @@ term: ?(SpawnError!Term),
52
52
  argv: []const []const u8,
53
53
 
54
54
  /// Leave as null to use the current env map using the supplied allocator.
55
- /// Required if unable to access the current env map (e.g. building a library on
56
- /// some platforms).
57
55
  env_map: ?*const EnvMap,
58
56
 
59
57
  stdin_behavior: StdIo,
@@ -416,8 +414,6 @@ pub fn run(args: struct {
416
414
  argv: []const []const u8,
417
415
  cwd: ?[]const u8 = null,
418
416
  cwd_dir: ?fs.Dir = null,
419
- /// Required if unable to access the current env map (e.g. building a
420
- /// library on some platforms).
421
417
  env_map: ?*const EnvMap = null,
422
418
  max_output_bytes: usize = 50 * 1024,
423
419
  expand_arg0: Arg0Expand = .no_expand,
@@ -618,7 +614,7 @@ fn spawnPosix(self: *ChildProcess) SpawnError!void {
618
614
  })).ptr;
619
615
  } else {
620
616
  // TODO come up with a solution for this.
621
- @panic("missing std lib enhancement: ChildProcess implementation has no way to collect the environment variables to forward to the child process");
617
+ @compileError("missing std lib enhancement: ChildProcess implementation has no way to collect the environment variables to forward to the child process");
622
618
  }
623
619
  };
624
620
 
package/std/process.zig CHANGED
@@ -1753,8 +1753,7 @@ pub fn totalSystemMemory() TotalSystemMemoryError!u64 {
1753
1753
  if (std.os.linux.E.init(result) != .SUCCESS) {
1754
1754
  return error.UnknownTotalSystemMemory;
1755
1755
  }
1756
- // Promote to u64 to avoid overflow on systems where info.totalram is a 32-bit usize
1757
- return @as(u64, info.totalram) * info.mem_unit;
1756
+ return info.totalram * info.mem_unit;
1758
1757
  },
1759
1758
  .freebsd => {
1760
1759
  var physmem: c_ulong = undefined;
@@ -1763,20 +1762,7 @@ pub fn totalSystemMemory() TotalSystemMemoryError!u64 {
1763
1762
  error.NameTooLong, error.UnknownName => unreachable,
1764
1763
  else => return error.UnknownTotalSystemMemory,
1765
1764
  };
1766
- return @as(u64, @intCast(physmem));
1767
- },
1768
- // whole Darwin family
1769
- .driverkit, .ios, .macos, .tvos, .visionos, .watchos => {
1770
- // "hw.memsize" returns uint64_t
1771
- var physmem: u64 = undefined;
1772
- var len: usize = @sizeOf(u64);
1773
- posix.sysctlbynameZ("hw.memsize", &physmem, &len, null, 0) catch |err| switch (err) {
1774
- error.PermissionDenied => unreachable, // only when setting values,
1775
- error.SystemResources => unreachable, // memory already on the stack
1776
- error.UnknownName => unreachable, // constant, known good value
1777
- else => return error.UnknownTotalSystemMemory,
1778
- };
1779
- return physmem;
1765
+ return @as(usize, @intCast(physmem));
1780
1766
  },
1781
1767
  .openbsd => {
1782
1768
  const mib: [2]c_int = [_]c_int{
package/std/sort/pdq.zig CHANGED
@@ -227,7 +227,7 @@ fn partialInsertionSort(a: usize, b: usize, context: anytype) bool {
227
227
  // shift the smaller element to the left.
228
228
  if (i - a >= 2) {
229
229
  var j = i - 1;
230
- while (j > a) : (j -= 1) {
230
+ while (j >= 1) : (j -= 1) {
231
231
  if (!context.lessThan(j, j - 1)) break;
232
232
  context.swap(j, j - 1);
233
233
  }
@@ -328,50 +328,3 @@ fn reverseRange(a: usize, b: usize, context: anytype) void {
328
328
  j -= 1;
329
329
  }
330
330
  }
331
-
332
- test "pdqContext respects arbitrary range boundaries" {
333
- // Regression test for issue #25250
334
- // pdqsort should never access indices outside the specified [a, b) range
335
- var data: [2000]i32 = @splat(0);
336
-
337
- // Fill with data that triggers the partialInsertionSort path
338
- for (0..data.len) |i| {
339
- data[i] = @intCast(@mod(@as(i32, @intCast(i)) * 7, 100));
340
- }
341
-
342
- const TestContext = struct {
343
- items: []i32,
344
- range_start: usize,
345
- range_end: usize,
346
-
347
- pub fn lessThan(ctx: @This(), a: usize, b: usize) bool {
348
- // Assert indices are within the expected range
349
- testing.expect(a >= ctx.range_start and a < ctx.range_end) catch @panic("index a out of range");
350
- testing.expect(b >= ctx.range_start and b < ctx.range_end) catch @panic("index b out of range");
351
- return ctx.items[a] < ctx.items[b];
352
- }
353
-
354
- pub fn swap(ctx: @This(), a: usize, b: usize) void {
355
- // Assert indices are within the expected range
356
- testing.expect(a >= ctx.range_start and a < ctx.range_end) catch @panic("index a out of range");
357
- testing.expect(b >= ctx.range_start and b < ctx.range_end) catch @panic("index b out of range");
358
- mem.swap(i32, &ctx.items[a], &ctx.items[b]);
359
- }
360
- };
361
-
362
- // Test sorting a sub-range that doesn't start at 0
363
- const start = 1118;
364
- const end = 1764;
365
- const ctx = TestContext{
366
- .items = &data,
367
- .range_start = start,
368
- .range_end = end,
369
- };
370
-
371
- pdqContext(start, end, ctx);
372
-
373
- // Verify the range is sorted
374
- for ((start + 1)..end) |i| {
375
- try testing.expect(data[i - 1] <= data[i]);
376
- }
377
- }
package/std/testing.zig CHANGED
@@ -1249,63 +1249,3 @@ pub const Reader = struct {
1249
1249
  return n;
1250
1250
  }
1251
1251
  };
1252
-
1253
- /// A `std.Io.Reader` that gets its data from another `std.Io.Reader`, and always
1254
- /// writes to its own buffer (and returns 0) during `stream` and `readVec`.
1255
- pub const ReaderIndirect = struct {
1256
- in: *std.Io.Reader,
1257
- interface: std.Io.Reader,
1258
-
1259
- pub fn init(in: *std.Io.Reader, buffer: []u8) ReaderIndirect {
1260
- return .{
1261
- .in = in,
1262
- .interface = .{
1263
- .vtable = &.{
1264
- .stream = stream,
1265
- .readVec = readVec,
1266
- },
1267
- .buffer = buffer,
1268
- .seek = 0,
1269
- .end = 0,
1270
- },
1271
- };
1272
- }
1273
-
1274
- fn readVec(r: *std.Io.Reader, _: [][]u8) std.Io.Reader.Error!usize {
1275
- try streamInner(r);
1276
- return 0;
1277
- }
1278
-
1279
- fn stream(r: *std.Io.Reader, _: *std.Io.Writer, _: std.Io.Limit) std.Io.Reader.StreamError!usize {
1280
- try streamInner(r);
1281
- return 0;
1282
- }
1283
-
1284
- fn streamInner(r: *std.Io.Reader) std.Io.Reader.Error!void {
1285
- const r_indirect: *ReaderIndirect = @alignCast(@fieldParentPtr("interface", r));
1286
-
1287
- // If there's no room remaining in the buffer at all, make room.
1288
- if (r.buffer.len == r.end) {
1289
- try r.rebase(r.buffer.len);
1290
- }
1291
-
1292
- var writer: std.Io.Writer = .{
1293
- .buffer = r.buffer,
1294
- .end = r.end,
1295
- .vtable = &.{
1296
- .drain = std.Io.Writer.unreachableDrain,
1297
- .rebase = std.Io.Writer.unreachableRebase,
1298
- },
1299
- };
1300
- defer r.end = writer.end;
1301
-
1302
- r_indirect.in.streamExact(&writer, r.buffer.len - r.end) catch |err| switch (err) {
1303
- // Only forward EndOfStream if no new bytes were written to the buffer
1304
- error.EndOfStream => |e| if (r.end == writer.end) {
1305
- return e;
1306
- },
1307
- error.WriteFailed => unreachable,
1308
- else => |e| return e,
1309
- };
1310
- }
1311
- };
@@ -154,11 +154,7 @@ pub fn next(bc: *BitcodeReader) !?Item {
154
154
  Abbrev.Builtin.enter_subblock.toRecordId() => {
155
155
  const block_id: u32 = @intCast(record.operands[0]);
156
156
  switch (block_id) {
157
- Block.block_info => {
158
- try bc.startBlock(Block.block_info, @intCast(record.operands[1]));
159
- try bc.parseBlockInfoBlock();
160
- try bc.endBlock();
161
- },
157
+ Block.block_info => try bc.parseBlockInfoBlock(),
162
158
  Block.first_reserved...Block.last_standard => return error.UnsupportedBlockId,
163
159
  else => {
164
160
  try bc.startBlock(block_id, @intCast(record.operands[1]));
@@ -358,11 +358,14 @@ fn CpuinfoParser(comptime impl: anytype) type {
358
358
  return struct {
359
359
  fn parse(arch: Target.Cpu.Arch, reader: *std.Io.Reader) !?Target.Cpu {
360
360
  var obj: impl = .{};
361
- while (try reader.takeDelimiter('\n')) |line| {
361
+ while (reader.takeDelimiterExclusive('\n')) |line| {
362
362
  const colon_pos = mem.indexOfScalar(u8, line, ':') orelse continue;
363
363
  const key = mem.trimEnd(u8, line[0..colon_pos], " \t");
364
364
  const value = mem.trimStart(u8, line[colon_pos + 1 ..], " \t");
365
365
  if (!try obj.line_hook(key, value)) break;
366
+ } else |err| switch (err) {
367
+ error.EndOfStream => {},
368
+ else => |e| return e,
366
369
  }
367
370
  return obj.finalize(arch);
368
371
  }
@@ -102,7 +102,6 @@ pub fn getExternalExecutor(
102
102
  else => "qemu-mips64el",
103
103
  },
104
104
  },
105
- .or1k => Executor{ .qemu = "qemu-or1k" },
106
105
  .powerpc => Executor{ .qemu = "qemu-ppc" },
107
106
  .powerpc64 => Executor{ .qemu = "qemu-ppc64" },
108
107
  .powerpc64le => Executor{ .qemu = "qemu-ppc64le" },
@@ -110,7 +109,7 @@ pub fn getExternalExecutor(
110
109
  .riscv64 => Executor{ .qemu = "qemu-riscv64" },
111
110
  .s390x => Executor{ .qemu = "qemu-s390x" },
112
111
  .sparc => Executor{
113
- .qemu = if (candidate.cpu.has(.sparc, .v8plus))
112
+ .qemu = if (candidate.cpu.has(.sparc, .v9))
114
113
  "qemu-sparc32plus"
115
114
  else
116
115
  "qemu-sparc",
@@ -122,7 +121,7 @@ pub fn getExternalExecutor(
122
121
  else => Executor{ .qemu = "qemu-x86_64" },
123
122
  },
124
123
  .xtensa => Executor{ .qemu = "qemu-xtensa" },
125
- else => bad_result,
124
+ else => return bad_result,
126
125
  };
127
126
  }
128
127
 
package/std/zon/parse.zig CHANGED
@@ -717,7 +717,6 @@ const Parser = struct {
717
717
 
718
718
  elem.* = try self.parseExpr(array_info.child, nodes.at(@intCast(i)));
719
719
  }
720
- if (array_info.sentinel()) |s| result[result.len] = s;
721
720
  return result;
722
721
  }
723
722
 
package/ubsan_rt.zig CHANGED
@@ -627,7 +627,7 @@ fn exportHandler(
627
627
  // Work around x86_64 backend limitation.
628
628
  const linkage = if (builtin.zig_backend == .stage2_x86_64 and builtin.os.tag == .windows) .internal else .weak;
629
629
  const N = "__ubsan_handle_" ++ sym_name;
630
- @export(handler, .{ .name = N, .linkage = linkage, .visibility = if (linkage == .internal) .default else .hidden });
630
+ @export(handler, .{ .name = N, .linkage = linkage });
631
631
  }
632
632
 
633
633
  fn exportHandlerWithAbort(
@@ -639,11 +639,11 @@ fn exportHandlerWithAbort(
639
639
  const linkage = if (builtin.zig_backend == .stage2_x86_64 and builtin.os.tag == .windows) .internal else .weak;
640
640
  {
641
641
  const N = "__ubsan_handle_" ++ sym_name;
642
- @export(handler, .{ .name = N, .linkage = linkage, .visibility = if (linkage == .internal) .default else .hidden });
642
+ @export(handler, .{ .name = N, .linkage = linkage });
643
643
  }
644
644
  {
645
645
  const N = "__ubsan_handle_" ++ sym_name ++ "_abort";
646
- @export(abort_handler, .{ .name = N, .linkage = linkage, .visibility = if (linkage == .internal) .default else .hidden });
646
+ @export(abort_handler, .{ .name = N, .linkage = linkage });
647
647
  }
648
648
  }
649
649
 
@@ -1,3 +0,0 @@
1
- #ifdef __loongarch_soft_float
2
- #include "../fenv.c"
3
- #endif