Use __builtin_unreachable(). [skip ci]

Same as in libpcap.
This commit is contained in:
Denis Ovsienko 2021-08-15 10:54:50 +01:00
parent dadde06adb
commit 604cd4aa60
2 changed files with 18 additions and 1 deletions

View File

@ -167,4 +167,20 @@
#define DIAG_ON_C11_EXTENSIONS
#endif
/*
* GCC needs this on AIX for longjmp().
*/
#if ND_IS_AT_LEAST_GNUC_VERSION(5,1)
/*
* Beware that the effect of this builtin is more than just squelching the
* warning! GCC trusts it enough for the process to segfault if the control
* flow reaches the builtin (an infinite empty loop in the same context would
* squelch the warning and ruin the process too, albeit in a different way).
* So please remember to use this very carefully.
*/
#define ND_UNREACHABLE __builtin_unreachable();
#else
#define ND_UNREACHABLE
#endif
#endif /* _diag_control_h */

View File

@ -37,6 +37,7 @@
*/
#include "funcattrs.h"
#include "netdissect.h"
#include "diag-control.h"
/*
* If we have versions of GCC or Clang that support an __attribute__
@ -585,7 +586,7 @@ nd_trunc_longjmp(netdissect_options *ndo)
* XL C that the function is noreturn, but GCC remains unaware of that and
* yields a "'noreturn' function does return" warning.
*/
while (1);
ND_UNREACHABLE
#endif /* _AIX */
}