diff options
| author | Martin Hořeňovský | 2026-04-01 09:41:41 +0200 |
|---|---|---|
| committer | Martin Hořeňovský | 2026-04-01 09:41:41 +0200 |
| commit | e8fc1039cf92a87b3a8cc4d955c1f7f807a5c783 (patch) | |
| tree | 19f3f9a6d2ee83e11d60dec0de4825fd990e9a93 | |
| parent | 2ec64d12b198cd25a9ca84230a2be7cfd24494fa (diff) | |
| download | catch3-devel-attempt-at-counter-warning-fix.tar.gz | |
Attempt at localized fix for warnings: doesn't work on old clang, doesn't work on Clang22devel-attempt-at-counter-warning-fix
| -rw-r--r-- | src/catch2/internal/catch_compiler_capabilities.hpp | 8 | ||||
| -rw-r--r-- | src/catch2/internal/catch_preprocessor.hpp | 7 | ||||
| -rw-r--r-- | src/catch2/internal/catch_template_test_registry.hpp | 14 | ||||
| -rw-r--r-- | src/catch2/internal/catch_unique_name.hpp | 26 | ||||
| -rw-r--r-- | tests/SelfTest/UsageTests/Condition.tests.cpp | 19 | ||||
| -rw-r--r-- | tests/SelfTest/UsageTests/Misc.tests.cpp | 6 |
6 files changed, 53 insertions, 27 deletions
diff --git a/src/catch2/internal/catch_compiler_capabilities.hpp b/src/catch2/internal/catch_compiler_capabilities.hpp index 59839c17..2bbee6bc 100644 --- a/src/catch2/internal/catch_compiler_capabilities.hpp +++ b/src/catch2/internal/catch_compiler_capabilities.hpp @@ -114,6 +114,11 @@ _Pragma( "clang diagnostic ignored \"-Wgnu-zero-variadic-macro-arguments\"" ) # endif +# if ( __clang_major__ >= 22 ) +# define CATCH_INTERNAL_SUPPRESS_COUNTER_WARNINGS \ + _Pragma( "clang diagnostic ignored \"-Wc2y-extensions\"" ) +# endif + # define CATCH_INTERNAL_SUPPRESS_UNUSED_TEMPLATE_WARNINGS \ _Pragma( "clang diagnostic ignored \"-Wunused-template\"" ) @@ -429,6 +434,9 @@ #if !defined( CATCH_INTERNAL_SUPPRESS_SHADOW_WARNINGS ) # define CATCH_INTERNAL_SUPPRESS_SHADOW_WARNINGS #endif +#if !defined( CATCH_INTERNAL_SUPPRESS_COUNTER_WARNINGS ) +# define CATCH_INTERNAL_SUPPRESS_COUNTER_WARNINGS +#endif #if defined(__APPLE__) && defined(__apple_build_version__) && (__clang_major__ < 10) # undef CATCH_INTERNAL_SUPPRESS_UNUSED_TEMPLATE_WARNINGS diff --git a/src/catch2/internal/catch_preprocessor.hpp b/src/catch2/internal/catch_preprocessor.hpp index 1fc8fb8c..68af54de 100644 --- a/src/catch2/internal/catch_preprocessor.hpp +++ b/src/catch2/internal/catch_preprocessor.hpp @@ -80,9 +80,6 @@ namespace Catch { #define INTERNAL_CATCH_STRINGIZE_WITHOUT_PARENS(param) (INTERNAL_CATCH_STRINGIZE(INTERNAL_CATCH_REMOVE_PARENS(param)) + 1) #endif -#define INTERNAL_CATCH_MAKE_NAMESPACE2(...) ns_##__VA_ARGS__ -#define INTERNAL_CATCH_MAKE_NAMESPACE(name) INTERNAL_CATCH_MAKE_NAMESPACE2(name) - #ifndef CATCH_CONFIG_TRADITIONAL_MSVC_PREPROCESSOR #define INTERNAL_CATCH_MAKE_TYPE_LIST2(...) decltype(get_wrapper<INTERNAL_CATCH_REMOVE_PARENS_GEN(__VA_ARGS__)>(Catch::Detail::priority_tag<1>{})) #define INTERNAL_CATCH_MAKE_TYPE_LIST(...) INTERNAL_CATCH_MAKE_TYPE_LIST2(INTERNAL_CATCH_REMOVE_PARENS(__VA_ARGS__)) @@ -217,10 +214,10 @@ namespace Catch { #define INTERNAL_CATCH_DEFINE_SIG_TEST_METHOD0(TestName) #define INTERNAL_CATCH_DEFINE_SIG_TEST_METHOD1(TestName, signature)\ template<typename TestType> \ - void INTERNAL_CATCH_MAKE_NAMESPACE(TestName)::TestName<TestType>::test() + void TestName::TestName<TestType>::test() #define INTERNAL_CATCH_DEFINE_SIG_TEST_METHOD_X(TestName, signature, ...)\ template<INTERNAL_CATCH_REMOVE_PARENS(signature)> \ - void INTERNAL_CATCH_MAKE_NAMESPACE(TestName)::TestName<__VA_ARGS__>::test() + void TestName::TestName<__VA_ARGS__>::test() #ifndef CATCH_CONFIG_TRADITIONAL_MSVC_PREPROCESSOR #define INTERNAL_CATCH_NTTP_0 diff --git a/src/catch2/internal/catch_template_test_registry.hpp b/src/catch2/internal/catch_template_test_registry.hpp index 7aec888f..44ccddae 100644 --- a/src/catch2/internal/catch_template_test_registry.hpp +++ b/src/catch2/internal/catch_template_test_registry.hpp @@ -27,7 +27,7 @@ INTERNAL_CATCH_DEFINE_SIG_TEST(TestFunc, INTERNAL_CATCH_REMOVE_PARENS(Signature)) #define INTERNAL_CATCH_TEMPLATE_TEST_CASE_METHOD_NO_REGISTRATION_2( TestNameClass, TestName, ClassName, Name, Tags, Signature, ... ) \ namespace{ \ - namespace INTERNAL_CATCH_MAKE_NAMESPACE(TestName) { \ + namespace TestName { \ INTERNAL_CATCH_DECLARE_SIG_TEST_METHOD(TestName, ClassName, INTERNAL_CATCH_REMOVE_PARENS(Signature));\ } \ } \ @@ -77,7 +77,7 @@ CATCH_INTERNAL_SUPPRESS_COMMA_WARNINGS \ INTERNAL_CATCH_DECLARE_SIG_TEST(TestFunc, INTERNAL_CATCH_REMOVE_PARENS(Signature));\ namespace {\ - namespace INTERNAL_CATCH_MAKE_NAMESPACE(TestName){\ + namespace TestName {\ INTERNAL_CATCH_TYPE_GEN\ INTERNAL_CATCH_NTTP_GEN(INTERNAL_CATCH_REMOVE_PARENS(Signature))\ INTERNAL_CATCH_NTTP_REG_GEN(TestFunc,INTERNAL_CATCH_REMOVE_PARENS(Signature))\ @@ -124,7 +124,7 @@ CATCH_INTERNAL_SUPPRESS_COMMA_WARNINGS \ template<typename TestType> static void TestFuncName(); \ namespace {\ - namespace INTERNAL_CATCH_MAKE_NAMESPACE(TestName) { \ + namespace TestName { \ INTERNAL_CATCH_TYPE_GEN \ INTERNAL_CATCH_NTTP_GEN(INTERNAL_CATCH_REMOVE_PARENS(Signature)) \ template<typename... Types> \ @@ -174,7 +174,7 @@ CATCH_INTERNAL_SUPPRESS_COMMA_WARNINGS \ template<typename TestType> static void TestFunc(); \ namespace {\ - namespace INTERNAL_CATCH_MAKE_NAMESPACE(TestName){\ + namespace TestName{\ INTERNAL_CATCH_TYPE_GEN\ template<typename... Types> \ struct TestName { \ @@ -206,7 +206,7 @@ CATCH_INTERNAL_SUPPRESS_UNUSED_TEMPLATE_WARNINGS \ CATCH_INTERNAL_SUPPRESS_UNUSED_VARIABLE_WARNINGS \ namespace {\ - namespace INTERNAL_CATCH_MAKE_NAMESPACE(TestName){ \ + namespace TestName { \ INTERNAL_CATCH_TYPE_GEN\ INTERNAL_CATCH_NTTP_GEN(INTERNAL_CATCH_REMOVE_PARENS(Signature))\ INTERNAL_CATCH_DECLARE_SIG_TEST_METHOD(TestName, ClassName, INTERNAL_CATCH_REMOVE_PARENS(Signature));\ @@ -256,7 +256,7 @@ void test();\ };\ namespace {\ - namespace INTERNAL_CATCH_MAKE_NAMESPACE(TestNameClass) {\ + namespace TestNameClass {\ INTERNAL_CATCH_TYPE_GEN \ INTERNAL_CATCH_NTTP_GEN(INTERNAL_CATCH_REMOVE_PARENS(Signature))\ template<typename...Types>\ @@ -309,7 +309,7 @@ void test();\ };\ namespace {\ - namespace INTERNAL_CATCH_MAKE_NAMESPACE(TestName){ \ + namespace INTERNAL_CATCH_UNIQUE_NAME(NsTestName) { \ INTERNAL_CATCH_TYPE_GEN\ template<typename...Types>\ struct TestNameClass{\ diff --git a/src/catch2/internal/catch_unique_name.hpp b/src/catch2/internal/catch_unique_name.hpp index c6e1c2ca..337b485b 100644 --- a/src/catch2/internal/catch_unique_name.hpp +++ b/src/catch2/internal/catch_unique_name.hpp @@ -8,13 +8,33 @@ #ifndef CATCH_UNIQUE_NAME_HPP_INCLUDED #define CATCH_UNIQUE_NAME_HPP_INCLUDED +#include <catch2/internal/catch_compiler_capabilities.hpp> #include <catch2/internal/catch_config_counter.hpp> + +// Fixme: Clang 22 has an annoying bug where the localized suppression +// below does not actually suppress the extension warning from +// using __COUNTER__, so we have to leak the suppression for the +// whole TU. Hopefully Clang 23 fixes this before full release. +// As AppleClang does its own thing version-wise, we ignore it +// completely. +#if defined( __clang__ ) && ( __clang_major__ >= 22 ) && !defined( __APPLE__ ) +CATCH_INTERNAL_SUPPRESS_COUNTER_WARNINGS +#endif + #define INTERNAL_CATCH_UNIQUE_NAME_LINE2( name, line ) name##line -#define INTERNAL_CATCH_UNIQUE_NAME_LINE( name, line ) INTERNAL_CATCH_UNIQUE_NAME_LINE2( name, line ) +#define INTERNAL_CATCH_UNIQUE_NAME_LINE( name, line ) \ + INTERNAL_CATCH_UNIQUE_NAME_LINE2( name, line ) + #ifdef CATCH_CONFIG_COUNTER -# define INTERNAL_CATCH_UNIQUE_NAME( name ) INTERNAL_CATCH_UNIQUE_NAME_LINE( name, __COUNTER__ ) +# define INTERNAL_CATCH_UNIQUE_NAME( name ) \ + CATCH_INTERNAL_START_WARNINGS_SUPPRESSION \ + CATCH_INTERNAL_SUPPRESS_COUNTER_WARNINGS \ + INTERNAL_CATCH_UNIQUE_NAME_LINE( name, __COUNTER__ ) \ + CATCH_INTERNAL_STOP_WARNINGS_SUPPRESSION + #else -# define INTERNAL_CATCH_UNIQUE_NAME( name ) INTERNAL_CATCH_UNIQUE_NAME_LINE( name, __LINE__ ) +# define INTERNAL_CATCH_UNIQUE_NAME( name ) \ + INTERNAL_CATCH_UNIQUE_NAME_LINE( name, __LINE__ ) #endif #endif // CATCH_UNIQUE_NAME_HPP_INCLUDED diff --git a/tests/SelfTest/UsageTests/Condition.tests.cpp b/tests/SelfTest/UsageTests/Condition.tests.cpp index 211dd3b9..922d44d2 100644 --- a/tests/SelfTest/UsageTests/Condition.tests.cpp +++ b/tests/SelfTest/UsageTests/Condition.tests.cpp @@ -6,15 +6,6 @@ // SPDX-License-Identifier: BSL-1.0 -#ifdef __clang__ -# pragma clang diagnostic push -# pragma clang diagnostic ignored "-Wpadded" -// Wdouble-promotion is not supported until 3.8 -# if (__clang_major__ > 3) || (__clang_major__ == 3 && __clang_minor__ > 7) -# pragma clang diagnostic ignored "-Wdouble-promotion" -# endif -#endif - #include <catch2/catch_approx.hpp> #include <catch2/catch_test_macros.hpp> @@ -24,6 +15,16 @@ using Catch::Approx; #include <limits> #include <cstdint> +#ifdef __clang__ +# pragma clang diagnostic push +# pragma clang diagnostic ignored "-Wpadded" +// Wdouble-promotion is not supported until 3.8 +# if ( __clang_major__ > 3 ) || \ + ( __clang_major__ == 3 && __clang_minor__ > 7 ) +# pragma clang diagnostic ignored "-Wdouble-promotion" +# endif +#endif + namespace { struct TestData { diff --git a/tests/SelfTest/UsageTests/Misc.tests.cpp b/tests/SelfTest/UsageTests/Misc.tests.cpp index dec51ab8..69bcdd61 100644 --- a/tests/SelfTest/UsageTests/Misc.tests.cpp +++ b/tests/SelfTest/UsageTests/Misc.tests.cpp @@ -388,9 +388,9 @@ TEMPLATE_PRODUCT_TEST_CASE_SIG("A Template product test case with array signatur REQUIRE(x.size() > 0); } -TEMPLATE_PRODUCT_TEST_CASE("Product with differing arities", "[template][product]", std::tuple, (int, (int, double), (int, double, float))) { - REQUIRE(std::tuple_size<TestType>::value >= 1); -} +//TEMPLATE_PRODUCT_TEST_CASE("Product with differing arities", "[template][product]", std::tuple, (int, (int, double), (int, double, float))) { +// REQUIRE(std::tuple_size<TestType>::value >= 1); +//} using MyTypes = std::tuple<int, char, float>; TEMPLATE_LIST_TEST_CASE("Template test case with test types specified inside std::tuple", "[template][list]", MyTypes) |