From mboxrd@z Thu Jan 1 00:00:00 1970 X-Msuck: nntp://news.gmane.org/gmane.linux.lib.musl.general/1831 Path: news.gmane.org!not-for-mail From: philomath Newsgroups: gmane.linux.lib.musl.general Subject: Re: [PATCH] Add _Noreturn specifier to functions specified as such by ISO C11 Date: Wed, 5 Sep 2012 20:02:35 +0200 Message-ID: <20120905200235.1a83ec1a@gmail.com> References: <20120905135311.43281a54@gmail.com> Reply-To: musl@lists.openwall.com NNTP-Posting-Host: plane.gmane.org Mime-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit X-Trace: ger.gmane.org 1346868117 32227 80.91.229.3 (5 Sep 2012 18:01:57 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Wed, 5 Sep 2012 18:01:57 +0000 (UTC) To: musl@lists.openwall.com Original-X-From: musl-return-1832-gllmg-musl=m.gmane.org@lists.openwall.com Wed Sep 05 20:01:58 2012 Return-path: Envelope-to: gllmg-musl@plane.gmane.org Original-Received: from mother.openwall.net ([195.42.179.200]) by plane.gmane.org with smtp (Exim 4.69) (envelope-from ) id 1T9JvE-00060e-SU for gllmg-musl@plane.gmane.org; Wed, 05 Sep 2012 20:01:52 +0200 Original-Received: (qmail 28178 invoked by uid 550); 5 Sep 2012 18:01:49 -0000 Mailing-List: contact musl-help@lists.openwall.com; run by ezmlm Precedence: bulk List-Post: List-Help: List-Unsubscribe: List-Subscribe: Original-Received: (qmail 28170 invoked from network); 5 Sep 2012 18:01:49 -0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=date:from:to:subject:message-id:in-reply-to:references:x-mailer :mime-version:content-type:content-transfer-encoding; bh=aVLMab3PnOVGB5HOI/1IjOI5LnTdm8FEIAqIPApE9yE=; b=aRgffU6XU5M8w4S0yYY2xTaY2fp3GwTC7OKrX0QM2Clbv8EPqEf+XaefNk/YySpfC2 PmFwswJALdxXFZ9WZ6k2yylsDMwjibVlCK+4FmEbUGubTIPcO+JYrCtCPySu1enmIKSg IR8zxrTon4DatyEIRlfTQGFk00/V4iRCgQxVPqgxblzZYL2ys+Mc6RXg5b3ZH3edXCGE 6AE2sndeEUUbI/cu4FxH+pIus2ttL4A//uXrvl2B/p1UDQaA4hfdriFQh8LONeLnG5Gd MXqG0/pruGPbn/LAirFpEUDCGCwPnoklPCmLuBCLrmPOfGRMvas1BY4iJ35bC2OEzxPG F8nQ== In-Reply-To: <20120905135311.43281a54@gmail.com> X-Mailer: Claws Mail 3.8.1 (GTK+ 2.24.11; x86_64-unknown-linux-gnu) Xref: news.gmane.org gmane.linux.lib.musl.general:1831 Archived-At: Hi, Here is an updated version, addressing the issues rich mentioned. Should I add _Noreturn to other functions too (such as the various a_crash versions, *err*, etc)? --- Since the _Noreturn identifier is not in the user's namespace, we can use it directly. in case it's not a keyword (i.e. pre-C11), it is defined as __attribute__((__noreturn__)) on GCC (where it is implemented since version 2.95), and empty elsewhere. --- include/setjmp.h | 9 ++++++++- include/stdlib.h | 15 +++++++++++---- src/exit/_Exit.c | 2 +- src/exit/abort.c | 2 +- src/exit/exit.c | 2 +- src/exit/quick_exit.c | 2 +- 6 files changed, 23 insertions(+), 9 deletions(-) diff --git a/include/setjmp.h b/include/setjmp.h index 7dc7276..321d859 100644 --- a/include/setjmp.h +++ b/include/setjmp.h @@ -28,8 +28,15 @@ void _longjmp (jmp_buf, int); #endif +#if __STDC_VERSION__ >= 201112L +#elif defined(__GNUC__) +#define _Noreturn __attribute__((__noreturn__)) +#else +#define _Noreturn +#endif + int setjmp (jmp_buf); -void longjmp (jmp_buf, int); +_Noreturn void longjmp (jmp_buf, int); #define setjmp setjmp #define longjmp longjmp diff --git a/include/stdlib.h b/include/stdlib.h index 1749cb3..03dee19 100644 --- a/include/stdlib.h +++ b/include/stdlib.h @@ -40,12 +40,19 @@ void *realloc (void *, size_t); void free (void *); void *aligned_alloc(size_t alignment, size_t size); -void abort (void); +#if __STDC_VERSION__ >= 201112L +#elif defined(__GNUC__) +#define _Noreturn __attribute__((__noreturn__)) +#else +#define _Noreturn +#endif + +_Noreturn void abort (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)); -void quick_exit (int); +_Noreturn void quick_exit (int); char *getenv (const char *); diff --git a/src/exit/_Exit.c b/src/exit/_Exit.c index 6ceb143..c00a2ff 100644 --- a/src/exit/_Exit.c +++ b/src/exit/_Exit.c @@ -1,7 +1,7 @@ #include #include "syscall.h" -void _Exit(int ec) +_Noreturn void _Exit(int 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 --- a/src/exit/abort.c +++ b/src/exit/abort.c @@ -2,7 +2,7 @@ #include #include "syscall.h" -void abort(void) +_Noreturn void abort(void) { raise(SIGABRT); raise(SIGKILL); diff --git a/src/exit/exit.c b/src/exit/exit.c index e4aeaf1..e4932b5 100644 --- 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); -void exit(int code) +_Noreturn void exit(int code) { static int lock; diff --git a/src/exit/quick_exit.c b/src/exit/quick_exit.c index 18d5288..1175d80 100644 --- 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); -void quick_exit(int code) +_Noreturn void quick_exit(int code) { static int lock; while (a_swap(&lock, 1)) __syscall(SYS_pause); -- 1.7.12