update stack trace tests to account for new defaults

ReleaseSafe optimization mode now defaults error tracing to false.
This commit is contained in:
Andrew Kelley 2023-12-26 18:26:23 -07:00
parent beed47e8c3
commit c8c32a0569
2 changed files with 59 additions and 66 deletions

View file

@ -5,44 +5,33 @@ test_filter: ?[]const u8,
optimize_modes: []const OptimizeMode, optimize_modes: []const OptimizeMode,
check_exe: *std.Build.Step.Compile, check_exe: *std.Build.Step.Compile,
const Expect = [@typeInfo(OptimizeMode).Enum.fields.len][]const u8; const Config = struct {
name: []const u8,
source: []const u8,
Debug: ?PerMode = null,
ReleaseSmall: ?PerMode = null,
ReleaseSafe: ?PerMode = null,
ReleaseFast: ?PerMode = null,
pub fn addCase(self: *StackTrace, config: anytype) void { const PerMode = struct {
if (@hasField(@TypeOf(config), "exclude")) { expect: []const u8,
if (config.exclude.exclude()) return; exclude_os: []const std.Target.Os.Tag = &.{},
} error_tracing: ?bool = null,
if (@hasField(@TypeOf(config), "exclude_arch")) { };
const exclude_arch: []const std.Target.Cpu.Arch = &config.exclude_arch; };
for (exclude_arch) |arch| if (arch == builtin.cpu.arch) return;
} pub fn addCase(self: *StackTrace, config: Config) void {
if (@hasField(@TypeOf(config), "exclude_os")) { if (config.Debug) |per_mode|
const exclude_os: []const std.Target.Os.Tag = &config.exclude_os; self.addExpect(config.name, config.source, .Debug, per_mode);
for (exclude_os) |os| if (os == builtin.os.tag) return;
} if (config.ReleaseSmall) |per_mode|
for (self.optimize_modes) |optimize_mode| { self.addExpect(config.name, config.source, .ReleaseSmall, per_mode);
switch (optimize_mode) {
.Debug => { if (config.ReleaseFast) |per_mode|
if (@hasField(@TypeOf(config), "Debug")) { self.addExpect(config.name, config.source, .ReleaseFast, per_mode);
self.addExpect(config.name, config.source, optimize_mode, config.Debug);
} if (config.ReleaseSafe) |per_mode|
}, self.addExpect(config.name, config.source, .ReleaseSafe, per_mode);
.ReleaseSafe => {
if (@hasField(@TypeOf(config), "ReleaseSafe")) {
self.addExpect(config.name, config.source, optimize_mode, config.ReleaseSafe);
}
},
.ReleaseFast => {
if (@hasField(@TypeOf(config), "ReleaseFast")) {
self.addExpect(config.name, config.source, optimize_mode, config.ReleaseFast);
}
},
.ReleaseSmall => {
if (@hasField(@TypeOf(config), "ReleaseSmall")) {
self.addExpect(config.name, config.source, optimize_mode, config.ReleaseSmall);
}
},
}
}
} }
fn addExpect( fn addExpect(
@ -50,19 +39,9 @@ fn addExpect(
name: []const u8, name: []const u8,
source: []const u8, source: []const u8,
optimize_mode: OptimizeMode, optimize_mode: OptimizeMode,
mode_config: anytype, mode_config: Config.PerMode,
) void { ) void {
if (@hasField(@TypeOf(mode_config), "exclude")) { for (mode_config.exclude_os) |tag| if (tag == builtin.os.tag) return;
if (mode_config.exclude.exclude()) return;
}
if (@hasField(@TypeOf(mode_config), "exclude_arch")) {
const exclude_arch: []const std.Target.Cpu.Arch = &mode_config.exclude_arch;
for (exclude_arch) |arch| if (arch == builtin.cpu.arch) return;
}
if (@hasField(@TypeOf(mode_config), "exclude_os")) {
const exclude_os: []const std.Target.Os.Tag = &mode_config.exclude_os;
for (exclude_os) |os| if (os == builtin.os.tag) return;
}
const b = self.b; const b = self.b;
const annotated_case_name = fmt.allocPrint(b.allocator, "check {s} ({s})", .{ const annotated_case_name = fmt.allocPrint(b.allocator, "check {s} ({s})", .{
@ -78,6 +57,7 @@ fn addExpect(
.root_source_file = write_src.files.items[0].getPath(), .root_source_file = write_src.files.items[0].getPath(),
.optimize = optimize_mode, .optimize = optimize_mode,
.target = b.host, .target = b.host,
.error_tracing = mode_config.error_tracing,
}); });
const run = b.addRunArtifact(exe); const run = b.addRunArtifact(exe);

View file

@ -20,7 +20,7 @@ pub fn addCases(cases: *tests.StackTracesContext) void {
, ,
}, },
.ReleaseSafe = .{ .ReleaseSafe = .{
.exclude_os = .{ .exclude_os = &.{
.windows, // TODO .windows, // TODO
.linux, // defeated by aggressive inlining .linux, // defeated by aggressive inlining
}, },
@ -31,6 +31,7 @@ pub fn addCases(cases: *tests.StackTracesContext) void {
\\ ^ \\ ^
\\ \\
, ,
.error_tracing = true,
}, },
.ReleaseFast = .{ .ReleaseFast = .{
.expect = .expect =
@ -70,7 +71,7 @@ pub fn addCases(cases: *tests.StackTracesContext) void {
, ,
}, },
.ReleaseSafe = .{ .ReleaseSafe = .{
.exclude_os = .{ .exclude_os = &.{
.windows, // TODO .windows, // TODO
}, },
.expect = .expect =
@ -83,6 +84,7 @@ pub fn addCases(cases: *tests.StackTracesContext) void {
\\ ^ \\ ^
\\ \\
, ,
.error_tracing = true,
}, },
.ReleaseFast = .{ .ReleaseFast = .{
.expect = .expect =
@ -125,7 +127,7 @@ pub fn addCases(cases: *tests.StackTracesContext) void {
, ,
}, },
.ReleaseSafe = .{ .ReleaseSafe = .{
.exclude_os = .{ .exclude_os = &.{
.windows, // TODO .windows, // TODO
.linux, // defeated by aggressive inlining .linux, // defeated by aggressive inlining
}, },
@ -136,6 +138,7 @@ pub fn addCases(cases: *tests.StackTracesContext) void {
\\ ^ \\ ^
\\ \\
, ,
.error_tracing = true,
}, },
.ReleaseFast = .{ .ReleaseFast = .{
.expect = .expect =
@ -176,7 +179,7 @@ pub fn addCases(cases: *tests.StackTracesContext) void {
, ,
}, },
.ReleaseSafe = .{ .ReleaseSafe = .{
.exclude_os = .{ .exclude_os = &.{
.windows, // TODO .windows, // TODO
.linux, // defeated by aggressive inlining .linux, // defeated by aggressive inlining
}, },
@ -187,6 +190,7 @@ pub fn addCases(cases: *tests.StackTracesContext) void {
\\ ^ \\ ^
\\ \\
, ,
.error_tracing = true,
}, },
.ReleaseFast = .{ .ReleaseFast = .{
.expect = .expect =
@ -230,7 +234,7 @@ pub fn addCases(cases: *tests.StackTracesContext) void {
, ,
}, },
.ReleaseSafe = .{ .ReleaseSafe = .{
.exclude_os = .{ .exclude_os = &.{
.windows, // TODO .windows, // TODO
.linux, // defeated by aggressive inlining .linux, // defeated by aggressive inlining
}, },
@ -244,6 +248,7 @@ pub fn addCases(cases: *tests.StackTracesContext) void {
\\ ^ \\ ^
\\ \\
, ,
.error_tracing = true,
}, },
.ReleaseFast = .{ .ReleaseFast = .{
.expect = .expect =
@ -286,7 +291,7 @@ pub fn addCases(cases: *tests.StackTracesContext) void {
, ,
}, },
.ReleaseSafe = .{ .ReleaseSafe = .{
.exclude_os = .{ .exclude_os = &.{
.windows, // TODO .windows, // TODO
.linux, // defeated by aggressive inlining .linux, // defeated by aggressive inlining
}, },
@ -297,6 +302,7 @@ pub fn addCases(cases: *tests.StackTracesContext) void {
\\ ^ \\ ^
\\ \\
, ,
.error_tracing = true,
}, },
.ReleaseFast = .{ .ReleaseFast = .{
.expect = .expect =
@ -336,7 +342,7 @@ pub fn addCases(cases: *tests.StackTracesContext) void {
, ,
}, },
.ReleaseSafe = .{ .ReleaseSafe = .{
.exclude_os = .{ .exclude_os = &.{
.windows, // TODO .windows, // TODO
.linux, // defeated by aggressive inlining .linux, // defeated by aggressive inlining
}, },
@ -350,6 +356,7 @@ pub fn addCases(cases: *tests.StackTracesContext) void {
\\ ^ \\ ^
\\ \\
, ,
.error_tracing = true,
}, },
.ReleaseFast = .{ .ReleaseFast = .{
.expect = .expect =
@ -391,7 +398,7 @@ pub fn addCases(cases: *tests.StackTracesContext) void {
, ,
}, },
.ReleaseSafe = .{ .ReleaseSafe = .{
.exclude_os = .{ .exclude_os = &.{
.windows, // TODO .windows, // TODO
.linux, // defeated by aggressive inlining .linux, // defeated by aggressive inlining
}, },
@ -402,6 +409,7 @@ pub fn addCases(cases: *tests.StackTracesContext) void {
\\ ^ \\ ^
\\ \\
, ,
.error_tracing = true,
}, },
.ReleaseFast = .{ .ReleaseFast = .{
.expect = .expect =
@ -461,7 +469,7 @@ pub fn addCases(cases: *tests.StackTracesContext) void {
, ,
}, },
.ReleaseSafe = .{ .ReleaseSafe = .{
.exclude_os = .{ .exclude_os = &.{
.windows, // TODO .windows, // TODO
.linux, // defeated by aggressive inlining .linux, // defeated by aggressive inlining
}, },
@ -478,6 +486,7 @@ pub fn addCases(cases: *tests.StackTracesContext) void {
\\ ^ \\ ^
\\ \\
, ,
.error_tracing = true,
}, },
.ReleaseFast = .{ .ReleaseFast = .{
.expect = .expect =
@ -531,7 +540,7 @@ pub fn addCases(cases: *tests.StackTracesContext) void {
, ,
}, },
.ReleaseSafe = .{ .ReleaseSafe = .{
.exclude_os = .{ .exclude_os = &.{
.windows, // TODO .windows, // TODO
}, },
.expect = .expect =
@ -547,6 +556,7 @@ pub fn addCases(cases: *tests.StackTracesContext) void {
\\ ^ \\ ^
\\ \\
, ,
.error_tracing = true,
}, },
.ReleaseFast = .{ .ReleaseFast = .{
.expect = .expect =
@ -595,7 +605,7 @@ pub fn addCases(cases: *tests.StackTracesContext) void {
, ,
}, },
.ReleaseSafe = .{ .ReleaseSafe = .{
.exclude_os = .{ .exclude_os = &.{
.windows, // TODO .windows, // TODO
}, },
.expect = .expect =
@ -611,6 +621,7 @@ pub fn addCases(cases: *tests.StackTracesContext) void {
\\ ^ \\ ^
\\ \\
, ,
.error_tracing = true,
}, },
.ReleaseFast = .{ .ReleaseFast = .{
.expect = .expect =
@ -659,7 +670,7 @@ pub fn addCases(cases: *tests.StackTracesContext) void {
, ,
}, },
.ReleaseSafe = .{ .ReleaseSafe = .{
.exclude_os = .{ .exclude_os = &.{
.windows, // TODO .windows, // TODO
}, },
.expect = .expect =
@ -675,6 +686,7 @@ pub fn addCases(cases: *tests.StackTracesContext) void {
\\ ^ \\ ^
\\ \\
, ,
.error_tracing = true,
}, },
.ReleaseFast = .{ .ReleaseFast = .{
.expect = .expect =
@ -728,7 +740,7 @@ pub fn addCases(cases: *tests.StackTracesContext) void {
, ,
}, },
.ReleaseSafe = .{ .ReleaseSafe = .{
.exclude_os = .{ .exclude_os = &.{
.windows, // TODO .windows, // TODO
}, },
.expect = .expect =
@ -747,6 +759,7 @@ pub fn addCases(cases: *tests.StackTracesContext) void {
\\ ^ \\ ^
\\ \\
, ,
.error_tracing = true,
}, },
.ReleaseFast = .{ .ReleaseFast = .{
.expect = .expect =
@ -763,10 +776,6 @@ pub fn addCases(cases: *tests.StackTracesContext) void {
}); });
cases.addCase(.{ cases.addCase(.{
.exclude_os = .{
.openbsd, // integer overflow
.windows, // TODO intermittent failures
},
.name = "dumpCurrentStackTrace", .name = "dumpCurrentStackTrace",
.source = .source =
\\const std = @import("std"); \\const std = @import("std");
@ -783,6 +792,10 @@ pub fn addCases(cases: *tests.StackTracesContext) void {
\\} \\}
, ,
.Debug = .{ .Debug = .{
.exclude_os = &.{
.openbsd, // integer overflow
.windows, // TODO intermittent failures
},
.expect = .expect =
\\source.zig:7:8: [address] in foo (test) \\source.zig:7:8: [address] in foo (test)
\\ bar(); \\ bar();