From dd1f1487e436650f93e05648b5ba879d6832c2a7 Mon Sep 17 00:00:00 2001 From: Noam Preil Date: Sun, 9 Aug 2020 17:21:40 -0400 Subject: [PATCH] CBE: Use zig_noreturn instead of noreturn to avoid namespace conflict --- src-self-hosted/cbe.h | 8 ++++---- src-self-hosted/codegen/c.zig | 3 +-- src-self-hosted/link.zig | 1 - test/stage2/cbe.zig | 17 ++++++++--------- 4 files changed, 13 insertions(+), 16 deletions(-) diff --git a/src-self-hosted/cbe.h b/src-self-hosted/cbe.h index 7d0e48eaae..691aa45725 100644 --- a/src-self-hosted/cbe.h +++ b/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 diff --git a/src-self-hosted/codegen/c.zig b/src-self-hosted/codegen/c.zig index db9d9a1030..39110d03d7 100644 --- a/src-self-hosted/codegen/c.zig +++ b/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 => { diff --git a/src-self-hosted/link.zig b/src-self-hosted/link.zig index 431d510b01..28340a4024 100644 --- a/src-self-hosted/link.zig +++ b/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 { diff --git a/test/stage2/cbe.zig b/test/stage2/cbe.zig index 2c3f0631c8..0529c07e2a 100644 --- a/test/stage2/cbe.zig +++ b/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 \\ - \\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; \\} \\ );