[ovs-dev] [PATCH v2 1/2] util: Make PADDED_MEMBERS work more than once per struct.

Bodireddy, Bhanuprakash bhanuprakash.bodireddy at intel.com
Thu Jul 13 17:13:33 UTC 2017


>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 <blp at ovn.org>
>---
> 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

LGTM, tested it as well.

Acked-by: Bhanuprakash Bodireddy <Bhanuprakash.bodireddy at intel.com>


More information about the dev mailing list