From f90205951c347763a76681724fe3f7907ce3559b Mon Sep 17 00:00:00 2001 From: ARATA Mizuki Date: Mon, 21 Sep 2015 23:45:51 +0900 Subject: [PATCH] Add macros to conditionally suppress clang warnings. The added macros wxCLANG_WARNING_{SUPPRESS,RESTORE} are similar to wxGCC_WARNING_{SUPPRESS,RESTORE}, but the `wxCLANG_' version will expand to compiler pragmas only when the warning name is known to the compiler. They use clang's __has_warning feature. --- include/wx/defs.h | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/include/wx/defs.h b/include/wx/defs.h index 962def7d5b..ceba1f7d40 100644 --- a/include/wx/defs.h +++ b/include/wx/defs.h @@ -695,6 +695,29 @@ typedef short int WXTYPE; # define wxGCC_WARNING_RESTORE(x) #endif +/* + Macros to suppress and restore clang warning only when it is valid. + + Example: + wxCLANG_WARNING_SUPPRESS(inconsistent-missing-override) + virtual wxClassInfo *GetClassInfo() const + wxCLANG_WARNING_RESTORE(inconsistent-missing-override) +*/ +#if defined(__has_warning) +# define wxCLANG_HAS_WARNING(x) __has_warning(x) /* allow macro expansion for the warning name */ +# define wxCLANG_IF_VALID_WARNING(x,y) \ + wxCONCAT(wxCLANG_IF_VALID_WARNING_,wxCLANG_HAS_WARNING(wxSTRINGIZE(wxCONCAT(-W,x))))(y) +# define wxCLANG_IF_VALID_WARNING_0(x) +# define wxCLANG_IF_VALID_WARNING_1(x) x +# define wxCLANG_WARNING_SUPPRESS(x) \ + wxCLANG_IF_VALID_WARNING(x,wxGCC_WARNING_SUPPRESS(x)) +# define wxCLANG_WARNING_RESTORE(x) \ + wxCLANG_IF_VALID_WARNING(x,wxGCC_WARNING_RESTORE(x)) +#else +# define wxCLANG_WARNING_SUPPRESS(x) +# define wxCLANG_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.