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)
This commit is contained in:

committed by
Andrew Yourtchenko

parent
edec3f6041
commit
d48d51df23
@ -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))
|
||||
|
@ -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")
|
||||
|
Reference in New Issue
Block a user