aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRob Landley <rob@landley.net>2022-05-11 10:09:07 -0500
committerElliott Hughes <enh@google.com>2022-05-12 09:27:48 -0700
commitee301d5ded4a4040e28e561c6c3bac556c88d7e2 (patch)
treed8e24f25ff687d25704ee2a45ab5e25159e08cac
parent2cc84e6d134dbc819a8db9ffaf7a79de7ddcbed2 (diff)
downloadtoybox-android13-dev.tar.gz
Switch to C11 noreturn to work around a compiler bug in llvm.android13-dev
Elliott said: Works around a clang bug in the version of clang shipping with Android T that causes a miscompile in xstdio_create() on x86-64, that oddly only affects __attribute__((__noreturn__)) and not _Noreturn! Bug: http://b/225806996 Test: manual inspection of generated code on x86-64 Change-Id: I12302d2300fc454f92352b43090745c04ed66fd0
-rw-r--r--lib/lib.h14
1 files changed, 7 insertions, 7 deletions
diff --git a/lib/lib.h b/lib/lib.h
index 1721dd67..70e5bed9 100644
--- a/lib/lib.h
+++ b/lib/lib.h
@@ -114,8 +114,8 @@ struct dirtree *dirtree_read(char *path, int (*callback)(struct dirtree *node));
// xwrap.c
void xstrncpy(char *dest, char *src, size_t size);
void xstrncat(char *dest, char *src, size_t size);
-void _xexit(void) __attribute__((__noreturn__));
-void xexit(void) __attribute__((__noreturn__));
+_Noreturn void _xexit(void);
+_Noreturn void xexit(void);
void *xmmap(void *addr, size_t length, int prot, int flags, int fd, off_t off);
void *xmalloc(size_t size);
void *xzalloc(size_t size);
@@ -194,13 +194,13 @@ time_t xmktime(struct tm *tm, int utc);
void verror_msg(char *msg, int err, va_list va);
void error_msg(char *msg, ...) printf_format;
void perror_msg(char *msg, ...) printf_format;
-void error_exit(char *msg, ...) printf_format __attribute__((__noreturn__));
-void perror_exit(char *msg, ...) printf_format __attribute__((__noreturn__));
-void help_exit(char *msg, ...) printf_format __attribute__((__noreturn__));
+_Noreturn void error_exit(char *msg, ...) printf_format;
+_Noreturn void perror_exit(char *msg, ...) printf_format;
+_Noreturn void help_exit(char *msg, ...) printf_format;
void error_msg_raw(char *msg);
void perror_msg_raw(char *msg);
-void error_exit_raw(char *msg) __attribute__((__noreturn__));
-void perror_exit_raw(char *msg) __attribute__((__noreturn__));
+_Noreturn void error_exit_raw(char *msg);
+_Noreturn void perror_exit_raw(char *msg);
ssize_t readall(int fd, void *buf, size_t len);
ssize_t writeall(int fd, void *buf, size_t len);
off_t lskip(int fd, off_t offset);