[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