authorgravatar for mason@gamesbymason.comMason Remaley <mason@gamesbymason.com> 2026-04-13 02:59:29-07:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2026-04-18 14:51:49-07:00
log8c96487bb95e45a86f35e7cfa6012c265c0fdcca
treed862cf6b6b98f2147e3232c89826528a0207cf5d
parenta4d8e9608e0cb2704bad00b2f87af078c6d4ed59

Updates all uses of StackFallbackAllocator


21 files changed, 161 insertions(+), 141 deletions(-)

lib/compiler/aro/aro/CodeGen.zig+3-2
......@@ -54,8 +54,9 @@ return_label: Ir.Ref = undefined,
5454compound_assign_dummy: ?Ir.Ref = null,
5555
5656fn fail(c: *CodeGen, comptime fmt: []const u8, args: anytype) error{ FatalError, OutOfMemory } {
57 var sf = std.heap.stackFallback(1024, c.comp.gpa);
58 const allocator = sf.get();
57 var sf_buf: [u8]1024 = undefined;
58 var sf: std.heap.StackFallbackAllocator = .init(&sf_buf, c.comp.gpa);
59 const allocator = sf.allocator();
5960 var buf: std.ArrayList(u8) = .empty;
6061 defer buf.deinit(allocator);
6162
lib/compiler/aro/aro/Compilation.zig+9-6
......@@ -1761,8 +1761,9 @@ fn addToSearchPath(comp: *Compilation, include: Include, verbose: bool) !void {
17611761 try comp.search_path.append(comp.gpa, include);
17621762}
17631763fn removeDuplicateSearchPaths(comp: *Compilation, start: usize, verbose: bool) !void {
1764 var sf = std.heap.stackFallback(1024, comp.gpa);
1765 const allocator = sf.get();
1764 var sf_buf: [1024]u8 = undefined;
1765 var sf: std.heap.StackFallbackAllocator = .init(&sf_buf, comp.gpa);
1766 const allocator = sf.allocator();
17661767 var seen_includes: std.StringHashMapUnmanaged(void) = .empty;
17671768 defer seen_includes.deinit(allocator);
17681769 var seen_frameworks: std.StringHashMapUnmanaged(void) = .empty;
......@@ -1976,8 +1977,9 @@ const FindInclude = struct {
19761977 ) Allocator.Error!?Result {
19771978 const comp = find.comp;
19781979
1979 var stack_fallback = std.heap.stackFallback(path_buf_stack_limit, comp.gpa);
1980 const sfa = stack_fallback.get();
1980 var stack_fallback_buf: [path_buf_stack_limit]u8 = undefined;
1981 var stack_fallback: std.heap.StackFallbackAllocator = .init(&stack_fallback_buf, comp.gpa);
1982 const sfa = stack_fallback.allocator();
19811983 const header_path = try std.fmt.allocPrint(sfa, format, args);
19821984 defer sfa.free(header_path);
19831985 find.comp.normalizePath(header_path);
......@@ -2068,8 +2070,9 @@ pub fn findEmbed(
20682070 }
20692071 }
20702072
2071 var stack_fallback = std.heap.stackFallback(path_buf_stack_limit, comp.gpa);
2072 const sf_allocator = stack_fallback.get();
2073 var stack_fallback_buf: [path_buf_stack_limit]u8 = undefined;
2074 var stack_fallback: std.heap.StackFallbackAllocator = .init(&stack_fallback_buf, comp.gpa);
2075 const sf_allocator = stack_fallback.allocator();
20732076
20742077 switch (include_type) {
20752078 .quotes, .cli => {
lib/compiler/aro/aro/Driver.zig+9-6
......@@ -947,8 +947,9 @@ fn addImacros(d: *Driver, path: []const u8) !void {
947947}
948948
949949pub fn err(d: *Driver, fmt: []const u8, args: anytype) Compilation.Error!void {
950 var sf = std.heap.stackFallback(1024, d.comp.gpa);
951 var allocating: std.Io.Writer.Allocating = .init(sf.get());
950 var sf_buf: [1024]u8 = undefined;
951 var sf: std.heap.StackFallbackAllocator = .init(&sf_buf, d.comp.gpa);
952 var allocating: std.Io.Writer.Allocating = .init(sf.allocator());
952953 defer allocating.deinit();
953954
954955 Diagnostics.formatArgs(&allocating.writer, fmt, args) catch return error.OutOfMemory;
......@@ -956,8 +957,9 @@ pub fn err(d: *Driver, fmt: []const u8, args: anytype) Compilation.Error!void {
956957}
957958
958959pub fn warn(d: *Driver, fmt: []const u8, args: anytype) Compilation.Error!void {
959 var sf = std.heap.stackFallback(1024, d.comp.gpa);
960 var allocating: std.Io.Writer.Allocating = .init(sf.get());
960 var sf_buf: [1024]u8 = undefined;
961 var sf: std.heap.StackFallbackAllocator = .init(&sf_buf, d.comp.gpa);
962 var allocating: std.Io.Writer.Allocating = .init(sf.allocator());
961963 defer allocating.deinit();
962964
963965 Diagnostics.formatArgs(&allocating.writer, fmt, args) catch return error.OutOfMemory;
......@@ -1101,8 +1103,9 @@ fn parseTarget(d: *Driver, arch_os_abi: []const u8, opt_cpu_features: ?[]const u
11011103}
11021104
11031105pub fn fatal(d: *Driver, comptime fmt: []const u8, args: anytype) error{ FatalError, OutOfMemory } {
1104 var sf = std.heap.stackFallback(1024, d.comp.gpa);
1105 var allocating: std.Io.Writer.Allocating = .init(sf.get());
1106 var sf_buf: [1024]u8 = undefined;
1107 var sf: std.heap.StackFallbackAllocator = .init(&sf_buf, d.comp.gpa);
1108 var allocating: std.Io.Writer.Allocating = .init(sf.allocator());
11061109 defer allocating.deinit();
11071110
11081111 Diagnostics.formatArgs(&allocating.writer, fmt, args) catch return error.OutOfMemory;
lib/compiler/aro/aro/Parser.zig+18-12
......@@ -215,8 +215,9 @@ fn checkIdentifierCodepointWarnings(p: *Parser, codepoint: u21, loc: Source.Loca
215215 assert(codepoint >= 0x80);
216216
217217 const prev_total = p.diagnostics.total;
218 var sf = std.heap.stackFallback(1024, p.comp.gpa);
219 var allocating: std.Io.Writer.Allocating = .init(sf.get());
218 var sf_buf: [1024]u8 = undefined;
219 var sf: std.heap.StackFallbackAllocator = .init(&sf_buf, p.comp.gpa);
220 var allocating: std.Io.Writer.Allocating = .init(sf.allocator());
220221 defer allocating.deinit();
221222
222223 if (!char_info.isC99IdChar(codepoint)) {
......@@ -429,8 +430,9 @@ pub fn err(p: *Parser, tok_i: TokenIndex, diagnostic: Diagnostic, args: anytype)
429430 if (diagnostic.suppress_unless_version) |some| if (!p.comp.langopts.standard.atLeast(some)) return;
430431 if (p.diagnostics.effectiveKind(diagnostic) == .off) return;
431432
432 var sf = std.heap.stackFallback(1024, p.comp.gpa);
433 var allocating: std.Io.Writer.Allocating = .init(sf.get());
433 var sf_buf: [1024]u8 = undefined;
434 var sf: std.heap.StackFallbackAllocator = .init(&sf_buf, p.comp.gpa);
435 var allocating: std.Io.Writer.Allocating = .init(sf.allocator());
434436 defer allocating.deinit();
435437
436438 p.formatArgs(&allocating.writer, diagnostic.fmt, args) catch return error.OutOfMemory;
......@@ -1537,8 +1539,9 @@ fn staticAssert(p: *Parser) Error!bool {
15371539 }
15381540 } else {
15391541 if (!res.val.toBool(p.comp)) {
1540 var sf = std.heap.stackFallback(1024, gpa);
1541 var allocating: std.Io.Writer.Allocating = .init(sf.get());
1542 var sf_buf: [1024]u8 = undefined;
1543 var sf: std.heap.StackFallbackAllocator = .init(&sf_buf, gpa);
1544 var allocating: std.Io.Writer.Allocating = .init(sf.allocator());
15421545 defer allocating.deinit();
15431546
15441547 if (p.staticAssertMessage(res_node, str, &allocating) catch return error.OutOfMemory) |message| {
......@@ -4837,8 +4840,9 @@ fn gnuAsmStmt(p: *Parser, quals: Tree.GNUAssemblyQualifiers, asm_tok: TokenIndex
48374840 const expected_items = 8; // arbitrarily chosen, most assembly will have fewer than 8 inputs/outputs/constraints/names
48384841 const bytes_needed = expected_items * @sizeOf(Tree.Node.AsmStmt.Operand) + expected_items * 2 * @sizeOf(Node.Index);
48394842
4840 var stack_fallback = std.heap.stackFallback(bytes_needed, gpa);
4841 const allocator = stack_fallback.get();
4843 var stack_fallback_buf: [bytes_needed]u8 = undefined;
4844 var stack_fallback: std.heap.StackFallbackAllocator = .init(&stack_fallback_buf, gpa);
4845 const allocator = stack_fallback.allocator();
48424846
48434847 var operands: std.ArrayList(Tree.Node.AsmStmt.Operand) = .empty;
48444848 defer operands.deinit(allocator);
......@@ -9922,8 +9926,9 @@ fn primaryExpr(p: *Parser) Error!?Result {
99229926 if (p.func.pretty_ident) |some| {
99239927 qt = some.qt;
99249928 } else if (p.func.qt) |func_qt| {
9925 var sf = std.heap.stackFallback(1024, gpa);
9926 var allocating: std.Io.Writer.Allocating = .init(sf.get());
9929 var sf_buf: [1024]u8 = undefined;
9930 var sf: std.heap.StackFallbackAllocator = .init(&sf_buf, gpa);
9931 var allocating: std.Io.Writer.Allocating = .init(sf.allocator());
99279932 defer allocating.deinit();
99289933
99299934 func_qt.printNamed(p.tokSlice(p.func.name), p.comp, &allocating.writer) catch return error.OutOfMemory;
......@@ -10212,8 +10217,9 @@ fn charLiteral(p: *Parser) Error!?Result {
1021210217 };
1021310218
1021410219 const max_chars_expected = 4;
10215 var sf = std.heap.stackFallback(max_chars_expected * @sizeOf(u32), gpa);
10216 const allocator = sf.get();
10220 var sf_buf: [max_chars_expected]u32 = undefined;
10221 var sf: std.heap.StackFallbackAllocator = .init(@ptrCast(&sf_buf), gpa);
10222 const allocator = sf.allocator();
1021710223 var chars: std.ArrayList(u32) = .empty;
1021810224 defer chars.deinit(allocator);
1021910225
lib/compiler/aro/aro/Pragma.zig+3-2
......@@ -212,8 +212,9 @@ pub const Diagnostic = struct {
212212};
213213
214214pub fn err(pp: *Preprocessor, tok_i: TokenIndex, diagnostic: Diagnostic, args: anytype) Compilation.Error!void {
215 var sf = std.heap.stackFallback(1024, pp.comp.gpa);
216 var allocating: std.Io.Writer.Allocating = .init(sf.get());
215 var sf_buf: [1024]u8 = undefined;
216 var sf: std.heap.StackFallbackAllocator = .init(&sf_buf, pp.comp.gpa);
217 var allocating: std.Io.Writer.Allocating = .init(sf.allocator());
217218 defer allocating.deinit();
218219
219220 Diagnostics.formatArgs(&allocating.writer, diagnostic.fmt, args) catch return error.OutOfMemory;
lib/compiler/aro/aro/Preprocessor.zig+9-6
......@@ -1023,8 +1023,9 @@ fn err(pp: *Preprocessor, loc: anytype, diagnostic: Diagnostic, args: anytype) C
10231023 defer pp.diagnostics.state.suppress_system_headers = old_suppress_system;
10241024 if (diagnostic.show_in_system_headers) pp.diagnostics.state.suppress_system_headers = false;
10251025
1026 var sf = std.heap.stackFallback(1024, pp.comp.gpa);
1027 var allocating: std.Io.Writer.Allocating = .init(sf.get());
1026 var sf_buf: [1024]u8 = undefined;
1027 var sf: std.heap.StackFallbackAllocator = .init(&sf_buf, pp.comp.gpa);
1028 var allocating: std.Io.Writer.Allocating = .init(sf.allocator());
10281029 defer allocating.deinit();
10291030
10301031 Diagnostics.formatArgs(&allocating.writer, diagnostic.fmt, args) catch return error.OutOfMemory;
......@@ -1052,8 +1053,9 @@ fn err(pp: *Preprocessor, loc: anytype, diagnostic: Diagnostic, args: anytype) C
10521053}
10531054
10541055fn fatal(pp: *Preprocessor, raw: RawToken, comptime fmt: []const u8, args: anytype) Compilation.Error {
1055 var sf = std.heap.stackFallback(1024, pp.comp.gpa);
1056 var allocating: std.Io.Writer.Allocating = .init(sf.get());
1056 var sf_buf: [1024]u8 = undefined;
1057 var sf: std.heap.StackFallbackAllocator = .init(&sf_buf, pp.comp.gpa);
1058 var allocating: std.Io.Writer.Allocating = .init(sf.allocator());
10571059 defer allocating.deinit();
10581060
10591061 Diagnostics.formatArgs(&allocating.writer, fmt, args) catch return error.OutOfMemory;
......@@ -1074,8 +1076,9 @@ fn fatalNotFound(pp: *Preprocessor, tok: TokenWithExpansionLocs, filename: []con
10741076 pp.diagnostics.state.fatal_errors = true;
10751077 defer pp.diagnostics.state.fatal_errors = old;
10761078
1077 var sf = std.heap.stackFallback(1024, pp.comp.gpa);
1078 const allocator = sf.get();
1079 var sf_buf: [1024]u8 = undefined;
1080 var sf: std.heap.StackFallbackAllocator = .init(&sf_buf, pp.comp.gpa);
1081 const allocator = sf.allocator();
10791082 var buf: std.ArrayList(u8) = .empty;
10801083 defer buf.deinit(allocator);
10811084
lib/compiler/aro/aro/pragmas/message.zig+3-2
......@@ -44,8 +44,9 @@ fn preprocessorHandler(_: *Pragma, pp: *Preprocessor, start_idx: TokenIndex) Pra
4444
4545 const diagnostic: Pragma.Diagnostic = .pragma_message;
4646
47 var sf = std.heap.stackFallback(1024, pp.comp.gpa);
48 var allocating: std.Io.Writer.Allocating = .init(sf.get());
47 var sf_buf: [1024]u8 = undefined;
48 var sf: std.heap.StackFallbackAllocator = .init(&sf_buf, pp.comp.gpa);
49 var allocating: std.Io.Writer.Allocating = .init(sf.allocator());
4950 defer allocating.deinit();
5051
5152 Diagnostics.formatArgs(&allocating.writer, diagnostic.fmt, .{str}) catch return error.OutOfMemory;
lib/compiler/aro/aro/text_literal.zig+3-2
......@@ -315,8 +315,9 @@ pub const Parser = struct {
315315 if (p.errored) return;
316316 if (p.comp.diagnostics.effectiveKind(diagnostic) == .off) return;
317317
318 var sf = std.heap.stackFallback(1024, p.comp.gpa);
319 var allocating: std.Io.Writer.Allocating = .init(sf.get());
318 var sf_buf: [1024]u8 = undefined;
319 var sf: std.heap.StackFallbackAllocator = .init(&sf_buf, p.comp.gpa);
320 var allocating: std.Io.Writer.Allocating = .init(sf.allocator());
320321 defer allocating.deinit();
321322
322323 formatArgs(&allocating.writer, diagnostic.fmt, args) catch return error.OutOfMemory;
lib/compiler/aro/assembly_backend/x86_64.zig+3-2
......@@ -68,8 +68,9 @@ fn serializeFloat(comptime T: type, value: T, w: *std.Io.Writer) !void {
6868pub fn todo(c: *AsmCodeGen, msg: []const u8, tok: Tree.TokenIndex) Error {
6969 const loc: Source.Location = c.tree.tokens.items(.loc)[tok];
7070
71 var sf = std.heap.stackFallback(1024, c.comp.gpa);
72 const allocator = sf.get();
71 var sf_buf: [u8]1024 = undefined;
72 var sf: std.heap.StackFallbackAllocator = .init(&sf_buf, c.comp.gpa);
73 const allocator = sf.allocator();
7374 var buf: std.ArrayList(u8) = .empty;
7475 defer buf.deinit(allocator);
7576
lib/std/fs/path.zig+6-4
......@@ -894,8 +894,9 @@ pub fn resolve(allocator: Allocator, paths: []const []const u8) Allocator.Error!
894894pub fn resolveWindows(allocator: Allocator, paths: []const []const u8) Allocator.Error![]u8 {
895895 // Avoid heap allocation when paths.len is <= @bitSizeOf(usize) * 2
896896 // (we use `* 3` because stackFallback uses 1 usize as a length)
897 var bit_set_allocator_state = std.heap.stackFallback(@sizeOf(usize) * 3, allocator);
898 const bit_set_allocator = bit_set_allocator_state.get();
897 var buf: [3]usize = undefined;
898 var bit_set_allocator_state: std.heap.StackFallbackAllocator = .init(@ptrCast(&buf), allocator);
899 const bit_set_allocator = bit_set_allocator_state.allocator();
899900 var relevant_paths = try std.bit_set.DynamicBitSetUnmanaged.initEmpty(bit_set_allocator, paths.len);
900901 defer relevant_paths.deinit(bit_set_allocator);
901902
......@@ -1642,7 +1643,8 @@ fn windowsResolveAgainstCwd(
16421643 parsed: WindowsPath2(u8),
16431644) ![]u8 {
16441645 // Space for 256 WTF-16 code units; potentially 3 WTF-8 bytes per WTF-16 code unit
1645 var temp_allocator_state = std.heap.stackFallback(256 * 3, gpa);
1646 var buf: [256 * 3]u8 = undefined;
1647 var temp_allocator_state: std.heap.StackFallbackAllocator = .init(&buf, gpa);
16461648 return switch (parsed.kind) {
16471649 .drive_absolute,
16481650 .unc_absolute,
......@@ -1668,7 +1670,7 @@ fn windowsResolveAgainstCwd(
16681670 }
16691671 },
16701672 .drive_relative => blk: {
1671 const temp_allocator = temp_allocator_state.get();
1673 const temp_allocator = temp_allocator_state.allocator();
16721674 const drive_cwd = drive_cwd: {
16731675 const parsed_cwd = parsePathWindows(u8, cwd);
16741676
lib/std/zig/AstGen.zig+9-6
......@@ -1776,8 +1776,9 @@ fn structInitExpr(
17761776 }
17771777
17781778 {
1779 var sfba = std.heap.stackFallback(256, astgen.arena);
1780 const sfba_allocator = sfba.get();
1779 var sfba_buf: [256]u8 = undefined;
1780 var sfba: std.heap.StackFallbackAllocator = .init(&sfba_buf, astgen.arena);
1781 const sfba_allocator = sfba.allocator();
17811782
17821783 var duplicate_names: std.array_hash_map.Auto(Zir.NullTerminatedString, ArrayList(Ast.TokenIndex)) = .empty;
17831784 try duplicate_names.ensureTotalCapacity(sfba_allocator, @intCast(struct_init.ast.fields.len));
......@@ -8405,8 +8406,9 @@ fn tunnelThroughClosure(
84058406 // Otherwise we need a tunnel. First, figure out the path of namespaces we
84068407 // are tunneling through. This is usually only going to be one or two, so
84078408 // use an SFBA to optimize for the common case.
8408 var sfba = std.heap.stackFallback(@sizeOf(usize) * 2, astgen.arena);
8409 var intermediate_tunnels = try sfba.get().alloc(*Scope.Namespace, num_tunnels - 1);
8409 var sfba_buf: [2]usize = undefined;
8410 var sfba: std.heap.StackFallbackAllocator = .init(@ptrCast(&sfba_buf), astgen.arena);
8411 var intermediate_tunnels = try sfba.allocator().alloc(*Scope.Namespace, num_tunnels - 1);
84108412
84118413 const root_ns = ns: {
84128414 var i: usize = num_tunnels - 1;
......@@ -12927,8 +12929,9 @@ fn scanContainer(
1292712929 };
1292812930
1292912931 // The maps below are allocated into this SFBA to avoid using the GPA for small namespaces.
12930 var sfba_state = std.heap.stackFallback(512, astgen.gpa);
12931 const sfba = sfba_state.get();
12932 var sfba_buf: [512]u8 = undefined;
12933 var sfba_state: std.heap.StackFallbackAllocator = .init(&sfba_buf, astgen.gpa);
12934 const sfba = sfba_state.allocator();
1293212935
1293312936 var names: std.AutoArrayHashMapUnmanaged(Zir.NullTerminatedString, NameEntry) = .empty;
1293412937 var test_names: std.AutoArrayHashMapUnmanaged(Zir.NullTerminatedString, NameEntry) = .empty;
lib/std/zig/ZonGen.zig+3-2
......@@ -427,8 +427,9 @@ fn expr(zg: *ZonGen, node: Ast.Node.Index, dest_node: Zoir.Node.Index) Allocator
427427 });
428428
429429 // For short initializers, track the names on the stack rather than going through gpa.
430 var sfba_state = std.heap.stackFallback(256, gpa);
431 const sfba = sfba_state.get();
430 var sfba_buf: [256]u8 = undefined;
431 var sfba_state: std.heap.StackFallbackAllocator = .init(&sfba_buf, gpa);
432 const sfba = sfba_state.allocator();
432433 var field_names: std.AutoHashMapUnmanaged(Zoir.NullTerminatedString, Ast.TokenIndex) = .empty;
433434 defer field_names.deinit(sfba);
434435
lib/std/zig/llvm/Builder.zig+12-12
......@@ -7638,9 +7638,9 @@ pub const Constant = enum(u32) {
76387638 std.math.big.int.calcToStringLimbsBufferLen(expected_limbs, 10)
76397639 ]std.math.big.Limb,
76407640 };
7641 var stack align(@alignOf(ExpectedContents)) =
7642 std.heap.stackFallback(@sizeOf(ExpectedContents), data.builder.gpa);
7643 const allocator = stack.get();
7641 var stack_buf: ExpectedContents = undefined;
7642 var stack: std.heap.StackFallbackAllocator = .init(@ptrCast(&stack_buf), data.builder.gpa);
7643 const allocator = stack.allocator();
76447644 const str = bigint.toStringAlloc(allocator, 10, undefined) catch return error.WriteFailed;
76457645 defer allocator.free(str);
76467646 try w.writeAll(str);
......@@ -9209,9 +9209,9 @@ pub fn getIntrinsic(
92099209 fields: [expected_fields_len]Type,
92109210 },
92119211 };
9212 var stack align(@max(@alignOf(std.heap.StackFallbackAllocator(0)), @alignOf(ExpectedContents))) =
9213 std.heap.stackFallback(@sizeOf(ExpectedContents), self.gpa);
9214 const allocator = stack.get();
9212 var stack_buf: ExpectedContents = undefined;
9213 var stack: std.heap.StackFallbackAllocator = .init(@ptrCast(&stack_buf), self.gpa);
9214 const allocator = stack.allocator();
92159215
92169216 const name = name: {
92179217 {
......@@ -10607,9 +10607,9 @@ pub fn print(self: *Builder, w: *Writer) (Writer.Error || Allocator.Error)!void
1060710607 std.math.big.int.calcToStringLimbsBufferLen(expected_limbs, 10)
1060810608 ]std.math.big.Limb,
1060910609 };
10610 var stack align(@alignOf(ExpectedContents)) =
10611 std.heap.stackFallback(@sizeOf(ExpectedContents), self.gpa);
10612 const allocator = stack.get();
10610 var stack_buf: ExpectedContents = undefined;
10611 var stack: std.heap.StackFallbackAllocator = .init(@ptrCast(&stack_buf), self.gpa);
10612 const allocator = stack.allocator();
1061310613
1061410614 const limbs = self.metadata_limbs.items[extra.limbs_index..][0..extra.limbs_len];
1061510615 const bigint: std.math.big.int.Const = .{
......@@ -11129,9 +11129,9 @@ fn bigIntConstAssumeCapacity(
1112911129 const bits = type_item.data;
1113011130
1113111131 const ExpectedContents = [64 / @sizeOf(std.math.big.Limb)]std.math.big.Limb;
11132 var stack align(@alignOf(ExpectedContents)) =
11133 std.heap.stackFallback(@sizeOf(ExpectedContents), self.gpa);
11134 const allocator = stack.get();
11132 var stack_buf: ExpectedContents = undefined;
11133 var stack: std.heap.StackFallbackAllocator = .init(@ptrCast(&stack_buf), self.gpa);
11134 const allocator = stack.allocator();
1113511135
1113611136 var limbs: []std.math.big.Limb = &.{};
1113711137 defer allocator.free(limbs);
src/Air/Legalize.zig+12-9
......@@ -1122,8 +1122,9 @@ fn scalarizeShuffleOneBlockPayload(l: *Legalize, orig_inst: Air.Inst.Index) Erro
11221122 //
11231123 // So we must first compute `out_idxs` and `in_idxs`.
11241124
1125 var sfba_state = std.heap.stackFallback(512, gpa);
1126 const sfba = sfba_state.get();
1125 var sfba_buf: [512]u8 = undefined;
1126 var sfba_state: std.heap.StackFallbackAllocator = .init(&sfba_buf, gpa);
1127 const sfba = sfba_state.allocator();
11271128
11281129 const out_idxs_buf = try sfba.alloc(InternPool.Index, shuffle.mask.len);
11291130 defer sfba.free(out_idxs_buf);
......@@ -1212,8 +1213,9 @@ fn scalarizeShuffleTwoBlockPayload(l: *Legalize, orig_inst: Air.Inst.Index) Erro
12121213 // %8 = br(%1, %7)
12131214 // })
12141215
1215 var sfba_state = std.heap.stackFallback(512, gpa);
1216 const sfba = sfba_state.get();
1216 var sfba_buf: [512]u8 = undefined;
1217 var sfba_state: std.heap.StackFallbackAllocator = .init(&sfba_buf, gpa);
1218 const sfba = sfba_state.allocator();
12171219
12181220 const out_idxs_buf = try sfba.alloc(InternPool.Index, shuffle.mask.len);
12191221 defer sfba.free(out_idxs_buf);
......@@ -2394,9 +2396,9 @@ fn packedStoreBlockPayload(l: *Legalize, orig_inst: Air.Inst.Index) Error!Air.In
23942396 }).toRef(),
23952397 .rhs = Air.internedToRef((keep_mask: {
23962398 const ExpectedContents = [std.math.big.int.calcTwosCompLimbCount(256)]std.math.big.Limb;
2397 var stack align(@max(@alignOf(ExpectedContents), @alignOf(std.heap.StackFallbackAllocator(0)))) =
2398 std.heap.stackFallback(@sizeOf(ExpectedContents), zcu.gpa);
2399 const gpa = stack.get();
2399 var buf: ExpectedContents = undefined;
2400 var stack: std.heap.StackFallbackAllocator = .init(@ptrCast(&buf), zcu.gpa);
2401 const gpa = stack.allocator();
24002402
24012403 var mask_big_int: std.math.big.int.Mutable = .{
24022404 .limbs = try gpa.alloc(
......@@ -2489,8 +2491,9 @@ fn packedAggregateInitBlockPayload(l: *Legalize, orig_inst: Air.Inst.Index) Erro
24892491 const agg_ty = orig_ty_pl.ty.toType();
24902492 const agg_field_count = agg_ty.structFieldCount(zcu);
24912493
2492 var sfba_state = std.heap.stackFallback(@sizeOf([4 * 32 + 2]Air.Inst.Index), gpa);
2493 const sfba = sfba_state.get();
2494 var sfba_buf: [4 * 32 + 2]Air.Inst.Index = undefined;
2495 var sfba_state: std.heap.StackFallbackAllocator = .init(@ptrCast(&sfba_buf), gpa);
2496 const sfba = sfba_state.allocator();
24942497
24952498 const inst_buf = try sfba.alloc(Air.Inst.Index, 4 * agg_field_count + 2);
24962499 defer sfba.free(inst_buf);
src/Value.zig+3-2
......@@ -882,8 +882,9 @@ pub fn fieldValue(val: Value, pt: Zcu.PerThread, index: usize) !Value {
882882 else => unreachable,
883883 };
884884 // Avoid hitting gpa for accesses to small packed structs
885 var sfba_state = std.heap.stackFallback(128, zcu.comp.gpa);
886 const sfba = sfba_state.get();
885 var sfba_buf: [128]u8 = undefined;
886 var sfba_state: std.heap.StackFallbackAllocator = .init(&sfba_buf, zcu.comp.gpa);
887 const sfba = sfba_state.allocator();
887888 const buf = try sfba.alloc(u8, @intCast((ty.bitSize(zcu) + 7) / 8));
888889 defer sfba.free(buf);
889890 int_val.writeToPackedMemory(zcu, buf, 0) catch |err| switch (err) {
src/codegen/c.zig+3-2
......@@ -4841,8 +4841,9 @@ fn airAsm(f: *Function, inst: Air.Inst.Index) !CValue {
48414841 {
48424842 const asm_source = unwrapped_asm.source;
48434843
4844 var stack = std.heap.stackFallback(256, f.dg.gpa);
4845 const allocator = stack.get();
4844 var stack_buf: [256]u8 = undefined;
4845 var stack: std.heap.StackFallbackAllocator = .init(&stack_buf, f.dg.gpa);
4846 const allocator = stack.allocator();
48464847 const fixed_asm_source = try allocator.alloc(u8, asm_source.len);
48474848 defer allocator.free(fixed_asm_source);
48484849
src/codegen/llvm.zig+15-25
......@@ -3605,11 +3605,9 @@ pub const Object = struct {
36053605 vals: [Builder.expected_fields_len]Builder.Constant,
36063606 fields: [Builder.expected_fields_len]Builder.Type,
36073607 };
3608 var stack align(@max(
3609 @alignOf(std.heap.StackFallbackAllocator(0)),
3610 @alignOf(ExpectedContents),
3611 )) = std.heap.stackFallback(@sizeOf(ExpectedContents), o.gpa);
3612 const allocator = stack.get();
3608 var stack_buf: ExpectedContents = undefined;
3609 var stack: std.heap.StackFallbackAllocator = .init(@ptrCast(&stack_buf), o.gpa);
3610 const allocator = stack.allocator();
36133611 const vals = try allocator.alloc(Builder.Constant, elems.len);
36143612 defer allocator.free(vals);
36153613 const fields = try allocator.alloc(Builder.Type, elems.len);
......@@ -3636,11 +3634,9 @@ pub const Object = struct {
36363634 vals: [Builder.expected_fields_len]Builder.Constant,
36373635 fields: [Builder.expected_fields_len]Builder.Type,
36383636 };
3639 var stack align(@max(
3640 @alignOf(std.heap.StackFallbackAllocator(0)),
3641 @alignOf(ExpectedContents),
3642 )) = std.heap.stackFallback(@sizeOf(ExpectedContents), o.gpa);
3643 const allocator = stack.get();
3637 var stack_buf: ExpectedContents = undefined;
3638 var stack: std.heap.StackFallbackAllocator = .init(@ptrCast(&stack_buf), o.gpa);
3639 const allocator = stack.allocator();
36443640 const vals = try allocator.alloc(Builder.Constant, len_including_sentinel);
36453641 defer allocator.free(vals);
36463642 const fields = try allocator.alloc(Builder.Type, len_including_sentinel);
......@@ -3668,11 +3664,9 @@ pub const Object = struct {
36683664 switch (aggregate.storage) {
36693665 .bytes, .elems => {
36703666 const ExpectedContents = [Builder.expected_fields_len]Builder.Constant;
3671 var stack align(@max(
3672 @alignOf(std.heap.StackFallbackAllocator(0)),
3673 @alignOf(ExpectedContents),
3674 )) = std.heap.stackFallback(@sizeOf(ExpectedContents), o.gpa);
3675 const allocator = stack.get();
3667 var stack_buf: ExpectedContents = undefined;
3668 var stack: std.heap.StackFallbackAllocator = .init(@ptrCast(&stack_buf), o.gpa);
3669 const allocator = stack.allocator();
36763670 const vals = try allocator.alloc(Builder.Constant, vector_type.len);
36773671 defer allocator.free(vals);
36783672
......@@ -3701,11 +3695,9 @@ pub const Object = struct {
37013695 vals: [Builder.expected_fields_len]Builder.Constant,
37023696 fields: [Builder.expected_fields_len]Builder.Type,
37033697 };
3704 var stack align(@max(
3705 @alignOf(std.heap.StackFallbackAllocator(0)),
3706 @alignOf(ExpectedContents),
3707 )) = std.heap.stackFallback(@sizeOf(ExpectedContents), o.gpa);
3708 const allocator = stack.get();
3698 var stack_buf: ExpectedContents = undefined;
3699 var stack: std.heap.StackFallbackAllocator = .init(@ptrCast(&stack_buf), o.gpa);
3700 const allocator = stack.allocator();
37093701 const vals = try allocator.alloc(Builder.Constant, llvm_len);
37103702 defer allocator.free(vals);
37113703 const fields = try allocator.alloc(Builder.Type, llvm_len);
......@@ -3779,11 +3771,9 @@ pub const Object = struct {
37793771 vals: [Builder.expected_fields_len]Builder.Constant,
37803772 fields: [Builder.expected_fields_len]Builder.Type,
37813773 };
3782 var stack align(@max(
3783 @alignOf(std.heap.StackFallbackAllocator(0)),
3784 @alignOf(ExpectedContents),
3785 )) = std.heap.stackFallback(@sizeOf(ExpectedContents), o.gpa);
3786 const allocator = stack.get();
3774 var stack_buf: ExpectedContents = undefined;
3775 var stack: std.heap.StackFallbackAllocator = .init(@ptrCast(&stack_buf), o.gpa);
3776 const allocator = stack.allocator();
37873777 const vals = try allocator.alloc(Builder.Constant, llvm_len);
37883778 defer allocator.free(vals);
37893779 const fields = try allocator.alloc(Builder.Type, llvm_len);
src/codegen/llvm/FuncGen.zig+6-10
......@@ -3530,11 +3530,9 @@ fn airDivFloor(self: *FuncGen, inst: Air.Inst.Index, fast: Builder.FastMathKind)
35303530 const inst_llvm_ty = try o.lowerType(inst_ty);
35313531
35323532 const ExpectedContents = [std.math.big.int.calcTwosCompLimbCount(256)]std.math.big.Limb;
3533 var stack align(@max(
3534 @alignOf(std.heap.StackFallbackAllocator(0)),
3535 @alignOf(ExpectedContents),
3536 )) = std.heap.stackFallback(@sizeOf(ExpectedContents), self.gpa);
3537 const allocator = stack.get();
3533 var stack_buf: ExpectedContents = undefined;
3534 var stack: std.heap.StackFallbackAllocator = .init(@ptrCast(&stack_buf), self.gpa);
3535 const allocator = stack.allocator();
35383536
35393537 const scalar_bits = scalar_ty.intInfo(zcu).bits;
35403538 var smin_big_int: std.math.big.int.Mutable = .{
......@@ -3616,11 +3614,9 @@ fn airMod(self: *FuncGen, inst: Air.Inst.Index, fast: Builder.FastMathKind) Allo
36163614 }
36173615 if (scalar_ty.isSignedInt(zcu)) {
36183616 const ExpectedContents = [std.math.big.int.calcTwosCompLimbCount(256)]std.math.big.Limb;
3619 var stack align(@max(
3620 @alignOf(std.heap.StackFallbackAllocator(0)),
3621 @alignOf(ExpectedContents),
3622 )) = std.heap.stackFallback(@sizeOf(ExpectedContents), self.gpa);
3623 const allocator = stack.get();
3617 var stack_buf: ExpectedContents = undefined;
3618 var stack: std.heap.StackFallbackAllocator = .init(@ptrCast(&stack_buf), self.gpa);
3619 const allocator = stack.allocator();
36243620
36253621 const scalar_bits = scalar_ty.intInfo(zcu).bits;
36263622 var smin_big_int: std.math.big.int.Mutable = .{
src/codegen/riscv64/CodeGen.zig+7-6
......@@ -671,11 +671,12 @@ fn restoreState(func: *Func, state: State, deaths: []const Air.Inst.Index, compt
671671 for (deaths) |death| try func.processDeath(death);
672672
673673 const ExpectedContents = [@typeInfo(RegisterManager.TrackedRegisters).array.len]RegisterLock;
674 var stack align(@max(@alignOf(ExpectedContents), @alignOf(std.heap.StackFallbackAllocator(0)))) =
675 if (opts.update_tracking) {} else std.heap.stackFallback(@sizeOf(ExpectedContents), func.gpa);
674 const stack_buf_len = if (opts.update_tracking) 0 else 1;
675 var stack_buf: [stack_buf_len]ExpectedContents = undefined;
676 var stack = if (opts.update_tracking) {} else std.heap.StackFallbackAllocator.init(@ptrCast(&stack_buf), func.gpa);
676677
677678 var reg_locks = if (opts.update_tracking) {} else try std.array_list.Managed(RegisterLock).initCapacity(
678 stack.get(),
679 stack.allocator(),
679680 @typeInfo(ExpectedContents).array.len,
680681 );
681682 defer if (!opts.update_tracking) {
......@@ -4807,9 +4808,9 @@ fn airCall(func: *Func, inst: Air.Inst.Index, modifier: std.builtin.CallModifier
48074808 const ExpectedContents = extern struct {
48084809 vals: [expected_num_args][@sizeOf(MCValue)]u8 align(@alignOf(MCValue)),
48094810 };
4810 var stack align(@max(@alignOf(ExpectedContents), @alignOf(std.heap.StackFallbackAllocator(0)))) =
4811 std.heap.stackFallback(@sizeOf(ExpectedContents), func.gpa);
4812 const allocator = stack.get();
4811 var stack_buf: ExpectedContents = undefined;
4812 var stack: std.heap.StackFallbackAllocator = .init(@ptrCast(&stack_buf), func.gpa);
4813 const allocator = stack.allocator();
48134814
48144815 const arg_tys = try allocator.alloc(Type, arg_refs.len);
48154816 defer allocator.free(arg_tys);
src/codegen/x86_64/CodeGen.zig+22-21
......@@ -173820,9 +173820,9 @@ fn genLazy(cg: *CodeGen, lazy_sym: link.File.LazySymbol) InnerError!void {
173820173820 var err_temp = try cg.tempInit(err_ty, err_mcv);
173821173821
173822173822 const ExpectedContents = [32]Mir.Inst.Index;
173823 var stack align(@max(@alignOf(ExpectedContents), @alignOf(std.heap.StackFallbackAllocator(0)))) =
173824 std.heap.stackFallback(@sizeOf(ExpectedContents), cg.gpa);
173825 const allocator = stack.get();
173823 var stack_buf: ExpectedContents = undefined;
173824 var stack: std.heap.StackFallbackAllocator = .init(@ptrCast(&stack_buf), cg.gpa);
173825 const allocator = stack.allocator();
173826173826
173827173827 const relocs = try allocator.alloc(Mir.Inst.Index, error_set_type.names.len);
173828173828 defer allocator.free(relocs);
......@@ -174220,11 +174220,12 @@ fn restoreState(self: *CodeGen, state: State, deaths: []const Air.Inst.Index, co
174220174220 for (deaths) |death| try self.processDeath(death, .{ .emit_instructions = opts.emit_instructions });
174221174221
174222174222 const ExpectedContents = [@typeInfo(RegisterManager.TrackedRegisters).array.len]RegisterLock;
174223 var stack align(@max(@alignOf(ExpectedContents), @alignOf(std.heap.StackFallbackAllocator(0)))) =
174224 if (opts.update_tracking) {} else std.heap.stackFallback(@sizeOf(ExpectedContents), self.gpa);
174223 const stack_buf_len = if (opts.update_tracking) 0 else 1;
174224 var stack_buf: [stack_buf_len]ExpectedContents = undefined;
174225 var stack = if (opts.update_tracking) {} else std.heap.StackFallbackAllocator.init(@ptrCast(&stack_buf), self.gpa);
174225174226
174226174227 var reg_locks = if (opts.update_tracking) {} else try std.array_list.Managed(RegisterLock).initCapacity(
174227 stack.get(),
174228 stack.allocator(),
174228174229 @typeInfo(ExpectedContents).array.len,
174229174230 );
174230174231 defer if (!opts.update_tracking) {
......@@ -175929,9 +175930,9 @@ fn airCall(self: *CodeGen, inst: Air.Inst.Index, modifier: std.builtin.CallModif
175929175930 tys: [32][@sizeOf(Type)]u8 align(@alignOf(Type)),
175930175931 vals: [32][@sizeOf(MCValue)]u8 align(@alignOf(MCValue)),
175931175932 };
175932 var stack align(@max(@alignOf(ExpectedContents), @alignOf(std.heap.StackFallbackAllocator(0)))) =
175933 std.heap.stackFallback(@sizeOf(ExpectedContents), self.gpa);
175934 const allocator = stack.get();
175933 var stack_buf: [1]ExpectedContents = undefined;
175934 var stack: std.heap.StackFallbackAllocator = .init(@ptrCast(&stack_buf), self.gpa);
175935 const allocator = stack.allocator();
175935175936
175936175937 const arg_tys = try allocator.alloc(Type, arg_refs.len);
175937175938 defer allocator.free(arg_tys);
......@@ -175985,9 +175986,9 @@ fn genCall(self: *CodeGen, info: union(enum) {
175985175986 frame_indices: [32]FrameIndex,
175986175987 reg_locks: [32][@sizeOf(?RegisterLock)]u8 align(@alignOf(?RegisterLock)),
175987175988 };
175988 var stack align(@max(@alignOf(ExpectedContents), @alignOf(std.heap.StackFallbackAllocator(0)))) =
175989 std.heap.stackFallback(@sizeOf(ExpectedContents), self.gpa);
175990 const allocator = stack.get();
175989 var stack_buf: ExpectedContents = undefined;
175990 var stack: std.heap.StackFallbackAllocator = .init(@ptrCast(&stack_buf), self.gpa);
175991 const allocator = stack.allocator();
175991175992
175992175993 const var_args = try allocator.alloc(Type, args.len - fn_info.param_types.len);
175993175994 defer allocator.free(var_args);
......@@ -176588,9 +176589,9 @@ fn lowerSwitchBr(
176588176589 bigint_limbs: [std.math.big.int.calcTwosCompLimbCount(1 << 10)]std.math.big.Limb,
176589176590 relocs: [1 << 6]Mir.Inst.Index,
176590176591 };
176591 var stack align(@max(@alignOf(ExpectedContents), @alignOf(std.heap.StackFallbackAllocator(0)))) =
176592 std.heap.stackFallback(@sizeOf(ExpectedContents), cg.gpa);
176593 const allocator = stack.get();
176592 var stack_buf: ExpectedContents = undefined;
176593 var stack: std.heap.StackFallbackAllocator = .init(@ptrCast(&stack_buf), cg.gpa);
176594 const allocator = stack.allocator();
176594176595
176595176596 const state = try cg.saveState();
176596176597
......@@ -181154,9 +181155,9 @@ fn resolveCallingConventionValues(
181154181155 const ExpectedContents = extern struct {
181155181156 param_types: [32][@sizeOf(Type)]u8 align(@alignOf(Type)),
181156181157 };
181157 var stack align(@max(@alignOf(ExpectedContents), @alignOf(std.heap.StackFallbackAllocator(0)))) =
181158 std.heap.stackFallback(@sizeOf(ExpectedContents), cg.gpa);
181159 const allocator = stack.get();
181158 var stack_buf: ExpectedContents = undefined;
181159 var stack: std.heap.StackFallbackAllocator = .init(@ptrCast(&stack_buf), cg.gpa);
181160 const allocator = stack.allocator();
181160181161
181161181162 const param_types = try allocator.alloc(Type, fn_info.param_types.len + var_args.len);
181162181163 defer allocator.free(param_types);
......@@ -188706,9 +188707,9 @@ const Select = struct {
188706188707 }
188707188708
188708188709 const ExpectedContents = [std.math.big.int.calcTwosCompLimbCount(1 << 10)]std.math.big.Limb;
188709 var stack align(@max(@alignOf(ExpectedContents), @alignOf(std.heap.StackFallbackAllocator(0)))) =
188710 std.heap.stackFallback(@sizeOf(ExpectedContents), cg.gpa);
188711 const allocator = stack.get();
188710 var stack_buf: ExpectedContents = undefined;
188711 var stack: std.heap.StackFallbackAllocator = .init(@ptrCast(&stack_buf), cg.gpa);
188712 const allocator = stack.allocator();
188712188713 var res_big_int: std.math.big.int.Mutable = .{
188713188714 .limbs = try allocator.alloc(
188714188715 std.math.big.Limb,
src/link/Elf2.zig+3-2
......@@ -2690,8 +2690,9 @@ pub fn ensureUnusedRelocCapacity(elf: *Elf, loc_si: Symbol.Index, len: usize) !v
26902690 const shndx = loc_si.shndx(elf);
26912691 const sh = shndx.get(elf);
26922692 if (sh.rela_si == .null) {
2693 var stack = std.heap.stackFallback(32, gpa);
2694 const allocator = stack.get();
2693 var stack_buf: [32]u8 = undefined;
2694 var stack: std.heap.StackFallbackAllocator = .init(&stack_buf, gpa);
2695 const allocator = stack.allocator();
26952696
26962697 const rela_name =
26972698 try std.fmt.allocPrint(allocator, ".rela{s}", .{elf.sectionName(sh.si)});