]> git.puffer.fish Git - mirror/frr.git/commitdiff
*: expose and clean up 'noreturn' functions
authorMark Stapp <mjs@cisco.com>
Thu, 24 Apr 2025 15:39:33 +0000 (11:39 -0400)
committerMark Stapp <mjs@cisco.com>
Thu, 24 Apr 2025 17:41:23 +0000 (13:41 -0400)
Enable the -Wmissing-noreturn warning, and resolve warnings
for gcc and clang. Add a FRR_NORETURN macro and use that for
the new changes.

Signed-off-by: Mark Stapp <mjs@cisco.com>
27 files changed:
babeld/babel_main.c
bfdd/bfdd.c
configure.ac
eigrpd/eigrp_main.c
ldpd/lde.c
ldpd/ldpd.c
ldpd/ldpe.c
lib/command_lex.l
lib/compiler.h
lib/defun_lex.l
lib/libfrr.c
lib/memory.h
lib/sigevent.c
mgmtd/mgmt_fe_adapter.c
nhrpd/nhrp_main.c
ospf6d/ospf6_main.c
ospfd/ospf_main.c
pathd/path_main.c
pbrd/pbr_main.c
pimd/pim6_main.c
pimd/pim_signals.c
ripd/rip_main.c
ripngd/ripng_main.c
sharpd/sharp_main.c
staticd/static_main.c
vtysh/vtysh_main.c
watchfrr/watchfrr.c

index 77658eb57d47a30ee9bf80ae3c9ea2c3f2761eff..088ce8b979ff60f6253a81f9274c231f8b96c440 100644 (file)
@@ -34,9 +34,9 @@ Copyright 2011 by Matthieu Boutier and Juliusz Chroboczek
 #include "babel_zebra.h"
 #include "babel_errors.h"
 
-static void babel_fail(void);
+static FRR_NORETURN void babel_fail(void);
 static void babel_init_random(void);
-static void babel_exit_properly(void);
+static FRR_NORETURN void babel_exit_properly(void);
 static void babel_save_state_file(void);
 
 
@@ -85,8 +85,7 @@ struct zebra_privs_t babeld_privs =
     .cap_num_i = 0
 };
 
-static void
-babel_sigexit(void)
+static FRR_NORETURN void babel_sigexit(void)
 {
     zlog_notice("Terminating on signal");
 
@@ -208,8 +207,7 @@ main(int argc, char **argv)
     return 0;
 }
 
-static void
-babel_fail(void)
+static FRR_NORETURN void babel_fail(void)
 {
     exit(1);
 }
@@ -297,8 +295,7 @@ fini:
     return ;
 }
 
-static void
-babel_exit_properly(void)
+static FRR_NORETURN void babel_exit_properly(void)
 {
     debugf(BABEL_DEBUG_COMMON, "Exiting...");
     usleep(roughly(10000));
index c2d8e926bff6d3005c22562fbbc4f111aabb5533..8edcac18ff1d57e533c05bd530f87aff3f7d7c24 100644 (file)
@@ -57,7 +57,7 @@ static void sigusr1_handler(void)
        zlog_rotate();
 }
 
-static void sigterm_handler(void)
+static FRR_NORETURN void sigterm_handler(void)
 {
        bglobal.bg_shutdown = true;
 
index 00a56205292c4016f9acc2b951fea3c3cb4e5df7..4484c079e0328e0c9bd95b59ab09d09f3ab2483b 100644 (file)
@@ -468,9 +468,10 @@ AC_C_FLAG([-Wwrite-strings])
 AC_C_FLAG([-Wundef])
 AC_C_FLAG([-Wimplicit-fallthrough])
 AC_C_FLAG([-Wshadow])
+AC_C_FLAG([-Wmissing-noreturn])
+AC_C_FLAG([-Wno-error=missing-noreturn])
 if test "$enable_gcc_ultra_verbose" = "yes" ; then
   AC_C_FLAG([-Wcast-qual])
-  AC_C_FLAG([-Wmissing-noreturn])
   AC_C_FLAG([-Wmissing-format-attribute])
   AC_C_FLAG([-Wunreachable-code])
   AC_C_FLAG([-Wpacked])
index c9ce0189668a9c018b62403bc7fce8e59efb6c27..6f102f5f07451883e17c54114742c996bb49d764 100644 (file)
@@ -92,7 +92,7 @@ static void sighup(void)
 }
 
 /* SIGINT / SIGTERM handler. */
