Define local instances of FALLTHROUGH and UNREACHABLE

FALLTHOUGH is a copy of how it is defined in <isc/util.h>

UNREACHABLE follows the model used in MacOS /usr/include/c++/v1/cstdlib
to determine if __builtin_ureachable is available
This commit is contained in:
Mark Andrews
2022-04-28 06:56:56 +10:00
parent 48882f6cb2
commit 6d68a22954

View File

@@ -27,6 +27,7 @@
#include <inttypes.h>
#include <stdbool.h>
#include <stdlib.h>
#include <arpa/inet.h>
#include <net/if.h>
@@ -85,6 +86,24 @@ typedef uint32_t dns_ttl_t;
var = _u.v; \
} while (0)
#if !defined(__has_attribute)
#define __has_attribute(x) 0
#endif /* if !defined(__has_attribute) */
#if __GNUC__ >= 7 || __has_attribute(fallthrough)
#define FALLTHROUGH __attribute__((fallthrough))
#else
/* clang-format off */
#define FALLTHROUGH do {} while (0) /* FALLTHROUGH */
/* clang-format on */
#endif
#ifdef __GNUC__
#define UNREACHABLE() __builtin_unreachable()
#else
#define UNREACHABLE() abort()
#endif
/* opaque structures */
typedef void *dns_sdlzlookup_t;
typedef void *dns_sdlzallnodes_t;