From b92504b70811acfe2c41a5e61e52448a6ee2a9fd Mon Sep 17 00:00:00 2001 From: Michael Schellenberger Costa Date: Tue, 27 Jun 2023 11:09:27 +0000 Subject: [PATCH] Make `optional` compile with old clang and nvcc --- .../optional.comp_with_t/equal.pass.cpp | 12 +- .../optional.comp_with_t/greater.pass.cpp | 12 +- .../greater_equal.pass.cpp | 12 +- .../optional.comp_with_t/less_equal.pass.cpp | 12 +- .../optional.comp_with_t/less_than.pass.cpp | 12 +- .../optional.comp_with_t/not_equal.pass.cpp | 12 +- .../optional.monadic/or_else.pass.cpp | 8 +- .../optional/optional.nullops/equal.pass.cpp | 6 +- .../optional.nullops/greater.pass.cpp | 6 +- .../optional.nullops/greater_equal.pass.cpp | 6 +- .../optional.nullops/less_equal.pass.cpp | 6 +- .../optional.nullops/less_than.pass.cpp | 6 +- .../optional.nullops/not_equal.pass.cpp | 6 +- .../assign_value.pass.cpp | 2 + .../const_optional_U.pass.cpp | 2 + .../optional.object.assign/copy.pass.cpp | 4 + .../optional.object.assign/move.pass.cpp | 8 ++ .../optional.object.ctor/U.pass.cpp | 6 + .../optional.object.ctor/const_T.pass.cpp | 4 + .../optional.object.ctor/copy.pass.cpp | 4 + .../optional.object.ctor/default.pass.cpp | 30 ++-- .../optional.object.ctor/in_place_t.pass.cpp | 4 + .../initializer_list.pass.cpp | 2 + .../optional.object.ctor/move.pass.cpp | 4 + .../optional.object.ctor/nullopt_t.pass.cpp | 18 ++- .../optional.object.ctor/rvalue_T.pass.cpp | 4 + .../optional.object.observe/bool.pass.cpp | 2 + .../dereference.pass.cpp | 2 + .../dereference_const.pass.cpp | 2 + .../dereference_const_rvalue.pass.cpp | 2 + .../dereference_rvalue.pass.cpp | 2 + .../has_value.pass.cpp | 2 + .../optional.object.observe/op_arrow.pass.cpp | 2 + .../op_arrow_const.pass.cpp | 2 + .../optional.object.observe/value.pass.cpp | 2 + .../value_const.pass.cpp | 2 + .../value_const_rvalue.pass.cpp | 2 + .../value_or_const.pass.cpp | 2 + .../value_rvalue.pass.cpp | 2 + .../optional/optional.relops/equal.pass.cpp | 16 ++- .../optional.relops/greater_equal.pass.cpp | 16 ++- .../optional.relops/greater_than.pass.cpp | 16 ++- .../optional.relops/less_equal.pass.cpp | 16 ++- .../optional.relops/less_than.pass.cpp | 16 ++- .../optional.relops/not_equal.pass.cpp | 16 ++- .../optional.specalg/make_optional.pass.cpp | 2 + .../make_optional_explicit.pass.cpp | 2 + ...ptional_explicit_initializer_list.pass.cpp | 2 + .../cuda/std/detail/libcxx/include/optional | 129 +++++++++++------- 49 files changed, 310 insertions(+), 155 deletions(-) diff --git a/libcudacxx/.upstream-tests/test/std/utilities/optional/optional.comp_with_t/equal.pass.cpp b/libcudacxx/.upstream-tests/test/std/utilities/optional/optional.comp_with_t/equal.pass.cpp index ac48e29a8cf..0321c8a22c8 100644 --- a/libcudacxx/.upstream-tests/test/std/utilities/optional/optional.comp_with_t/equal.pass.cpp +++ b/libcudacxx/.upstream-tests/test/std/utilities/optional/optional.comp_with_t/equal.pass.cpp @@ -39,9 +39,9 @@ constexpr bool test() { typedef optional O; constexpr T val(2); - constexpr O o1; // disengaged - constexpr O o2{1}; // engaged - constexpr O o3{val}; // engaged + O o1; // disengaged + O o2{1}; // engaged + O o3{val}; // engaged assert(!(o1 == T(1))); assert((o2 == T(1))); @@ -57,13 +57,13 @@ constexpr bool test() { } { using O = optional; - constexpr O o1(42); + O o1(42); assert(o1 == 42l); assert(!(101l == o1)); } { using O = optional; - constexpr O o1(42); + O o1(42); assert(o1 == 42); assert(!(101 == o1)); } @@ -74,7 +74,9 @@ constexpr bool test() { int main(int, char**) { test(); #if TEST_STD_VER >= 17 +#if !(defined(TEST_COMPILER_NVCC) && _LIBCUDACXX_CUDACC_VER < 1103000 && defined(TEST_COMPILER_CLANG)) static_assert(test()); +#endif // !(defined(TEST_COMPILER_NVCC) && _LIBCUDACXX_CUDACC_VER < 1103000 && defined(TEST_COMPILER_CLANG)) #endif return 0; diff --git a/libcudacxx/.upstream-tests/test/std/utilities/optional/optional.comp_with_t/greater.pass.cpp b/libcudacxx/.upstream-tests/test/std/utilities/optional/optional.comp_with_t/greater.pass.cpp index 275f110170f..086d697fc1b 100644 --- a/libcudacxx/.upstream-tests/test/std/utilities/optional/optional.comp_with_t/greater.pass.cpp +++ b/libcudacxx/.upstream-tests/test/std/utilities/optional/optional.comp_with_t/greater.pass.cpp @@ -37,9 +37,9 @@ constexpr bool test() { typedef optional O; constexpr T val(2); - constexpr O o1; // disengaged - constexpr O o2{1}; // engaged - constexpr O o3{val}; // engaged + O o1; // disengaged + O o2{1}; // engaged + O o3{val}; // engaged assert(!(o1 > T(1))); assert(!(o2 > T(1))); // equal @@ -57,13 +57,13 @@ constexpr bool test() { } { using O = optional; - constexpr O o1(42); + O o1(42); assert(o1 > 11l); assert(!(42l > o1)); } { using O = optional; - constexpr O o1(42); + O o1(42); assert(o1 > 11); assert(!(42 > o1)); } @@ -74,7 +74,9 @@ constexpr bool test() { int main(int, char**) { test(); #if TEST_STD_VER >= 17 +#if !(defined(TEST_COMPILER_NVCC) && _LIBCUDACXX_CUDACC_VER < 1103000 && defined(TEST_COMPILER_CLANG)) static_assert(test()); +#endif // !(defined(TEST_COMPILER_NVCC) && _LIBCUDACXX_CUDACC_VER < 1103000 && defined(TEST_COMPILER_CLANG)) #endif return 0; diff --git a/libcudacxx/.upstream-tests/test/std/utilities/optional/optional.comp_with_t/greater_equal.pass.cpp b/libcudacxx/.upstream-tests/test/std/utilities/optional/optional.comp_with_t/greater_equal.pass.cpp index 365f44c4c32..3828efda21c 100644 --- a/libcudacxx/.upstream-tests/test/std/utilities/optional/optional.comp_with_t/greater_equal.pass.cpp +++ b/libcudacxx/.upstream-tests/test/std/utilities/optional/optional.comp_with_t/greater_equal.pass.cpp @@ -39,9 +39,9 @@ constexpr bool test() { typedef optional O; constexpr T val(2); - constexpr O o1; // disengaged - constexpr O o2{1}; // engaged - constexpr O o3{val}; // engaged + O o1; // disengaged + O o2{1}; // engaged + O o3{val}; // engaged assert(!(o1 >= T(1))); assert((o2 >= T(1))); // equal @@ -59,13 +59,13 @@ constexpr bool test() { } { using O = optional; - constexpr O o1(42); + O o1(42); assert(o1 >= 42l); assert(!(11l >= o1)); } { using O = optional; - constexpr O o1(42); + O o1(42); assert(o1 >= 42); assert(!(11 >= o1)); } @@ -76,7 +76,9 @@ constexpr bool test() { int main(int, char**) { test(); #if TEST_STD_VER >= 17 +#if !(defined(TEST_COMPILER_NVCC) && _LIBCUDACXX_CUDACC_VER < 1103000 && defined(TEST_COMPILER_CLANG)) static_assert(test()); +#endif // !(defined(TEST_COMPILER_NVCC) && _LIBCUDACXX_CUDACC_VER < 1103000 && defined(TEST_COMPILER_CLANG)) #endif return 0; diff --git a/libcudacxx/.upstream-tests/test/std/utilities/optional/optional.comp_with_t/less_equal.pass.cpp b/libcudacxx/.upstream-tests/test/std/utilities/optional/optional.comp_with_t/less_equal.pass.cpp index 30791817cfd..1dc4344b677 100644 --- a/libcudacxx/.upstream-tests/test/std/utilities/optional/optional.comp_with_t/less_equal.pass.cpp +++ b/libcudacxx/.upstream-tests/test/std/utilities/optional/optional.comp_with_t/less_equal.pass.cpp @@ -39,9 +39,9 @@ constexpr bool test() { typedef optional O; constexpr T val(2); - constexpr O o1; // disengaged - constexpr O o2{1}; // engaged - constexpr O o3{val}; // engaged + O o1; // disengaged + O o2{1}; // engaged + O o3{val}; // engaged assert((o1 <= T(1))); assert((o2 <= T(1))); // equal @@ -59,13 +59,13 @@ constexpr bool test() { } { using O = optional; - constexpr O o1(42); + O o1(42); assert(o1 <= 42l); assert(!(101l <= o1)); } { using O = optional; - constexpr O o1(42); + O o1(42); assert(o1 <= 42); assert(!(101 <= o1)); } @@ -76,7 +76,9 @@ constexpr bool test() { int main(int, char**) { test(); #if TEST_STD_VER >= 17 +#if !(defined(TEST_COMPILER_NVCC) && _LIBCUDACXX_CUDACC_VER < 1103000 && defined(TEST_COMPILER_CLANG)) static_assert(test()); +#endif // !(defined(TEST_COMPILER_NVCC) && _LIBCUDACXX_CUDACC_VER < 1103000 && defined(TEST_COMPILER_CLANG)) #endif return 0; diff --git a/libcudacxx/.upstream-tests/test/std/utilities/optional/optional.comp_with_t/less_than.pass.cpp b/libcudacxx/.upstream-tests/test/std/utilities/optional/optional.comp_with_t/less_than.pass.cpp index 54acf3988fe..7f274e08030 100644 --- a/libcudacxx/.upstream-tests/test/std/utilities/optional/optional.comp_with_t/less_than.pass.cpp +++ b/libcudacxx/.upstream-tests/test/std/utilities/optional/optional.comp_with_t/less_than.pass.cpp @@ -37,9 +37,9 @@ constexpr bool test() { typedef optional O; constexpr T val(2); - constexpr O o1; // disengaged - constexpr O o2{1}; // engaged - constexpr O o3{val}; // engaged + O o1; // disengaged + O o2{1}; // engaged + O o3{val}; // engaged assert((o1 < T(1))); assert(!(o2 < T(1))); // equal @@ -57,13 +57,13 @@ constexpr bool test() { } { using O = optional; - constexpr O o1(42); + O o1(42); assert(o1 < 101l); assert(!(42l < o1)); } { using O = optional; - constexpr O o1(42); + O o1(42); assert(o1 < 101); assert(!(42 < o1)); } @@ -74,7 +74,9 @@ constexpr bool test() { int main(int, char**) { test(); #if TEST_STD_VER >= 17 +#if !(defined(TEST_COMPILER_NVCC) && _LIBCUDACXX_CUDACC_VER < 1103000 && defined(TEST_COMPILER_CLANG)) static_assert(test()); +#endif // !(defined(TEST_COMPILER_NVCC) && _LIBCUDACXX_CUDACC_VER < 1103000 && defined(TEST_COMPILER_CLANG)) #endif return 0; diff --git a/libcudacxx/.upstream-tests/test/std/utilities/optional/optional.comp_with_t/not_equal.pass.cpp b/libcudacxx/.upstream-tests/test/std/utilities/optional/optional.comp_with_t/not_equal.pass.cpp index cb1a07e2304..8238a121c2b 100644 --- a/libcudacxx/.upstream-tests/test/std/utilities/optional/optional.comp_with_t/not_equal.pass.cpp +++ b/libcudacxx/.upstream-tests/test/std/utilities/optional/optional.comp_with_t/not_equal.pass.cpp @@ -39,9 +39,9 @@ constexpr bool test() { typedef optional O; constexpr T val(2); - constexpr O o1; // disengaged - constexpr O o2{1}; // engaged - constexpr O o3{val}; // engaged + O o1; // disengaged + O o2{1}; // engaged + O o3{val}; // engaged assert((o1 != T(1))); assert(!(o2 != T(1))); @@ -57,13 +57,13 @@ constexpr bool test() { } { using O = optional; - constexpr O o1(42); + O o1(42); assert(o1 != 101l); assert(!(42l != o1)); } { using O = optional; - constexpr O o1(42); + O o1(42); assert(o1 != 101); assert(!(42 != o1)); } @@ -74,7 +74,9 @@ constexpr bool test() { int main(int, char**) { test(); #if TEST_STD_VER >= 17 +#if !(defined(TEST_COMPILER_NVCC) && _LIBCUDACXX_CUDACC_VER < 1103000 && defined(TEST_COMPILER_CLANG)) static_assert(test()); +#endif // !(defined(TEST_COMPILER_NVCC) && _LIBCUDACXX_CUDACC_VER < 1103000 && defined(TEST_COMPILER_CLANG)) #endif return 0; diff --git a/libcudacxx/.upstream-tests/test/std/utilities/optional/optional.monadic/or_else.pass.cpp b/libcudacxx/.upstream-tests/test/std/utilities/optional/optional.monadic/or_else.pass.cpp index 869aab07a11..fc8c59a6d57 100644 --- a/libcudacxx/.upstream-tests/test/std/utilities/optional/optional.monadic/or_else.pass.cpp +++ b/libcudacxx/.upstream-tests/test/std/utilities/optional/optional.monadic/or_else.pass.cpp @@ -128,14 +128,16 @@ TEST_CONSTEXPR_CXX17 bool test_nontrivial() { int main(int, char**) { test(); test_nontrivial(); +#if !(defined(TEST_COMPILER_NVCC) && _LIBCUDACXX_CUDACC_VER < 1103000 && defined(TEST_COMPILER_CLANG)) // GCC <9 incorrectly trips on the assertions in this, so disable it there #if TEST_STD_VER > 14 && (!defined(TEST_COMPILER_GCC) || __GNUC__ < 9) static_assert(test(), ""); -#endif +#endif // TEST_STD_VER > 14 && (!defined(TEST_COMPILER_GCC) || __GNUC__ < 9) #if TEST_STD_VER > 17 #if defined(_LIBCUDACXX_ADDRESSOF) static_assert(test_nontrivial()); -#endif -#endif +#endif // defined(_LIBCUDACXX_ADDRESSOF) +#endif // TEST_STD_VER > 17 +#endif // !(defined(TEST_COMPILER_NVCC) && _LIBCUDACXX_CUDACC_VER < 1103000 && defined(TEST_COMPILER_CLANG)) return 0; } diff --git a/libcudacxx/.upstream-tests/test/std/utilities/optional/optional.nullops/equal.pass.cpp b/libcudacxx/.upstream-tests/test/std/utilities/optional/optional.nullops/equal.pass.cpp index 1ceea1d722f..920d07ed9c6 100644 --- a/libcudacxx/.upstream-tests/test/std/utilities/optional/optional.nullops/equal.pass.cpp +++ b/libcudacxx/.upstream-tests/test/std/utilities/optional/optional.nullops/equal.pass.cpp @@ -28,8 +28,8 @@ constexpr bool test() { typedef int T; typedef optional O; - constexpr O o1; // disengaged - constexpr O o2{1}; // engaged + O o1; // disengaged + O o2{1}; // engaged assert( (nullopt == o1)); assert(!(nullopt == o2)); @@ -46,7 +46,9 @@ constexpr bool test() { int main(int, char**) { test(); #if TEST_STD_VER >= 17 +#if !(defined(TEST_COMPILER_NVCC) && _LIBCUDACXX_CUDACC_VER < 1103000 && defined(TEST_COMPILER_CLANG)) static_assert(test()); +#endif // !(defined(TEST_COMPILER_NVCC) && _LIBCUDACXX_CUDACC_VER < 1103000 && defined(TEST_COMPILER_CLANG)) #endif return 0; diff --git a/libcudacxx/.upstream-tests/test/std/utilities/optional/optional.nullops/greater.pass.cpp b/libcudacxx/.upstream-tests/test/std/utilities/optional/optional.nullops/greater.pass.cpp index 00a736e7503..15e2815f340 100644 --- a/libcudacxx/.upstream-tests/test/std/utilities/optional/optional.nullops/greater.pass.cpp +++ b/libcudacxx/.upstream-tests/test/std/utilities/optional/optional.nullops/greater.pass.cpp @@ -28,8 +28,8 @@ constexpr bool test() { typedef int T; typedef optional O; - constexpr O o1; // disengaged - constexpr O o2{1}; // engaged + O o1; // disengaged + O o2{1}; // engaged assert(!(nullopt > o1)); assert(!(nullopt > o2)); @@ -46,7 +46,9 @@ constexpr bool test() { int main(int, char**) { test(); #if TEST_STD_VER >= 17 +#if !(defined(TEST_COMPILER_NVCC) && _LIBCUDACXX_CUDACC_VER < 1103000 && defined(TEST_COMPILER_CLANG)) static_assert(test()); +#endif // !(defined(TEST_COMPILER_NVCC) && _LIBCUDACXX_CUDACC_VER < 1103000 && defined(TEST_COMPILER_CLANG)) #endif return 0; diff --git a/libcudacxx/.upstream-tests/test/std/utilities/optional/optional.nullops/greater_equal.pass.cpp b/libcudacxx/.upstream-tests/test/std/utilities/optional/optional.nullops/greater_equal.pass.cpp index e6a09e5104a..579bdfacf02 100644 --- a/libcudacxx/.upstream-tests/test/std/utilities/optional/optional.nullops/greater_equal.pass.cpp +++ b/libcudacxx/.upstream-tests/test/std/utilities/optional/optional.nullops/greater_equal.pass.cpp @@ -28,8 +28,8 @@ constexpr bool test() { typedef int T; typedef optional O; - constexpr O o1; // disengaged - constexpr O o2{1}; // engaged + O o1; // disengaged + O o2{1}; // engaged assert( (nullopt >= o1)); assert(!(nullopt >= o2)); @@ -46,7 +46,9 @@ constexpr bool test() { int main(int, char**) { test(); #if TEST_STD_VER >= 17 +#if !(defined(TEST_COMPILER_NVCC) && _LIBCUDACXX_CUDACC_VER < 1103000 && defined(TEST_COMPILER_CLANG)) static_assert(test()); +#endif // !(defined(TEST_COMPILER_NVCC) && _LIBCUDACXX_CUDACC_VER < 1103000 && defined(TEST_COMPILER_CLANG)) #endif return 0; diff --git a/libcudacxx/.upstream-tests/test/std/utilities/optional/optional.nullops/less_equal.pass.cpp b/libcudacxx/.upstream-tests/test/std/utilities/optional/optional.nullops/less_equal.pass.cpp index 0e6eead2364..decd4a81df3 100644 --- a/libcudacxx/.upstream-tests/test/std/utilities/optional/optional.nullops/less_equal.pass.cpp +++ b/libcudacxx/.upstream-tests/test/std/utilities/optional/optional.nullops/less_equal.pass.cpp @@ -29,8 +29,8 @@ constexpr bool test() { typedef int T; typedef optional O; - constexpr O o1; // disengaged - constexpr O o2{1}; // engaged + O o1; // disengaged + O o2{1}; // engaged assert( (nullopt <= o1)); assert( (nullopt <= o2)); @@ -47,7 +47,9 @@ constexpr bool test() { int main(int, char**) { test(); #if TEST_STD_VER >= 17 +#if !(defined(TEST_COMPILER_NVCC) && _LIBCUDACXX_CUDACC_VER < 1103000 && defined(TEST_COMPILER_CLANG)) static_assert(test()); +#endif // !(defined(TEST_COMPILER_NVCC) && _LIBCUDACXX_CUDACC_VER < 1103000 && defined(TEST_COMPILER_CLANG)) #endif return 0; diff --git a/libcudacxx/.upstream-tests/test/std/utilities/optional/optional.nullops/less_than.pass.cpp b/libcudacxx/.upstream-tests/test/std/utilities/optional/optional.nullops/less_than.pass.cpp index 5d8c604f25a..b1ce4dfa1cd 100644 --- a/libcudacxx/.upstream-tests/test/std/utilities/optional/optional.nullops/less_than.pass.cpp +++ b/libcudacxx/.upstream-tests/test/std/utilities/optional/optional.nullops/less_than.pass.cpp @@ -28,8 +28,8 @@ constexpr bool test() { typedef int T; typedef optional O; - constexpr O o1; // disengaged - constexpr O o2{1}; // engaged + O o1; // disengaged + O o2{1}; // engaged assert(!(nullopt < o1)); assert( (nullopt < o2)); @@ -46,7 +46,9 @@ constexpr bool test() { int main(int, char**) { test(); #if TEST_STD_VER >= 17 +#if !(defined(TEST_COMPILER_NVCC) && _LIBCUDACXX_CUDACC_VER < 1103000 && defined(TEST_COMPILER_CLANG)) static_assert(test()); +#endif // !(defined(TEST_COMPILER_NVCC) && _LIBCUDACXX_CUDACC_VER < 1103000 && defined(TEST_COMPILER_CLANG)) #endif return 0; diff --git a/libcudacxx/.upstream-tests/test/std/utilities/optional/optional.nullops/not_equal.pass.cpp b/libcudacxx/.upstream-tests/test/std/utilities/optional/optional.nullops/not_equal.pass.cpp index 3192c734cdc..9023e3b244a 100644 --- a/libcudacxx/.upstream-tests/test/std/utilities/optional/optional.nullops/not_equal.pass.cpp +++ b/libcudacxx/.upstream-tests/test/std/utilities/optional/optional.nullops/not_equal.pass.cpp @@ -28,8 +28,8 @@ constexpr bool test() { typedef int T; typedef optional O; - constexpr O o1; // disengaged - constexpr O o2{1}; // engaged + O o1; // disengaged + O o2{1}; // engaged assert(!(nullopt != o1)); assert( (nullopt != o2)); @@ -46,7 +46,9 @@ constexpr bool test() { int main(int, char**) { test(); #if TEST_STD_VER >= 17 +#if !(defined(TEST_COMPILER_NVCC) && _LIBCUDACXX_CUDACC_VER < 1103000 && defined(TEST_COMPILER_CLANG)) static_assert(test()); +#endif // !(defined(TEST_COMPILER_NVCC) && _LIBCUDACXX_CUDACC_VER < 1103000 && defined(TEST_COMPILER_CLANG)) #endif return 0; diff --git a/libcudacxx/.upstream-tests/test/std/utilities/optional/optional.object/optional.object.assign/assign_value.pass.cpp b/libcudacxx/.upstream-tests/test/std/utilities/optional/optional.object/optional.object.assign/assign_value.pass.cpp index 48647ca8629..8c2c448f551 100644 --- a/libcudacxx/.upstream-tests/test/std/utilities/optional/optional.object/optional.object.assign/assign_value.pass.cpp +++ b/libcudacxx/.upstream-tests/test/std/utilities/optional/optional.object/optional.object.assign/assign_value.pass.cpp @@ -315,7 +315,9 @@ int main(int, char**) test_throws(); #if !defined(TEST_COMPILER_GCC) || __GNUC__ > 6 +#if !(defined(TEST_COMPILER_NVCC) && _LIBCUDACXX_CUDACC_VER < 1103000 && defined(TEST_COMPILER_CLANG)) static_assert(pr38638(3) == 5, ""); +#endif // !(defined(TEST_COMPILER_NVCC) && _LIBCUDACXX_CUDACC_VER < 1103000 && defined(TEST_COMPILER_CLANG)) #endif // !defined(TEST_COMPILER_GCC) || __GNUC__ > 6 return 0; diff --git a/libcudacxx/.upstream-tests/test/std/utilities/optional/optional.object/optional.object.assign/const_optional_U.pass.cpp b/libcudacxx/.upstream-tests/test/std/utilities/optional/optional.object/optional.object.assign/const_optional_U.pass.cpp index 09db63062ea..60d79385ddd 100644 --- a/libcudacxx/.upstream-tests/test/std/utilities/optional/optional.object/optional.object.assign/const_optional_U.pass.cpp +++ b/libcudacxx/.upstream-tests/test/std/utilities/optional/optional.object/optional.object.assign/const_optional_U.pass.cpp @@ -203,6 +203,7 @@ int main(int, char**) { test_with_test_type(); test_ambiguous_assign(); +#if !(defined(TEST_COMPILER_NVCC) && _LIBCUDACXX_CUDACC_VER < 1103000 && defined(TEST_COMPILER_CLANG)) { optional opt; constexpr optional opt2; @@ -235,6 +236,7 @@ int main(int, char**) assert(static_cast(opt) == static_cast(opt2)); assert(*opt == *opt2); } +#endif // !(defined(TEST_COMPILER_NVCC) && _LIBCUDACXX_CUDACC_VER < 1103000 && defined(TEST_COMPILER_CLANG)) #ifndef TEST_HAS_NO_EXCEPTIONS { optional opt; diff --git a/libcudacxx/.upstream-tests/test/std/utilities/optional/optional.object/optional.object.assign/copy.pass.cpp b/libcudacxx/.upstream-tests/test/std/utilities/optional/optional.object/optional.object.assign/copy.pass.cpp index fba4f525eaf..285404eeeb2 100644 --- a/libcudacxx/.upstream-tests/test/std/utilities/optional/optional.object/optional.object.assign/copy.pass.cpp +++ b/libcudacxx/.upstream-tests/test/std/utilities/optional/optional.object/optional.object.assign/copy.pass.cpp @@ -59,8 +59,10 @@ int main(int, char**) { using O = optional; #if !defined(TEST_COMPILER_GCC) || __GNUC__ > 6 +#if !(defined(TEST_COMPILER_NVCC) && _LIBCUDACXX_CUDACC_VER < 1103000 && defined(TEST_COMPILER_CLANG)) static_assert(assign_empty(O{42}), ""); static_assert(assign_value(O{42}), ""); +#endif // !(defined(TEST_COMPILER_NVCC) && _LIBCUDACXX_CUDACC_VER < 1103000 && defined(TEST_COMPILER_CLANG)) #endif // !defined(TEST_COMPILER_GCC) || __GNUC__ > 6 assert(assign_empty(O{42})); assert(assign_value(O{42})); @@ -68,8 +70,10 @@ int main(int, char**) { using O = optional; #if !defined(TEST_COMPILER_GCC) || __GNUC__ > 6 +#if !(defined(TEST_COMPILER_NVCC) && _LIBCUDACXX_CUDACC_VER < 1103000 && defined(TEST_COMPILER_CLANG)) static_assert(assign_empty(O{42}), ""); static_assert(assign_value(O{42}), ""); +#endif // !(defined(TEST_COMPILER_NVCC) && _LIBCUDACXX_CUDACC_VER < 1103000 && defined(TEST_COMPILER_CLANG)) #endif // !defined(TEST_COMPILER_GCC) || __GNUC__ > 6 assert(assign_empty(O{42})); assert(assign_value(O{42})); diff --git a/libcudacxx/.upstream-tests/test/std/utilities/optional/optional.object/optional.object.assign/move.pass.cpp b/libcudacxx/.upstream-tests/test/std/utilities/optional/optional.object/optional.object.assign/move.pass.cpp index 653e5eee2f9..b7f21da6462 100644 --- a/libcudacxx/.upstream-tests/test/std/utilities/optional/optional.object/optional.object.assign/move.pass.cpp +++ b/libcudacxx/.upstream-tests/test/std/utilities/optional/optional.object/optional.object.assign/move.pass.cpp @@ -77,6 +77,7 @@ int main(int, char**) static_assert(static_cast(opt2) == false, ""); assert(static_cast(opt) == static_cast(opt2)); } +#if !(defined(TEST_COMPILER_NVCC) && _LIBCUDACXX_CUDACC_VER < 1103000 && defined(TEST_COMPILER_CLANG)) { optional opt; constexpr optional opt2(2); @@ -86,6 +87,7 @@ int main(int, char**) assert(static_cast(opt) == static_cast(opt2)); assert(*opt == *opt2); } +#endif // !(defined(TEST_COMPILER_NVCC) && _LIBCUDACXX_CUDACC_VER < 1103000 && defined(TEST_COMPILER_CLANG)) { optional opt(3); constexpr optional opt2; @@ -104,6 +106,7 @@ int main(int, char**) assert(static_cast(opt2) == false); assert(static_cast(opt) == static_cast(opt2)); } +#if !(defined(TEST_COMPILER_NVCC) && _LIBCUDACXX_CUDACC_VER < 1103000 && defined(TEST_COMPILER_CLANG)) { optional opt(3); constexpr optional opt2(2); @@ -113,11 +116,14 @@ int main(int, char**) assert(static_cast(opt) == static_cast(opt2)); assert(*opt == *opt2); } +#endif // !(defined(TEST_COMPILER_NVCC) && _LIBCUDACXX_CUDACC_VER < 1103000 && defined(TEST_COMPILER_CLANG)) { using O = optional; #if !defined(TEST_COMPILER_GCC) || __GNUC__ > 6 +#if !(defined(TEST_COMPILER_NVCC) && _LIBCUDACXX_CUDACC_VER < 1103000 && defined(TEST_COMPILER_CLANG)) static_assert(assign_empty(O{42}), ""); static_assert(assign_value(O{42}), ""); +#endif // !(defined(TEST_COMPILER_NVCC) && _LIBCUDACXX_CUDACC_VER < 1103000 && defined(TEST_COMPILER_CLANG)) #endif // !defined(TEST_COMPILER_GCC) || __GNUC__ > 6 assert(assign_empty(O{42})); assert(assign_value(O{42})); @@ -125,8 +131,10 @@ int main(int, char**) { using O = optional; #if !defined(TEST_COMPILER_GCC) || __GNUC__ > 6 +#if !(defined(TEST_COMPILER_NVCC) && _LIBCUDACXX_CUDACC_VER < 1103000 && defined(TEST_COMPILER_CLANG)) static_assert(assign_empty(O{42}), ""); static_assert(assign_value(O{42}), ""); +#endif // !(defined(TEST_COMPILER_NVCC) && _LIBCUDACXX_CUDACC_VER < 1103000 && defined(TEST_COMPILER_CLANG)) #endif // !defined(TEST_COMPILER_GCC) || __GNUC__ > 6 assert(assign_empty(O{42})); assert(assign_value(O{42})); diff --git a/libcudacxx/.upstream-tests/test/std/utilities/optional/optional.object/optional.object.ctor/U.pass.cpp b/libcudacxx/.upstream-tests/test/std/utilities/optional/optional.object/optional.object.ctor/U.pass.cpp index e8705f6901d..b1bbd5ffa6a 100644 --- a/libcudacxx/.upstream-tests/test/std/utilities/optional/optional.object/optional.object.ctor/U.pass.cpp +++ b/libcudacxx/.upstream-tests/test/std/utilities/optional/optional.object/optional.object.ctor/U.pass.cpp @@ -74,21 +74,25 @@ constexpr bool explicit_conversion(Input&& in, const Expect& v) __host__ __device__ void test_implicit() { +#if !(defined(TEST_COMPILER_NVCC) && _LIBCUDACXX_CUDACC_VER < 1103000 && defined(TEST_COMPILER_CLANG)) { static_assert(implicit_conversion(42, 42), ""); } { static_assert(implicit_conversion(3.14, 3.14), ""); } +#endif // !(defined(TEST_COMPILER_NVCC) && _LIBCUDACXX_CUDACC_VER < 1103000 && defined(TEST_COMPILER_CLANG)) { int x = 42; optional o(&x); assert(*o == &x); } +#if !(defined(TEST_COMPILER_NVCC) && _LIBCUDACXX_CUDACC_VER < 1103000 && defined(TEST_COMPILER_CLANG)) { using T = TrivialTestTypes::TestType; static_assert(implicit_conversion(42, 42), ""); } +#endif // !(defined(TEST_COMPILER_NVCC) && _LIBCUDACXX_CUDACC_VER < 1103000 && defined(TEST_COMPILER_CLANG)) { using T = TestTypes::TestType; assert(implicit_conversion(3, T(3))); @@ -117,6 +121,7 @@ void test_implicit() __host__ __device__ void test_explicit() { +#if !(defined(TEST_COMPILER_NVCC) && _LIBCUDACXX_CUDACC_VER < 1103000 && defined(TEST_COMPILER_CLANG)) { using T = ExplicitTrivialTestTypes::TestType; static_assert(explicit_conversion(42, 42), ""); @@ -126,6 +131,7 @@ void test_explicit() { static_assert(explicit_conversion(42, 42), ""); static_assert(!cuda::std::is_convertible::value, ""); } +#endif // !(defined(TEST_COMPILER_NVCC) && _LIBCUDACXX_CUDACC_VER < 1103000 && defined(TEST_COMPILER_CLANG)) { using T = ExplicitTestTypes::TestType; T::reset(); diff --git a/libcudacxx/.upstream-tests/test/std/utilities/optional/optional.object/optional.object.ctor/const_T.pass.cpp b/libcudacxx/.upstream-tests/test/std/utilities/optional/optional.object/optional.object.ctor/const_T.pass.cpp index 3f9140a9625..2a0466d8cd6 100644 --- a/libcudacxx/.upstream-tests/test/std/utilities/optional/optional.object/optional.object.ctor/const_T.pass.cpp +++ b/libcudacxx/.upstream-tests/test/std/utilities/optional/optional.object/optional.object.ctor/const_T.pass.cpp @@ -27,6 +27,7 @@ using cuda::std::optional; int main(int, char**) { +#if !(defined(TEST_COMPILER_NVCC) && _LIBCUDACXX_CUDACC_VER < 1103000 && defined(TEST_COMPILER_CLANG)) { typedef int T; constexpr T t(5); @@ -57,6 +58,7 @@ int main(int, char**) }; } +#endif // !(defined(TEST_COMPILER_NVCC) && _LIBCUDACXX_CUDACC_VER < 1103000 && defined(TEST_COMPILER_CLANG)) { const int x = 42; optional o(x); @@ -83,6 +85,7 @@ int main(int, char**) assert(static_cast(opt) == true); assert(opt.value().value == 3); } +#if !(defined(TEST_COMPILER_NVCC) && _LIBCUDACXX_CUDACC_VER < 1103000 && defined(TEST_COMPILER_CLANG)) { typedef ConstexprTestTypes::TestType T; constexpr T t(3); @@ -113,6 +116,7 @@ int main(int, char**) }; } +#endif // !(defined(TEST_COMPILER_NVCC) && _LIBCUDACXX_CUDACC_VER < 1103000 && defined(TEST_COMPILER_CLANG)) #ifndef TEST_HAS_NO_EXCEPTIONS { struct Z { diff --git a/libcudacxx/.upstream-tests/test/std/utilities/optional/optional.object/optional.object.ctor/copy.pass.cpp b/libcudacxx/.upstream-tests/test/std/utilities/optional/optional.object/optional.object.ctor/copy.pass.cpp index 4ffadf909aa..9338de76b4d 100644 --- a/libcudacxx/.upstream-tests/test/std/utilities/optional/optional.object/optional.object.ctor/copy.pass.cpp +++ b/libcudacxx/.upstream-tests/test/std/utilities/optional/optional.object/optional.object.ctor/copy.pass.cpp @@ -123,8 +123,10 @@ int main(int, char**) { test(); test(3); +#if !(defined(TEST_COMPILER_NVCC) && _LIBCUDACXX_CUDACC_VER < 1103000 && defined(TEST_COMPILER_CLANG)) static_assert(constexpr_test(), "" ); static_assert(constexpr_test(3), "" ); +#endif // !(defined(TEST_COMPILER_NVCC) && _LIBCUDACXX_CUDACC_VER < 1103000 && defined(TEST_COMPILER_CLANG)) { const optional o(42); @@ -170,11 +172,13 @@ int main(int, char**) { test_reference_extension(); } +#if !(defined(TEST_COMPILER_NVCC) && _LIBCUDACXX_CUDACC_VER < 1103000 && defined(TEST_COMPILER_CLANG)) { constexpr cuda::std::optional o1{4}; constexpr cuda::std::optional o2 = o1; static_assert( *o2 == 4, "" ); } +#endif // !(defined(TEST_COMPILER_NVCC) && _LIBCUDACXX_CUDACC_VER < 1103000 && defined(TEST_COMPILER_CLANG)) return 0; } diff --git a/libcudacxx/.upstream-tests/test/std/utilities/optional/optional.object/optional.object.ctor/default.pass.cpp b/libcudacxx/.upstream-tests/test/std/utilities/optional/optional.object/optional.object.ctor/default.pass.cpp index 49481d94e20..82dff4838c2 100644 --- a/libcudacxx/.upstream-tests/test/std/utilities/optional/optional.object/optional.object.ctor/default.pass.cpp +++ b/libcudacxx/.upstream-tests/test/std/utilities/optional/optional.object/optional.object.ctor/default.pass.cpp @@ -23,15 +23,14 @@ using cuda::std::optional; template __host__ __device__ -void -test_constexpr() +constexpr bool test_constexpr() { static_assert(cuda::std::is_nothrow_default_constructible::value, ""); static_assert(cuda::std::is_trivially_destructible::value, ""); static_assert(cuda::std::is_trivially_destructible::value, ""); - constexpr Opt opt; - static_assert(static_cast(opt) == false, ""); + Opt opt; + assert(static_cast(opt) == false); struct test_constexpr_ctor : public Opt @@ -39,12 +38,13 @@ test_constexpr() __host__ __device__ constexpr test_constexpr_ctor() {} }; + + return true; } template __host__ __device__ -void -test() +constexpr bool test() { static_assert(cuda::std::is_nothrow_default_constructible::value, ""); static_assert(!cuda::std::is_trivially_destructible::value, ""); @@ -64,6 +64,8 @@ test() __host__ __device__ constexpr test_constexpr_ctor() {} }; + + return true; } int main(int, char**) @@ -76,14 +78,16 @@ int main(int, char**) test_constexpr>(); #endif test>(); - // EXTENSIONS -#if defined(_LIBCPP_VERSION) && 0 // FIXME these extensions are currently disabled. - test_constexpr>(); - test_constexpr>(); - test_constexpr>(); - test_constexpr>(); - test_constexpr>(); + +#if !(defined(TEST_COMPILER_NVCC) && _LIBCUDACXX_CUDACC_VER < 1103000 && defined(TEST_COMPILER_CLANG)) + static_assert(test_constexpr>(), ""); + static_assert(test_constexpr>(), ""); +#if !defined(TEST_COMPILER_C1XX) || TEST_STD_VER >= 17 + static_assert(test_constexpr>(), ""); + static_assert(test_constexpr>(), ""); + static_assert(test_constexpr>(), ""); #endif +#endif // !(defined(TEST_COMPILER_NVCC) && _LIBCUDACXX_CUDACC_VER < 1103000 && defined(TEST_COMPILER_CLANG)) return 0; } diff --git a/libcudacxx/.upstream-tests/test/std/utilities/optional/optional.object/optional.object.ctor/in_place_t.pass.cpp b/libcudacxx/.upstream-tests/test/std/utilities/optional/optional.object/optional.object.ctor/in_place_t.pass.cpp index 5be57d6559c..3e02b518d03 100644 --- a/libcudacxx/.upstream-tests/test/std/utilities/optional/optional.object/optional.object.ctor/in_place_t.pass.cpp +++ b/libcudacxx/.upstream-tests/test/std/utilities/optional/optional.object/optional.object.ctor/in_place_t.pass.cpp @@ -71,6 +71,7 @@ class Z int main(int, char**) { +#if !(defined(TEST_COMPILER_NVCC) && _LIBCUDACXX_CUDACC_VER < 1103000 && defined(TEST_COMPILER_CLANG)) { constexpr optional opt(in_place, 5); static_assert(static_cast(opt) == true, ""); @@ -85,6 +86,7 @@ int main(int, char**) }; } +#endif // !(defined(TEST_COMPILER_NVCC) && _LIBCUDACXX_CUDACC_VER < 1103000 && defined(TEST_COMPILER_CLANG)) { optional opt(in_place, 5); assert(*opt == 5); @@ -104,6 +106,7 @@ int main(int, char**) assert(static_cast(opt) == true); assert(*opt == X(5, 4)); } +#if !(defined(TEST_COMPILER_NVCC) && _LIBCUDACXX_CUDACC_VER < 1103000 && defined(TEST_COMPILER_CLANG)) { constexpr optional opt(in_place); static_assert(static_cast(opt) == true, ""); @@ -146,6 +149,7 @@ int main(int, char**) }; } +#endif // !(defined(TEST_COMPILER_NVCC) && _LIBCUDACXX_CUDACC_VER < 1103000 && defined(TEST_COMPILER_CLANG)) #ifndef TEST_HAS_NO_EXCEPTIONS { try diff --git a/libcudacxx/.upstream-tests/test/std/utilities/optional/optional.object/optional.object.ctor/initializer_list.pass.cpp b/libcudacxx/.upstream-tests/test/std/utilities/optional/optional.object/optional.object.ctor/initializer_list.pass.cpp index 8cef29ac397..74f4880af82 100644 --- a/libcudacxx/.upstream-tests/test/std/utilities/optional/optional.object/optional.object.ctor/initializer_list.pass.cpp +++ b/libcudacxx/.upstream-tests/test/std/utilities/optional/optional.object/optional.object.ctor/initializer_list.pass.cpp @@ -110,11 +110,13 @@ int main(int, char**) assert(static_cast(opt) == true); assert((*opt == Y{3, 1})); } +#if !(defined(TEST_COMPILER_NVCC) && _LIBCUDACXX_CUDACC_VER < 1103000 && defined(TEST_COMPILER_CLANG)) { constexpr optional opt(in_place, {3, 1}); static_assert(static_cast(opt) == true, ""); static_assert(*opt == Y{3, 1}, ""); } +#endif // !(defined(TEST_COMPILER_NVCC) && _LIBCUDACXX_CUDACC_VER < 1103000 && defined(TEST_COMPILER_CLANG)) struct test_constexpr_ctor : public optional diff --git a/libcudacxx/.upstream-tests/test/std/utilities/optional/optional.object/optional.object.ctor/move.pass.cpp b/libcudacxx/.upstream-tests/test/std/utilities/optional/optional.object/optional.object.ctor/move.pass.cpp index 09528337375..b7e24a8e343 100644 --- a/libcudacxx/.upstream-tests/test/std/utilities/optional/optional.object/optional.object.ctor/move.pass.cpp +++ b/libcudacxx/.upstream-tests/test/std/utilities/optional/optional.object/optional.object.ctor/move.pass.cpp @@ -156,8 +156,10 @@ int main(int, char**) { test(); test(3); +#if !(defined(TEST_COMPILER_NVCC) && _LIBCUDACXX_CUDACC_VER < 1103000 && defined(TEST_COMPILER_CLANG)) static_assert(constexpr_test(), "" ); static_assert(constexpr_test(3), "" ); +#endif // !(defined(TEST_COMPILER_NVCC) && _LIBCUDACXX_CUDACC_VER < 1103000 && defined(TEST_COMPILER_CLANG)) { optional o(42); @@ -227,11 +229,13 @@ int main(int, char**) { test_reference_extension(); } +#if !(defined(TEST_COMPILER_NVCC) && _LIBCUDACXX_CUDACC_VER < 1103000 && defined(TEST_COMPILER_CLANG)) { constexpr cuda::std::optional o1{4}; constexpr cuda::std::optional o2 = cuda::std::move(o1); static_assert( *o2 == 4, "" ); } +#endif // !(defined(TEST_COMPILER_NVCC) && _LIBCUDACXX_CUDACC_VER < 1103000 && defined(TEST_COMPILER_CLANG)) return 0; } diff --git a/libcudacxx/.upstream-tests/test/std/utilities/optional/optional.object/optional.object.ctor/nullopt_t.pass.cpp b/libcudacxx/.upstream-tests/test/std/utilities/optional/optional.object/optional.object.ctor/nullopt_t.pass.cpp index a1c185c73cc..4d3e46bdc82 100644 --- a/libcudacxx/.upstream-tests/test/std/utilities/optional/optional.object/optional.object.ctor/nullopt_t.pass.cpp +++ b/libcudacxx/.upstream-tests/test/std/utilities/optional/optional.object/optional.object.ctor/nullopt_t.pass.cpp @@ -26,15 +26,15 @@ using cuda::std::nullopt; template __host__ __device__ -void +constexpr bool test_constexpr() { static_assert(cuda::std::is_nothrow_constructible::value, ""); static_assert(cuda::std::is_trivially_destructible::value, ""); static_assert(cuda::std::is_trivially_destructible::value, ""); - constexpr Opt opt(nullopt); - static_assert(static_cast(opt) == false, ""); + Opt opt(nullopt); + assert(static_cast(opt) == false); struct test_constexpr_ctor : public Opt @@ -42,6 +42,8 @@ test_constexpr() __host__ __device__ constexpr test_constexpr_ctor() {} }; + + return true; } template @@ -79,5 +81,15 @@ int main(int, char**) #endif test>(); +#if !(defined(TEST_COMPILER_NVCC) && _LIBCUDACXX_CUDACC_VER < 1103000 && defined(TEST_COMPILER_CLANG)) + static_assert(test_constexpr>(), ""); + static_assert(test_constexpr>(), ""); +#if !defined(TEST_COMPILER_C1XX) || TEST_STD_VER >= 17 + static_assert(test_constexpr>(), ""); + static_assert(test_constexpr>(), ""); + static_assert(test_constexpr>(), ""); +#endif +#endif // !(defined(TEST_COMPILER_NVCC) && _LIBCUDACXX_CUDACC_VER < 1103000 && defined(TEST_COMPILER_CLANG)) + return 0; } diff --git a/libcudacxx/.upstream-tests/test/std/utilities/optional/optional.object/optional.object.ctor/rvalue_T.pass.cpp b/libcudacxx/.upstream-tests/test/std/utilities/optional/optional.object/optional.object.ctor/rvalue_T.pass.cpp index 266eac67846..ff0b890afe2 100644 --- a/libcudacxx/.upstream-tests/test/std/utilities/optional/optional.object/optional.object.ctor/rvalue_T.pass.cpp +++ b/libcudacxx/.upstream-tests/test/std/utilities/optional/optional.object/optional.object.ctor/rvalue_T.pass.cpp @@ -39,6 +39,7 @@ class Z int main(int, char**) { +#if !(defined(TEST_COMPILER_NVCC) && _LIBCUDACXX_CUDACC_VER < 1103000 && defined(TEST_COMPILER_CLANG)) { typedef int T; constexpr optional opt(T(5)); @@ -65,6 +66,7 @@ int main(int, char**) constexpr test_constexpr_ctor(T&&) {} }; } +#endif // !(defined(TEST_COMPILER_NVCC) && _LIBCUDACXX_CUDACC_VER < 1103000 && defined(TEST_COMPILER_CLANG)) { const int x = 42; optional o(cuda::std::move(x)); @@ -100,6 +102,7 @@ int main(int, char**) assert(static_cast(opt) == true); assert(opt.value().value == 3); } +#if !(defined(TEST_COMPILER_NVCC) && _LIBCUDACXX_CUDACC_VER < 1103000 && defined(TEST_COMPILER_CLANG)) { typedef ConstexprTestTypes::TestType T; constexpr optional opt = {T(3)}; @@ -141,6 +144,7 @@ int main(int, char**) }; } +#endif // !(defined(TEST_COMPILER_NVCC) && _LIBCUDACXX_CUDACC_VER < 1103000 && defined(TEST_COMPILER_CLANG)) #ifndef TEST_HAS_NO_EXCEPTIONS { try diff --git a/libcudacxx/.upstream-tests/test/std/utilities/optional/optional.object/optional.object.observe/bool.pass.cpp b/libcudacxx/.upstream-tests/test/std/utilities/optional/optional.object/optional.object.observe/bool.pass.cpp index 94b59e0dbb1..f330e00a6a1 100644 --- a/libcudacxx/.upstream-tests/test/std/utilities/optional/optional.object/optional.object.observe/bool.pass.cpp +++ b/libcudacxx/.upstream-tests/test/std/utilities/optional/optional.object/optional.object.observe/bool.pass.cpp @@ -26,6 +26,7 @@ int main(int, char**) ASSERT_NOEXCEPT(bool(opt)); static_assert(!cuda::std::is_convertible, bool>::value, ""); } +#if !(defined(TEST_COMPILER_NVCC) && _LIBCUDACXX_CUDACC_VER < 1103000 && defined(TEST_COMPILER_CLANG)) { constexpr optional opt; static_assert(!opt, ""); @@ -34,6 +35,7 @@ int main(int, char**) constexpr optional opt(0); static_assert(opt, ""); } +#endif // !(defined(TEST_COMPILER_NVCC) && _LIBCUDACXX_CUDACC_VER < 1103000 && defined(TEST_COMPILER_CLANG)) return 0; } diff --git a/libcudacxx/.upstream-tests/test/std/utilities/optional/optional.object/optional.object.observe/dereference.pass.cpp b/libcudacxx/.upstream-tests/test/std/utilities/optional/optional.object/optional.object.observe/dereference.pass.cpp index 8937654a494..30cae48eaaa 100644 --- a/libcudacxx/.upstream-tests/test/std/utilities/optional/optional.object/optional.object.observe/dereference.pass.cpp +++ b/libcudacxx/.upstream-tests/test/std/utilities/optional/optional.object/optional.object.observe/dereference.pass.cpp @@ -65,7 +65,9 @@ int main(int, char**) optional opt(X{}); assert((*opt).test() == 4); } +#if !(defined(TEST_COMPILER_NVCC) && _LIBCUDACXX_CUDACC_VER < 1103000 && defined(TEST_COMPILER_CLANG)) static_assert(test() == 7, ""); +#endif // !(defined(TEST_COMPILER_NVCC) && _LIBCUDACXX_CUDACC_VER < 1103000 && defined(TEST_COMPILER_CLANG)) return 0; } diff --git a/libcudacxx/.upstream-tests/test/std/utilities/optional/optional.object/optional.object.observe/dereference_const.pass.cpp b/libcudacxx/.upstream-tests/test/std/utilities/optional/optional.object/optional.object.observe/dereference_const.pass.cpp index 7efe9ebbc9e..0b953ad54b0 100644 --- a/libcudacxx/.upstream-tests/test/std/utilities/optional/optional.object/optional.object.observe/dereference_const.pass.cpp +++ b/libcudacxx/.upstream-tests/test/std/utilities/optional/optional.object/optional.object.observe/dereference_const.pass.cpp @@ -53,6 +53,7 @@ int main(int, char**) // Regardless this function should still be noexcept(false) because // it has a narrow contract. } +#if !(defined(TEST_COMPILER_NVCC) && _LIBCUDACXX_CUDACC_VER < 1103000 && defined(TEST_COMPILER_CLANG)) { constexpr optional opt(X{}); static_assert((*opt).test() == 3, ""); @@ -61,6 +62,7 @@ int main(int, char**) constexpr optional opt(Y{}); assert((*opt).test() == 2); } +#endif // !(defined(TEST_COMPILER_NVCC) && _LIBCUDACXX_CUDACC_VER < 1103000 && defined(TEST_COMPILER_CLANG)) return 0; } diff --git a/libcudacxx/.upstream-tests/test/std/utilities/optional/optional.object/optional.object.observe/dereference_const_rvalue.pass.cpp b/libcudacxx/.upstream-tests/test/std/utilities/optional/optional.object/optional.object.observe/dereference_const_rvalue.pass.cpp index e65b2a3f279..acb593a5880 100644 --- a/libcudacxx/.upstream-tests/test/std/utilities/optional/optional.object/optional.object.observe/dereference_const_rvalue.pass.cpp +++ b/libcudacxx/.upstream-tests/test/std/utilities/optional/optional.object/optional.object.observe/dereference_const_rvalue.pass.cpp @@ -53,6 +53,7 @@ int main(int, char**) // Regardless this function should still be noexcept(false) because // it has a narrow contract. } +#if !(defined(TEST_COMPILER_NVCC) && _LIBCUDACXX_CUDACC_VER < 1103000 && defined(TEST_COMPILER_CLANG)) { constexpr optional opt(X{}); static_assert((*cuda::std::move(opt)).test() == 5, ""); @@ -61,6 +62,7 @@ int main(int, char**) constexpr optional opt(Y{}); assert((*cuda::std::move(opt)).test() == 2); } +#endif // !(defined(TEST_COMPILER_NVCC) && _LIBCUDACXX_CUDACC_VER < 1103000 && defined(TEST_COMPILER_CLANG)) return 0; } diff --git a/libcudacxx/.upstream-tests/test/std/utilities/optional/optional.object/optional.object.observe/dereference_rvalue.pass.cpp b/libcudacxx/.upstream-tests/test/std/utilities/optional/optional.object/optional.object.observe/dereference_rvalue.pass.cpp index 8d7d40d7248..93b8e9d4c00 100644 --- a/libcudacxx/.upstream-tests/test/std/utilities/optional/optional.object/optional.object.observe/dereference_rvalue.pass.cpp +++ b/libcudacxx/.upstream-tests/test/std/utilities/optional/optional.object/optional.object.observe/dereference_rvalue.pass.cpp @@ -65,7 +65,9 @@ int main(int, char**) optional opt(X{}); assert((*cuda::std::move(opt)).test() == 6); } +#if !(defined(TEST_COMPILER_NVCC) && _LIBCUDACXX_CUDACC_VER < 1103000 && defined(TEST_COMPILER_CLANG)) static_assert(test() == 7, ""); +#endif // !(defined(TEST_COMPILER_NVCC) && _LIBCUDACXX_CUDACC_VER < 1103000 && defined(TEST_COMPILER_CLANG)) return 0; } diff --git a/libcudacxx/.upstream-tests/test/std/utilities/optional/optional.object/optional.object.observe/has_value.pass.cpp b/libcudacxx/.upstream-tests/test/std/utilities/optional/optional.object/optional.object.observe/has_value.pass.cpp index bfcbad52c75..21ea2ab3ede 100644 --- a/libcudacxx/.upstream-tests/test/std/utilities/optional/optional.object/optional.object.observe/has_value.pass.cpp +++ b/libcudacxx/.upstream-tests/test/std/utilities/optional/optional.object/optional.object.observe/has_value.pass.cpp @@ -34,6 +34,7 @@ int main(int, char**) optional opt(0); assert(opt.has_value()); } +#if !(defined(TEST_COMPILER_NVCC) && _LIBCUDACXX_CUDACC_VER < 1103000 && defined(TEST_COMPILER_CLANG)) { constexpr optional opt; static_assert(!opt.has_value(), ""); @@ -42,6 +43,7 @@ int main(int, char**) constexpr optional opt(0); static_assert(opt.has_value(), ""); } +#endif // !(defined(TEST_COMPILER_NVCC) && _LIBCUDACXX_CUDACC_VER < 1103000 && defined(TEST_COMPILER_CLANG)) return 0; } diff --git a/libcudacxx/.upstream-tests/test/std/utilities/optional/optional.object/optional.object.observe/op_arrow.pass.cpp b/libcudacxx/.upstream-tests/test/std/utilities/optional/optional.object/optional.object.observe/op_arrow.pass.cpp index 15c1f45a812..68b2a18bc37 100644 --- a/libcudacxx/.upstream-tests/test/std/utilities/optional/optional.object/optional.object.observe/op_arrow.pass.cpp +++ b/libcudacxx/.upstream-tests/test/std/utilities/optional/optional.object/optional.object.observe/op_arrow.pass.cpp @@ -60,7 +60,9 @@ int main(int, char**) } { #if defined(_LIBCUDACXX_ADDRESSOF) +#if !(defined(TEST_COMPILER_NVCC) && _LIBCUDACXX_CUDACC_VER < 1103000 && defined(TEST_COMPILER_CLANG)) static_assert(test() == 3, ""); +#endif // !(defined(TEST_COMPILER_NVCC) && _LIBCUDACXX_CUDACC_VER < 1103000 && defined(TEST_COMPILER_CLANG)) #endif } diff --git a/libcudacxx/.upstream-tests/test/std/utilities/optional/optional.object/optional.object.observe/op_arrow_const.pass.cpp b/libcudacxx/.upstream-tests/test/std/utilities/optional/optional.object/optional.object.observe/op_arrow_const.pass.cpp index af24cdb84d1..eb9a0acf8fc 100644 --- a/libcudacxx/.upstream-tests/test/std/utilities/optional/optional.object/optional.object.observe/op_arrow_const.pass.cpp +++ b/libcudacxx/.upstream-tests/test/std/utilities/optional/optional.object/optional.object.observe/op_arrow_const.pass.cpp @@ -54,6 +54,7 @@ int main(int, char**) // Regardless this function should still be noexcept(false) because // it has a narrow contract. } +#if !(defined(TEST_COMPILER_NVCC) && _LIBCUDACXX_CUDACC_VER < 1103000 && defined(TEST_COMPILER_CLANG)) { constexpr optional opt(X{}); #if defined(_LIBCUDACXX_ADDRESSOF) @@ -74,6 +75,7 @@ int main(int, char**) unused(opt); #endif } +#endif // !(defined(TEST_COMPILER_NVCC) && _LIBCUDACXX_CUDACC_VER < 1103000 && defined(TEST_COMPILER_CLANG)) return 0; } diff --git a/libcudacxx/.upstream-tests/test/std/utilities/optional/optional.object/optional.object.observe/value.pass.cpp b/libcudacxx/.upstream-tests/test/std/utilities/optional/optional.object/optional.object.observe/value.pass.cpp index 638922075ec..3511fb84fb6 100644 --- a/libcudacxx/.upstream-tests/test/std/utilities/optional/optional.object/optional.object.observe/value.pass.cpp +++ b/libcudacxx/.upstream-tests/test/std/utilities/optional/optional.object/optional.object.observe/value.pass.cpp @@ -83,7 +83,9 @@ int main(int, char**) } #endif assert(test() == 7); +#if !(defined(TEST_COMPILER_NVCC) && _LIBCUDACXX_CUDACC_VER < 1103000 && defined(TEST_COMPILER_CLANG)) static_assert(test() == 7, ""); +#endif // !(defined(TEST_COMPILER_NVCC) && _LIBCUDACXX_CUDACC_VER < 1103000 && defined(TEST_COMPILER_CLANG)) return 0; } diff --git a/libcudacxx/.upstream-tests/test/std/utilities/optional/optional.object/optional.object.observe/value_const.pass.cpp b/libcudacxx/.upstream-tests/test/std/utilities/optional/optional.object/optional.object.observe/value_const.pass.cpp index a7f32dbc8e6..34f416820ea 100644 --- a/libcudacxx/.upstream-tests/test/std/utilities/optional/optional.object/optional.object.observe/value_const.pass.cpp +++ b/libcudacxx/.upstream-tests/test/std/utilities/optional/optional.object/optional.object.observe/value_const.pass.cpp @@ -50,10 +50,12 @@ int main(int, char**) ASSERT_NOT_NOEXCEPT(opt.value()); ASSERT_SAME_TYPE(decltype(opt.value()), X const&); } +#if !(defined(TEST_COMPILER_NVCC) && _LIBCUDACXX_CUDACC_VER < 1103000 && defined(TEST_COMPILER_CLANG)) { constexpr optional opt(in_place); static_assert(opt.value().test() == 3, ""); } +#endif // !(defined(TEST_COMPILER_NVCC) && _LIBCUDACXX_CUDACC_VER < 1103000 && defined(TEST_COMPILER_CLANG)) { const optional opt(in_place); assert(opt.value().test() == 3); diff --git a/libcudacxx/.upstream-tests/test/std/utilities/optional/optional.object/optional.object.observe/value_const_rvalue.pass.cpp b/libcudacxx/.upstream-tests/test/std/utilities/optional/optional.object/optional.object.observe/value_const_rvalue.pass.cpp index 9636222440c..5f8b4a634a2 100644 --- a/libcudacxx/.upstream-tests/test/std/utilities/optional/optional.object/optional.object.observe/value_const_rvalue.pass.cpp +++ b/libcudacxx/.upstream-tests/test/std/utilities/optional/optional.object/optional.object.observe/value_const_rvalue.pass.cpp @@ -50,10 +50,12 @@ int main(int, char**) ASSERT_NOT_NOEXCEPT(cuda::std::move(opt).value()); ASSERT_SAME_TYPE(decltype(cuda::std::move(opt).value()), X const&&); } +#if !(defined(TEST_COMPILER_NVCC) && _LIBCUDACXX_CUDACC_VER < 1103000 && defined(TEST_COMPILER_CLANG)) { constexpr optional opt(in_place); static_assert(cuda::std::move(opt).value().test() == 5, ""); } +#endif // !(defined(TEST_COMPILER_NVCC) && _LIBCUDACXX_CUDACC_VER < 1103000 && defined(TEST_COMPILER_CLANG)) { const optional opt(in_place); assert(cuda::std::move(opt).value().test() == 5); diff --git a/libcudacxx/.upstream-tests/test/std/utilities/optional/optional.object/optional.object.observe/value_or_const.pass.cpp b/libcudacxx/.upstream-tests/test/std/utilities/optional/optional.object/optional.object.observe/value_or_const.pass.cpp index 98d21aa478a..16ead269264 100644 --- a/libcudacxx/.upstream-tests/test/std/utilities/optional/optional.object/optional.object.observe/value_or_const.pass.cpp +++ b/libcudacxx/.upstream-tests/test/std/utilities/optional/optional.object/optional.object.observe/value_or_const.pass.cpp @@ -45,6 +45,7 @@ struct X int main(int, char**) { +#if !(defined(TEST_COMPILER_NVCC) && _LIBCUDACXX_CUDACC_VER < 1103000 && defined(TEST_COMPILER_CLANG)) { constexpr optional opt(2); constexpr Y y(3); @@ -63,6 +64,7 @@ int main(int, char**) constexpr optional opt; static_assert(opt.value_or(Y(3)) == 4, ""); } +#endif // !(defined(TEST_COMPILER_NVCC) && _LIBCUDACXX_CUDACC_VER < 1103000 && defined(TEST_COMPILER_CLANG)) { const optional opt(2); const Y y(3); diff --git a/libcudacxx/.upstream-tests/test/std/utilities/optional/optional.object/optional.object.observe/value_rvalue.pass.cpp b/libcudacxx/.upstream-tests/test/std/utilities/optional/optional.object/optional.object.observe/value_rvalue.pass.cpp index 11e703588d9..fb21af796f6 100644 --- a/libcudacxx/.upstream-tests/test/std/utilities/optional/optional.object/optional.object.observe/value_rvalue.pass.cpp +++ b/libcudacxx/.upstream-tests/test/std/utilities/optional/optional.object/optional.object.observe/value_rvalue.pass.cpp @@ -81,7 +81,9 @@ int main(int, char**) } #endif assert(test() == 7); +#if !(defined(TEST_COMPILER_NVCC) && _LIBCUDACXX_CUDACC_VER < 1103000 && defined(TEST_COMPILER_CLANG)) static_assert(test() == 7, ""); +#endif // !(defined(TEST_COMPILER_NVCC) && _LIBCUDACXX_CUDACC_VER < 1103000 && defined(TEST_COMPILER_CLANG)) return 0; } diff --git a/libcudacxx/.upstream-tests/test/std/utilities/optional/optional.relops/equal.pass.cpp b/libcudacxx/.upstream-tests/test/std/utilities/optional/optional.relops/equal.pass.cpp index 8386c1df6cf..cca03a98c3e 100644 --- a/libcudacxx/.upstream-tests/test/std/utilities/optional/optional.relops/equal.pass.cpp +++ b/libcudacxx/.upstream-tests/test/std/utilities/optional/optional.relops/equal.pass.cpp @@ -38,11 +38,11 @@ constexpr bool test() { typedef X T; typedef optional O; - constexpr O o1; // disengaged - constexpr O o2; // disengaged - constexpr O o3{1}; // engaged - constexpr O o4{2}; // engaged - constexpr O o5{1}; // engaged + O o1; // disengaged + O o2; // disengaged + O o3{1}; // engaged + O o4{2}; // engaged + O o5{1}; // engaged assert(o1 == o1); assert(o1 == o2); @@ -77,14 +77,14 @@ constexpr bool test() { { using O1 = optional; using O2 = optional; - constexpr O1 o1(42); + O1 o1(42); assert(o1 == O2(42)); assert(!(O2(101) == o1)); } { using O1 = optional; using O2 = optional; - constexpr O1 o1(42); + O1 o1(42); assert(o1 == O2(42)); assert(!(O2(101) == o1)); } @@ -95,7 +95,9 @@ constexpr bool test() { int main(int, char**) { test(); #if TEST_STD_VER >= 17 +#if !(defined(TEST_COMPILER_NVCC) && _LIBCUDACXX_CUDACC_VER < 1103000 && defined(TEST_COMPILER_CLANG)) static_assert(test()); +#endif // !(defined(TEST_COMPILER_NVCC) && _LIBCUDACXX_CUDACC_VER < 1103000 && defined(TEST_COMPILER_CLANG)) #endif return 0; diff --git a/libcudacxx/.upstream-tests/test/std/utilities/optional/optional.relops/greater_equal.pass.cpp b/libcudacxx/.upstream-tests/test/std/utilities/optional/optional.relops/greater_equal.pass.cpp index ff7bad4ba89..932f5ce4a45 100644 --- a/libcudacxx/.upstream-tests/test/std/utilities/optional/optional.relops/greater_equal.pass.cpp +++ b/libcudacxx/.upstream-tests/test/std/utilities/optional/optional.relops/greater_equal.pass.cpp @@ -36,11 +36,11 @@ constexpr bool test() { { typedef optional O; - constexpr O o1; // disengaged - constexpr O o2; // disengaged - constexpr O o3{1}; // engaged - constexpr O o4{2}; // engaged - constexpr O o5{1}; // engaged + O o1; // disengaged + O o2; // disengaged + O o3{1}; // engaged + O o4{2}; // engaged + O o5{1}; // engaged assert((o1 >= o1)); assert((o1 >= o2)); @@ -75,14 +75,14 @@ constexpr bool test() { { using O1 = optional; using O2 = optional; - constexpr O1 o1(42); + O1 o1(42); assert(o1 >= O2(42)); assert(!(O2(11) >= o1)); } { using O1 = optional; using O2 = optional; - constexpr O1 o1(42); + O1 o1(42); assert(o1 >= O2(42)); assert(!(O2(1) >= o1)); } @@ -93,7 +93,9 @@ constexpr bool test() { int main(int, char**) { test(); #if TEST_STD_VER >= 17 +#if !(defined(TEST_COMPILER_NVCC) && _LIBCUDACXX_CUDACC_VER < 1103000 && defined(TEST_COMPILER_CLANG)) static_assert(test()); +#endif // !(defined(TEST_COMPILER_NVCC) && _LIBCUDACXX_CUDACC_VER < 1103000 && defined(TEST_COMPILER_CLANG)) #endif return 0; diff --git a/libcudacxx/.upstream-tests/test/std/utilities/optional/optional.relops/greater_than.pass.cpp b/libcudacxx/.upstream-tests/test/std/utilities/optional/optional.relops/greater_than.pass.cpp index c82d674bad4..0996aaa70db 100644 --- a/libcudacxx/.upstream-tests/test/std/utilities/optional/optional.relops/greater_than.pass.cpp +++ b/libcudacxx/.upstream-tests/test/std/utilities/optional/optional.relops/greater_than.pass.cpp @@ -34,11 +34,11 @@ constexpr bool test() { { typedef optional O; - constexpr O o1; // disengaged - constexpr O o2; // disengaged - constexpr O o3{1}; // engaged - constexpr O o4{2}; // engaged - constexpr O o5{1}; // engaged + O o1; // disengaged + O o2; // disengaged + O o3{1}; // engaged + O o4{2}; // engaged + O o5{1}; // engaged assert(!(o1 > o1)); assert(!(o1 > o2)); @@ -73,14 +73,14 @@ constexpr bool test() { { using O1 = optional; using O2 = optional; - constexpr O1 o1(42); + O1 o1(42); assert(o1 > O2(1)); assert(!(O2(42) > o1)); } { using O1 = optional; using O2 = optional; - constexpr O1 o1(42); + O1 o1(42); assert(o1 > O2(1)); assert(!(O2(42) > o1)); } @@ -91,7 +91,9 @@ constexpr bool test() { int main(int, char**) { test(); #if TEST_STD_VER >= 17 +#if !(defined(TEST_COMPILER_NVCC) && _LIBCUDACXX_CUDACC_VER < 1103000 && defined(TEST_COMPILER_CLANG)) static_assert(test()); +#endif // !(defined(TEST_COMPILER_NVCC) && _LIBCUDACXX_CUDACC_VER < 1103000 && defined(TEST_COMPILER_CLANG)) #endif return 0; diff --git a/libcudacxx/.upstream-tests/test/std/utilities/optional/optional.relops/less_equal.pass.cpp b/libcudacxx/.upstream-tests/test/std/utilities/optional/optional.relops/less_equal.pass.cpp index 907ddbf40dc..35cdbae7e51 100644 --- a/libcudacxx/.upstream-tests/test/std/utilities/optional/optional.relops/less_equal.pass.cpp +++ b/libcudacxx/.upstream-tests/test/std/utilities/optional/optional.relops/less_equal.pass.cpp @@ -36,11 +36,11 @@ constexpr bool test() { { typedef optional O; - constexpr O o1; // disengaged - constexpr O o2; // disengaged - constexpr O o3{1}; // engaged - constexpr O o4{2}; // engaged - constexpr O o5{1}; // engaged + O o1; // disengaged + O o2; // disengaged + O o3{1}; // engaged + O o4{2}; // engaged + O o5{1}; // engaged assert((o1 <= o1)); assert((o1 <= o2)); @@ -75,14 +75,14 @@ constexpr bool test() { { using O1 = optional; using O2 = optional; - constexpr O1 o1(42); + O1 o1(42); assert(o1 <= O2(42)); assert(!(O2(101) <= o1)); } { using O1 = optional; using O2 = optional; - constexpr O1 o1(42); + O1 o1(42); assert(o1 <= O2(42)); assert(!(O2(101) <= o1)); } @@ -93,7 +93,9 @@ constexpr bool test() { int main(int, char**) { test(); #if TEST_STD_VER >= 17 +#if !(defined(TEST_COMPILER_NVCC) && _LIBCUDACXX_CUDACC_VER < 1103000 && defined(TEST_COMPILER_CLANG)) static_assert(test()); +#endif // !(defined(TEST_COMPILER_NVCC) && _LIBCUDACXX_CUDACC_VER < 1103000 && defined(TEST_COMPILER_CLANG)) #endif return 0; diff --git a/libcudacxx/.upstream-tests/test/std/utilities/optional/optional.relops/less_than.pass.cpp b/libcudacxx/.upstream-tests/test/std/utilities/optional/optional.relops/less_than.pass.cpp index 9d7141299fa..7be8e8e576e 100644 --- a/libcudacxx/.upstream-tests/test/std/utilities/optional/optional.relops/less_than.pass.cpp +++ b/libcudacxx/.upstream-tests/test/std/utilities/optional/optional.relops/less_than.pass.cpp @@ -34,11 +34,11 @@ constexpr bool test() { { typedef optional O; - constexpr O o1; // disengaged - constexpr O o2; // disengaged - constexpr O o3{1}; // engaged - constexpr O o4{2}; // engaged - constexpr O o5{1}; // engaged + O o1; // disengaged + O o2; // disengaged + O o3{1}; // engaged + O o4{2}; // engaged + O o5{1}; // engaged assert(!(o1 < o1)); assert(!(o1 < o2)); @@ -73,14 +73,14 @@ constexpr bool test() { { using O1 = optional; using O2 = optional; - constexpr O1 o1(42); + O1 o1(42); assert(o1 < O2(101)); assert(!(O2(101) < o1)); } { using O1 = optional; using O2 = optional; - constexpr O1 o1(42); + O1 o1(42); assert(o1 < O2(101)); assert(!(O2(101) < o1)); } @@ -91,7 +91,9 @@ constexpr bool test() { int main(int, char**) { test(); #if TEST_STD_VER >= 17 +#if !(defined(TEST_COMPILER_NVCC) && _LIBCUDACXX_CUDACC_VER < 1103000 && defined(TEST_COMPILER_CLANG)) static_assert(test()); +#endif // !(defined(TEST_COMPILER_NVCC) && _LIBCUDACXX_CUDACC_VER < 1103000 && defined(TEST_COMPILER_CLANG)) #endif return 0; diff --git a/libcudacxx/.upstream-tests/test/std/utilities/optional/optional.relops/not_equal.pass.cpp b/libcudacxx/.upstream-tests/test/std/utilities/optional/optional.relops/not_equal.pass.cpp index 0c0980bf42f..779ca08a8f9 100644 --- a/libcudacxx/.upstream-tests/test/std/utilities/optional/optional.relops/not_equal.pass.cpp +++ b/libcudacxx/.upstream-tests/test/std/utilities/optional/optional.relops/not_equal.pass.cpp @@ -38,11 +38,11 @@ constexpr bool test() { typedef X T; typedef optional O; - constexpr O o1; // disengaged - constexpr O o2; // disengaged - constexpr O o3{1}; // engaged - constexpr O o4{2}; // engaged - constexpr O o5{1}; // engaged + O o1; // disengaged + O o2; // disengaged + O o3{1}; // engaged + O o4{2}; // engaged + O o5{1}; // engaged assert(!(o1 != o1)); assert(!(o1 != o2)); @@ -77,14 +77,14 @@ constexpr bool test() { { using O1 = optional; using O2 = optional; - constexpr O1 o1(42); + O1 o1(42); assert(o1 != O2(101)); assert(!(O2(42) != o1)); } { using O1 = optional; using O2 = optional; - constexpr O1 o1(42); + O1 o1(42); assert(o1 != O2(101)); assert(!(O2(42) != o1)); } @@ -96,7 +96,9 @@ constexpr bool test() { int main(int, char**) { test(); #if TEST_STD_VER >= 17 +#if !(defined(TEST_COMPILER_NVCC) && _LIBCUDACXX_CUDACC_VER < 1103000 && defined(TEST_COMPILER_CLANG)) static_assert(test()); +#endif // !(defined(TEST_COMPILER_NVCC) && _LIBCUDACXX_CUDACC_VER < 1103000 && defined(TEST_COMPILER_CLANG)) #endif return 0; diff --git a/libcudacxx/.upstream-tests/test/std/utilities/optional/optional.specalg/make_optional.pass.cpp b/libcudacxx/.upstream-tests/test/std/utilities/optional/optional.specalg/make_optional.pass.cpp index 161f4998ced..8f951c638bd 100644 --- a/libcudacxx/.upstream-tests/test/std/utilities/optional/optional.specalg/make_optional.pass.cpp +++ b/libcudacxx/.upstream-tests/test/std/utilities/optional/optional.specalg/make_optional.pass.cpp @@ -38,11 +38,13 @@ int main(int, char**) ASSERT_SAME_TYPE(decltype(opt), cuda::std::optional); assert(*opt == arr); } +#if !(defined(TEST_COMPILER_NVCC) && _LIBCUDACXX_CUDACC_VER < 1103000 && defined(TEST_COMPILER_CLANG)) { constexpr auto opt = cuda::std::make_optional(2); ASSERT_SAME_TYPE(decltype(opt), const cuda::std::optional); static_assert(opt.value() == 2, ""); } +#endif // !(defined(TEST_COMPILER_NVCC) && _LIBCUDACXX_CUDACC_VER < 1103000 && defined(TEST_COMPILER_CLANG)) { auto opt = cuda::std::make_optional(2); ASSERT_SAME_TYPE(decltype(opt), cuda::std::optional); diff --git a/libcudacxx/.upstream-tests/test/std/utilities/optional/optional.specalg/make_optional_explicit.pass.cpp b/libcudacxx/.upstream-tests/test/std/utilities/optional/optional.specalg/make_optional_explicit.pass.cpp index e7d1c56fa68..29b76c692f7 100644 --- a/libcudacxx/.upstream-tests/test/std/utilities/optional/optional.specalg/make_optional_explicit.pass.cpp +++ b/libcudacxx/.upstream-tests/test/std/utilities/optional/optional.specalg/make_optional_explicit.pass.cpp @@ -28,11 +28,13 @@ int main(int, char**) { +#if !(defined(TEST_COMPILER_NVCC) && _LIBCUDACXX_CUDACC_VER < 1103000 && defined(TEST_COMPILER_CLANG)) { constexpr auto opt = cuda::std::make_optional('a'); static_assert(*opt == int('a'), ""); assert(*opt == int('a')); } +#endif // !(defined(TEST_COMPILER_NVCC) && _LIBCUDACXX_CUDACC_VER < 1103000 && defined(TEST_COMPILER_CLANG)) #ifdef _LIBCUDACXX_HAS_STRING { cuda::std::string s = "123"; diff --git a/libcudacxx/.upstream-tests/test/std/utilities/optional/optional.specalg/make_optional_explicit_initializer_list.pass.cpp b/libcudacxx/.upstream-tests/test/std/utilities/optional/optional.specalg/make_optional_explicit_initializer_list.pass.cpp index 90d08d858a0..83e9cd660eb 100644 --- a/libcudacxx/.upstream-tests/test/std/utilities/optional/optional.specalg/make_optional_explicit_initializer_list.pass.cpp +++ b/libcudacxx/.upstream-tests/test/std/utilities/optional/optional.specalg/make_optional_explicit_initializer_list.pass.cpp @@ -57,7 +57,9 @@ int main(int, char**) { test(); #if defined(_LIBCUDACXX_ADDRESSOF) +#if !(defined(TEST_COMPILER_NVCC) && _LIBCUDACXX_CUDACC_VER < 1103000 && defined(TEST_COMPILER_CLANG)) static_assert(test(), ""); +#endif // !(defined(TEST_COMPILER_NVCC) && _LIBCUDACXX_CUDACC_VER < 1103000 && defined(TEST_COMPILER_CLANG)) #endif /* { diff --git a/libcudacxx/include/cuda/std/detail/libcxx/include/optional b/libcudacxx/include/cuda/std/detail/libcxx/include/optional index f7887a2f76d..272a1cb579e 100644 --- a/libcudacxx/include/cuda/std/detail/libcxx/include/optional +++ b/libcudacxx/include/cuda/std/detail/libcxx/include/optional @@ -344,11 +344,11 @@ struct __optional_storage_base : __optional_destruct_base<_Tp> using __base = __optional_destruct_base<_Tp>; using value_type = _Tp; -#if defined(_LIBCUDACXX_COMPILER_NVRTC) // nvbug3961621 - constexpr __optional_storage_base() noexcept = default; - - template - _LIBCUDACXX_INLINE_VISIBILITY constexpr +// nvbug3961621 +#if defined(_LIBCUDACXX_COMPILER_NVRTC) \ + || (defined(_LIBCUDACXX_COMPILER_NVCC) && _LIBCUDACXX_CUDACC_VER < 1103000 && defined(_LIBCUDACXX_COMPILER_CLANG)) + template = 0> + _LIBCUDACXX_INLINE_VISIBILITY constexpr __optional_storage_base(_Args&&... __args) noexcept(noexcept(__base(_CUDA_VSTD::declval<_Args>()...))) : __base(_CUDA_VSTD::forward<_Args>(__args)...) {} @@ -356,6 +356,8 @@ struct __optional_storage_base : __optional_destruct_base<_Tp> using __base::__base; #endif + constexpr __optional_storage_base() noexcept = default; + _LIBCUDACXX_INLINE_VISIBILITY constexpr bool has_value() const noexcept { @@ -426,17 +428,20 @@ struct __optional_storage_base : __optional_destruct_base<_Tp> template ::value> struct __optional_copy_base : __optional_storage_base<_Tp> { + using __base = __optional_storage_base<_Tp>; -#if defined(_LIBCUDACXX_COMPILER_NVRTC) // nvbug3961621 +// nvbug3961621 +#if defined(_LIBCUDACXX_COMPILER_NVRTC) \ + || (defined(_LIBCUDACXX_COMPILER_NVCC) && _LIBCUDACXX_CUDACC_VER < 1103000 && defined(_LIBCUDACXX_COMPILER_CLANG)) constexpr __optional_copy_base() noexcept = default; - template - _LIBCUDACXX_INLINE_VISIBILITY constexpr - __optional_copy_base(_Args&&... __args) noexcept(noexcept(__optional_storage_base<_Tp>(_CUDA_VSTD::declval<_Args>()...))) - : __optional_storage_base<_Tp>(_CUDA_VSTD::forward<_Args>(__args)...) + template = 0> + _LIBCUDACXX_INLINE_VISIBILITY constexpr + __optional_copy_base(_Args&&... __args) noexcept(noexcept(__base(_CUDA_VSTD::declval<_Args>()...))) + : __base(_CUDA_VSTD::forward<_Args>(__args)...) {} #else - using __optional_storage_base<_Tp>::__optional_storage_base; + using __base::__base; #endif }; @@ -445,9 +450,11 @@ struct __optional_copy_base<_Tp, false> : __optional_storage_base<_Tp> { using __base = __optional_storage_base<_Tp>; -#if defined(_LIBCUDACXX_COMPILER_NVRTC) // nvbug3961621 - template - _LIBCUDACXX_INLINE_VISIBILITY constexpr +// nvbug3961621 +#if defined(_LIBCUDACXX_COMPILER_NVRTC) \ + || (defined(_LIBCUDACXX_COMPILER_NVCC) && _LIBCUDACXX_CUDACC_VER < 1103000 && defined(_LIBCUDACXX_COMPILER_CLANG)) + template = 0> + _LIBCUDACXX_INLINE_VISIBILITY constexpr __optional_copy_base(_Args&&... __args) noexcept(noexcept(__base(_CUDA_VSTD::declval<_Args>()...))) : __base(_CUDA_VSTD::forward<_Args>(__args)...) {} @@ -474,17 +481,20 @@ struct __optional_copy_base<_Tp, false> : __optional_storage_base<_Tp> template ::value> struct __optional_move_base : __optional_copy_base<_Tp> { + using __base = __optional_copy_base<_Tp>; -#if defined(_LIBCUDACXX_COMPILER_NVRTC) // nvbug3961621 +// nvbug3961621 +#if defined(_LIBCUDACXX_COMPILER_NVRTC) \ + || (defined(_LIBCUDACXX_COMPILER_NVCC) && _LIBCUDACXX_CUDACC_VER < 1103000 && defined(_LIBCUDACXX_COMPILER_CLANG)) constexpr __optional_move_base() noexcept = default; - template - _LIBCUDACXX_INLINE_VISIBILITY constexpr - __optional_move_base(_Args&&... __args) noexcept(noexcept(__optional_copy_base<_Tp>(_CUDA_VSTD::declval<_Args>()...))) - : __optional_copy_base<_Tp>(_CUDA_VSTD::forward<_Args>(__args)...) + template = 0> + _LIBCUDACXX_INLINE_VISIBILITY constexpr + __optional_move_base(_Args&&... __args) noexcept(noexcept(__base(_CUDA_VSTD::declval<_Args>()...))) + : __base(_CUDA_VSTD::forward<_Args>(__args)...) {} #else - using __optional_copy_base<_Tp>::__optional_copy_base; + using __base::__base; #endif }; @@ -492,15 +502,18 @@ template struct __optional_move_base<_Tp, false> : __optional_copy_base<_Tp> { using value_type = _Tp; - -#if defined(_LIBCUDACXX_COMPILER_NVRTC) // nvbug3961621 - template - _LIBCUDACXX_INLINE_VISIBILITY constexpr - __optional_move_base(_Args&&... __args) noexcept(noexcept(__optional_copy_base<_Tp>(_CUDA_VSTD::declval<_Args>()...))) - : __optional_copy_base<_Tp>(_CUDA_VSTD::forward<_Args>(__args)...) + using __base = __optional_copy_base<_Tp>; + +// nvbug3961621 +#if defined(_LIBCUDACXX_COMPILER_NVRTC) \ + || (defined(_LIBCUDACXX_COMPILER_NVCC) && _LIBCUDACXX_CUDACC_VER < 1103000 && defined(_LIBCUDACXX_COMPILER_CLANG)) + template = 0> + _LIBCUDACXX_INLINE_VISIBILITY constexpr + __optional_move_base(_Args&&... __args) noexcept(noexcept(__base(_CUDA_VSTD::declval<_Args>()...))) + : __base(_CUDA_VSTD::forward<_Args>(__args)...) {} #else - using __optional_copy_base<_Tp>::__optional_copy_base; + using __base::__base; #endif __optional_move_base() = default; @@ -523,30 +536,36 @@ template ::value> struct __optional_copy_assign_base : __optional_move_base<_Tp> { -#if defined(_LIBCUDACXX_COMPILER_NVRTC) // nvbug3961621 + using __base = __optional_move_base<_Tp>; +// nvbug3961621 +#if defined(_LIBCUDACXX_COMPILER_NVRTC) \ + || (defined(_LIBCUDACXX_COMPILER_NVCC) && _LIBCUDACXX_CUDACC_VER < 1103000 && defined(_LIBCUDACXX_COMPILER_CLANG)) constexpr __optional_copy_assign_base() noexcept = default; - template - _LIBCUDACXX_INLINE_VISIBILITY constexpr - __optional_copy_assign_base(_Args&&... __args) noexcept(noexcept(__optional_move_base<_Tp>(_CUDA_VSTD::declval<_Args>()...))) - : __optional_move_base<_Tp>(_CUDA_VSTD::forward<_Args>(__args)...) + template = 0> + _LIBCUDACXX_INLINE_VISIBILITY constexpr + __optional_copy_assign_base(_Args&&... __args) noexcept(noexcept(__base(_CUDA_VSTD::declval<_Args>()...))) + : __base(_CUDA_VSTD::forward<_Args>(__args)...) {} #else - using __optional_move_base<_Tp>::__optional_move_base; + using __base::__base; #endif }; template struct __optional_copy_assign_base<_Tp, false> : __optional_move_base<_Tp> { -#if defined(_LIBCUDACXX_COMPILER_NVRTC) // nvbug3961621 - template - _LIBCUDACXX_INLINE_VISIBILITY constexpr - __optional_copy_assign_base(_Args&&... __args) noexcept(noexcept(__optional_move_base<_Tp>(_CUDA_VSTD::declval<_Args>()...))) - : __optional_move_base<_Tp>(_CUDA_VSTD::forward<_Args>(__args)...) + using __base = __optional_move_base<_Tp>; +// nvbug3961621 +#if defined(_LIBCUDACXX_COMPILER_NVRTC) \ + || (defined(_LIBCUDACXX_COMPILER_NVCC) && _LIBCUDACXX_CUDACC_VER < 1103000 && defined(_LIBCUDACXX_COMPILER_CLANG)) + template = 0> + _LIBCUDACXX_INLINE_VISIBILITY constexpr + __optional_copy_assign_base(_Args&&... __args) noexcept(noexcept(__base(_CUDA_VSTD::declval<_Args>()...))) + : __base(_CUDA_VSTD::forward<_Args>(__args)...) {} #else - using __optional_move_base<_Tp>::__optional_move_base; + using __base::__base; #endif __optional_copy_assign_base() = default; @@ -569,16 +588,19 @@ template ::value> struct __optional_move_assign_base : __optional_copy_assign_base<_Tp> { -#if defined(_LIBCUDACXX_COMPILER_NVRTC) // nvbug3961621 + using __base = __optional_copy_assign_base<_Tp>; +// nvbug3961621 +#if defined(_LIBCUDACXX_COMPILER_NVRTC) \ + || (defined(_LIBCUDACXX_COMPILER_NVCC) && _LIBCUDACXX_CUDACC_VER < 1103000 && defined(_LIBCUDACXX_COMPILER_CLANG)) constexpr __optional_move_assign_base() noexcept = default; - template - _LIBCUDACXX_INLINE_VISIBILITY constexpr - __optional_move_assign_base(_Args&&... __args) noexcept(noexcept(__optional_copy_assign_base<_Tp>(_CUDA_VSTD::declval<_Args>()...))) - : __optional_copy_assign_base<_Tp>(_CUDA_VSTD::forward<_Args>(__args)...) + template = 0> + _LIBCUDACXX_INLINE_VISIBILITY constexpr + __optional_move_assign_base(_Args&&... __args) noexcept(noexcept(__base(_CUDA_VSTD::declval<_Args>()...))) + : __base(_CUDA_VSTD::forward<_Args>(__args)...) {} #else - using __optional_copy_assign_base<_Tp>::__optional_copy_assign_base; + using __base::__base; #endif }; @@ -586,15 +608,18 @@ template struct __optional_move_assign_base<_Tp, false> : __optional_copy_assign_base<_Tp> { using value_type = _Tp; - -#if defined(_LIBCUDACXX_COMPILER_NVRTC) // nvbug3961621 - template - _LIBCUDACXX_INLINE_VISIBILITY constexpr - __optional_move_assign_base(_Args&&... __args) noexcept(noexcept(__optional_copy_assign_base<_Tp>(_CUDA_VSTD::declval<_Args>()...))) - : __optional_copy_assign_base<_Tp>(_CUDA_VSTD::forward<_Args>(__args)...) + using __base = __optional_copy_assign_base<_Tp>; + +// nvbug3961621 +#if defined(_LIBCUDACXX_COMPILER_NVRTC) \ + || (defined(_LIBCUDACXX_COMPILER_NVCC) && _LIBCUDACXX_CUDACC_VER < 1103000 && defined(_LIBCUDACXX_COMPILER_CLANG)) + template = 0> + _LIBCUDACXX_INLINE_VISIBILITY constexpr + __optional_move_assign_base(_Args&&... __args) noexcept(noexcept(__base(_CUDA_VSTD::declval<_Args>()...))) + : __base(_CUDA_VSTD::forward<_Args>(__args)...) {} #else - using __optional_copy_assign_base<_Tp>::__optional_copy_assign_base; + using __base::__base; #endif __optional_move_assign_base() = default;