Until now, if the PADDED_MEMBERS macro was used more than once in a struct,
it caused Clang and GCC warnings because of multiple definition of a member
named "pad".  This commit fixes the problem by giving each of these a
unique name.

MSVC, Clang, and GCC all support the __COUNTER__ macro, although it is not
standardized.

Signed-off-by: Ben Pfaff <[email protected]>
---
 include/openvswitch/util.h | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/include/openvswitch/util.h b/include/openvswitch/util.h
index 8453550cd845..17b06528f1a0 100644
--- a/include/openvswitch/util.h
+++ b/include/openvswitch/util.h
@@ -172,10 +172,13 @@ OVS_NO_RETURN void ovs_assert_failure(const char *, const 
char *, const char *);
  *         PADDED_MEMBERS(8, uint8_t x; uint8_t y;);
  *     };
  */
+#define PAD_PASTE2(x, y) x##y
+#define PAD_PASTE(x, y) PAD_PASTE2(x, y)
+#define PAD_ID PAD_PASTE(pad, __COUNTER__)
 #define PADDED_MEMBERS(UNIT, MEMBERS)                               \
     union {                                                         \
         struct { MEMBERS };                                         \
-        uint8_t pad[ROUND_UP(sizeof(struct { MEMBERS }), UNIT)];    \
+        uint8_t PAD_ID[ROUND_UP(sizeof(struct { MEMBERS }), UNIT)]; \
     }
 
 static inline bool
-- 
2.10.2

_______________________________________________
dev mailing list
[email protected]
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to