Commit 0b4a3ec950

Ali Chraghi <63465728+alichraghi@users.noreply.github.com>
2022-05-26 11:49:05
std: compile error on invalid testing allocator usage
1 parent dea437e
Changed files (5)
lib
test
standalone
empty_env
load_dynamic_library
lib/std/testing.zig
@@ -8,7 +8,11 @@ pub const FailingAllocator = @import("testing/failing_allocator.zig").FailingAll
 
 /// This should only be used in temporary test programs.
 pub const allocator = allocator_instance.allocator();
-pub var allocator_instance = std.heap.GeneralPurposeAllocator(.{}){};
+pub var allocator_instance = b: {
+    if (!builtin.is_test)
+        @compileError("Cannot use testing allocator outside of test block");
+    break :b std.heap.GeneralPurposeAllocator(.{}){};
+};
 
 pub const failing_allocator = failing_allocator_instance.allocator();
 pub var failing_allocator_instance = FailingAllocator.init(base_allocator_instance.allocator(), 0);
test/standalone/empty_env/main.zig
@@ -1,6 +1,8 @@
 const std = @import("std");
 
 pub fn main() !void {
-    const env_map = std.process.getEnvMap(std.testing.allocator) catch @panic("unable to get env map");
+    var gpa = std.heap.GeneralPurposeAllocator(.{}){};
+    defer _ = gpa.deinit();
+    const env_map = std.process.getEnvMap(gpa.allocator()) catch @panic("unable to get env map");
     try std.testing.expect(env_map.count() == 0);
 }
test/standalone/load_dynamic_library/main.zig
@@ -1,8 +1,10 @@
 const std = @import("std");
 
 pub fn main() !void {
-    const args = try std.process.argsAlloc(std.testing.allocator);
-    defer std.process.argsFree(std.testing.allocator, args);
+    var gpa = std.heap.GeneralPurposeAllocator(.{}){};
+    defer _ = gpa.deinit();
+    const args = try std.process.argsAlloc(gpa.allocator());
+    defer std.process.argsFree(gpa.allocator(), args);
 
     const dynlib_name = args[1];
 
test/cli.zig
@@ -8,7 +8,9 @@ const ChildProcess = std.ChildProcess;
 var a: std.mem.Allocator = undefined;
 
 pub fn main() !void {
-    var arena = std.heap.ArenaAllocator.init(std.testing.allocator);
+    var gpa = std.heap.GeneralPurposeAllocator(.{}){};
+    defer _ = gpa.deinit();
+    var arena = std.heap.ArenaAllocator.init(gpa.allocator());
     defer arena.deinit();
 
     a = arena.allocator();
test/compare_output.zig
@@ -291,7 +291,9 @@ pub fn addCases(cases: *tests.CompareOutputContext) void {
         \\    stdout.print("before\n", .{}) catch unreachable;
         \\    defer stdout.print("defer1\n", .{}) catch unreachable;
         \\    defer stdout.print("defer2\n", .{}) catch unreachable;
-        \\    var arena = @import("std").heap.ArenaAllocator.init(@import("std").testing.allocator);
+        \\    var gpa = @import("std").heap.GeneralPurposeAllocator(.{}){};
+        \\    defer _ = gpa.deinit();
+        \\    var arena = @import("std").heap.ArenaAllocator.init(gpa.allocator());
         \\    defer arena.deinit();
         \\    var args_it = @import("std").process.argsWithAllocator(arena.allocator()) catch unreachable;
         \\    if (args_it.skip() and !args_it.skip()) return;
@@ -357,10 +359,11 @@ pub fn addCases(cases: *tests.CompareOutputContext) void {
             \\const std = @import("std");
             \\const io = std.io;
             \\const os = std.os;
-            \\const allocator = std.testing.allocator;
             \\
             \\pub fn main() !void {
-            \\    var arena = std.heap.ArenaAllocator.init(std.testing.allocator);
+            \\    var gpa = std.heap.GeneralPurposeAllocator(.{}){};
+            \\    defer _ = gpa.deinit();
+            \\    var arena = std.heap.ArenaAllocator.init(gpa.allocator());
             \\    defer arena.deinit();
             \\    var args_it = try std.process.argsWithAllocator(arena.allocator());
             \\    const stdout = io.getStdOut().writer();
@@ -397,10 +400,11 @@ pub fn addCases(cases: *tests.CompareOutputContext) void {
             \\const std = @import("std");
             \\const io = std.io;
             \\const os = std.os;
-            \\const allocator = std.testing.allocator;
             \\
             \\pub fn main() !void {
-            \\    var arena = std.heap.ArenaAllocator.init(std.testing.allocator);
+            \\    var gpa = std.heap.GeneralPurposeAllocator(.{}){};
+            \\    defer _ = gpa.deinit();
+            \\    var arena = std.heap.ArenaAllocator.init(gpa.allocator());
             \\    defer arena.deinit();
             \\    var args_it = try std.process.argsWithAllocator(arena.allocator());
             \\    const stdout = io.getStdOut().writer();