How about going with this patch to address this issue in grep's source code? It uses C11's <stdnoreturn.h>, falling back on a simple gnulib substitute for pre-C11 compilers. If Awk doesn't use gnulib, Awk can use the stdnoreturn.h file that this patch builds, which I can email if you like.
>From fdfa5e9132ca3c57814d752349f4a9a7eeacf573 Mon Sep 17 00:00:00 2001 From: Paul Eggert <[email protected]> Date: Fri, 24 Feb 2012 17:25:50 -0800 Subject: [PATCH] maint: use stdnoreturn.h rather than rolling our own * bootstrap.conf (gnulib_modules): Add stdnoreturn. * src/grep.h (__attribute__): Remove. * src/dfa.h (__attribute__): Likewise. Include <stdnoreturn.h>. (dfaerror): Use noreturn rather than __attribute__ ((noreturn)). * src/dfa.h, src/system.h: Include <stdnoreturn.h>. * src/main.c (usage): Likewise. --- bootstrap.conf | 1 + src/dfa.h | 6 ++---- src/grep.h | 4 ---- src/main.c | 3 +-- src/system.h | 1 + 5 files changed, 5 insertions(+), 10 deletions(-) diff --git a/bootstrap.conf b/bootstrap.conf index 2b7a5ec..7400359 100644 --- a/bootstrap.conf +++ b/bootstrap.conf @@ -68,6 +68,7 @@ same-inode ssize_t stddef stdlib +stdnoreturn stpcpy strerror string diff --git a/src/dfa.h b/src/dfa.h index 17a4778..f0b2de9 100644 --- a/src/dfa.h +++ b/src/dfa.h @@ -18,9 +18,7 @@ /* Written June, 1988 by Mike Haertel */ -#if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 6) || __STRICT_ANSI__ -# define __attribute__(x) -#endif +#include <stdnoreturn.h> /* Element of a list of strings, at least one of which is known to appear in any R.E. matching the DFA. */ @@ -99,4 +97,4 @@ extern void dfawarn (const char *); /* dfaerror() is called by the regexp routines whenever an error occurs. It takes a single argument, a NUL-terminated string describing the error. The user must supply a dfaerror. */ -extern void dfaerror (const char *) __attribute__ ((noreturn)); +extern noreturn void dfaerror (const char *); diff --git a/src/grep.h b/src/grep.h index 744a889..f5ab8bf 100644 --- a/src/grep.h +++ b/src/grep.h @@ -20,10 +20,6 @@ #ifndef GREP_GREP_H #define GREP_GREP_H 1 -#if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 6) || __STRICT_ANSI__ -# define __attribute__(x) -#endif - /* Function pointer types. */ typedef void (*compile_fp_t) (char const *, size_t); typedef size_t (*execute_fp_t) (char const *, size_t, size_t *, char const *); diff --git a/src/main.c b/src/main.c index e593871..8b3f7bc 100644 --- a/src/main.c +++ b/src/main.c @@ -1432,8 +1432,7 @@ grepdir (char const *dir, struct stats const *stats) return status; } -void usage (int status) __attribute__ ((noreturn)); -void +void noreturn usage (int status) { if (status != 0) diff --git a/src/system.h b/src/system.h index 426d893..baeae3a 100644 --- a/src/system.h +++ b/src/system.h @@ -35,6 +35,7 @@ #include <stdlib.h> #include <stddef.h> +#include <stdnoreturn.h> #include <limits.h> #include <string.h> #include <ctype.h> -- 1.7.6.5
