Commit dd1f1487e4
src-self-hosted/codegen/c.zig
@@ -24,8 +24,7 @@ fn renderType(file: *C, writer: std.ArrayList(u8).Writer, T: Type, src: usize) !
} else {
switch (T.zigTypeTag()) {
.NoReturn => {
- file.need_noreturn = true;
- try writer.writeAll("noreturn void");
+ try writer.writeAll("zig_noreturn void");
},
.Void => try writer.writeAll("void"),
.Int => {
src-self-hosted/cbe.h
@@ -1,10 +1,10 @@
#if __STDC_VERSION__ >= 201112L
-#define noreturn _Noreturn
+#define zig_noreturn _Noreturn
#elif __GNUC__
-#define noreturn __attribute__ ((noreturn))
+#define zig_noreturn __attribute__ ((noreturn))
#elif _MSC_VER
-#define noreturn __declspec(noreturn)
+#define zig_noreturn __declspec(noreturn)
#else
-#define noreturn
+#define zig_noreturn
#endif
src-self-hosted/link.zig
@@ -202,7 +202,6 @@ pub const File = struct {
called: std.StringHashMap(void),
need_stddef: bool = false,
need_stdint: bool = false,
- need_noreturn: bool = false,
error_msg: *Module.ErrorMsg = undefined,
pub fn openPath(allocator: *Allocator, dir: fs.Dir, sub_path: []const u8, options: Options) !*File {
test/stage2/cbe.zig
@@ -12,7 +12,7 @@ pub fn addCases(ctx: *TestContext) !void {
ctx.c("empty start function", linux_x64,
\\export fn _start() noreturn {}
,
- \\noreturn void _start(void) {}
+ \\zig_noreturn void _start(void) {}
\\
);
ctx.c("less empty start function", linux_x64,
@@ -22,19 +22,19 @@ pub fn addCases(ctx: *TestContext) !void {
\\ main();
\\}
,
- \\noreturn void main(void);
+ \\zig_noreturn void main(void);
\\
- \\noreturn void _start(void) {
+ \\zig_noreturn void _start(void) {
\\ main();
\\}
\\
- \\noreturn void main(void) {}
+ \\zig_noreturn void main(void) {}
\\
);
// TODO: implement return values
// TODO: figure out a way to prevent asm constants from being generated
ctx.c("inline asm", linux_x64,
- \\fn exitGood() void {
+ \\fn exitGood() noreturn {
\\ asm volatile ("syscall"
\\ :
\\ : [number] "{rax}" (231),
@@ -48,21 +48,20 @@ pub fn addCases(ctx: *TestContext) !void {
,
\\#include <stddef.h>
\\
- \\void exitGood(void);
+ \\zig_noreturn void exitGood(void);
\\
\\const char *const exitGood__anon_0 = "{rax}";
\\const char *const exitGood__anon_1 = "{rdi}";
\\const char *const exitGood__anon_2 = "syscall";
\\
- \\noreturn void _start(void) {
+ \\zig_noreturn void _start(void) {
\\ exitGood();
\\}
\\
- \\void exitGood(void) {
+ \\zig_noreturn void exitGood(void) {
\\ register size_t rax_constant __asm__("rax") = 231;
\\ register size_t rdi_constant __asm__("rdi") = 0;
\\ __asm volatile ("syscall" :: ""(rax_constant), ""(rdi_constant));
- \\ return;
\\}
\\
);