From 9aaadab7d6ea587a7a12f684911271dc4f7a1e8b Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Wed, 15 Dec 2021 02:15:36 +0100 Subject: [PATCH] Check for most clang warnings in our headers in the test suite Make allheaders unit test also enable -Wall, -Wextra and -Wpedantic for clang to detect any warnings it might give in wx headers. Don't use -Weverything because there are just too many warnings we'd need to disable then. --- tests/allheaders.cpp | 36 +++++++++++++++++++++++++++++++----- 1 file changed, 31 insertions(+), 5 deletions(-) diff --git a/tests/allheaders.cpp b/tests/allheaders.cpp index 1264104bbc..6295d897c1 100644 --- a/tests/allheaders.cpp +++ b/tests/allheaders.cpp @@ -18,7 +18,7 @@ #define CHECK_GCC_VERSION(major, minor) 0 #endif -#if CHECK_GCC_VERSION(4, 6) +#if CHECK_GCC_VERSION(4, 6) || defined(__clang__) // As above, we can't reuse wxCONCAT() and wxSTRINGIZE macros from wx/cpp.h // here, so define their equivalents here. #define CONCAT_HELPER(x, y) x ## y @@ -27,10 +27,18 @@ #define STRINGIZE_HELPER(x) #x #define STRINGIZE(x) STRINGIZE_HELPER(x) - #define GCC_TURN_ON(warn) \ - _Pragma(STRINGIZE(GCC diagnostic error STRINGIZE(CONCAT(-W,warn)))) - #define GCC_TURN_OFF(warn) \ - _Pragma(STRINGIZE(GCC diagnostic ignored STRINGIZE(CONCAT(-W,warn)))) + #define WARNING_TURN_ON(comp, warn) \ + _Pragma(STRINGIZE(comp diagnostic error STRINGIZE(CONCAT(-W,warn)))) + #define WARNING_TURN_OFF(comp, warn) \ + _Pragma(STRINGIZE(comp diagnostic ignored STRINGIZE(CONCAT(-W,warn)))) + + #if CHECK_GCC_VERSION(4, 6) + #define GCC_TURN_ON(warn) WARNING_TURN_ON(GCC, warn) + #define GCC_TURN_OFF(warn) WARNING_TURN_OFF(GCC, warn) + #elif defined(__clang__) + #define CLANG_TURN_ON(warn) WARNING_TURN_ON(clang, warn) + #define CLANG_TURN_OFF(warn) WARNING_TURN_OFF(clang, warn) + #endif #endif // We have to include this one first in order to check for wxUSE_XXX below. @@ -374,6 +382,24 @@ GCC_TURN_OFF(padded) #endif // gcc >= 4.6 +// Do the same for clang too except here we don't bother with the individual +// warnings and just enable the usual ones because clang mostly includes all +// the useful warnings in them anyhow. +#ifdef CLANG_TURN_ON + CLANG_TURN_ON(all) + CLANG_TURN_ON(extra) + CLANG_TURN_ON(pedantic) + + // We use long long, variadic macros and empty macro arguments (which are a + // C99 extension) even in C++98 builds. + #if __cplusplus < 201103L + CLANG_TURN_OFF(c++11-long-long) + CLANG_TURN_OFF(variadic-macros) + CLANG_TURN_OFF(c99-extensions) + #endif +#endif // clang + + // ANSI build hasn't been updated to work without implicit wxString encoding // and never will be, as it will be removed soon anyhow. And in UTF-8-only // build we actually want to use implicit encoding (UTF-8).