[libcxx-commits] [libcxx] 1379649 - [libc++] Fix std::is_array<T[0]> and add tests

Louis Dionne via libcxx-commits libcxx-commits at lists.llvm.org
Mon Apr 4 10:55:23 PDT 2022


Author: Louis Dionne
Date: 2022-04-04T13:55:18-04:00
New Revision: 13796495ecbf5be2a1957a21b4e152ecf64d7cc2

URL: https://github.com/llvm/llvm-project/commit/13796495ecbf5be2a1957a21b4e152ecf64d7cc2
DIFF: https://github.com/llvm/llvm-project/commit/13796495ecbf5be2a1957a21b4e152ecf64d7cc2.diff

LOG: [libc++] Fix std::is_array<T[0]> and add tests

Differential Revision: https://reviews.llvm.org/D122810

Added: 
    

Modified: 
    libcxx/include/type_traits
    libcxx/test/std/utilities/meta/meta.unary/meta.unary.cat/is_array.pass.cpp
    libcxx/test/std/utilities/meta/meta.unary/meta.unary.comp/is_bounded_array.pass.cpp
    libcxx/test/std/utilities/meta/meta.unary/meta.unary.comp/is_unbounded_array.pass.cpp

Removed: 
    


################################################################################
diff  --git a/libcxx/include/type_traits b/libcxx/include/type_traits
index 952f5787baae3..968229e119dbe 100644
--- a/libcxx/include/type_traits
+++ b/libcxx/include/type_traits
@@ -758,7 +758,9 @@ inline constexpr bool is_floating_point_v = is_floating_point<_Tp>::value;
 
 // is_array
 
-#if __has_keyword(__is_array)
+// TODO: Clang incorrectly reports that __is_array is true for T[0].
+//       Re-enable the branch once https://llvm.org/PR54705 is fixed.
+#if __has_keyword(__is_array) && 0
 
 template <class _Tp>
 struct _LIBCPP_TEMPLATE_VIS is_array : _BoolConstant<__is_array(_Tp)> { };

diff  --git a/libcxx/test/std/utilities/meta/meta.unary/meta.unary.cat/is_array.pass.cpp b/libcxx/test/std/utilities/meta/meta.unary/meta.unary.cat/is_array.pass.cpp
index 3205819911c17..26a469a30515a 100644
--- a/libcxx/test/std/utilities/meta/meta.unary/meta.unary.cat/is_array.pass.cpp
+++ b/libcxx/test/std/utilities/meta/meta.unary/meta.unary.cat/is_array.pass.cpp
@@ -73,6 +73,7 @@ typedef void (*FunctionPtr)();
 int main(int, char**)
 {
     test_is_array<char[3]>();
+    test_is_not_array<char[0]>();
     test_is_array<char[]>();
     test_is_array<Union[]>();
 

diff  --git a/libcxx/test/std/utilities/meta/meta.unary/meta.unary.comp/is_bounded_array.pass.cpp b/libcxx/test/std/utilities/meta/meta.unary/meta.unary.comp/is_bounded_array.pass.cpp
index 2b987aa51c7e3..cb374fd5e9071 100644
--- a/libcxx/test/std/utilities/meta/meta.unary/meta.unary.comp/is_bounded_array.pass.cpp
+++ b/libcxx/test/std/utilities/meta/meta.unary/meta.unary.comp/is_bounded_array.pass.cpp
@@ -32,9 +32,6 @@ void test_array()
     test_array_imp<const volatile T, B>();
 }
 
-typedef char array[3];
-typedef char incomplete_array[];
-
 class incomplete_type;
 
 class Empty {};
@@ -65,8 +62,9 @@ int main(int, char**)
     test_array<FunctionPtr,    false>();
 
 //  Array types
-    test_array<array,             true>();
-    test_array<incomplete_array,  false>();
+    test_array<char[3],           true>();
+    test_array<int[0],            false>();
+    test_array<char[],            false>();
     test_array<incomplete_type[], false>();
 
   return 0;

diff  --git a/libcxx/test/std/utilities/meta/meta.unary/meta.unary.comp/is_unbounded_array.pass.cpp b/libcxx/test/std/utilities/meta/meta.unary/meta.unary.comp/is_unbounded_array.pass.cpp
index d9741da6e271e..ea5383984262d 100644
--- a/libcxx/test/std/utilities/meta/meta.unary/meta.unary.comp/is_unbounded_array.pass.cpp
+++ b/libcxx/test/std/utilities/meta/meta.unary/meta.unary.comp/is_unbounded_array.pass.cpp
@@ -32,9 +32,6 @@ void test_array()
     test_array_imp<const volatile T, B>();
 }
 
-typedef char array[3];
-typedef char incomplete_array[];
-
 class incomplete_type;
 
 class Empty {};
@@ -65,8 +62,9 @@ int main(int, char**)
     test_array<FunctionPtr,    false>();
 
 //  Array types
-    test_array<array,             false>();
-    test_array<incomplete_array,  true>();
+    test_array<char[3],           false>();
+    test_array<int[0],            false>();
+    test_array<char[],            true>();
     test_array<incomplete_type[], true>();
 
   return 0;


        


More information about the libcxx-commits mailing list