From 84690ee05ecb1ee03a98c8bb62ae70e88daf23cd Mon Sep 17 00:00:00 2001 From: Andrew Kelley Date: Tue, 9 Oct 2018 12:33:48 -0400 Subject: std/special/bootstrap: inline some functions to improve stack traces --- std/special/bootstrap.zig | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) (limited to 'std') 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(); -- cgit v1.2.3