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...@@ -8,7 +8,11 @@ pub const FailingAllocator = @import("testing/failing_allocator.zig").FailingAll
88
9/// This should only be used in temporary test programs.9/// This should only be used in temporary test programs.
10pub const allocator = allocator_instance.allocator();10pub 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
13pub const failing_allocator = failing_allocator_instance.allocator();17pub const failing_allocator = failing_allocator_instance.allocator();
14pub var failing_allocator_instance = FailingAllocator.init(base_allocator_instance.allocator(), 0);18pub var failing_allocator_instance = FailingAllocator.init(base_allocator_instance.allocator(), 0);
test/cli.zig+3-1
...@@ -8,7 +8,9 @@ const ChildProcess = std.ChildProcess;...@@ -8,7 +8,9 @@ const ChildProcess = std.ChildProcess;
8var a: std.mem.Allocator = undefined;8var a: std.mem.Allocator = undefined;
99
10pub fn main() !void {10pub 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());
12 defer arena.deinit();14 defer arena.deinit();
1315
14 a = arena.allocator();16 a = arena.allocator();
test/compare_output.zig+9-5
...@@ -291,7 +291,9 @@ pub fn addCases(cases: *tests.CompareOutputContext) void {...@@ -291,7 +291,9 @@ pub fn addCases(cases: *tests.CompareOutputContext) void {
291 \\ stdout.print("before\n", .{}) catch unreachable;291 \\ stdout.print("before\n", .{}) catch unreachable;
292 \\ defer stdout.print("defer1\n", .{}) catch unreachable;292 \\ defer stdout.print("defer1\n", .{}) catch unreachable;
293 \\ defer stdout.print("defer2\n", .{}) catch unreachable;293 \\ 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());
295 \\ defer arena.deinit();297 \\ defer arena.deinit();
296 \\ var args_it = @import("std").process.argsWithAllocator(arena.allocator()) catch unreachable;298 \\ var args_it = @import("std").process.argsWithAllocator(arena.allocator()) catch unreachable;
297 \\ if (args_it.skip() and !args_it.skip()) return;299 \\ if (args_it.skip() and !args_it.skip()) return;
...@@ -357,10 +359,11 @@ pub fn addCases(cases: *tests.CompareOutputContext) void {...@@ -357,10 +359,11 @@ pub fn addCases(cases: *tests.CompareOutputContext) void {
357 \\const std = @import("std");359 \\const std = @import("std");
358 \\const io = std.io;360 \\const io = std.io;
359 \\const os = std.os;361 \\const os = std.os;
360 \\const allocator = std.testing.allocator;
361 \\362 \\
362 \\pub fn main() !void {363 \\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());
364 \\ defer arena.deinit();367 \\ defer arena.deinit();
365 \\ var args_it = try std.process.argsWithAllocator(arena.allocator());368 \\ var args_it = try std.process.argsWithAllocator(arena.allocator());
366 \\ const stdout = io.getStdOut().writer();369 \\ const stdout = io.getStdOut().writer();
...@@ -397,10 +400,11 @@ pub fn addCases(cases: *tests.CompareOutputContext) void {...@@ -397,10 +400,11 @@ pub fn addCases(cases: *tests.CompareOutputContext) void {
397 \\const std = @import("std");400 \\const std = @import("std");
398 \\const io = std.io;401 \\const io = std.io;
399 \\const os = std.os;402 \\const os = std.os;
400 \\const allocator = std.testing.allocator;
401 \\403 \\
402 \\pub fn main() !void {404 \\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());
404 \\ defer arena.deinit();408 \\ defer arena.deinit();
405 \\ var args_it = try std.process.argsWithAllocator(arena.allocator());409 \\ var args_it = try std.process.argsWithAllocator(arena.allocator());
406 \\ const stdout = io.getStdOut().writer();410 \\ const stdout = io.getStdOut().writer();
test/standalone/empty_env/main.zig+3-1
...@@ -1,6 +1,8 @@...@@ -1,6 +1,8 @@
1const std = @import("std");1const std = @import("std");
22
3pub fn main() !void {3pub 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");
5 try std.testing.expect(env_map.count() == 0);7 try std.testing.expect(env_map.count() == 0);
6}8}
test/standalone/load_dynamic_library/main.zig+4-2
...@@ -1,8 +1,10 @@...@@ -1,8 +1,10 @@
1const std = @import("std");1const std = @import("std");
22
3pub fn main() !void {3pub fn main() !void {
4 const args = try std.process.argsAlloc(std.testing.allocator);4 var gpa = std.heap.GeneralPurposeAllocator(.{}){};
5 defer std.process.argsFree(std.testing.allocator, args);5 defer _ = gpa.deinit();
6 const args = try std.process.argsAlloc(gpa.allocator());
7 defer std.process.argsFree(gpa.allocator(), args);
68
7 const dynlib_name = args[1];9 const dynlib_name = args[1];
810