]> git.saurik.com Git - wxWidgets.git/commitdiff
Add wxGCC_WARNING_{SUPPRESS,RESTORE} macros and use them for -Wfloat-equal.
authorVadim Zeitlin <vadim@wxwidgets.org>
Fri, 28 Dec 2012 00:44:01 +0000 (00:44 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Fri, 28 Dec 2012 00:44:01 +0000 (00:44 +0000)
Suppress the warnings about comparing floating point values for equality in
wxWidgets headers when the user code is compiled with -Wfloat-equal (at least
when using g++ 4.6 or later).

Closes #14895.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@73280 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

include/wx/any.h
include/wx/defs.h
include/wx/math.h

index 6e3877253283904337e912ebe4835c86f94808f0..2651ce219ce42684059fc19fd44f910507992bc3 100644 (file)
@@ -912,6 +912,8 @@ public:
     WXANY_IMPLEMENT_INT_EQ_OP(wxLongLong_t, wxULongLong_t)
 #endif
 
+    wxGCC_WARNING_SUPPRESS(float-equal)
+
     bool operator==(float value) const
     {
         if ( !wxAnyValueTypeImpl<float>::IsSameClass(m_type) )
@@ -932,6 +934,8 @@ public:
                 (wxAnyValueTypeImpl<double>::GetValue(m_buffer));
     }
 
+    wxGCC_WARNING_RESTORE(float-equal)
+
     bool operator==(bool value) const
     {
         if ( !wxAnyValueTypeImpl<bool>::IsSameClass(m_type) )
index a96a6e91f442a5dae5ddded636ed76286a59a90d..3e87cac57c5b7a36800e9b41b41c239c520f7a3c 100644 (file)
@@ -583,6 +583,27 @@ typedef short int WXTYPE;
 #   define wxDEPRECATED_BUT_USED_INTERNALLY(x) wxDEPRECATED(x)
 #endif
 
+/*
+   Macros to suppress and restore gcc warnings, requires g++ >= 4.6 and don't
+   do anything otherwise.
+
+   Example of use:
+
+        wxGCC_WARNING_SUPPRESS(float-equal)
+        inline bool wxIsSameDouble(double x, double y) { return x == y; }
+        wxGCC_WARNING_RESTORE(float-equal)
+ */
+#if wxCHECK_GCC_VERSION(4, 6)
+#   define wxGCC_WARNING_SUPPRESS(x) \
+        _Pragma (wxSTRINGIZE(GCC diagnostic push)) \
+        _Pragma (wxSTRINGIZE(GCC diagnostic ignored wxSTRINGIZE(wxCONCAT(-W,x))))
+#   define wxGCC_WARNING_RESTORE(x) \
+       _Pragma (wxSTRINGIZE(GCC diagnostic pop))
+#else /* gcc < 4.6 or not gcc at all */
+#   define wxGCC_WARNING_SUPPRESS(x)
+#   define wxGCC_WARNING_RESTORE(x)
+#endif
+
 /*
     Combination of the two variants above: should be used for deprecated
     functions which are defined inline and are used by wxWidgets itself.
index 98477e604e58f9943c1da989bc9f32f58378e17b..5240f1759e527b4cf61b840bc53f4fd5a005e83b 100644 (file)
         }
 
     #else /* !__INTELC__ */
-
+        wxGCC_WARNING_SUPPRESS(float-equal)
         inline bool wxIsSameDouble(double x, double y) { return x == y; }
+        wxGCC_WARNING_RESTORE(float-equal)
 
     #endif /* __INTELC__/!__INTELC__ */