aboutsummaryrefslogtreecommitdiffstats
path: root/ws_diag_control.h
diff options
context:
space:
mode:
Diffstat (limited to 'ws_diag_control.h')
-rw-r--r--ws_diag_control.h44
1 files changed, 39 insertions, 5 deletions
diff --git a/ws_diag_control.h b/ws_diag_control.h
index 155c143077..e3ee28ed9c 100644
--- a/ws_diag_control.h
+++ b/ws_diag_control.h
@@ -100,15 +100,49 @@ extern "C" {
* generated by that version of Flex triggers?
*/
#if defined(_MSC_VER)
+ /*
+ * Suppress:
+ *
+ * warning C4018: signed/unsigned mismatch
+ * warning C4267: 'argument' : conversion from 'size_t' to 'int', possible loss of data
+ */
#define DIAG_OFF_FLEX \
__pragma(warning(push)) \
- __pragma(warning(disable:4018))
+ __pragma(warning(disable:4018)) \
+ __pragma(warning(disable:4267))
#define DIAG_ON_FLEX __pragma(warning(pop))
#else
- #define DIAG_OFF_FLEX \
- DIAG_OFF(sign-compare)
- #define DIAG_ON_FLEX \
- DIAG_ON(sign-compare)
+ /*
+ * Suppress:
+ *
+ * -Wsigned-compare warnings
+ * -Wshorten-64-to-32 warnings, if the compiler *has* -Wshorten-64-to-32
+ *
+ * We use DIAG_OFF() and DIAG_ON(), so we only use features that the
+ * compiler supports.
+ *
+ * We disable -Wshorten-64-to-32 if we're using Clang, or if __APPLE__
+ * is defined; that option was originally added to an Apple version of
+ * GCC, and at least some versions of Clang support it - given that
+ * the Clang work started at Apple, it may be in all versions of Clang.
+ *
+ * (Does no version of GCC or Clang support the same generic "you're
+ * narrowing a value, and you didn't throw in a cast to assert that
+ * you know what you're doing" warning that MSVC does?)
+ */
+ #if defined(__clang__) || defined(__APPLE__)
+ #define DIAG_OFF_FLEX \
+ DIAG_OFF(sign-compare) \
+ DIAG_OFF(shorten-64-to-32)
+ #define DIAG_ON_FLEX \
+ DIAG_ON(shorten-64-to-32) \
+ DIAG_ON(sign-compare)
+ #else
+ #define DIAG_OFF_FLEX \
+ DIAG_OFF(sign-compare)
+ #define DIAG_ON_FLEX \
+ DIAG_ON(sign-compare)
+ #endif
#endif
/*