Enables disabled error trace test on Windows

This commit is contained in:
Mason Remaley
2026-04-10 22:38:32 -07:00
parent f6a3a0ca72
commit 9edbf00ddf
2 changed files with 54 additions and 45 deletions
+49 -38
View File
@@ -452,26 +452,37 @@ pub fn addCases(cases: *@import("tests.zig").ErrorTracesContext, os: std.Target.
},
});
// TODO: the standard library has a bug in PDB parsing where given an address corresponding
// to an inline call, the frame we see will be for the *caller*, not the *callee*. As a
// result this test gives bogus results on Windows right now.
// This is a part of https://codeberg.org/ziglang/zig/issues/30847.
if (os != .windows) {
cases.addCase(.{
.name = "trace through inline call",
.source =
\\pub fn main() !void {
\\ try foo();
\\}
\\inline fn foo() !void {
\\ try bar();
\\}
\\fn bar() !void {
cases.addCase(.{
.name = "trace through inline call",
.source =
\\pub fn main() !void {
\\ try foo();
\\}
\\inline fn foo() !void {
\\ try bar();
\\}
\\fn bar() !void {
\\ return error.ThisIsSoSad;
\\}
,
.expect_error = "ThisIsSoSad",
.expect_trace =
switch (os) {
// LLVM doesn't emit column info in the binary annotations for inlinee callees in PDBs,
// so our expected result is slightly different for Windows than on other operating
// systems.
.windows =>
\\source.zig:8:5: [address] in bar
\\ return error.ThisIsSoSad;
\\}
\\ ^
\\source.zig:5: [address] in foo
\\ try bar();
\\
\\source.zig:2:5: [address] in main
\\ try foo();
\\ ^
,
.expect_error = "ThisIsSoSad",
.expect_trace =
else =>
\\source.zig:8:5: [address] in bar
\\ return error.ThisIsSoSad;
\\ ^
@@ -482,24 +493,24 @@ pub fn addCases(cases: *@import("tests.zig").ErrorTracesContext, os: std.Target.
\\ try foo();
\\ ^
,
.disable_trace_optimized = &.{
.{ .x86_64, .freebsd },
.{ .x86_64, .netbsd },
.{ .x86_64, .linux },
.{ .x86, .linux },
.{ .aarch64, .freebsd },
.{ .aarch64, .netbsd },
.{ .aarch64, .linux },
.{ .loongarch64, .linux },
.{ .powerpc64le, .linux },
.{ .riscv64, .linux },
.{ .s390x, .linux },
.{ .x86_64, .openbsd },
.{ .x86_64, .windows },
.{ .x86, .windows },
.{ .x86_64, .macos },
.{ .aarch64, .macos },
},
});
}
},
.disable_trace_optimized = &.{
.{ .x86_64, .freebsd },
.{ .x86_64, .netbsd },
.{ .x86_64, .linux },
.{ .x86, .linux },
.{ .aarch64, .freebsd },
.{ .aarch64, .netbsd },
.{ .aarch64, .linux },
.{ .loongarch64, .linux },
.{ .powerpc64le, .linux },
.{ .riscv64, .linux },
.{ .s390x, .linux },
.{ .x86_64, .openbsd },
.{ .x86_64, .windows },
.{ .x86, .windows },
.{ .x86_64, .macos },
.{ .aarch64, .macos },
},
});
}
+5 -7
View File
@@ -238,9 +238,8 @@ pub fn addCases(cases: *@import("tests.zig").StackTracesContext, os: std.Target.
.unwind = .any,
.expect_panic = true,
.expect = switch (os) {
// We use the information present in PDBs to resolve inlines when dumping stack traces
// on Windows. Column numbers are missing as LLVM doesn't emit column info in the PDBs
// for inline functions.
// LLVM doesn't emit column info in the binary annotations for inlinee callees in PDBs,
// so the first location has only a row.
.windows =>
\\panic: oh no
\\source.zig:5: [address] in foo
@@ -251,7 +250,8 @@ pub fn addCases(cases: *@import("tests.zig").StackTracesContext, os: std.Target.
\\ ^
\\
,
// We don't yet resolve inlines on other platforms.
// On all other platforms, we resolve the innermost inline callee but we don't yet
// resolve the inline callers.
else =>
\\panic: oh no
\\source.zig:5:5: [address] in foo
@@ -294,9 +294,8 @@ pub fn addCases(cases: *@import("tests.zig").StackTracesContext, os: std.Target.
,
.unwind = .any,
.expect_panic = true,
// This switch serves a similar purpose as in "inline panic".
.expect = switch (os) {
// Similarly to "inline panic", we can resolve inlines from PDBs but LLVM doesn't emit
// column info for them.
.windows =>
\\panic: oh no
\\source.zig:11: [address] in baz
@@ -313,7 +312,6 @@ pub fn addCases(cases: *@import("tests.zig").StackTracesContext, os: std.Target.
\\ ^
\\
,
// Similarly to "inline panic", we don't yet resolve inlines on other platforms.
else =>
\\panic: oh no
\\source.zig:11:5: [address] in baz