projects
/
musl
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
ac5d085
)
add _Noreturn function attribute, with fallback for pre-C11 GNUC
author
Rich Felker
<dalias@aerifal.cx>
Fri, 7 Sep 2012 03:12:27 +0000
(23:12 -0400)
committer
Rich Felker
<dalias@aerifal.cx>
Fri, 7 Sep 2012 03:12:27 +0000
(23:12 -0400)
include/setjmp.h
patch
|
blob
|
history
include/stdlib.h
patch
|
blob
|
history
src/exit/_Exit.c
patch
|
blob
|
history
src/exit/abort.c
patch
|
blob
|
history
src/exit/exit.c
patch
|
blob
|
history
src/exit/quick_exit.c
patch
|
blob
|
history
diff --git
a/include/setjmp.h
b/include/setjmp.h
index
7dc7276
..
8ec5c6f
100644
(file)
--- a/
include/setjmp.h
+++ b/
include/setjmp.h
@@
-5,6
+5,13
@@
extern "C" {
#endif
extern "C" {
#endif
+#if __STDC_VERSION__ >= 201112L
+#elif defined(__GNUC__)
+#define _Noreturn __attribute__((__noreturn__))
+#else
+#define _Noreturn
+#endif
+
#include <bits/setjmp.h>
#include <bits/setjmp.h>
@@
-29,7
+36,7
@@
void _longjmp (jmp_buf, int);
int setjmp (jmp_buf);
int setjmp (jmp_buf);
-void longjmp (jmp_buf, int);
+
_Noreturn
void longjmp (jmp_buf, int);
#define setjmp setjmp
#define longjmp longjmp
#define setjmp setjmp
#define longjmp longjmp
diff --git
a/include/stdlib.h
b/include/stdlib.h
index
14cc71b
..
86cf017
100644
(file)
--- a/
include/stdlib.h
+++ b/
include/stdlib.h
@@
-11,6
+11,13
@@
extern "C" {
#define __restrict
#endif
#define __restrict
#endif
+#if __STDC_VERSION__ >= 201112L
+#elif defined(__GNUC__)
+#define _Noreturn __attribute__((__noreturn__))
+#else
+#define _Noreturn
+#endif
+
#undef NULL
#ifdef __cplusplus
#define NULL 0
#undef NULL
#ifdef __cplusplus
#define NULL 0
@@
-46,12
+53,12
@@
void *realloc (void *, size_t);
void free (void *);
void *aligned_alloc(size_t alignment, size_t size);
void free (void *);
void *aligned_alloc(size_t alignment, size_t size);
-void abort (void);
+
_Noreturn
void abort (void);
int atexit (void (*) (void));
int atexit (void (*) (void));
-void exit (int);
-void _Exit (int);
+
_Noreturn
void exit (int);
+
_Noreturn
void _Exit (int);
int at_quick_exit (void (*) (void));
int at_quick_exit (void (*) (void));
-void quick_exit (int);
+
_Noreturn
void quick_exit (int);
char *getenv (const char *);
char *getenv (const char *);
diff --git
a/src/exit/_Exit.c
b/src/exit/_Exit.c
index
6ceb143
..
c00a2ff
100644
(file)
--- a/
src/exit/_Exit.c
+++ b/
src/exit/_Exit.c
@@
-1,7
+1,7
@@
#include <stdlib.h>
#include "syscall.h"
#include <stdlib.h>
#include "syscall.h"
-void _Exit(int ec)
+
_Noreturn
void _Exit(int ec)
{
__syscall(SYS_exit_group, ec);
__syscall(SYS_exit, ec);
{
__syscall(SYS_exit_group, ec);
__syscall(SYS_exit, ec);
diff --git
a/src/exit/abort.c
b/src/exit/abort.c
index
c5b9e52
..
203dd35
100644
(file)
--- a/
src/exit/abort.c
+++ b/
src/exit/abort.c
@@
-2,7
+2,7
@@
#include <signal.h>
#include "syscall.h"
#include <signal.h>
#include "syscall.h"
-void abort(void)
+
_Noreturn
void abort(void)
{
raise(SIGABRT);
raise(SIGKILL);
{
raise(SIGABRT);
raise(SIGKILL);
diff --git
a/src/exit/exit.c
b/src/exit/exit.c
index
e4aeaf1
..
e4932b5
100644
(file)
--- a/
src/exit/exit.c
+++ b/
src/exit/exit.c
@@
-14,7
+14,7
@@
weak_alias(dummy, __funcs_on_exit);
weak_alias(dummy, __flush_on_exit);
weak_alias(dummy, __seek_on_exit);
weak_alias(dummy, __flush_on_exit);
weak_alias(dummy, __seek_on_exit);
-void exit(int code)
+
_Noreturn
void exit(int code)
{
static int lock;
{
static int lock;
diff --git
a/src/exit/quick_exit.c
b/src/exit/quick_exit.c
index
18d5288
..
1175d80
100644
(file)
--- a/
src/exit/quick_exit.c
+++ b/
src/exit/quick_exit.c
@@
-6,7
+6,7
@@
static void dummy() { }
weak_alias(dummy, __funcs_on_quick_exit);
static void dummy() { }
weak_alias(dummy, __funcs_on_quick_exit);
-void quick_exit(int code)
+
_Noreturn
void quick_exit(int code)
{
static int lock;
while (a_swap(&lock, 1)) __syscall(SYS_pause);
{
static int lock;
while (a_swap(&lock, 1)) __syscall(SYS_pause);