diff options
author | Benoît Ganne <bganne@cisco.com> | 2020-07-07 16:32:22 +0200 |
---|---|---|
committer | Andrew Yourtchenko <ayourtch@gmail.com> | 2020-08-18 19:47:21 +0000 |
commit | d48d51df239fbc2f64727a74841926e33fc8019c (patch) | |
tree | c5f83559e6a2de22d9ce4e9b0b11a4a171d70441 | |
parent | edec3f6041d6ecdb2cc2f497641e63fd9a134d88 (diff) |
vppinfra: enable STATIC_ASSERT with clang
For some reason clang does not support &((struct foo*)0)->field in
static assertion contrary to gcc.
Use offsetof() macro implementation provided by both compilers instead.
Type: fix
Change-Id: I3311cdd29c5861e45dc0ef92f2bbd66242ca73b8
Signed-off-by: Benoît Ganne <bganne@cisco.com>
(cherry picked from commit 5e60c17f49082b7731778e81b58177177a31b58f)
-rw-r--r-- | src/vppinfra/clib.h | 5 | ||||
-rw-r--r-- | src/vppinfra/error_bootstrap.h | 4 |
2 files changed, 3 insertions, 6 deletions
diff --git a/src/vppinfra/clib.h b/src/vppinfra/clib.h index 5e62cc81819..ecd70980996 100644 --- a/src/vppinfra/clib.h +++ b/src/vppinfra/clib.h @@ -38,6 +38,7 @@ #ifndef included_clib_h #define included_clib_h +#include <stddef.h> #include <vppinfra/config.h> /* Standalone means to not assume we are running on a Unix box. */ @@ -62,8 +63,8 @@ #define ARRAY_LEN(x) (sizeof (x)/sizeof (x[0])) #define _STRUCT_FIELD(t,f) (((t *) 0)->f) -#define STRUCT_OFFSET_OF(t,f) ((uword) & _STRUCT_FIELD (t, f)) -#define STRUCT_BIT_OFFSET_OF(t,f) (BITS(u8) * (uword) & _STRUCT_FIELD (t, f)) +#define STRUCT_OFFSET_OF(t,f) offsetof(t, f) +#define STRUCT_BIT_OFFSET_OF(t,f) (BITS(u8) * STRUCT_OFFSET_OF (t, f)) #define STRUCT_SIZE_OF(t,f) (sizeof (_STRUCT_FIELD (t, f))) #define STRUCT_BITS_OF(t,f) (BITS (_STRUCT_FIELD (t, f))) #define STRUCT_ARRAY_LEN(t,f) ARRAY_LEN (_STRUCT_FIELD (t, f)) diff --git a/src/vppinfra/error_bootstrap.h b/src/vppinfra/error_bootstrap.h index 8dbbc7f359d..185f4c6c4af 100644 --- a/src/vppinfra/error_bootstrap.h +++ b/src/vppinfra/error_bootstrap.h @@ -108,11 +108,7 @@ do { \ } while (0) #endif /* __COVERITY */ -#if defined(__clang__) -#define STATIC_ASSERT(truth,...) -#else #define STATIC_ASSERT(truth,...) _Static_assert(truth, __VA_ARGS__) -#endif #define STATIC_ASSERT_SIZEOF(d, s) \ STATIC_ASSERT (sizeof (d) == s, "Size of " #d " must be " # s " bytes") |