On Sat, Jul 28, 2018 at 10:56:24AM -0700, Bruce Korb wrote:
> > NOTREACHED means something different, and I don't think we want to add
> > support for this when we already support a way (including a standard way) to
> > mark function pointers noreturn (noreturn attribute, _Noreturn in C).
> > Or you can use -Wimplicit-fallthrough=1 where any kind of comment no matter
> > what you say there will disable the implicit fallthrough warning.
>
> Messing with "noreturn" means messing with autoconf configury and you have no
> idea how much I have always hated that horrific environment. Using the
> "implicit-fallthrough=1" thingy means the same thing, but making sure it is
> GCC
> and not Clang. That is why using the "obvious" implication that if a function
> does not return, then you won't "accidentally" fall through either. Rather
> than
> mess with all that, do both: /* FALLTHROUGH */ /* NOTREACHED */
> I think it would be good to reconsider NOTREACHED. Once upon a time,
> I segregated out -Wformat-contains-nul. I could offer again, but it
> would be a long
> time for the round tuit and it would be hard for me.
You don't need to use configure for this, something like:
#ifdef __has_attribute
#if __has_attribute(__noreturn__)
#define NORETURN __attribute__((__noreturn__))
#endif
#endif
#ifndef NORETURN
#define NORETURN
#endif
will do.
Or glibc headers have:
#if defined __GNUC__ && defined __GNUC_MINOR__
# define __GNUC_PREREQ(maj, min) \
((__GNUC__ << 16) + __GNUC_MINOR__ >= ((maj) << 16) + (min))
#else
# define __GNUC_PREREQ(maj, min) 0
#endif
#if (!defined _Noreturn \
&& (defined __STDC_VERSION__ ? __STDC_VERSION__ : 0) < 201112 \
&& !__GNUC_PREREQ (4,7))
# if __GNUC_PREREQ (2,8)
# define _Noreturn __attribute__ ((__noreturn__))
# else
# define _Noreturn
# endif
#endif
with
Jakub