From ee301d5ded4a4040e28e561c6c3bac556c88d7e2 Mon Sep 17 00:00:00 2001 From: Rob Landley Date: Wed, 11 May 2022 10:09:07 -0500 Subject: Switch to C11 noreturn to work around a compiler bug in llvm. 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 --- lib/lib.h | 14 +++++++------- 1 file 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); -- cgit v1.2.3