diff options
author | Casey Carter <Casey@Carter.net> | 2019-04-25 18:36:29 +0000 |
---|---|---|
committer | Casey Carter <Casey@Carter.net> | 2019-04-25 18:36:29 +0000 |
commit | 413732354d2a304cf312d9cc7227c80067d21d36 (patch) | |
tree | 058d9ff5c06d1a7f8335af5bdac4af3340143d85 | |
parent | f9c30eddd013452dafe3649c3c05a74530a43c2d (diff) | |
download | bcm5719-llvm-413732354d2a304cf312d9cc7227c80067d21d36.tar.gz bcm5719-llvm-413732354d2a304cf312d9cc7227c80067d21d36.zip |
[libc++][test] Fix noexcept assertions in variant's get tests
All constant expressions are non-potentially-throwing in C++14, but that is *not* the case in C++17. Change these tests of the `variant`-flavored overloads of `std::get` to expect the correct behavior when the compiler is not GCC or is GCC 9+.
Credit to Jonathan Wakely for providing an improved version of my initial change that validates the incorrect behavior on GCC < 9 as well as validating the correct behavior on other compilers.
Differential Revision: https://reviews.llvm.org/D61033
llvm-svn: 359220
3 files changed, 20 insertions, 6 deletions
diff --git a/libcxx/test/std/utilities/variant/variant.get/get_index.pass.cpp b/libcxx/test/std/utilities/variant/variant.get/get_index.pass.cpp index 4b04929a6fc..4b0ae15c352 100644 --- a/libcxx/test/std/utilities/variant/variant.get/get_index.pass.cpp +++ b/libcxx/test/std/utilities/variant/variant.get/get_index.pass.cpp @@ -37,8 +37,10 @@ void test_const_lvalue_get() { { using V = std::variant<int, const long>; constexpr V v(42); -#ifndef __clang__ // Avoid https://bugs.llvm.org/show_bug.cgi?id=15481 +#ifdef TEST_WORKAROUND_CONSTEXPR_IMPLIES_NOEXCEPT ASSERT_NOEXCEPT(std::get<0>(v)); +#else + ASSERT_NOT_NOEXCEPT(std::get<0>(v)); #endif ASSERT_SAME_TYPE(decltype(std::get<0>(v)), const int &); static_assert(std::get<0>(v) == 42, ""); @@ -53,8 +55,10 @@ void test_const_lvalue_get() { { using V = std::variant<int, const long>; constexpr V v(42l); -#ifndef __clang__ // Avoid https://bugs.llvm.org/show_bug.cgi?id=15481 +#ifdef TEST_WORKAROUND_CONSTEXPR_IMPLIES_NOEXCEPT ASSERT_NOEXCEPT(std::get<1>(v)); +#else + ASSERT_NOT_NOEXCEPT(std::get<1>(v)); #endif ASSERT_SAME_TYPE(decltype(std::get<1>(v)), const long &); static_assert(std::get<1>(v) == 42, ""); diff --git a/libcxx/test/std/utilities/variant/variant.get/get_type.pass.cpp b/libcxx/test/std/utilities/variant/variant.get/get_type.pass.cpp index 316213ed2fa..bd9153671e2 100644 --- a/libcxx/test/std/utilities/variant/variant.get/get_type.pass.cpp +++ b/libcxx/test/std/utilities/variant/variant.get/get_type.pass.cpp @@ -31,24 +31,28 @@ void test_const_lvalue_get() { { using V = std::variant<int, const long>; constexpr V v(42); -#ifndef __clang__ // Avoid https://bugs.llvm.org/show_bug.cgi?id=15481 +#ifdef TEST_WORKAROUND_CONSTEXPR_IMPLIES_NOEXCEPT ASSERT_NOEXCEPT(std::get<int>(v)); +#else + ASSERT_NOT_NOEXCEPT(std::get<int>(v)); #endif - ASSERT_SAME_TYPE(decltype(std::get<0>(v)), const int &); + ASSERT_SAME_TYPE(decltype(std::get<int>(v)), const int &); static_assert(std::get<int>(v) == 42, ""); } { using V = std::variant<int, const long>; const V v(42); ASSERT_NOT_NOEXCEPT(std::get<int>(v)); - ASSERT_SAME_TYPE(decltype(std::get<0>(v)), const int &); + ASSERT_SAME_TYPE(decltype(std::get<int>(v)), const int &); assert(std::get<int>(v) == 42); } { using V = std::variant<int, const long>; constexpr V v(42l); -#ifndef __clang__ // Avoid https://bugs.llvm.org/show_bug.cgi?id=15481 +#ifdef TEST_WORKAROUND_CONSTEXPR_IMPLIES_NOEXCEPT ASSERT_NOEXCEPT(std::get<const long>(v)); +#else + ASSERT_NOT_NOEXCEPT(std::get<const long>(v)); #endif ASSERT_SAME_TYPE(decltype(std::get<const long>(v)), const long &); static_assert(std::get<const long>(v) == 42, ""); diff --git a/libcxx/test/support/test_workarounds.h b/libcxx/test/support/test_workarounds.h index 14ec9686139..81350c789d4 100644 --- a/libcxx/test/support/test_workarounds.h +++ b/libcxx/test/support/test_workarounds.h @@ -23,4 +23,10 @@ # endif #endif +#if defined(TEST_COMPILER_GCC) +# if __GNUC__ < 9 +# define TEST_WORKAROUND_CONSTEXPR_IMPLIES_NOEXCEPT // GCC PR 87603 +# endif +#endif + #endif // SUPPORT_TEST_WORKAROUNDS_H |