From d2b2c98185ef0b446997b704f9025f2977c7d8c2 Mon Sep 17 00:00:00 2001 From: Daniel Winsor Date: Wed, 20 Dec 2023 16:10:20 -0800 Subject: [PATCH 1/3] Adjust test initialization --- tests/span_tests.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/span_tests.cpp b/tests/span_tests.cpp index 44ae2052..d86458bd 100644 --- a/tests/span_tests.cpp +++ b/tests/span_tests.cpp @@ -333,7 +333,7 @@ TEST(span_test, from_array_constructor) EXPECT_TRUE(s.data() == std::addressof(arr2d[0])); } - int arr3d[2][3][2] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12}; + int arr3d[2][3][2] = { { {1, 2}, {3, 4}, {5, 6} }, { {7, 8}, {9, 10}, {11, 12} } }; #ifdef CONFIRM_COMPILATION_ERRORS { From 48d105af2355658330e23c7e80e9e9dce83d4153 Mon Sep 17 00:00:00 2001 From: Daniel Winsor Date: Wed, 21 Feb 2024 15:05:57 -0800 Subject: [PATCH 2/3] Add suppression --- include/gsl/span | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/include/gsl/span b/include/gsl/span index 3f82a5e9..566a01c6 100644 --- a/include/gsl/span +++ b/include/gsl/span @@ -63,6 +63,12 @@ #pragma GCC diagnostic ignored "-Wsign-conversion" #endif +// Turn off clang unsafe buffer warnings as all accessed are guarded by runtime checks +#if defined(__clang__) +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wunsafe-buffer-usage" +#endif // defined(__clang__) + namespace gsl { From 13bb92959b10b105a33e0a5ec1bb649f4f0657cc Mon Sep 17 00:00:00 2001 From: Daniel Winsor Date: Mon, 26 Feb 2024 12:55:46 -0800 Subject: [PATCH 3/3] Suppress unsafe-buffer-usage --- include/gsl/span | 8 ++++++-- include/gsl/util | 10 ++++++++++ tests/CMakeLists.txt | 20 ++++++++++---------- 3 files changed, 26 insertions(+), 12 deletions(-) diff --git a/include/gsl/span b/include/gsl/span index 566a01c6..d71d813f 100644 --- a/include/gsl/span +++ b/include/gsl/span @@ -64,10 +64,10 @@ #endif // Turn off clang unsafe buffer warnings as all accessed are guarded by runtime checks -#if defined(__clang__) +#if defined(__clang__) && __has_warning("-Wunsafe-buffer-usage") #pragma clang diagnostic push #pragma clang diagnostic ignored "-Wunsafe-buffer-usage" -#endif // defined(__clang__) +#endif // defined(__clang__) && __has_warning("-Wunsafe-buffer-usage") namespace gsl { @@ -852,4 +852,8 @@ as_writable_bytes(span s) noexcept #pragma GCC diagnostic pop #endif // __GNUC__ > 6 +#if defined(__clang__) && __has_warning("-Wunsafe-buffer-usage") +#pragma clang diagnostic pop +#endif + #endif // GSL_SPAN_H diff --git a/include/gsl/util b/include/gsl/util index 71f942df..b853017d 100644 --- a/include/gsl/util +++ b/include/gsl/util @@ -40,6 +40,12 @@ #endif // _MSC_VER +// Turn off clang unsafe buffer warnings as all accessed are guarded by runtime checks +#if defined(__clang__) && __has_warning("-Wunsafe-buffer-usage") +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wunsafe-buffer-usage" +#endif // defined(__clang__) && __has_warning("-Wunsafe-buffer-usage") + #if defined(__cplusplus) && (__cplusplus >= 201703L) #define GSL_NODISCARD [[nodiscard]] #else @@ -154,4 +160,8 @@ constexpr auto at(std::span sp, const index i) -> decltype(sp[sp.size #endif // _MSC_VER +#if defined(__clang__) && __has_warning("-Wunsafe-buffer-usage") +#pragma clang diagnostic pop +#endif + #endif // GSL_UTIL_H diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 493285c9..519e4a40 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -123,11 +123,6 @@ if(MSVC) # MSVC or simulating MSVC if (WARN_RESERVED_ID) target_compile_options(gsl_tests_config INTERFACE "-Wno-reserved-identifier") endif() - check_cxx_compiler_flag("-Wno-unsafe-buffer-usage" WARN_UNSAFE_BUFFER) - if (WARN_UNSAFE_BUFFER) - # This test uses very greedy heuristics such as "no pointer arithmetic on raw buffer" - target_compile_options(gsl_tests_config INTERFACE "-Wno-unsafe-buffer-usage") - endif() else() target_compile_options(gsl_tests_config INTERFACE -fno-strict-aliasing @@ -191,6 +186,11 @@ else() > ) endif(MSVC) +check_cxx_compiler_flag("-Wno-unsafe-buffer-usage" WARN_UNSAFE_BUFFER) +if (WARN_UNSAFE_BUFFER) + # This test uses very greedy heuristics such as "no pointer arithmetic on raw buffer" + target_compile_options(gsl_tests_config INTERFACE "-Wno-unsafe-buffer-usage") +endif() # for tests to find the gtest header target_include_directories(gsl_tests_config SYSTEM INTERFACE @@ -262,11 +262,6 @@ if(MSVC) # MSVC or simulating MSVC if (WARN_RESERVED_ID) target_compile_options(gsl_tests_config_noexcept INTERFACE "-Wno-reserved-identifier") endif() - check_cxx_compiler_flag("-Wno-unsafe-buffer-usage" WARN_UNSAFE_BUFFER) - if (WARN_UNSAFE_BUFFER) - # This test uses very greedy heuristics such as "no pointer arithmetic on raw buffer" - target_compile_options(gsl_tests_config_noexcept INTERFACE "-Wno-unsafe-buffer-usage") - endif() else() target_compile_options(gsl_tests_config_noexcept INTERFACE -fno-exceptions @@ -307,6 +302,11 @@ else() > ) endif(MSVC) +check_cxx_compiler_flag("-Wno-unsafe-buffer-usage" WARN_UNSAFE_BUFFER) +if (WARN_UNSAFE_BUFFER) + # This test uses very greedy heuristics such as "no pointer arithmetic on raw buffer" + target_compile_options(gsl_tests_config_noexcept INTERFACE "-Wno-unsafe-buffer-usage") +endif() add_executable(gsl_noexcept_tests no_exception_ensure_tests.cpp) target_link_libraries(gsl_noexcept_tests