[libcxx-commits] [libcxx] 3e5f9da - [libc++] Fix tests on GCC 10

Louis Dionne via libcxx-commits libcxx-commits at lists.llvm.org
Tue Sep 29 09:10:45 PDT 2020


Author: Louis Dionne
Date: 2020-09-29T12:08:33-04:00
New Revision: 3e5f9dacb092a1414f72500111c2b049673e0055

URL: https://github.com/llvm/llvm-project/commit/3e5f9dacb092a1414f72500111c2b049673e0055
DIFF: https://github.com/llvm/llvm-project/commit/3e5f9dacb092a1414f72500111c2b049673e0055.diff

LOG: [libc++] Fix tests on GCC 10

Also, remove workarounds for ancient Clangs from is_constructible tests.

Added: 
    

Modified: 
    libcxx/include/type_traits
    libcxx/test/std/namespace/addressable_functions.sh.cpp
    libcxx/test/std/utilities/meta/meta.unary/meta.unary.prop/is_constructible.pass.cpp
    libcxx/test/std/utilities/tuple/tuple.tuple/tuple.creation/tuple_cat.pass.cpp
    libcxx/utils/ci/run-buildbot.sh

Removed: 
    


################################################################################
diff  --git a/libcxx/include/type_traits b/libcxx/include/type_traits
index 8658272c032c..03556389e2c6 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 <class _Tp, class... _Args>
 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 <class _Tp, class ..._Args>
 struct _LIBCPP_TEMPLATE_VIS is_constructible
     : public integral_constant<bool, __is_constructible(_Tp, _Args...)>

diff  --git a/libcxx/test/std/namespace/addressable_functions.sh.cpp b/libcxx/test/std/namespace/addressable_functions.sh.cpp
index fb731abf306c..72db27ffaf20 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 <cassert>

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 e3f83135fe12..e4fad7cd36c9 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 <class T, class... Args>
 //   struct is_constructible;
 
-// ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_TESTING_FALLBACK_IS_CONSTRUCTIBLE
-
 #include <type_traits>
 #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 <class T>
 void test_is_constructible()
 {
     static_assert( (std::is_constructible<T>::value), "");
-    LIBCPP11_STATIC_ASSERT((std::__libcpp_is_constructible<T>::type::value), "");
 #if TEST_STD_VER > 14
     static_assert( std::is_constructible_v<T>, "");
 #endif
@@ -88,7 +84,6 @@ template <class T, class A0>
 void test_is_constructible()
 {
     static_assert(( std::is_constructible<T, A0>::value), "");
-    LIBCPP11_STATIC_ASSERT((std::__libcpp_is_constructible<T, A0>::type::value), "");
 #if TEST_STD_VER > 14
     static_assert(( std::is_constructible_v<T, A0>), "");
 #endif
@@ -98,7 +93,6 @@ template <class T, class A0, class A1>
 void test_is_constructible()
 {
     static_assert(( std::is_constructible<T, A0, A1>::value), "");
-    LIBCPP11_STATIC_ASSERT((std::__libcpp_is_constructible<T, A0, A1>::type::value), "");
 #if TEST_STD_VER > 14
     static_assert(( std::is_constructible_v<T, A0, A1>), "");
 #endif
@@ -108,7 +102,6 @@ template <class T, class A0, class A1, class A2>
 void test_is_constructible()
 {
     static_assert(( std::is_constructible<T, A0, A1, A2>::value), "");
-    LIBCPP11_STATIC_ASSERT((std::__libcpp_is_constructible<T, A0, A1, A2>::type::value), "");
 #if TEST_STD_VER > 14
     static_assert(( std::is_constructible_v<T, A0, A1, A2>), "");
 #endif
@@ -118,7 +111,6 @@ template <class T>
 void test_is_not_constructible()
 {
     static_assert((!std::is_constructible<T>::value), "");
-    LIBCPP11_STATIC_ASSERT((!std::__libcpp_is_constructible<T>::type::value), "");
 #if TEST_STD_VER > 14
     static_assert((!std::is_constructible_v<T>), "");
 #endif
@@ -128,23 +120,11 @@ template <class T, class A0>
 void test_is_not_constructible()
 {
     static_assert((!std::is_constructible<T, A0>::value), "");
-    LIBCPP11_STATIC_ASSERT((!std::__libcpp_is_constructible<T, A0>::type::value), "");
 #if TEST_STD_VER > 14
     static_assert((!std::is_constructible_v<T, A0>), "");
 #endif
 }
 
-#if TEST_STD_VER >= 11
-template <class T = int, class = decltype(static_cast<T&&>(std::declval<double&>()))>
-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<Base&, Derived&>();
     test_is_not_constructible<Derived&, Base&>();
     test_is_constructible<Base const&, Derived const&>();
+#ifndef TEST_COMPILER_GCC
     test_is_not_constructible<Derived const&, Base const&>();
     test_is_not_constructible<Derived const&, Base>();
+#endif
 
     test_is_constructible<Base&&, Derived>();
     test_is_constructible<Base&&, Derived&&>();
+#ifndef TEST_COMPILER_GCC
     test_is_not_constructible<Derived&&, Base&&>();
     test_is_not_constructible<Derived&&, Base>();
+#endif
 
     // test that T must also be destructible
     test_is_constructible<PrivateDtor&, PrivateDtor&>();
@@ -255,28 +239,11 @@ int main(int, char**)
 #endif
 
     static_assert(std::is_constructible<int&&, ExplicitTo<int&&>>::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<int&&>(declval<ExplicitTo<int&&>>())' is ill-formed.
-    LIBCPP_STATIC_ASSERT(
-        clang_disallows_valid_static_cast_bug !=
-        std::__libcpp_is_constructible<int&&, ExplicitTo<int&&>>::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<int&&, ExplicitTo<int&&>>::value, "");
-#endif
 
 #ifdef __clang__
     // FIXME Clang and GCC disagree on the validity of this expression.
     test_is_constructible<const int&, ExplicitTo<int>>();
     static_assert(std::is_constructible<int&&, ExplicitTo<int>>::value, "");
-    LIBCPP_STATIC_ASSERT(
-        clang_disallows_valid_static_cast_bug !=
-        std::__libcpp_is_constructible<int&&, ExplicitTo<int>>::value, "");
 #else
     test_is_not_constructible<const int&, ExplicitTo<int>>();
     test_is_not_constructible<int&&, ExplicitTo<int>>();
@@ -287,21 +254,11 @@ int main(int, char**)
     test_is_not_constructible<const int&, ExplicitTo<double&&>>();
     test_is_not_constructible<int&&, ExplicitTo<double&&>>();
 
-
-// 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<void()>();
     test_is_not_constructible<void() const> ();
     test_is_not_constructible<void() volatile> ();
     test_is_not_constructible<void() &> ();
     test_is_not_constructible<void() &&> ();
-#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 c6f8d5258e07..00c9d27ccc6d 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<NS::Namespaced> t1({1});
+        std::tuple<NS::Namespaced> t1(NS::Namespaced{1});
         std::tuple<NS::Namespaced> t = std::tuple_cat(t1);
         std::tuple<NS::Namespaced, NS::Namespaced> t2 =
             std::tuple_cat(t1, t1);

diff  --git a/libcxx/utils/ci/run-buildbot.sh b/libcxx/utils/ci/run-buildbot.sh
index 4dd1d485d4c5..d4972b098a2c 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


        


More information about the libcxx-commits mailing list