authorgravatar for 63465728+alichraghi@users.noreply.github.comAli Chraghi <63465728+alichraghi@users.noreply.github.com> 2022-05-26 14:19:05+04:30
committergravatar for git@vexu.euVeikka Tuominen <git@vexu.eu> 2022-07-24 11:57:00+03:00
log0b4a3ec9501b31e7b31e81b83e5974e6c6d72757
treee4b0db268956d0de37bb50c639f465942783abb3
parentdea437edfb124b8a4cf4f2e09330ef4282991cc9

std: compile error on invalid testing allocator usage


5 files changed, 24 insertions(+), 10 deletions(-)

lib/std/testing.zig+5-1
......@@ -8,7 +8,11 @@ pub const FailingAllocator = @import("testing/failing_allocator.zig").FailingAll
88
99/// This should only be used in temporary test programs.
1010pub const allocator = allocator_instance.allocator();
11pub var allocator_instance = std.heap.GeneralPurposeAllocator(.{}){};
11pub var allocator_instance = b: {
12 if (!builtin.is_test)
13 @compileError("Cannot use testing allocator outside of test block");
14 break :b std.heap.GeneralPurposeAllocator(.{}){};
15};
1216
1317pub const failing_allocator = failing_allocator_instance.allocator();
1418pub var failing_allocator_instance = FailingAllocator.init(base_allocator_instance.allocator(), 0);
test/cli.zig+3-1
......@@ -8,7 +8,9 @@ const ChildProcess = std.ChildProcess;
88var a: std.mem.Allocator = undefined;
99
1010pub fn main() !void {
11 var arena = std.heap.ArenaAllocator.init(std.testing.allocator);
11 var gpa = std.heap.GeneralPurposeAllocator(.{}){};
12 defer _ = gpa.deinit();
13 var arena = std.heap.ArenaAllocator.init(gpa.allocator());
1214 defer arena.deinit();
1315
1416 a = arena.allocator();
test/compare_output.zig+9-5
......@@ -291,7 +291,9 @@ pub fn addCases(cases: *tests.CompareOutputContext) void {
291291 \\ stdout.print("before\n", .{}) catch unreachable;
292292 \\ defer stdout.print("defer1\n", .{}) catch unreachable;
293293 \\ defer stdout.print("defer2\n", .{}) catch unreachable;
294 \\ var arena = @import("std").heap.ArenaAllocator.init(@import("std").testing.allocator);
294 \\ var gpa = @import("std").heap.GeneralPurposeAllocator(.{}){};
295 \\ defer _ = gpa.deinit();
296 \\ var arena = @import("std").heap.ArenaAllocator.init(gpa.allocator());
295297 \\ defer arena.deinit();
296298 \\ var args_it = @import("std").process.argsWithAllocator(arena.allocator()) catch unreachable;
297299 \\ if (args_it.skip() and !args_it.skip()) return;
......@@ -357,10 +359,11 @@ pub fn addCases(cases: *tests.CompareOutputContext) void {
357359 \\const std = @import("std");
358360 \\const io = std.io;
359361 \\const os = std.os;
360 \\const allocator = std.testing.allocator;
361362 \\
362363 \\pub fn main() !void {
363 \\ var arena = std.heap.ArenaAllocator.init(std.testing.allocator);
364 \\ var gpa = std.heap.GeneralPurposeAllocator(.{}){};
365 \\ defer _ = gpa.deinit();
366 \\ var arena = std.heap.ArenaAllocator.init(gpa.allocator());
364367 \\ defer arena.deinit();
365368 \\ var args_it = try std.process.argsWithAllocator(arena.allocator());
366369 \\ const stdout = io.getStdOut().writer();
......@@ -397,10 +400,11 @@ pub fn addCases(cases: *tests.CompareOutputContext) void {
397400 \\const std = @import("std");
398401 \\const io = std.io;
399402 \\const os = std.os;
400 \\const allocator = std.testing.allocator;
401403 \\
402404 \\pub fn main() !void {
403 \\ var arena = std.heap.ArenaAllocator.init(std.testing.allocator);
405 \\ var gpa = std.heap.GeneralPurposeAllocator(.{}){};
406 \\ defer _ = gpa.deinit();
407 \\ var arena = std.heap.ArenaAllocator.init(gpa.allocator());
404408 \\ defer arena.deinit();
405409 \\ var args_it = try std.process.argsWithAllocator(arena.allocator());
406410 \\ const stdout = io.getStdOut().writer();
test/standalone/empty_env/main.zig+3-1
......@@ -1,6 +1,8 @@
11const std = @import("std");
22
33pub fn main() !void {
4 const env_map = std.process.getEnvMap(std.testing.allocator) catch @panic("unable to get env map");
4 var gpa = std.heap.GeneralPurposeAllocator(.{}){};
5 defer _ = gpa.deinit();
6 const env_map = std.process.getEnvMap(gpa.allocator()) catch @panic("unable to get env map");
57 try std.testing.expect(env_map.count() == 0);
68}
test/standalone/load_dynamic_library/main.zig+4-2
......@@ -1,8 +1,10 @@
11const std = @import("std");
22
33pub fn main() !void {
4 const args = try std.process.argsAlloc(std.testing.allocator);
5 defer std.process.argsFree(std.testing.allocator, args);
4 var gpa = std.heap.GeneralPurposeAllocator(.{}){};
5 defer _ = gpa.deinit();
6 const args = try std.process.argsAlloc(gpa.allocator());
7 defer std.process.argsFree(gpa.allocator(), args);
68
79 const dynlib_name = args[1];
810