diff --git a/include/gsl/assert b/include/gsl/assert index 5181c13..daa1a75 100644 --- a/include/gsl/assert +++ b/include/gsl/assert @@ -31,6 +31,9 @@ #if defined(__clang__) #pragma clang diagnostic push #pragma clang diagnostic ignored "-Winvalid-noreturn" +#if __clang_major__ >= 22 +#pragma clang diagnostic ignored "-Wunique-object-duplication" +#endif // __clang_major >= 22 #endif // defined(__clang__) #else // defined(_MSC_VER) && (defined(_KERNEL_MODE) || (defined(_HAS_EXCEPTIONS) && diff --git a/include/gsl/util b/include/gsl/util index cc171d2..9c2627e 100644 --- a/include/gsl/util +++ b/include/gsl/util @@ -133,6 +133,12 @@ namespace details } // namespace details // final_action allows you to ensure something gets run at the end of a scope +// The bool member causes trailing padding when F has alignment > 1; suppress +// -Wpadded since the padding is unavoidable for a generic callable wrapper. +#if defined(__clang__) +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wpadded" +#endif // defined(__clang__) template class final_action { @@ -157,6 +163,9 @@ private: F f; bool invoke = true; }; +#if defined(__clang__) +#pragma clang diagnostic pop +#endif // defined(__clang__) // finally() - convenience function to generate a final_action template diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 3ec624c..92fee7d 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -54,6 +54,14 @@ if (NOT GTestMain_FOUND) ${CMAKE_CURRENT_BINARY_DIR}/googletest-build EXCLUDE_FROM_ALL ) + + # googletest is built as its own target, so apply this workaround there. + if (CMAKE_CXX_COMPILER_ID STREQUAL "Clang" + AND CMAKE_CXX_SIMULATE_ID STREQUAL "MSVC" + AND CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 22) + target_compile_options(gtest PRIVATE -Wno-character-conversion) + target_compile_options(gtest_main PRIVATE -Wno-character-conversion) + endif() endif() if (CMAKE_CURRENT_SOURCE_DIR STREQUAL CMAKE_SOURCE_DIR) @@ -111,7 +119,7 @@ if(MSVC) # MSVC or simulating MSVC -Wno-undef # GTest -Wno-used-but-marked-unused # GTest EXPECT_DEATH -Wno-switch-default # GTest EXPECT_DEATH - $<$: # no support for [[maybe_unused]] + $<$: # no support for [[maybe_unused]] -Wno-unused-member-function -Wno-unused-variable $<$,15.0.1>: diff --git a/tests/dyn_array_tests.cpp b/tests/dyn_array_tests.cpp index f67850f..80bca7a 100644 --- a/tests/dyn_array_tests.cpp +++ b/tests/dyn_array_tests.cpp @@ -189,6 +189,10 @@ TEST(dyn_array_tests, ranges) #endif /* __cpp_lib_ranges >= 201911L */ #if defined(__cpp_lib_constexpr_dynamic_alloc) && (__cpp_lib_constexpr_dynamic_alloc >= 201907L) +#if defined(__clang__) +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wpadded" +#endif // defined(__clang__) template struct ConstexprAllocator { @@ -218,6 +222,9 @@ struct ConstexprAllocator constexpr void deallocate(value_type*, std::size_t) noexcept {} }; +#if defined(__clang__) +#pragma clang diagnostic pop +#endif // defined(__clang__) template constexpr auto operator==(const ConstexprAllocator& lhs,