From: Rusty Russell Date: Tue, 4 Jan 2011 10:42:41 +0000 (+1030) Subject: compiler: NORETURN X-Git-Url: https://git.ozlabs.org/?p=ccan;a=commitdiff_plain;h=6e1cdb3d8b6fac56b24403e2d0b86810a9ccffb2 compiler: NORETURN --- diff --git a/ccan/compiler/compiler.h b/ccan/compiler/compiler.h index d57d814b..1e0d8efb 100644 --- a/ccan/compiler/compiler.h +++ b/ccan/compiler/compiler.h @@ -20,6 +20,24 @@ #define COLD #endif +#if HAVE_ATTRIBUTE_NORETURN +/** + * NORETURN - a function does not return + * + * Used to mark a function which exits; useful for suppressing warnings. + * + * Example: + * static void NORETURN fail(const char *reason) + * { + * fprintf(stderr, "Error: %s (%s)\n", reason, strerror(errno)); + * exit(1); + * } + */ +#define NORETURN __attribute__((noreturn)) +#else +#define NORETURN +#endif + #if HAVE_ATTRIBUTE_PRINTF /** * PRINTF_FMT - a function takes printf-style arguments diff --git a/config.h b/config.h index 7ef5d3ba..0473fb1f 100644 --- a/config.h +++ b/config.h @@ -6,6 +6,7 @@ #define HAVE_ATTRIBUTE_COLD 1 #define HAVE_ATTRIBUTE_CONST 1 #define HAVE_ATTRIBUTE_MAY_ALIAS 1 +#define HAVE_ATTRIBUTE_NORETURN 1 #define HAVE_ATTRIBUTE_PRINTF 1 #define HAVE_ATTRIBUTE_UNUSED 1 #define HAVE_ATTRIBUTE_USED 1 diff --git a/tools/configurator/configurator.c b/tools/configurator/configurator.c index 4445139c..7d9db8a1 100644 --- a/tools/configurator/configurator.c +++ b/tools/configurator/configurator.c @@ -44,6 +44,9 @@ static struct test tests[] = { "static int __attribute__((const)) func(int x) { return x; }" }, { "HAVE_ATTRIBUTE_MAY_ALIAS", OUTSIDE_MAIN, NULL, "typedef short __attribute__((__may_alias__)) short_a;" }, + { "HAVE_ATTRIBUTE_NORETURN", DEFINES_FUNC, NULL, + "#include \n" + "static void __attribute__((noreturn)) func(int x) { exit(x); }" }, { "HAVE_ATTRIBUTE_PRINTF", DEFINES_FUNC, NULL, "static void __attribute__((format(__printf__, 1, 2))) func(const char *fmt, ...) { }" }, { "HAVE_ATTRIBUTE_UNUSED", OUTSIDE_MAIN, NULL,