aboutsummaryrefslogtreecommitdiffstats
path: root/src/vppinfra/clib.h
diff options
context:
space:
mode:
authorBenoît Ganne <bganne@cisco.com>2020-07-07 16:32:22 +0200
committerAndrew Yourtchenko <ayourtch@gmail.com>2020-08-18 19:47:21 +0000
commitd48d51df239fbc2f64727a74841926e33fc8019c (patch)
treec5f83559e6a2de22d9ce4e9b0b11a4a171d70441 /src/vppinfra/clib.h
parentedec3f6041d6ecdb2cc2f497641e63fd9a134d88 (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)
Diffstat (limited to 'src/vppinfra/clib.h')
-rw-r--r--src/vppinfra/clib.h5
1 files changed, 3 insertions, 2 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))