diff --git a/include/gsl/span b/include/gsl/span index 566a01c..d71d813 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 71f942d..b853017 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 493285c..519e4a4 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