Skip to content

Commit 3df9bee

Browse files
CDRIVER-4822 clean up warnings in public headers (#1751)
* add public-header-warnings target * add build cmd to compile scripts * add more flags * -Wunsafe-buffer-usage fixes * -Wdocumentation fix * -Wpadded fixes * -Wcovered-switch-default fixes * -Wcast-qual fix * -Watomic-implicit-seq-cst fix * MSVC padding * update flags * moving macros to bson-macros.h * clang format fix * Update bson-oid.h * rename from MC_* to BSON_* * add -Wno-padded instead of macro * move local macros to bson-atomic.h * minor evg and build fixes --------- Co-authored-by: Kevin Albertson <[email protected]>
1 parent 43457ca commit 3df9bee

File tree

9 files changed

+127
-3
lines changed

9 files changed

+127
-3
lines changed

.evergreen/scripts/compile-unix.sh

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -216,3 +216,8 @@ build_dir="cmake-build"
216216

217217
# Also validate examples.
218218
"${cmake_binary}" --build "${build_dir:?}" --target mongo_c_driver_examples
219+
220+
if [[ "$EXTRA_CONFIGURE_FLAGS" != *"ENABLE_MONGOC=OFF"* ]]; then
221+
# Check public headers for extra warnings.
222+
"${cmake_binary}" --build "${build_dir:?}" --target public-header-warnings
223+
fi

.evergreen/scripts/compile-windows.sh

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -143,3 +143,8 @@ fi
143143

144144
# Also validate examples.
145145
"${cmake_binary:?}" --build "${build_dir:?}" --config "${build_config:?}" --target mongo_c_driver_examples
146+
147+
if [[ "$EXTRA_CONFIGURE_FLAGS" != *"ENABLE_MONGOC=OFF"* ]]; then
148+
# Check public headers for extra warnings.
149+
"${cmake_binary:?}" --build "${build_dir:?}" --config "${build_config:?}" --target public-header-warnings
150+
fi

src/CMakeLists.txt

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,3 +19,27 @@ if (CMAKE_CXX_COMPILER)
1919
target_link_libraries (mongoc-cxx-check PRIVATE mongoc_shared)
2020
endif ()
2121
endif ()
22+
23+
# public-header-warnings
24+
add_executable(public-header-warnings EXCLUDE_FROM_ALL ${CMAKE_CURRENT_SOURCE_DIR}/c-check.c)
25+
26+
if (TARGET mongoc_static)
27+
target_link_libraries(public-header-warnings PRIVATE mongoc_static)
28+
else ()
29+
target_link_libraries(public-header-warnings PRIVATE mongoc_shared)
30+
endif ()
31+
32+
target_compile_options(public-header-warnings PRIVATE
33+
$<$<C_COMPILER_ID:AppleClang,Clang>:-Weverything>
34+
$<$<C_COMPILER_ID:GNU>:-Wextra>
35+
$<$<C_COMPILER_ID:AppleClang,Clang,GNU>:-Werror>
36+
$<$<C_COMPILER_ID:AppleClang,Clang,GNU>:-Wno-declaration-after-statement>
37+
$<$<C_COMPILER_ID:AppleClang,Clang,GNU>:-Wno-disabled-macro-expansion>
38+
$<$<C_COMPILER_ID:AppleClang,Clang>:-Wno-padded>
39+
$<$<C_COMPILER_ID:AppleClang,Clang>:-Wno-reserved-identifier>
40+
$<$<C_COMPILER_ID:AppleClang,Clang>:-Wno-documentation-unknown-command>
41+
$<$<C_COMPILER_ID:AppleClang,Clang>:-Wno-unknown-warning-option>
42+
$<$<C_COMPILER_ID:MSVC>:/W4>
43+
$<$<C_COMPILER_ID:MSVC>:/WX>
44+
$<$<C_COMPILER_ID:MSVC>:/wd4324>
45+
)

src/c-check.c

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
#include <bson/bson.h>
2+
#include <mongoc/mongoc.h>
3+
4+
int
5+
main (void)
6+
{
7+
return 0;
8+
}

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

Lines changed: 45 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,34 @@ enum BSON_GNUC_DEPRECATED bson_memory_order {
9797
#define BSON_EMULATE_PTR
9898
#endif
9999

100+
// Disable the -Wcovered-switch-default warning.
101+
#define BSON_DISABLE_COVERED_SWITCH_DEFAULT_BEGIN
102+
#define BSON_DISABLE_COVERED_SWITCH_DEFAULT_END
103+
#if defined(__clang__)
104+
#if __has_warning("-Wcovered-switch-default")
105+
#undef BSON_DISABLE_COVERED_SWITCH_DEFAULT_BEGIN
106+
#undef BSON_DISABLE_COVERED_SWITCH_DEFAULT_END
107+
#define BSON_DISABLE_COVERED_SWITCH_DEFAULT_BEGIN \
108+
_Pragma ("clang diagnostic push") _Pragma ("clang diagnostic ignored \"-Wcovered-switch-default\"")
109+
#define BSON_DISABLE_COVERED_SWITCH_DEFAULT_END _Pragma ("clang diagnostic pop")
110+
#endif // __has_warning("-Wcovered-switch-default")
111+
#endif // defined(__clang__)
112+
113+
// Disable the -Watomic-implicit-seq-cst warning.
114+
#define BSON_DISABLE_ATOMIC_IMPLICIT_SEQ_CST_BEGIN
115+
#define BSON_DISABLE_ATOMIC_IMPLICIT_SEQ_CST_END
116+
#if defined(__clang__)
117+
#if __has_warning("-Watomic-implicit-seq-cst")
118+
#undef BSON_DISABLE_ATOMIC_IMPLICIT_SEQ_CST_BEGIN
119+
#undef BSON_DISABLE_ATOMIC_IMPLICIT_SEQ_CST_END
120+
#define BSON_DISABLE_ATOMIC_IMPLICIT_SEQ_CST_BEGIN \
121+
_Pragma ("clang diagnostic push") _Pragma ("clang diagnostic ignored \"-Watomic-implicit-seq-cst\"")
122+
#define BSON_DISABLE_ATOMIC_IMPLICIT_SEQ_CST_END _Pragma ("clang diagnostic pop")
123+
#endif // __has_warning("-Watomic-implicit-seq-cst")
124+
#endif // defined(__clang__)
125+
126+
BSON_DISABLE_COVERED_SWITCH_DEFAULT_BEGIN
127+
100128
#define DEF_ATOMIC_OP(MSVC_Intrinsic, GNU_Intrinsic, GNU_Legacy_Intrinsic, Order, ...) \
101129
do { \
102130
switch (Order) { \
@@ -582,7 +610,13 @@ bson_atomic_ptr_compare_exchange_weak (void *volatile *ptr, void *expect, void *
582610
static BSON_INLINE void *BSON_GNUC_DEPRECATED
583611
bson_atomic_ptr_fetch (void *volatile const *ptr, enum bson_memory_order ord)
584612
{
585-
return bson_atomic_ptr_compare_exchange_strong ((void *volatile *) ptr, NULL, NULL, ord);
613+
// Use a union to address cast-qual compilation warning
614+
union {
615+
void *volatile const *const_ptr;
616+
void *volatile *non_const_ptr;
617+
} u;
618+
u.const_ptr = ptr;
619+
return bson_atomic_ptr_compare_exchange_strong (u.non_const_ptr, NULL, NULL, ord);
586620
}
587621

588622
#undef DECL_ATOMIC_STDINT
@@ -599,7 +633,11 @@ static BSON_INLINE void BSON_GNUC_DEPRECATED
599633
bson_atomic_thread_fence (void)
600634
{
601635
BSON_IF_MSVC (MemoryBarrier ();)
636+
637+
BSON_DISABLE_ATOMIC_IMPLICIT_SEQ_CST_BEGIN
602638
BSON_IF_GNU_LIKE (__sync_synchronize ();)
639+
BSON_DISABLE_ATOMIC_IMPLICIT_SEQ_CST_END
640+
603641
BSON_IF_GNU_LEGACY_ATOMICS (__sync_synchronize ();)
604642
}
605643

@@ -619,10 +657,16 @@ BSON_EXPORT (int32_t) bson_atomic_int_add (volatile int32_t *p, int32_t n);
619657
BSON_GNUC_DEPRECATED
620658
BSON_EXPORT (int64_t) bson_atomic_int64_add (volatile int64_t *p, int64_t n);
621659

660+
BSON_DISABLE_COVERED_SWITCH_DEFAULT_END
622661

623662
#undef BSON_EMULATE_PTR
624663
#undef BSON_EMULATE_INT32
625664
#undef BSON_EMULATE_INT
665+
#undef BSON_DISABLE_ATOMIC_IMPLICIT_SEQ_CST_BEGIN
666+
#undef BSON_DISABLE_ATOMIC_IMPLICIT_SEQ_CST_END
667+
#undef BSON_DISABLE_COVERED_SWITCH_DEFAULT_BEGIN
668+
#undef BSON_DISABLE_COVERED_SWITCH_DEFAULT_END
669+
626670

627671
BSON_END_DECLS
628672

src/libbson/src/bson/bson-iter.h

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,9 @@ static BSON_INLINE uint32_t
9595
bson_iter_utf8_len_unsafe (const bson_iter_t *iter)
9696
{
9797
uint32_t raw;
98+
BSON_DISABLE_UNSAFE_BUFFER_USAGE_WARNING_BEGIN
9899
memcpy (&raw, iter->raw + iter->d1, sizeof (raw));
100+
BSON_DISABLE_UNSAFE_BUFFER_USAGE_WARNING_END
99101

100102
const uint32_t native = BSON_UINT32_FROM_LE (raw);
101103

@@ -131,7 +133,9 @@ static BSON_INLINE const char *
131133
bson_iter_code_unsafe (const bson_iter_t *iter, uint32_t *length)
132134
{
133135
*length = bson_iter_utf8_len_unsafe (iter);
136+
BSON_DISABLE_UNSAFE_BUFFER_USAGE_WARNING_BEGIN
134137
return (const char *) (iter->raw + iter->d2);
138+
BSON_DISABLE_UNSAFE_BUFFER_USAGE_WARNING_END
135139
}
136140

137141

@@ -169,7 +173,9 @@ bson_iter_double_unsafe (const bson_iter_t *iter)
169173
{
170174
double val;
171175

176+
BSON_DISABLE_UNSAFE_BUFFER_USAGE_WARNING_BEGIN
172177
memcpy (&val, iter->raw + iter->d1, sizeof (val));
178+
BSON_DISABLE_UNSAFE_BUFFER_USAGE_WARNING_END
173179
return BSON_DOUBLE_FROM_LE (val);
174180
}
175181

@@ -212,7 +218,9 @@ static BSON_INLINE int32_t
212218
bson_iter_int32_unsafe (const bson_iter_t *iter)
213219
{
214220
uint32_t raw;
221+
BSON_DISABLE_UNSAFE_BUFFER_USAGE_WARNING_BEGIN
215222
memcpy (&raw, iter->raw + iter->d1, sizeof (raw));
223+
BSON_DISABLE_UNSAFE_BUFFER_USAGE_WARNING_END
216224

217225
const uint32_t native = BSON_UINT32_FROM_LE (raw);
218226

@@ -242,7 +250,9 @@ static BSON_INLINE int64_t
242250
bson_iter_int64_unsafe (const bson_iter_t *iter)
243251
{
244252
uint64_t raw;
253+
BSON_DISABLE_UNSAFE_BUFFER_USAGE_WARNING_BEGIN
245254
memcpy (&raw, iter->raw + iter->d1, sizeof (raw));
255+
BSON_DISABLE_UNSAFE_BUFFER_USAGE_WARNING_END
246256

247257
const uint64_t native = BSON_UINT64_FROM_LE (raw);
248258

@@ -287,7 +297,9 @@ bson_iter_oid (const bson_iter_t *iter);
287297
static BSON_INLINE const bson_oid_t *
288298
bson_iter_oid_unsafe (const bson_iter_t *iter)
289299
{
300+
BSON_DISABLE_UNSAFE_BUFFER_USAGE_WARNING_BEGIN
290301
return (const bson_oid_t *) (iter->raw + iter->d1);
302+
BSON_DISABLE_UNSAFE_BUFFER_USAGE_WARNING_END
291303
}
292304

293305

@@ -309,8 +321,10 @@ bson_iter_decimal128_unsafe (const bson_iter_t *iter, bson_decimal128_t *dec)
309321
uint64_t low_le;
310322
uint64_t high_le;
311323

324+
BSON_DISABLE_UNSAFE_BUFFER_USAGE_WARNING_BEGIN
312325
memcpy (&low_le, iter->raw + iter->d1, sizeof (low_le));
313326
memcpy (&high_le, iter->raw + iter->d1 + 8, sizeof (high_le));
327+
BSON_DISABLE_UNSAFE_BUFFER_USAGE_WARNING_END
314328

315329
dec->low = BSON_UINT64_FROM_LE (low_le);
316330
dec->high = BSON_UINT64_FROM_LE (high_le);
@@ -335,7 +349,9 @@ bson_iter_key_len (const bson_iter_t *iter);
335349
static BSON_INLINE const char *
336350
bson_iter_key_unsafe (const bson_iter_t *iter)
337351
{
352+
BSON_DISABLE_UNSAFE_BUFFER_USAGE_WARNING_BEGIN
338353
return (const char *) (iter->raw + iter->key);
354+
BSON_DISABLE_UNSAFE_BUFFER_USAGE_WARNING_END
339355
}
340356

341357

@@ -354,7 +370,9 @@ static BSON_INLINE const char *
354370
bson_iter_utf8_unsafe (const bson_iter_t *iter, size_t *length)
355371
{
356372
*length = bson_iter_utf8_len_unsafe (iter);
373+
BSON_DISABLE_UNSAFE_BUFFER_USAGE_WARNING_BEGIN
357374
return (const char *) (iter->raw + iter->d2);
375+
BSON_DISABLE_UNSAFE_BUFFER_USAGE_WARNING_END
358376
}
359377

360378

@@ -432,7 +450,9 @@ bson_iter_bool_unsafe (const bson_iter_t *iter)
432450
{
433451
char val;
434452

453+
BSON_DISABLE_UNSAFE_BUFFER_USAGE_WARNING_BEGIN
435454
memcpy (&val, iter->raw + iter->d1, 1);
455+
BSON_DISABLE_UNSAFE_BUFFER_USAGE_WARNING_END
436456
return !!val;
437457
}
438458

@@ -464,7 +484,9 @@ bson_iter_type (const bson_iter_t *iter);
464484
static BSON_INLINE bson_type_t
465485
bson_iter_type_unsafe (const bson_iter_t *iter)
466486
{
487+
BSON_DISABLE_UNSAFE_BUFFER_USAGE_WARNING_BEGIN
467488
return (bson_type_t) (iter->raw + iter->type)[0];
489+
BSON_DISABLE_UNSAFE_BUFFER_USAGE_WARNING_END
468490
}
469491

470492

src/libbson/src/bson/bson-macros.h

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -367,4 +367,17 @@
367367
(void) (expr); \
368368
} while (0)
369369

370+
// Disable the -Wunsafe-buffer-usage warning.
371+
#define BSON_DISABLE_UNSAFE_BUFFER_USAGE_WARNING_BEGIN
372+
#define BSON_DISABLE_UNSAFE_BUFFER_USAGE_WARNING_END
373+
#if defined(__clang__)
374+
#if __has_warning("-Wunsafe-buffer-usage")
375+
#undef BSON_DISABLE_UNSAFE_BUFFER_USAGE_WARNING_BEGIN
376+
#undef BSON_DISABLE_UNSAFE_BUFFER_USAGE_WARNING_END
377+
#define BSON_DISABLE_UNSAFE_BUFFER_USAGE_WARNING_BEGIN \
378+
_Pragma ("clang diagnostic push") _Pragma ("clang diagnostic ignored \"-Wunsafe-buffer-usage\"")
379+
#define BSON_DISABLE_UNSAFE_BUFFER_USAGE_WARNING_END _Pragma ("clang diagnostic pop")
380+
#endif // __has_warning("-Wunsafe-buffer-usage")
381+
#endif // defined(__clang__)
382+
370383
#endif /* BSON_MACROS_H */

src/libbson/src/bson/bson-oid.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,9 @@ bson_oid_hash_unsafe (const bson_oid_t *oid)
114114
uint32_t i;
115115

116116
for (i = 0; i < sizeof oid->bytes; i++) {
117+
BSON_DISABLE_UNSAFE_BUFFER_USAGE_WARNING_BEGIN
117118
hash = ((hash << 5) + hash) + oid->bytes[i];
119+
BSON_DISABLE_UNSAFE_BUFFER_USAGE_WARNING_END
118120
}
119121

120122
return hash;
@@ -213,8 +215,10 @@ bson_oid_init_from_string_unsafe (bson_oid_t *oid, const char *str)
213215
int i;
214216

215217
for (i = 0; i < 12; i++) {
218+
BSON_DISABLE_UNSAFE_BUFFER_USAGE_WARNING_BEGIN
216219
oid->bytes[i] =
217220
(uint8_t) ((bson_oid_parse_hex_char (str[2 * i]) << 4) | (bson_oid_parse_hex_char (str[2 * i + 1])));
221+
BSON_DISABLE_UNSAFE_BUFFER_USAGE_WARNING_END
218222
}
219223
}
220224

src/libbson/src/bson/bson-types.h

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -385,11 +385,10 @@ typedef struct {
385385
* memory allocations under certain circumstances such as reading from an
386386
* incoming mongo packet.
387387
*/
388-
389388
BSON_ALIGNED_BEGIN (BSON_ALIGN_OF_PTR)
390389
typedef struct {
391390
uint32_t type;
392-
/*< private >*/
391+
/**< private >**/
393392
} bson_reader_t BSON_ALIGNED_END (BSON_ALIGN_OF_PTR);
394393

395394

0 commit comments

Comments
 (0)