From: nhmall Date: Thu, 12 Jan 2023 20:38:15 +0000 (-0500) Subject: more ATTNORETURN X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=6e136c6f7dad48046140d3ae080a1eb5fdbb8bd3;p=nethack more ATTNORETURN A recent commit to alloc.c by Keni drew attention to the fact that there are extern prototypes scattered around in various .c files. Those can make use of ATTRNORETURN (non-gcc compilers and C23) the same way the prototypes in extern.h can, and they were overlooked when ATTRNORETURN was first added. --- diff --git a/include/windconf.h b/include/windconf.h index 2cebcc7ca..69a4a81f1 100644 --- a/include/windconf.h +++ b/include/windconf.h @@ -288,7 +288,7 @@ extern int alternative_palette(char *); #endif #define nethack_enter(argc, argv) nethack_enter_windows() -extern void nethack_exit(int) NORETURN; +ATTRNORETURN extern void nethack_exit(int) NORETURN; extern boolean file_exists(const char *); extern boolean file_newer(const char *, const char *); #ifndef SYSTEM_H diff --git a/src/end.c b/src/end.c index 3f2f561d2..856de1e60 100644 --- a/src/end.c +++ b/src/end.c @@ -29,7 +29,7 @@ static void disclose(int, boolean); static void get_valuables(struct obj *); static void sort_valuables(struct valuable_data *, int); static void artifact_score(struct obj *, boolean, winid); -static void really_done(int) NORETURN; +ATTRNORETURN static void really_done(int) NORETURN; static void savelife(int); static boolean should_query_disclose_option(int, char *); #ifdef DUMPLOG @@ -38,7 +38,7 @@ static void dump_plines(void); static void dump_everything(int, time_t); #if defined(__BEOS__) || defined(MICRO) || defined(OS2) || defined(WIN32) -extern void nethack_exit(int) NORETURN; +ATTRNORETURN extern void nethack_exit(int) NORETURN; #else #define nethack_exit exit #endif diff --git a/sys/share/pcmain.c b/sys/share/pcmain.c index a82844dde..764ae8f94 100644 --- a/sys/share/pcmain.c +++ b/sys/share/pcmain.c @@ -25,7 +25,7 @@ #endif #if defined(MICRO) || defined(OS2) -void nethack_exit(int) NORETURN; +ATTRNORETURN void nethack_exit(int) NORETURN; #else #define nethack_exit exit #endif diff --git a/sys/share/pcsys.c b/sys/share/pcsys.c index fc2a7d789..482133ee2 100644 --- a/sys/share/pcsys.c +++ b/sys/share/pcsys.c @@ -29,7 +29,7 @@ #endif #if defined(MICRO) || defined(OS2) -void nethack_exit(int) NORETURN; +ATTRNORETURN void nethack_exit(int) NORETURN; #else #define nethack_exit exit #endif diff --git a/sys/unix/unixmain.c b/sys/unix/unixmain.c index 796c6fedc..c9dc92f3f 100644 --- a/sys/unix/unixmain.c +++ b/sys/unix/unixmain.c @@ -35,10 +35,10 @@ static void process_options(int, char **); static void consume_arg(int, int *, char ***); static void consume_two_args(int, int *, char ***); static void early_options(int *, char ***, char **); -static void opt_terminate(void) NORETURN; -static void opt_usage(const char *) NORETURN; +ATTRNORETURN static void opt_terminate(void) NORETURN; +ATTRNORETURN static void opt_usage(const char *) NORETURN; static void opt_showpaths(const char *); -static void scores_only(int, char **, const char *) NORETURN; +ATTRNORETURN static void scores_only(int, char **, const char *) NORETURN; #ifdef _M_UNIX extern void check_sco_console(void); @@ -702,7 +702,7 @@ early_options(int *argc_p, char ***argv_p, char **hackdir_p) /* for command-line options that perform some immediate action and then terminate the program without starting play, like 'nethack --version' or 'nethack -s Zelda'; do some cleanup before that termination */ -static void +ATTRNORETURN static void opt_terminate(void) { config_error_done(); /* free memory allocated by config_error_init() */ @@ -711,7 +711,7 @@ opt_terminate(void) /*NOTREACHED*/ } -static void +ATTRNORETURN static void opt_usage(const char *hackdir) { #ifdef CHDIR @@ -744,7 +744,7 @@ opt_showpaths(const char *dir) /* handle "-s [character-names]" to show all the entries in the high scores file ('record') belonging to particular characters; nethack will end after doing so without starting play */ -static void +ATTRNORETURN static void scores_only(int argc, char **argv, const char *dir) { /* do this now rather than waiting for final termination, in case there diff --git a/sys/windows/windmain.c b/sys/windows/windmain.c index e9330b120..ef8b8517e 100644 --- a/sys/windows/windmain.c +++ b/sys/windows/windmain.c @@ -27,7 +27,7 @@ char *translate_path_variables(const char *, char *); char *exename(void); boolean fakeconsole(void); void freefakeconsole(void); -extern void nethack_exit(int) NORETURN; +ATTRNORETURN extern void nethack_exit(int) NORETURN; #if defined(MSWIN_GRAPHICS) extern void mswin_destroy_reg(void); #endif @@ -454,6 +454,8 @@ extern const char *known_restrictions[]; /* symbols.c */ * WinMain exist, the resulting executable won't work correctly. */ +DISABLE_WARNING_UNREACHABLE_CODE + #if defined(__MINGW32__) && defined(MSWIN_GRAPHICS) #define MAIN mingw_main #else @@ -735,6 +737,8 @@ attempt_restore: return 0; } +RESTORE_WARNING_UNREACHABLE_CODE + static void process_options(int argc, char * argv[]) { diff --git a/util/dlb_main.c b/util/dlb_main.c index d1a4b41e2..137260d19 100644 --- a/util/dlb_main.c +++ b/util/dlb_main.c @@ -14,8 +14,8 @@ #include #endif -static void xexit(int) NORETURN; -extern void panic(const char *, ...) NORETURN; +ATTRNORETURN static void xexit(int) NORETURN; +ATTRNORETURN extern void panic(const char *, ...) NORETURN; char *eos(char *); /* also used by dlb.c */ FILE *fopen_datafile(const char *, const char *); unsigned FITSuint_(unsigned long long, const char *, int); @@ -33,8 +33,8 @@ extern boolean open_library(const char *, library *); extern void close_library(library *); static void Write(int, char *, long); -static void usage(void) NORETURN; -static void verbose_help(void) NORETURN; +ATTRNORETURN static void usage(void) NORETURN; +ATTRNORETURN static void verbose_help(void) NORETURN; static void write_dlb_directory(int, int, libdir *, long, long, long); static char default_progname[] = "dlb"; @@ -78,7 +78,7 @@ static char origdir[255] = ""; * C dir chdir to dir (used ONCE, not like tar's -C) */ -static void +ATTRNORETURN static void usage(void) { (void) printf("Usage: %s [ctxCIfv] arguments... [files...]\n", progname); @@ -88,7 +88,7 @@ usage(void) /*NOTREACHED*/ } -static void +ATTRNORETURN static void verbose_help(void) { static const char *const long_help[] = { @@ -537,7 +537,7 @@ write_dlb_directory(int out, int nfiles, libdir *ld, #endif /* DLBLIB */ #endif /* DLB */ -static void +ATTRNORETURN static void xexit(int retcd) { #ifdef DLB diff --git a/util/makedefs.c b/util/makedefs.c index e123a0740..48ecc0658 100644 --- a/util/makedefs.c +++ b/util/makedefs.c @@ -179,9 +179,9 @@ unsigned FITSuint_(unsigned long long, const char *, int); #include "../src/mdlib.c" -static void makedefs_exit(int) NORETURN; +ATTRNORETURN static void makedefs_exit(int) NORETURN; -static void +ATTRNORETURN static void makedefs_exit(int how) { #if 0 /* makedefs doesn't need to do this */ diff --git a/win/win32/NetHackW.c b/win/win32/NetHackW.c index 35828011f..632c0595e 100644 --- a/win/win32/NetHackW.c +++ b/win/win32/NetHackW.c @@ -53,7 +53,7 @@ Version _WIN_32IE Platform/IE /*#define COMCTL_URL * "http://www.microsoft.com/msdownload/ieplatform/ie/comctrlx86.asp"*/ -extern void nethack_exit(int) NORETURN; +ATTRNORETURN extern void nethack_exit(int) NORETURN; static TCHAR *_get_cmd_arg(TCHAR *pCmdLine); static HRESULT GetComCtlVersion(LPDWORD pdwMajor, LPDWORD pdwMinor); BOOL WINAPI