| ... | @@ -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 | } |
| 68 | | 68 | |
| 69 | fn 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. |
| | 71 | inline 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 | } |
| 81 | | 83 | |
| 82 | fn 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. |
| | 86 | inline 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(); |