[ovs-dev] [PATCH v3] Windows: Fixing Windows C++ compilation issues with unnamed structure
Shireesh Singh
shireeshcse07 at gmail.com
Fri Dec 15 22:53:10 UTC 2017
MSVC does not allow to re-define unnamed structure in union.
Thus, this fix defines the struct outside of the anonymous union
in order to calculate the padded size.
Signed-off-by: Shireesh Kumar Singh <shireeshkum at vmware.com>
---
include/openvswitch/util.h | 14 +++++++-------
1 file changed, 7 insertions(+), 7 deletions(-)
diff --git a/include/openvswitch/util.h b/include/openvswitch/util.h
index c3e60d5..ad1b184 100644
--- a/include/openvswitch/util.h
+++ b/include/openvswitch/util.h
@@ -185,11 +185,11 @@ OVS_NO_RETURN void ovs_assert_failure(const char *, const char *, const char *);
/* C++ doesn't allow a type declaration within "sizeof", but it does support
* scoping for member names, so we can just declare a second member, with a
* name and the same type, and then use its size. */
-#define PADDED_MEMBERS(UNIT, MEMBERS) \
- union { \
- struct { MEMBERS }; \
- struct { MEMBERS } named_member__; \
- uint8_t PAD_ID[ROUND_UP(sizeof named_member__, UNIT)]; \
+#define PADDED_MEMBERS(UNIT, MEMBERS) \
+ struct named_member__ { MEMBERS }; \
+ union { \
+ struct { MEMBERS }; \
+ uint8_t PAD_ID[ROUND_UP(sizeof(struct named_member__), UNIT)]; \
}
#endif
@@ -233,11 +233,11 @@ OVS_NO_RETURN void ovs_assert_failure(const char *, const char *, const char *);
}
#else
#define PADDED_MEMBERS_CACHELINE_MARKER(UNIT, CACHELINE, MEMBERS) \
+ struct struct_##CACHELINE { MEMBERS }; \
union { \
OVS_CACHE_LINE_MARKER CACHELINE; \
struct { MEMBERS }; \
- struct { MEMBERS } named_member_##CACHELINE; \
- uint8_t PAD_ID[ROUND_UP(sizeof named_member_##CACHELINE, UNIT)]; \
+ uint8_t PAD_ID[ROUND_UP(sizeof(struct struct_##CACHELINE), UNIT)]; \
}
#endif
--
2.7.4
More information about the dev
mailing list