-static void sigint(void)
+static FRR_NORETURN void sigint(void)
 {
        zlog_notice("Terminating on signal");
 
index b0f9e5191f87e4def0e0ca1a475525cedd7121bf..562133ce916c38918bbba39c63bb25dc1ccd0ae9 100644 (file)
@@ -176,8 +176,7 @@ lde_init(struct ldpd_init *init)
        zclient_sync_init();
 }
 
-static void
-lde_shutdown(void)
+static FRR_NORETURN void lde_shutdown(void)
 {
        /* close pipes */
        if (iev_ldpe) {
index e4e1dc6fecfbfb80ca0f3382fc1b55306b93ff81..94f9ada6da9a0a62118935bcc3f83bc2b989dd6c 100644 (file)
@@ -443,8 +443,7 @@ main(int argc, char *argv[])
        return (0);
 }
 
-static void
-ldpd_shutdown(void)
+static FRR_NORETURN void ldpd_shutdown(void)
 {
        pid_t            pid;
        int              status;
index 50875e644d8ac460aa4e5f852054e3007a80fa4e..987a4e0415350867e9b37c0c30d739621b050322 100644 (file)
@@ -25,7 +25,7 @@
 #include "libfrr.h"
 #include "zlog_live.h"
 
-static void     ldpe_shutdown(void);
+static FRR_NORETURN void ldpe_shutdown(void);
 static void ldpe_dispatch_main(struct event *thread);
 static void ldpe_dispatch_lde(struct event *thread);
 #ifdef __OpenBSD__
@@ -66,8 +66,7 @@ struct zebra_privs_t ldpe_privs =
 };
 
 /* SIGINT / SIGTERM handler. */
-static void
-sigint(void)
+static FRR_NORETURN void sigint(void)
 {
        ldpe_shutdown();
 }
@@ -182,8 +181,7 @@ ldpe_init(struct ldpd_init *init)
        accept_init();
 }
 
-static void
-ldpe_shutdown(void)
+static FRR_NORETURN void ldpe_shutdown(void)
 {
        struct if_addr          *if_addr;
        struct adj              *adj;
index dc89191c13464c536d64099860a33cfdec70d5d7..42b1f440a71813cff675991386fb6f456a0f26ff 100644 (file)
@@ -18,6 +18,7 @@
 /* ignore harmless bugs in old versions of flex */
 #pragma GCC diagnostic ignored "-Wsign-compare"
 #pragma GCC diagnostic ignored "-Wmissing-prototypes"
+#pragma GCC diagnostic ignored "-Wmissing-noreturn"
 
 #include "lib/command_parse.h"
 
index 9d39026c667596cecc165721b60df662f06e8391..d52db1313fa8b506ad51cd911d4389e4d0d19a51 100644 (file)
@@ -461,6 +461,9 @@ _Static_assert(sizeof(_uint64_t) == 8 && sizeof(_int64_t) == 8,
 #define _DATA_SECTION(name) __attribute__((section(".data." name)))
 #endif
 
+/* Wrapper for the 'noreturn' metadata */
+#define FRR_NORETURN __attribute__((noreturn))
+
 #ifdef __cplusplus
 }
 #endif
index 9528e448521afc0df41d3e74cc7823d85cef529c..0cac42957612ba55fd8bddcdc4ba209b24f07bcd 100644 (file)
@@ -29,6 +29,7 @@
 /* ignore harmless bugs in old versions of flex */
 #pragma GCC diagnostic ignored "-Wsign-compare"
 #pragma GCC diagnostic ignored "-Wunused-value"
+#pragma GCC diagnostic ignored "-Wmissing-noreturn"
 
 #include "config.h"
 #include <Python.h>
index d40624a1020fc433e46f2f30c311e820fb06b99c..712408aca0f997548e81ad1221c7f2a388346da3 100644 (file)
@@ -868,7 +868,7 @@ static void rcv_signal(int signum)
        /* poll() is interrupted by the signal; handled below */
 }
 
