|
27 | 27 | #define MONGOC_DEBUG_ASSERT(statement) ((void) 0)
|
28 | 28 | #endif
|
29 | 29 |
|
| 30 | +#if defined(__GNUC__) && ((__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)) |
| 31 | +#define MC_PRAGMA_DIAGNOSTIC_PUSH _Pragma ("GCC diagnostic push") |
| 32 | +#define MC_PRAGMA_DIAGNOSTIC_POP _Pragma ("GCC diagnostic pop") |
| 33 | +#elif defined(__clang__) |
| 34 | +#define MC_PRAGMA_DIAGNOSTIC_PUSH _Pragma ("clang diagnostic push") |
| 35 | +#define MC_PRAGMA_DIAGNOSTIC_POP _Pragma ("clang diagnostic pop") |
| 36 | +#elif defined(_MSC_VER) |
| 37 | +#define MC_PRAGMA_DIAGNOSTIC_PUSH _Pragma ("warning ( push )") |
| 38 | +#define MC_PRAGMA_DIAGNOSTIC_POP _Pragma ("warning ( pop )") |
| 39 | +#else |
| 40 | +#define MC_PRAGMA_DIAGNOSTIC_PUSH |
| 41 | +#define MC_PRAGMA_DIAGNOSTIC_POP |
| 42 | +#endif |
| 43 | + |
30 | 44 | // `MC_ENABLE_CONVERSION_WARNING_BEGIN` enables -Wconversion to check for potentially unsafe integer conversions.
|
31 | 45 | // The `mcommon_in_range_*` functions can help address these warnings by ensuring a cast is within bounds.
|
32 |
| -#if (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6) // gcc 4.6 added support for "diagnostic push". |
33 |
| -#define MC_ENABLE_CONVERSION_WARNING_BEGIN \ |
34 |
| - _Pragma ("GCC diagnostic push") _Pragma ("GCC diagnostic warning \"-Wconversion\"") |
35 |
| -#define MC_ENABLE_CONVERSION_WARNING_END _Pragma ("GCC diagnostic pop") |
| 46 | +#if defined(__GNUC__) |
| 47 | +#define MC_ENABLE_CONVERSION_WARNING_BEGIN MC_PRAGMA_DIAGNOSTIC_PUSH _Pragma ("GCC diagnostic warning \"-Wconversion\"") |
| 48 | +#define MC_ENABLE_CONVERSION_WARNING_END MC_PRAGMA_DIAGNOSTIC_POP |
36 | 49 | #elif defined(__clang__)
|
37 | 50 | #define MC_ENABLE_CONVERSION_WARNING_BEGIN \
|
38 |
| - _Pragma ("clang diagnostic push") _Pragma ("clang diagnostic warning \"-Wconversion\"") |
39 |
| -#define MC_ENABLE_CONVERSION_WARNING_END _Pragma ("clang diagnostic pop") |
| 51 | + MC_PRAGMA_DIAGNOSTIC_PUSH _Pragma ("clang diagnostic warning \"-Wconversion\"") |
| 52 | +#define MC_ENABLE_CONVERSION_WARNING_END MC_PRAGMA_DIAGNOSTIC_POP |
40 | 53 | #else
|
41 | 54 | #define MC_ENABLE_CONVERSION_WARNING_BEGIN
|
42 | 55 | #define MC_ENABLE_CONVERSION_WARNING_END
|
|
50 | 63 | #undef MC_DISABLE_CAST_FUNCTION_TYPE_STRICT_WARNING_BEGIN
|
51 | 64 | #undef MC_DISABLE_CAST_FUNCTION_TYPE_STRICT_WARNING_END
|
52 | 65 | #define MC_DISABLE_CAST_FUNCTION_TYPE_STRICT_WARNING_BEGIN \
|
53 |
| - _Pragma ("clang diagnostic push") _Pragma ("clang diagnostic ignored \"-Wcast-function-type-strict\"") |
54 |
| -#define MC_DISABLE_CAST_FUNCTION_TYPE_STRICT_WARNING_END _Pragma ("clang diagnostic pop") |
| 66 | + MC_PRAGMA_DIAGNOSTIC_PUSH _Pragma ("clang diagnostic ignored \"-Wcast-function-type-strict\"") |
| 67 | +#define MC_DISABLE_CAST_FUNCTION_TYPE_STRICT_WARNING_END MC_PRAGMA_DIAGNOSTIC_POP |
55 | 68 | #endif // __has_warning("-Wcast-function-type-strict")
|
56 | 69 | #endif // defined(__clang__)
|
57 | 70 |
|
58 |
| -#if (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6) |
| 71 | +#if defined(__GNUC__) |
59 | 72 | #define BEGIN_IGNORE_DEPRECATIONS \
|
60 |
| - _Pragma ("GCC diagnostic push") _Pragma ("GCC diagnostic ignored \"-Wdeprecated-declarations\"") |
61 |
| -#define END_IGNORE_DEPRECATIONS _Pragma ("GCC diagnostic pop") |
| 73 | + MC_PRAGMA_DIAGNOSTIC_PUSH _Pragma ("GCC diagnostic ignored \"-Wdeprecated-declarations\"") |
| 74 | +#define END_IGNORE_DEPRECATIONS MC_PRAGMA_DIAGNOSTIC_POP |
62 | 75 | #elif defined(__clang__)
|
63 | 76 | #define BEGIN_IGNORE_DEPRECATIONS \
|
64 |
| - _Pragma ("clang diagnostic push") _Pragma ("clang diagnostic ignored \"-Wdeprecated-declarations\"") |
65 |
| -#define END_IGNORE_DEPRECATIONS _Pragma ("clang diagnostic pop") |
| 77 | + MC_PRAGMA_DIAGNOSTIC_PUSH _Pragma ("clang diagnostic ignored \"-Wdeprecated-declarations\"") |
| 78 | +#define END_IGNORE_DEPRECATIONS MC_PRAGMA_DIAGNOSTIC_PUSH |
66 | 79 | #else
|
67 | 80 | #define BEGIN_IGNORE_DEPRECATIONS
|
68 | 81 | #define END_IGNORE_DEPRECATIONS
|
69 | 82 | #endif
|
70 | 83 |
|
| 84 | +// Disable the -Wimplicit warning (including -Wimplicit-int and -Wimplicit-function-declaration). |
| 85 | +#if defined(__GNUC__) |
| 86 | +#define MC_DISABLE_IMPLICIT_WARNING_BEGIN MC_PRAGMA_DIAGNOSTIC_PUSH _Pragma ("GCC diagnostic ignored \"-Wimplicit\"") |
| 87 | +#define MC_DISABLE_IMPLICIT_WARNING_END MC_PRAGMA_DIAGNOSTIC_POP |
| 88 | +#elif defined(__clang__) |
| 89 | +#define MC_DISABLE_IMPLICIT_WARNING_BEGIN MC_PRAGMA_DIAGNOSTIC_PUSH _Pragma ("clang diagnostic ignored \"-Wimplicit\"") |
| 90 | +#define MC_DISABLE_IMPLICIT_WARNING_END MC_PRAGMA_DIAGNOSTIC_POP |
| 91 | +#elif defined(_MSC_VER) |
| 92 | +#define MC_DISABLE_IMPLICIT_WARNING_BEGIN MC_PRAGMA_DIAGNOSTIC_PUSH _Pragma ("warning (disable : 4013 4431)") |
| 93 | +#define MC_DISABLE_IMPLICIT_WARNING_END MC_PRAGMA_DIAGNOSTIC_POP |
| 94 | +#else |
| 95 | +#define MC_DISABLE_IMPLICIT_WARNING_BEGIN |
| 96 | +#define MC_DISABLE_IMPLICIT_WARNING_END |
| 97 | +#endif |
| 98 | + |
71 | 99 | #endif /* MONGO_C_DRIVER_COMMON_MACROS_PRIVATE_H */
|
0 commit comments