From 0dcf3b4bac99ad469f319cf443e0eddbfd9b758c Mon Sep 17 00:00:00 2001 From: Paul Eggert Date: Wed, 10 Aug 2022 11:58:36 -0700 Subject: [PATCH 1/3] Use _Noreturn a bit more This helps avoid some warnings with GCC 12 in developer mode, in future patches. * awk.h (gawk_exit, final_exit, r_fatal): Mark with _Noreturn. * msg.c (r_fatal): Abort at the end, to tell compiler it doesn't return. --- ChangeLog | 16 ++++++++++++---- awk.h | 6 +++--- msg.c | 1 + 3 files changed, 16 insertions(+), 7 deletions(-) diff --git a/ChangeLog b/ChangeLog index 213245a4..eb27aae3 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2022-08-10 Paul Eggert + + Use _Noreturn a bit more + This helps avoid some warnings with GCC 12 in developer mode, + in future patches. + * awk.h (gawk_exit, final_exit, r_fatal): Mark with _Noreturn. + * msg.c (r_fatal): Abort at the end, to tell GCC it doesn't return. + 2022-08-10 Arnold D. Robbins * symbol.c (init_the_tables): New function. @@ -423,7 +431,7 @@ * gawkapi.c (awk_value_to_node): Clear the GMP/MPFR values returned from the C extension after setting the internal variable. - + 2022-02-22 Arnold D. Robbins Enable interval expressions even for --traditional, as BWK @@ -1191,7 +1199,7 @@ * NEWS: Updated. 2020-07-10 Arnold D. Robbins - + Fix printf issues. Thanks to Michal Jaegermann for the report. * cint_array.c (cint_dump): Fix printf formats. @@ -1547,7 +1555,7 @@ 2020-01-14 Andrew J. Schorr - * cint_array.c (cint_array_init): Fix off-by-one error in array + * cint_array.c (cint_array_init): Fix off-by-one error in array bounds overflow check for an NHAT value set in the environment. Thanks to Michael Builov for the report. @@ -1901,7 +1909,7 @@ * awkgram.y (errcount): No longer static. * command.y (dbg_errcount): Renamed from errcount. * main.c (catchsig, catchsegv): If errcount > 0, just exit, - don't abort. + don't abort. 2019-04-12 Arnold D. Robbins diff --git a/awk.h b/awk.h index 71e617af..50f6abe9 100644 --- a/awk.h +++ b/awk.h @@ -1716,14 +1716,14 @@ extern void *mpfr_mem_realloc(void *ptr, size_t old_size, size_t new_size); extern void mpfr_mem_free(void *ptr, size_t size); #endif /* msg.c */ -extern void gawk_exit(int status); -extern void final_exit(int status) ATTRIBUTE_NORETURN; +extern _Noreturn void gawk_exit(int status); +extern _Noreturn void final_exit(int status) ATTRIBUTE_NORETURN; extern void err(bool isfatal, const char *s, const char *emsg, va_list argp) ATTRIBUTE_PRINTF(3, 0); extern void msg (const char *mesg, ...) ATTRIBUTE_PRINTF_1; extern void error (const char *mesg, ...) ATTRIBUTE_PRINTF_1; extern void r_warning (const char *mesg, ...) ATTRIBUTE_PRINTF_1; extern void set_loc (const char *file, int line); -extern void r_fatal (const char *mesg, ...) ATTRIBUTE_PRINTF_1; +extern _Noreturn void r_fatal (const char *mesg, ...) ATTRIBUTE_PRINTF_1; #if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 2) extern void (*lintfunc)(const char *mesg, ...) ATTRIBUTE_PRINTF_1; #else diff --git a/msg.c b/msg.c index c95a3c20..53243458 100644 --- a/msg.c +++ b/msg.c @@ -164,6 +164,7 @@ r_fatal(const char *mesg, ...) va_start(args, mesg); err(true, _("fatal: "), mesg, args); va_end(args); + abort(); } /* gawk_exit --- longjmp out if necessary */ -- 2.37.1