aboutsummaryrefslogtreecommitdiff
path: root/std/special/bootstrap.zig
diff options
context:
space:
mode:
authorAndrew Kelley <superjoe30@gmail.com>2018-10-09 12:33:48 -0400
committerAndrew Kelley <superjoe30@gmail.com>2018-10-09 13:16:50 -0400
commit84690ee05ecb1ee03a98c8bb62ae70e88daf23cd (patch)
tree6f768e1c4c9b980a53671161e319fa873247a37a /std/special/bootstrap.zig
parent6b93495792678bd00a6205967bb2704a9a35e9c7 (diff)
downloadzig-84690ee05ecb1ee03a98c8bb62ae70e88daf23cd.tar.gz
zig-84690ee05ecb1ee03a98c8bb62ae70e88daf23cd.zip
std/special/bootstrap: inline some functions to improve stack traces
Diffstat (limited to 'std/special/bootstrap.zig')
-rw-r--r--std/special/bootstrap.zig8
1 files changed, 6 insertions, 2 deletions
diff --git a/std/special/bootstrap.zig b/std/special/bootstrap.zig
index feaa04332b..53c646abdc 100644
--- a/std/special/bootstrap.zig
+++ b/std/special/bootstrap.zig
@@ -66,7 +66,9 @@ fn posixCallMainAndExit() noreturn {
std.os.posix.exit(callMainWithArgs(argc, argv, envp));
}
-fn callMainWithArgs(argc: usize, argv: [*][*]u8, envp: [][*]u8) u8 {
+// This is marked inline because for some reason LLVM in release mode fails to inline it,
+// and we want fewer call frames in stack traces.
+inline fn callMainWithArgs(argc: usize, argv: [*][*]u8, envp: [][*]u8) u8 {
std.os.ArgIteratorPosix.raw = argv[0..argc];
std.os.posix_environ_raw = envp;
return callMain();
@@ -79,7 +81,9 @@ extern fn main(c_argc: i32, c_argv: [*][*]u8, c_envp: [*]?[*]u8) i32 {
return callMainWithArgs(@intCast(usize, c_argc), c_argv, envp);
}
-fn callMain() u8 {
+// This is marked inline because for some reason LLVM in release mode fails to inline it,
+// and we want fewer call frames in stack traces.
+inline fn callMain() u8 {
switch (@typeId(@typeOf(root.main).ReturnType)) {
builtin.TypeId.NoReturn => {
root.main();