std: compile error on invalid testing allocator usage

This commit is contained in:
Ali Chraghi 2022-05-26 14:19:05 +04:30 committed by Veikka Tuominen
parent dea437edfb
commit 0b4a3ec950
5 changed files with 24 additions and 10 deletions

View File

@ -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);

View File

@ -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();

View File

@ -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();

View File

@ -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);
}

View File

@ -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];