authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2018-10-09 12:33:48-04:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2018-10-09 13:16:50-04:00
log84690ee05ecb1ee03a98c8bb62ae70e88daf23cd
tree6f768e1c4c9b980a53671161e319fa873247a37a
parent6b93495792678bd00a6205967bb2704a9a35e9c7
signature Commit is signed but in an unrecognized format.

std/special/bootstrap: inline some functions to improve stack traces


1 files changed, 6 insertions(+), 2 deletions(-)

std/special/bootstrap.zig+6-2
...@@ -66,7 +66,9 @@ fn posixCallMainAndExit() noreturn {...@@ -66,7 +66,9 @@ fn posixCallMainAndExit() noreturn {
66 std.os.posix.exit(callMainWithArgs(argc, argv, envp));66 std.os.posix.exit(callMainWithArgs(argc, argv, envp));
67}67}
6868
69fn callMainWithArgs(argc: usize, argv: [*][*]u8, envp: [][*]u8) u8 {69// This is marked inline because for some reason LLVM in release mode fails to inline it,
70// and we want fewer call frames in stack traces.
71inline fn callMainWithArgs(argc: usize, argv: [*][*]u8, envp: [][*]u8) u8 {
70 std.os.ArgIteratorPosix.raw = argv[0..argc];72 std.os.ArgIteratorPosix.raw = argv[0..argc];
71 std.os.posix_environ_raw = envp;73 std.os.posix_environ_raw = envp;
72 return callMain();74 return callMain();
...@@ -79,7 +81,9 @@ extern fn main(c_argc: i32, c_argv: [*][*]u8, c_envp: [*]?[*]u8) i32 {...@@ -79,7 +81,9 @@ extern fn main(c_argc: i32, c_argv: [*][*]u8, c_envp: [*]?[*]u8) i32 {
79 return callMainWithArgs(@intCast(usize, c_argc), c_argv, envp);81 return callMainWithArgs(@intCast(usize, c_argc), c_argv, envp);
80}82}
8183
82fn callMain() u8 {84// This is marked inline because for some reason LLVM in release mode fails to inline it,
85// and we want fewer call frames in stack traces.
86inline fn callMain() u8 {
83 switch (@typeId(@typeOf(root.main).ReturnType)) {87 switch (@typeId(@typeOf(root.main).ReturnType)) {
84 builtin.TypeId.NoReturn => {88 builtin.TypeId.NoReturn => {
85 root.main();89 root.main();