From 3e5f9dacb092a1414f72500111c2b049673e0055 Mon Sep 17 00:00:00 2001 From: Louis Dionne Date: Tue, 29 Sep 2020 10:49:52 -0400 Subject: [PATCH] [libc++] Fix tests on GCC 10 Also, remove workarounds for ancient Clangs from is_constructible tests. --- libcxx/include/type_traits | 5 +-- .../std/namespace/addressable_functions.sh.cpp | 2 +- .../meta.unary.prop/is_constructible.pass.cpp | 51 ++-------------------- .../tuple.tuple/tuple.creation/tuple_cat.pass.cpp | 2 +- libcxx/utils/ci/run-buildbot.sh | 4 +- 5 files changed, 11 insertions(+), 53 deletions(-) diff --git a/libcxx/include/type_traits b/libcxx/include/type_traits index 8658272..0355638 100644 --- a/libcxx/include/type_traits +++ b/libcxx/include/type_traits @@ -2883,8 +2883,7 @@ namespace __is_construct struct __nat {}; } -#if !defined(_LIBCPP_CXX03_LANG) && (!__has_feature(is_constructible) || \ - defined(_LIBCPP_TESTING_FALLBACK_IS_CONSTRUCTIBLE)) +#if !defined(_LIBCPP_CXX03_LANG) && !__has_feature(is_constructible) && !defined(_LIBCPP_COMPILER_GCC) template struct __libcpp_is_constructible; @@ -2999,7 +2998,7 @@ struct __libcpp_is_constructible<_Tp&&, _A0> #endif -#if __has_feature(is_constructible) +#if __has_feature(is_constructible) || defined(_LIBCPP_COMPILER_GCC) template struct _LIBCPP_TEMPLATE_VIS is_constructible : public integral_constant diff --git a/libcxx/test/std/namespace/addressable_functions.sh.cpp b/libcxx/test/std/namespace/addressable_functions.sh.cpp index fb731ab..72db27f 100644 --- a/libcxx/test/std/namespace/addressable_functions.sh.cpp +++ b/libcxx/test/std/namespace/addressable_functions.sh.cpp @@ -14,7 +14,7 @@ // RUN: %{cxx} %{flags} %{compile_flags} -c %s -o %t.tu1.o -DTU1 // RUN: %{cxx} %{flags} %{compile_flags} -c %s -o %t.tu2.o -DTU2 -// RUN: %{cxx} %{flags} %{link_flags} %t.tu1.o %t.tu2.o -o %t.exe +// RUN: %{cxx} %t.tu1.o %t.tu2.o %{flags} %{link_flags} -o %t.exe // RUN: %{exec} %t.exe #include diff --git a/libcxx/test/std/utilities/meta/meta.unary/meta.unary.prop/is_constructible.pass.cpp b/libcxx/test/std/utilities/meta/meta.unary/meta.unary.prop/is_constructible.pass.cpp index e3f8313..e4fad7c 100644 --- a/libcxx/test/std/utilities/meta/meta.unary/meta.unary.prop/is_constructible.pass.cpp +++ b/libcxx/test/std/utilities/meta/meta.unary/meta.unary.prop/is_constructible.pass.cpp @@ -11,8 +11,6 @@ // template // struct is_constructible; -// ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_TESTING_FALLBACK_IS_CONSTRUCTIBLE - #include #include "test_macros.h" @@ -22,7 +20,6 @@ #define LIBCPP11_STATIC_ASSERT(...) ((void)0) #endif - struct A { explicit A(int); @@ -78,7 +75,6 @@ template void test_is_constructible() { static_assert( (std::is_constructible::value), ""); - LIBCPP11_STATIC_ASSERT((std::__libcpp_is_constructible::type::value), ""); #if TEST_STD_VER > 14 static_assert( std::is_constructible_v, ""); #endif @@ -88,7 +84,6 @@ template void test_is_constructible() { static_assert(( std::is_constructible::value), ""); - LIBCPP11_STATIC_ASSERT((std::__libcpp_is_constructible::type::value), ""); #if TEST_STD_VER > 14 static_assert(( std::is_constructible_v), ""); #endif @@ -98,7 +93,6 @@ template void test_is_constructible() { static_assert(( std::is_constructible::value), ""); - LIBCPP11_STATIC_ASSERT((std::__libcpp_is_constructible::type::value), ""); #if TEST_STD_VER > 14 static_assert(( std::is_constructible_v), ""); #endif @@ -108,7 +102,6 @@ template void test_is_constructible() { static_assert(( std::is_constructible::value), ""); - LIBCPP11_STATIC_ASSERT((std::__libcpp_is_constructible::type::value), ""); #if TEST_STD_VER > 14 static_assert(( std::is_constructible_v), ""); #endif @@ -118,7 +111,6 @@ template void test_is_not_constructible() { static_assert((!std::is_constructible::value), ""); - LIBCPP11_STATIC_ASSERT((!std::__libcpp_is_constructible::type::value), ""); #if TEST_STD_VER > 14 static_assert((!std::is_constructible_v), ""); #endif @@ -128,23 +120,11 @@ template void test_is_not_constructible() { static_assert((!std::is_constructible::value), ""); - LIBCPP11_STATIC_ASSERT((!std::__libcpp_is_constructible::type::value), ""); #if TEST_STD_VER > 14 static_assert((!std::is_constructible_v), ""); #endif } -#if TEST_STD_VER >= 11 -template (std::declval()))> -constexpr bool clang_disallows_valid_static_cast_test(int) { return false; }; - -constexpr bool clang_disallows_valid_static_cast_test(long) { return true; } - -static constexpr bool clang_disallows_valid_static_cast_bug = - clang_disallows_valid_static_cast_test(0); -#endif - - int main(int, char**) { typedef Base B; @@ -210,13 +190,17 @@ int main(int, char**) test_is_constructible(); test_is_not_constructible(); test_is_constructible(); +#ifndef TEST_COMPILER_GCC test_is_not_constructible(); test_is_not_constructible(); +#endif test_is_constructible(); test_is_constructible(); +#ifndef TEST_COMPILER_GCC test_is_not_constructible(); test_is_not_constructible(); +#endif // test that T must also be destructible test_is_constructible(); @@ -255,28 +239,11 @@ int main(int, char**) #endif static_assert(std::is_constructible>::value, ""); -#ifdef __clang__ -#if defined(CLANG_TEST_VER) && CLANG_TEST_VER < 400 - static_assert(clang_disallows_valid_static_cast_bug, "bug still exists"); -#endif - // FIXME Clang disallows this construction because it thinks that - // 'static_cast(declval>())' is ill-formed. - LIBCPP_STATIC_ASSERT( - clang_disallows_valid_static_cast_bug != - std::__libcpp_is_constructible>::value, ""); - ((void)clang_disallows_valid_static_cast_bug); // Prevent unused warning -#else - static_assert(clang_disallows_valid_static_cast_bug == false, ""); - LIBCPP_STATIC_ASSERT(std::__libcpp_is_constructible>::value, ""); -#endif #ifdef __clang__ // FIXME Clang and GCC disagree on the validity of this expression. test_is_constructible>(); static_assert(std::is_constructible>::value, ""); - LIBCPP_STATIC_ASSERT( - clang_disallows_valid_static_cast_bug != - std::__libcpp_is_constructible>::value, ""); #else test_is_not_constructible>(); test_is_not_constructible>(); @@ -287,21 +254,11 @@ int main(int, char**) test_is_not_constructible>(); test_is_not_constructible>(); - -// TODO: Remove this workaround once Clang <= 3.7 are no longer used regularly. -// In those compiler versions the __is_constructible builtin gives the wrong -// results for abominable function types. -#if (defined(TEST_APPLE_CLANG_VER) && TEST_APPLE_CLANG_VER < 703) \ - || (defined(TEST_CLANG_VER) && TEST_CLANG_VER < 308) -#define WORKAROUND_CLANG_BUG -#endif -#if !defined(WORKAROUND_CLANG_BUG) test_is_not_constructible(); test_is_not_constructible (); test_is_not_constructible (); test_is_not_constructible (); test_is_not_constructible (); -#endif #endif // TEST_STD_VER >= 11 return 0; diff --git a/libcxx/test/std/utilities/tuple/tuple.tuple/tuple.creation/tuple_cat.pass.cpp b/libcxx/test/std/utilities/tuple/tuple.tuple/tuple.creation/tuple_cat.pass.cpp index c6f8d52..00c9d27 100644 --- a/libcxx/test/std/utilities/tuple/tuple.tuple/tuple.creation/tuple_cat.pass.cpp +++ b/libcxx/test/std/utilities/tuple/tuple.tuple/tuple.creation/tuple_cat.pass.cpp @@ -263,7 +263,7 @@ int main(int, char**) ((void)r); } { - std::tuple t1({1}); + std::tuple t1(NS::Namespaced{1}); std::tuple t = std::tuple_cat(t1); std::tuple t2 = std::tuple_cat(t1, t1); diff --git a/libcxx/utils/ci/run-buildbot.sh b/libcxx/utils/ci/run-buildbot.sh index 4dd1d48..d4972b0 100755 --- a/libcxx/utils/ci/run-buildbot.sh +++ b/libcxx/utils/ci/run-buildbot.sh @@ -57,7 +57,9 @@ x86_64-ubuntu-32bit) x86_64-ubuntu-gcc) export CC=gcc export CXX=g++ - args+=("-DLLVM_LIT_ARGS=-sv --show-unsupported") + # FIXME: Re-enable experimental testing on GCC. GCC cares about the order + # in which we link -lc++experimental, which causes issues. + args+=("-DLLVM_LIT_ARGS=-sv --show-unsupported --param enable_experimental=False") ;; x86_64-ubuntu-asan) export CC=clang -- 2.7.4