Skip to content

Commit 7a35cf8

Browse files
authored
CDRIVER-4237 - Address incompatible pointer warnings on GCC 4.8.5 (#927)
* Address extra semicolon warnings * Address incompatible pointer and signedness warnings for old GCC versions
1 parent 5065a9a commit 7a35cf8

File tree

1 file changed

+62
-57
lines changed

1 file changed

+62
-57
lines changed

src/libbson/src/bson/bson-atomic.h

Lines changed: 62 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -47,8 +47,7 @@ enum bson_memory_order {
4747
#define MSVC_MEMORDER_SUFFIX(X)
4848
#endif
4949

50-
#if defined(USE_LEGACY_GCC_ATOMICS) || \
51-
(!defined(__clang__) && __GNUC__ == 4)
50+
#if defined(USE_LEGACY_GCC_ATOMICS) || (!defined(__clang__) && __GNUC__ == 4)
5251
#define BSON_USE_LEGACY_GCC_ATOMICS
5352
#else
5453
#undef BSON_USE_LEGACY_GCC_ATOMICS
@@ -74,7 +73,8 @@ enum bson_memory_order {
7473
#define BSON_EMULATE_INT
7574
#endif
7675

77-
#define DEF_ATOMIC_OP(MSVC_Intrinsic, GNU_Intrinsic, GNU_Legacy_Intrinsic, Order, ...) \
76+
#define DEF_ATOMIC_OP( \
77+
MSVC_Intrinsic, GNU_Intrinsic, GNU_Legacy_Intrinsic, Order, ...) \
7878
do { \
7979
switch (Order) { \
8080
case bson_memory_order_acq_rel: \
@@ -127,47 +127,43 @@ enum bson_memory_order {
127127
} while (0)
128128

129129

130-
#define DEF_ATOMIC_CMPEXCH_STRONG( \
131-
VCSuffix1, VCSuffix2, GNU_MemOrder, Ptr, ExpectActualVar, NewValue) \
132-
do { \
133-
BSON_IF_MSVC (ExpectActualVar = BSON_CONCAT3 ( \
134-
_InterlockedCompareExchange, VCSuffix1, VCSuffix2) ( \
135-
Ptr, NewValue, ExpectActualVar);) \
136-
BSON_IF_GNU_LIKE ( \
137-
(void) __atomic_compare_exchange_n (Ptr, \
138-
&ExpectActualVar, \
139-
NewValue, \
140-
false, /* Not weak */ \
141-
GNU_MemOrder, \
142-
GNU_MemOrder);) \
143-
BSON_IF_GNU_LEGACY_ATOMICS ( \
144-
__typeof__ (ExpectActualVar) _val; \
145-
_val = __sync_val_compare_and_swap (Ptr, \
146-
ExpectActualVar, \
147-
NewValue); \
148-
ExpectActualVar = _val;) \
130+
#define DEF_ATOMIC_CMPEXCH_STRONG( \
131+
VCSuffix1, VCSuffix2, GNU_MemOrder, Ptr, ExpectActualVar, NewValue) \
132+
do { \
133+
BSON_IF_MSVC (ExpectActualVar = BSON_CONCAT3 ( \
134+
_InterlockedCompareExchange, VCSuffix1, VCSuffix2) ( \
135+
Ptr, NewValue, ExpectActualVar);) \
136+
BSON_IF_GNU_LIKE ( \
137+
(void) __atomic_compare_exchange_n (Ptr, \
138+
&ExpectActualVar, \
139+
NewValue, \
140+
false, /* Not weak */ \
141+
GNU_MemOrder, \
142+
GNU_MemOrder);) \
143+
BSON_IF_GNU_LEGACY_ATOMICS ( \
144+
__typeof__ (ExpectActualVar) _val; \
145+
_val = __sync_val_compare_and_swap (Ptr, ExpectActualVar, NewValue); \
146+
ExpectActualVar = _val;) \
149147
} while (0)
150148

151149

152-
#define DEF_ATOMIC_CMPEXCH_WEAK( \
153-
VCSuffix1, VCSuffix2, GNU_MemOrder, Ptr, ExpectActualVar, NewValue) \
154-
do { \
155-
BSON_IF_MSVC (ExpectActualVar = BSON_CONCAT3 ( \
156-
_InterlockedCompareExchange, VCSuffix1, VCSuffix2) ( \
157-
Ptr, NewValue, ExpectActualVar);) \
158-
BSON_IF_GNU_LIKE ( \
159-
(void) __atomic_compare_exchange_n (Ptr, \
160-
&ExpectActualVar, \
161-
NewValue, \
162-
true, /* Yes weak */ \
163-
GNU_MemOrder, \
164-
GNU_MemOrder);) \
165-
BSON_IF_GNU_LEGACY_ATOMICS ( \
166-
__typeof__ (ExpectActualVar) _val; \
167-
_val = __sync_val_compare_and_swap (Ptr, \
168-
ExpectActualVar, \
169-
NewValue); \
170-
ExpectActualVar = _val;) \
150+
#define DEF_ATOMIC_CMPEXCH_WEAK( \
151+
VCSuffix1, VCSuffix2, GNU_MemOrder, Ptr, ExpectActualVar, NewValue) \
152+
do { \
153+
BSON_IF_MSVC (ExpectActualVar = BSON_CONCAT3 ( \
154+
_InterlockedCompareExchange, VCSuffix1, VCSuffix2) ( \
155+
Ptr, NewValue, ExpectActualVar);) \
156+
BSON_IF_GNU_LIKE ( \
157+
(void) __atomic_compare_exchange_n (Ptr, \
158+
&ExpectActualVar, \
159+
NewValue, \
160+
true, /* Yes weak */ \
161+
GNU_MemOrder, \
162+
GNU_MemOrder);) \
163+
BSON_IF_GNU_LEGACY_ATOMICS ( \
164+
__typeof__ (ExpectActualVar) _val; \
165+
_val = __sync_val_compare_and_swap (Ptr, ExpectActualVar, NewValue); \
166+
ExpectActualVar = _val;) \
171167
} while (0)
172168

173169

@@ -217,7 +213,10 @@ enum bson_memory_order {
217213
default: \
218214
BSON_UNREACHABLE ("Invalid bson_memory_order value"); \
219215
}) \
220-
BSON_IF_GNU_LEGACY_ATOMICS ({ __sync_synchronize (); return *a; }) \
216+
BSON_IF_GNU_LEGACY_ATOMICS ({ \
217+
__sync_synchronize (); \
218+
return *a; \
219+
}) \
221220
} \
222221
\
223222
static BSON_INLINE Type bson_atomic_##NamePart##_exchange ( \
@@ -342,24 +341,34 @@ enum bson_memory_order {
342341
#define DECL_ATOMIC_STDINT(Name, VCSuffix) \
343342
DECL_ATOMIC_INTEGRAL (Name, Name##_t, VCSuffix)
344343

345-
#if defined(_MSC_VER) || defined (BSON_USE_LEGACY_GCC_ATOMICS)
346-
/* MSVC expects precise types for their atomic intrinsics. */
347-
DECL_ATOMIC_INTEGRAL (int8, char, 8);
344+
#if defined(_MSC_VER) || defined(BSON_USE_LEGACY_GCC_ATOMICS)
345+
/* MSVC and GCC require built-in types (not typedefs) for their atomic
346+
* intrinsics. */
347+
#if defined(_MSC_VER)
348+
#define DECL_ATOMIC_INTEGRAL_INT8 char
349+
#define DECL_ATOMIC_INTEGRAL_INT32 long
350+
#define DECL_ATOMIC_INTEGRAL_INT long
351+
#else
352+
#define DECL_ATOMIC_INTEGRAL_INT8 signed char
353+
#define DECL_ATOMIC_INTEGRAL_INT32 int
354+
#define DECL_ATOMIC_INTEGRAL_INT int
355+
#endif
356+
DECL_ATOMIC_INTEGRAL (int8, DECL_ATOMIC_INTEGRAL_INT8, 8)
348357
DECL_ATOMIC_INTEGRAL (int16, short, 16)
349-
#if !defined (BSON_EMULATE_INT32)
350-
DECL_ATOMIC_INTEGRAL (int32, long, )
358+
#if !defined(BSON_EMULATE_INT32)
359+
DECL_ATOMIC_INTEGRAL (int32, DECL_ATOMIC_INTEGRAL_INT32, )
351360
#endif
352-
#if !defined (BSON_EMULATE_INT)
353-
DECL_ATOMIC_INTEGRAL (int, long, )
361+
#if !defined(BSON_EMULATE_INT)
362+
DECL_ATOMIC_INTEGRAL (int, DECL_ATOMIC_INTEGRAL_INT, )
354363
#endif
355364
#else
356365
/* Other compilers that we support provide generic intrinsics */
357366
DECL_ATOMIC_STDINT (int8, 8)
358367
DECL_ATOMIC_STDINT (int16, 16)
359-
#if !defined (BSON_EMULATE_INT32)
368+
#if !defined(BSON_EMULATE_INT32)
360369
DECL_ATOMIC_STDINT (int32, )
361370
#endif
362-
#if !defined (BSON_EMULATE_INT)
371+
#if !defined(BSON_EMULATE_INT)
363372
DECL_ATOMIC_INTEGRAL (int, int, )
364373
#endif
365374
#endif
@@ -609,12 +618,8 @@ bson_atomic_ptr_exchange (void *volatile *ptr,
609618
*ptr,
610619
new_value);
611620
#else
612-
DEF_ATOMIC_OP (_InterlockedExchangePointer,
613-
__atomic_exchange_n,
614-
,
615-
ord,
616-
ptr,
617-
new_value);
621+
DEF_ATOMIC_OP (
622+
_InterlockedExchangePointer, __atomic_exchange_n, , ord, ptr, new_value);
618623
#endif
619624
}
620625

0 commit comments

Comments
 (0)