| ... | @@ -2,7 +2,7 @@ const std = @import("std"); | ... | @@ -2,7 +2,7 @@ const std = @import("std"); |
| 2 | const debug = std.debug; | 2 | const debug = std.debug; |
| 3 | const testing = std.testing; | 3 | const testing = std.testing; |
| 4 | | 4 | |
| 5 | noinline fn frame4(expected: *[4]usize, unwound: *[4]usize) void { | 5 | noinline fn frame4(expected: *[5]usize, unwound: *[5]usize) void { |
| 6 | expected[0] = @returnAddress(); | 6 | expected[0] = @returnAddress(); |
| 7 | | 7 | |
| 8 | var context: debug.ThreadContext = undefined; | 8 | var context: debug.ThreadContext = undefined; |
| ... | @@ -17,26 +17,27 @@ noinline fn frame4(expected: *[4]usize, unwound: *[4]usize) void { | ... | @@ -17,26 +17,27 @@ noinline fn frame4(expected: *[4]usize, unwound: *[4]usize) void { |
| 17 | } | 17 | } |
| 18 | } | 18 | } |
| 19 | | 19 | |
| 20 | noinline fn frame3(expected: *[4]usize, unwound: *[4]usize) void { | 20 | noinline fn frame3(expected: *[5]usize, unwound: *[5]usize) void { |
| 21 | expected[1] = @returnAddress(); | 21 | expected[1] = @returnAddress(); |
| 22 | frame4(expected, unwound); | 22 | frame4(expected, unwound); |
| 23 | } | 23 | } |
| 24 | | 24 | |
| 25 | fn frame2(expected: *[4]usize, unwound: *[4]usize) callconv(.C) void { | 25 | fn frame2(expected: *[5]usize, unwound: *[5]usize) callconv(.C) void { |
| | 26 | expected[2] = @returnAddress(); |
| 26 | frame3(expected, unwound); | 27 | frame3(expected, unwound); |
| 27 | } | 28 | } |
| 28 | | 29 | |
| 29 | extern fn frame0( | 30 | extern fn frame0( |
| 30 | expected: *[4]usize, | 31 | expected: *[5]usize, |
| 31 | unwound: *[4]usize, | 32 | unwound: *[5]usize, |
| 32 | frame_2: *const fn (expected: *[4]usize, unwound: *[4]usize) callconv(.C) void, | 33 | frame_2: *const fn (expected: *[5]usize, unwound: *[5]usize) callconv(.C) void, |
| 33 | ) void; | 34 | ) void; |
| 34 | | 35 | |
| 35 | pub fn main() !void { | 36 | pub fn main() !void { |
| 36 | if (!std.debug.have_ucontext or !std.debug.have_getcontext) return; | 37 | if (!std.debug.have_ucontext or !std.debug.have_getcontext) return; |
| 37 | | 38 | |
| 38 | var expected: [4]usize = undefined; | 39 | var expected: [5]usize = undefined; |
| 39 | var unwound: [4]usize = undefined; | 40 | var unwound: [5]usize = undefined; |
| 40 | frame0(&expected, &unwound, &frame2); | 41 | frame0(&expected, &unwound, &frame2); |
| 41 | try testing.expectEqual(expected, unwound); | 42 | try testing.expectEqual(expected, unwound); |
| 42 | } | 43 | } |