-static void frr_daemon_wait(int fd)
+static FRR_NORETURN void frr_daemon_wait(int fd)
 {
        struct pollfd pfd[1];
        int ret;
index 865801883295c6318eac19926106de528f5f25a2..54de20eb7dfbb12245a808014106dac0a0ad6275 100644 (file)
@@ -183,8 +183,7 @@ typedef int qmem_walk_fn(void *arg, struct memgroup *mg, struct memtype *mt);
 extern int qmem_walk(qmem_walk_fn *func, void *arg);
 extern int log_memstats(const char *daemon_name, bool enabled);
 
-extern __attribute__((__noreturn__)) void memory_oom(size_t size,
-                                                    const char *name);
+extern FRR_NORETURN void memory_oom(size_t size, const char *name);
 
 #ifdef __cplusplus
 }
index 7c465bfcec09074bc9d1d10266069fb403598580..0ee986e9d529ce3d9f2502a37ca2296cf89e056d 100644 (file)
@@ -206,8 +206,8 @@ static void *program_counter(void *context)
        return NULL;
 }
 
-static void __attribute__((noreturn))
-exit_handler(int signo, siginfo_t *siginfo, void *context)
+static void FRR_NORETURN exit_handler(int signo, siginfo_t *siginfo,
+                                     void *context)
 {
        void *pc = program_counter(context);
 
@@ -215,8 +215,8 @@ exit_handler(int signo, siginfo_t *siginfo, void *context)
        _exit(128 + signo);
 }
 
-static void __attribute__((noreturn))
-core_handler(int signo, siginfo_t *siginfo, void *context)
+static void FRR_NORETURN core_handler(int signo, siginfo_t *siginfo,
+                                     void *context)
 {
        void *pc = program_counter(context);
 
index 7c632ef230aead3f538f187b21b00f101765d09d..f353cc6792157ee09c1ec50c5214dbb9ce6ccf3e 100644 (file)
@@ -2030,7 +2030,7 @@ void mgmt_fe_adapter_init(struct event_loop *tm)
        }
 }
 
-static void mgmt_fe_abort_if_session(void *data)
+static FRR_NORETURN void mgmt_fe_abort_if_session(void *data)
 {
        struct mgmt_fe_session_ctx *session = data;
 
index adb8be36d303cfd0967c7a316c00d5752b36b82f..3c33db316701b33188363af0ed6a7e9a0ef1cf0f 100644 (file)
@@ -78,7 +78,7 @@ static void nhrp_sigusr1(void)
        zlog_rotate();
 }
 
-static void nhrp_request_stop(void)
+static FRR_NORETURN void nhrp_request_stop(void)
 {
        debugf(NHRP_DEBUG_COMMON, "Exiting...");
        frr_early_fini();
index e94f2a1c474de0897c9b7949918f3027468e02b1..ae61e8b35fde32fb1c8e513057229d495b080046 100644 (file)
@@ -125,14 +125,14 @@ static void sighup(void)
 }
 
 /* SIGINT handler. */
-static void sigint(void)
+static FRR_NORETURN void sigint(void)
 {
        zlog_notice("Terminating on signal SIGINT");
        ospf6_exit(0);
 }
 
 /* SIGTERM handler. */
-static void sigterm(void)
+static FRR_NORETURN void sigterm(void)
 {
        zlog_notice("Terminating on signal SIGTERM");
        ospf6_exit(0);
index 5c11027506dd634bce9496a9ad85c5298b77b256..1c48d377856b8112f8cc9cea4048af27c8b42b37 100644 (file)
@@ -99,7 +99,7 @@ static void sighup(void)
 }
 
 /* SIGINT / SIGTERM handler. */
-static void sigint(void)
+static FRR_NORETURN void sigint(void)
 {
        zlog_notice("Terminating on signal");
        bfd_protocol_integration_set_shutdown(true);
index 23cbb9ccedc656ef4e720c513f5bcbc52a8de1d9..f4220a7cf86ae08ab6570018e4863b58d6aa850c 100644 (file)
@@ -55,7 +55,7 @@ static void sighup(void)
 }
 
 /* SIGINT / SIGTERM handler. */
-static void sigint(void)
+static FRR_NORETURN void sigint(void)
 {
        zlog_notice("Terminating on signal");
        zlog_notice("Unregister from opaque,etc ");
index 6695b537a80c4b2c68f6fb5c638f54be38323491..7724a795d7f097459363a666c93eec333ba250b1 100644 (file)
@@ -65,7 +65,7 @@ static void sighup(void)
 }
 
 /* SIGINT / SIGTERM handler. */
