authorgravatar for noam@pixelhero.devNoam Preil <noam@pixelhero.dev> 2020-08-09 17:21:40-04:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2020-08-12 21:58:21-07:00
logdd1f1487e436650f93e05648b5ba879d6832c2a7
tree60f4e89fae80fa4438c0d5389799104d4a402b8a
parentb59e2c1e009e8e2df2de02d61d8f4ef463a652be

CBE: Use zig_noreturn instead of noreturn to avoid namespace conflict


4 files changed, 13 insertions(+), 16 deletions(-)

src-self-hosted/cbe.h+4-4
......@@ -1,10 +1,10 @@
11#if __STDC_VERSION__ >= 201112L
2#define noreturn _Noreturn
2#define zig_noreturn _Noreturn
33#elif __GNUC__
4#define noreturn __attribute__ ((noreturn))
4#define zig_noreturn __attribute__ ((noreturn))
55#elif _MSC_VER
6#define noreturn __declspec(noreturn)
6#define zig_noreturn __declspec(noreturn)
77#else
8#define noreturn
8#define zig_noreturn
99#endif
1010
src-self-hosted/codegen/c.zig+1-2
......@@ -24,8 +24,7 @@ fn renderType(file: *C, writer: std.ArrayList(u8).Writer, T: Type, src: usize) !
2424 } else {
2525 switch (T.zigTypeTag()) {
2626 .NoReturn => {
27 file.need_noreturn = true;
28 try writer.writeAll("noreturn void");
27 try writer.writeAll("zig_noreturn void");
2928 },
3029 .Void => try writer.writeAll("void"),
3130 .Int => {
src-self-hosted/link.zig-1
......@@ -202,7 +202,6 @@ pub const File = struct {
202202 called: std.StringHashMap(void),
203203 need_stddef: bool = false,
204204 need_stdint: bool = false,
205 need_noreturn: bool = false,
206205 error_msg: *Module.ErrorMsg = undefined,
207206
208207 pub fn openPath(allocator: *Allocator, dir: fs.Dir, sub_path: []const u8, options: Options) !*File {
test/stage2/cbe.zig+8-9
......@@ -12,7 +12,7 @@ pub fn addCases(ctx: *TestContext) !void {
1212 ctx.c("empty start function", linux_x64,
1313 \\export fn _start() noreturn {}
1414 ,
15 \\noreturn void _start(void) {}
15 \\zig_noreturn void _start(void) {}
1616 \\
1717 );
1818 ctx.c("less empty start function", linux_x64,
......@@ -22,19 +22,19 @@ pub fn addCases(ctx: *TestContext) !void {
2222 \\ main();
2323 \\}
2424 ,
25 \\noreturn void main(void);
25 \\zig_noreturn void main(void);
2626 \\
27 \\noreturn void _start(void) {
27 \\zig_noreturn void _start(void) {
2828 \\ main();
2929 \\}
3030 \\
31 \\noreturn void main(void) {}
31 \\zig_noreturn void main(void) {}
3232 \\
3333 );
3434 // TODO: implement return values
3535 // TODO: figure out a way to prevent asm constants from being generated
3636 ctx.c("inline asm", linux_x64,
37 \\fn exitGood() void {
37 \\fn exitGood() noreturn {
3838 \\ asm volatile ("syscall"
3939 \\ :
4040 \\ : [number] "{rax}" (231),
......@@ -48,21 +48,20 @@ pub fn addCases(ctx: *TestContext) !void {
4848 ,
4949 \\#include <stddef.h>
5050 \\
51 \\void exitGood(void);
51 \\zig_noreturn void exitGood(void);
5252 \\
5353 \\const char *const exitGood__anon_0 = "{rax}";
5454 \\const char *const exitGood__anon_1 = "{rdi}";
5555 \\const char *const exitGood__anon_2 = "syscall";
5656 \\
57 \\noreturn void _start(void) {
57 \\zig_noreturn void _start(void) {
5858 \\ exitGood();
5959 \\}
6060 \\
61 \\void exitGood(void) {
61 \\zig_noreturn void exitGood(void) {
6262 \\ register size_t rax_constant __asm__("rax") = 231;
6363 \\ register size_t rdi_constant __asm__("rdi") = 0;
6464 \\ __asm volatile ("syscall" :: ""(rax_constant), ""(rdi_constant));
65 \\ return;
6665 \\}
6766 \\
6867 );