-static void sigint(void)
+static FRR_NORETURN void sigint(void)
 {
        zlog_notice("Terminating on signal");
 
index 07b70ae2b3df72ce691b74d736b5a101f2a1b5b6..69ce9122059b9dc1d05f87ca28f08e1586169b10 100644 (file)
@@ -56,14 +56,14 @@ static void pim6_sighup(void)
        zlog_info("SIGHUP received, ignoring");
 }
 
-static void pim6_sigint(void)
+static FRR_NORETURN void pim6_sigint(void)
 {
        zlog_notice("Terminating on signal SIGINT");
        pim6_terminate();
        exit(1);
 }
 
-static void pim6_sigterm(void)
+static FRR_NORETURN void pim6_sigterm(void)
 {
        zlog_notice("Terminating on signal SIGTERM");
        pim6_terminate();
index 146a4e9e98875458820c8023580758d826b5a3df..d78dcc483bbfe7482796cfb6c5b8f019efad3670 100644 (file)
@@ -25,14 +25,14 @@ static void pim_sighup(void)
        zlog_info("SIGHUP received, ignoring");
 }
 
-static void pim_sigint(void)
+static FRR_NORETURN void pim_sigint(void)
 {
        zlog_notice("Terminating on signal SIGINT");
        pim_terminate();
        exit(1);
 }
 
-static void pim_sigterm(void)
+static FRR_NORETURN void pim_sigterm(void)
 {
        zlog_notice("Terminating on signal SIGTERM");
        pim_terminate();
index 431e9671310175f8288b76b0b2fbdd04530df0c5..9ec909c067dd6948cc6e81eef8d6fd73b29207ed 100644 (file)
@@ -69,7 +69,7 @@ static void sighup(void)
 }
 
 /* SIGINT handler. */
-static void sigint(void)
+static FRR_NORETURN void sigint(void)
 {
        struct vrf *vrf;
 
index f0ab67dcb6d757cc3173d82780f2e18208ba47f5..c8752fd0864d3bf70b169431937984cb64ce816d 100644 (file)
@@ -67,7 +67,7 @@ static void sighup(void)
 }
 
 /* SIGINT handler. */
-static void sigint(void)
+static FRR_NORETURN void sigint(void)
 {
        struct vrf *vrf;
 
index 2e72a4b99095b6d46087eaf0846916344e5029c7..23740701020ad6664abfd18980e474444646dbb8 100644 (file)
@@ -90,7 +90,7 @@ static void sighup(void)
 }
 
 /* SIGINT / SIGTERM handler. */
-static void sigint(void)
+static FRR_NORETURN void sigint(void)
 {
        zlog_notice("Terminating on signal");
 
index 3b59ca6a7518d1e916f1a591e936e33597a97fcf..99f8b676d97241cf2a6291ca2923477cb0b45e80 100644 (file)
@@ -65,7 +65,7 @@ static void sighup(void)
 }
 
 /* SIGINT / SIGTERM handler. */
-static void sigint(void)
+static FRR_NORETURN void sigint(void)
 {
        zlog_notice("Terminating on signal");
 
index 16e166beacd206c0b138ce0e9ec93517e731d2cb..a17ad565bdc0fa9fe35350baaded7c1e19fec13f 100644 (file)
@@ -156,7 +156,7 @@ static void vtysh_signal_init(void)
 }
 
 /* Help information display. */
-static void usage(int status)
+static FRR_NORETURN void usage(int status)
 {
        if (status != 0)
                fprintf(stderr, "Try `%s --help' for more information.\n",
index 611a7872d01362bd4b6b70d99ab16b3b2cf53c89..cde38aed8cab7ca12002094be31d495e4d6a6450 100644 (file)
@@ -1090,7 +1090,7 @@ void watchfrr_status(struct vty *vty)
        }
 }
 
-static void sigint(void)
+static FRR_NORETURN void sigint(void)
 {
        zlog_notice("Terminating on signal");
        systemd_send_stopping();
@@ -1268,7 +1268,7 @@ static void netns_setup(const char *nsname)
 
 #else /* !GNU_LINUX */
 
-static void netns_setup(const char *nsname)
+static FRR_NORETURN void netns_setup(const char *nsname)
 {
        fprintf(stderr, "network namespaces are only available on Linux\n");
        exit(1);