summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarshall Clow <mclow.lists@gmail.com>2014-09-02 16:19:38 +0000
committerMarshall Clow <mclow.lists@gmail.com>2014-09-02 16:19:38 +0000
commite33e03e5580f48837391ff06843c3dcc057ff612 (patch)
tree71e86a68cd4b0b6be360fe9e140e3bfeecbd7226
parentb26c9661747076332c044f3baf903841494ab9d6 (diff)
downloadexternal_libcxx-e33e03e5580f48837391ff06843c3dcc057ff612.tar.gz
external_libcxx-e33e03e5580f48837391ff06843c3dcc057ff612.tar.bz2
external_libcxx-e33e03e5580f48837391ff06843c3dcc057ff612.zip
Fix PR#20834 - 'is_trivially_destructible yeilds wrong answer for arrays of unknown bound' Thanks to K-ballo for the bug report. Update a few of the other tests while we're here, and fix a typo in a test name.
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@216909 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--include/type_traits2
-rw-r--r--test/utilities/meta/meta.unary/meta.unary.prop/has_virtual_destructor.pass.cpp2
-rw-r--r--test/utilities/meta/meta.unary/meta.unary.prop/is_abstract.pass.cpp2
-rw-r--r--test/utilities/meta/meta.unary/meta.unary.prop/is_const.pass.cpp2
-rw-r--r--test/utilities/meta/meta.unary/meta.unary.prop/is_empty.pass.cpp2
-rw-r--r--test/utilities/meta/meta.unary/meta.unary.prop/is_move_assignable.pass.cpp1
-rw-r--r--test/utilities/meta/meta.unary/meta.unary.prop/is_nothrow_destructible.pass.cpp10
-rw-r--r--test/utilities/meta/meta.unary/meta.unary.prop/is_pod.pass.cpp2
-rw-r--r--test/utilities/meta/meta.unary/meta.unary.prop/is_polymorphic.pass.cpp2
-rw-r--r--test/utilities/meta/meta.unary/meta.unary.prop/is_signed.pass.cpp2
-rw-r--r--test/utilities/meta/meta.unary/meta.unary.prop/is_trivially_copyable.pass.cpp (renamed from test/utilities/meta/meta.unary/meta.unary.prop/is_trivialially_copyable.pass.cpp)0
-rw-r--r--test/utilities/meta/meta.unary/meta.unary.prop/is_trivially_destructible.pass.cpp12
-rw-r--r--test/utilities/meta/meta.unary/meta.unary.prop/is_unsigned.pass.cpp2
-rw-r--r--test/utilities/meta/meta.unary/meta.unary.prop/is_volatile.pass.cpp2
14 files changed, 21 insertions, 22 deletions
diff --git a/include/type_traits b/include/type_traits
index c0e1a6df2..7eb0c03b5 100644
--- a/include/type_traits
+++ b/include/type_traits
@@ -2861,7 +2861,7 @@ template <class _Tp> struct _LIBCPP_TYPE_VIS_ONLY is_trivially_move_assignable
#if __has_feature(has_trivial_destructor) || (_GNUC_VER >= 403)
template <class _Tp> struct _LIBCPP_TYPE_VIS_ONLY is_trivially_destructible
- : public integral_constant<bool, __has_trivial_destructor(_Tp)> {};
+ : public integral_constant<bool, is_destructible<_Tp>::value && __has_trivial_destructor(_Tp)> {};
#else
diff --git a/test/utilities/meta/meta.unary/meta.unary.prop/has_virtual_destructor.pass.cpp b/test/utilities/meta/meta.unary/meta.unary.prop/has_virtual_destructor.pass.cpp
index 92fd336e7..685d30de6 100644
--- a/test/utilities/meta/meta.unary/meta.unary.prop/has_virtual_destructor.pass.cpp
+++ b/test/utilities/meta/meta.unary/meta.unary.prop/has_virtual_destructor.pass.cpp
@@ -69,7 +69,7 @@ int main()
test_has_not_virtual_destructor<int*>();
test_has_not_virtual_destructor<const int*>();
test_has_not_virtual_destructor<char[3]>();
- test_has_not_virtual_destructor<char[3]>();
+ test_has_not_virtual_destructor<char[]>();
test_has_not_virtual_destructor<bit_zero>();
test_has_virtual_destructor<Abstract>();
diff --git a/test/utilities/meta/meta.unary/meta.unary.prop/is_abstract.pass.cpp b/test/utilities/meta/meta.unary/meta.unary.prop/is_abstract.pass.cpp
index cba575f16..f2a8c2324 100644
--- a/test/utilities/meta/meta.unary/meta.unary.prop/is_abstract.pass.cpp
+++ b/test/utilities/meta/meta.unary/meta.unary.prop/is_abstract.pass.cpp
@@ -61,7 +61,7 @@ int main()
test_is_not_abstract<int*>();
test_is_not_abstract<const int*>();
test_is_not_abstract<char[3]>();
- test_is_not_abstract<char[3]>();
+ test_is_not_abstract<char[]>();
test_is_not_abstract<Union>();
test_is_not_abstract<Empty>();
test_is_not_abstract<bit_zero>();
diff --git a/test/utilities/meta/meta.unary/meta.unary.prop/is_const.pass.cpp b/test/utilities/meta/meta.unary/meta.unary.prop/is_const.pass.cpp
index 328576559..72f2ff458 100644
--- a/test/utilities/meta/meta.unary/meta.unary.prop/is_const.pass.cpp
+++ b/test/utilities/meta/meta.unary/meta.unary.prop/is_const.pass.cpp
@@ -30,7 +30,7 @@ int main()
test_is_const<int*>();
test_is_const<const int*>();
test_is_const<char[3]>();
- test_is_const<char[3]>();
+ test_is_const<char[]>();
static_assert(!std::is_const<int&>::value, "");
static_assert(!std::is_const<const int&>::value, "");
diff --git a/test/utilities/meta/meta.unary/meta.unary.prop/is_empty.pass.cpp b/test/utilities/meta/meta.unary/meta.unary.prop/is_empty.pass.cpp
index 584d2cce5..47af3c45c 100644
--- a/test/utilities/meta/meta.unary/meta.unary.prop/is_empty.pass.cpp
+++ b/test/utilities/meta/meta.unary/meta.unary.prop/is_empty.pass.cpp
@@ -56,7 +56,7 @@ int main()
test_is_not_empty<int*>();
test_is_not_empty<const int*>();
test_is_not_empty<char[3]>();
- test_is_not_empty<char[3]>();
+ test_is_not_empty<char[]>();
test_is_not_empty<Union>();
test_is_not_empty<NotEmpty>();
diff --git a/test/utilities/meta/meta.unary/meta.unary.prop/is_move_assignable.pass.cpp b/test/utilities/meta/meta.unary/meta.unary.prop/is_move_assignable.pass.cpp
index 892ffd78f..a89ee7d4e 100644
--- a/test/utilities/meta/meta.unary/meta.unary.prop/is_move_assignable.pass.cpp
+++ b/test/utilities/meta/meta.unary/meta.unary.prop/is_move_assignable.pass.cpp
@@ -60,7 +60,6 @@ int main()
test_is_not_move_assignable<const int> ();
test_is_not_move_assignable<int[]> ();
test_is_not_move_assignable<int[3]> ();
- test_is_not_move_assignable<int[3]> ();
#endif
test_is_not_move_assignable<void> ();
}
diff --git a/test/utilities/meta/meta.unary/meta.unary.prop/is_nothrow_destructible.pass.cpp b/test/utilities/meta/meta.unary/meta.unary.prop/is_nothrow_destructible.pass.cpp
index 78717329a..8fd5bab5a 100644
--- a/test/utilities/meta/meta.unary/meta.unary.prop/is_nothrow_destructible.pass.cpp
+++ b/test/utilities/meta/meta.unary/meta.unary.prop/is_nothrow_destructible.pass.cpp
@@ -23,7 +23,7 @@ void test_is_nothrow_destructible()
}
template <class T>
-void test_has_not_nothrow_destructor()
+void test_is_not_nothrow_destructible()
{
static_assert(!std::is_nothrow_destructible<T>::value, "");
static_assert(!std::is_nothrow_destructible<const T>::value, "");
@@ -64,9 +64,10 @@ struct A
int main()
{
- test_has_not_nothrow_destructor<void>();
- test_has_not_nothrow_destructor<AbstractDestructor>();
- test_has_not_nothrow_destructor<NotEmpty>();
+ test_is_not_nothrow_destructible<void>();
+ test_is_not_nothrow_destructible<AbstractDestructor>();
+ test_is_not_nothrow_destructible<NotEmpty>();
+ test_is_not_nothrow_destructible<char[]>();
#if __has_feature(cxx_noexcept)
test_is_nothrow_destructible<A>();
@@ -83,7 +84,6 @@ int main()
test_is_nothrow_destructible<int*>();
test_is_nothrow_destructible<const int*>();
test_is_nothrow_destructible<char[3]>();
- test_is_nothrow_destructible<char[3]>();
test_is_nothrow_destructible<Abstract>();
#if __has_feature(cxx_noexcept)
test_is_nothrow_destructible<bit_zero>();
diff --git a/test/utilities/meta/meta.unary/meta.unary.prop/is_pod.pass.cpp b/test/utilities/meta/meta.unary/meta.unary.prop/is_pod.pass.cpp
index a97685c0a..4ec1ae994 100644
--- a/test/utilities/meta/meta.unary/meta.unary.prop/is_pod.pass.cpp
+++ b/test/utilities/meta/meta.unary/meta.unary.prop/is_pod.pass.cpp
@@ -48,5 +48,5 @@ int main()
test_is_pod<int*>();
test_is_pod<const int*>();
test_is_pod<char[3]>();
- test_is_pod<char[3]>();
+ test_is_pod<char[]>();
}
diff --git a/test/utilities/meta/meta.unary/meta.unary.prop/is_polymorphic.pass.cpp b/test/utilities/meta/meta.unary/meta.unary.prop/is_polymorphic.pass.cpp
index 8f5547ec2..6e82cddc5 100644
--- a/test/utilities/meta/meta.unary/meta.unary.prop/is_polymorphic.pass.cpp
+++ b/test/utilities/meta/meta.unary/meta.unary.prop/is_polymorphic.pass.cpp
@@ -69,7 +69,7 @@ int main()
test_is_not_polymorphic<int*>();
test_is_not_polymorphic<const int*>();
test_is_not_polymorphic<char[3]>();
- test_is_not_polymorphic<char[3]>();
+ test_is_not_polymorphic<char[]>();
test_is_not_polymorphic<Union>();
test_is_not_polymorphic<Empty>();
test_is_not_polymorphic<bit_zero>();
diff --git a/test/utilities/meta/meta.unary/meta.unary.prop/is_signed.pass.cpp b/test/utilities/meta/meta.unary/meta.unary.prop/is_signed.pass.cpp
index 7de656657..479c2529f 100644
--- a/test/utilities/meta/meta.unary/meta.unary.prop/is_signed.pass.cpp
+++ b/test/utilities/meta/meta.unary/meta.unary.prop/is_signed.pass.cpp
@@ -45,7 +45,7 @@ int main()
test_is_not_signed<int*>();
test_is_not_signed<const int*>();
test_is_not_signed<char[3]>();
- test_is_not_signed<char[3]>();
+ test_is_not_signed<char[]>();
test_is_not_signed<bool>();
test_is_not_signed<unsigned>();
diff --git a/test/utilities/meta/meta.unary/meta.unary.prop/is_trivialially_copyable.pass.cpp b/test/utilities/meta/meta.unary/meta.unary.prop/is_trivially_copyable.pass.cpp
index d65882378..d65882378 100644
--- a/test/utilities/meta/meta.unary/meta.unary.prop/is_trivialially_copyable.pass.cpp
+++ b/test/utilities/meta/meta.unary/meta.unary.prop/is_trivially_copyable.pass.cpp
diff --git a/test/utilities/meta/meta.unary/meta.unary.prop/is_trivially_destructible.pass.cpp b/test/utilities/meta/meta.unary/meta.unary.prop/is_trivially_destructible.pass.cpp
index 1b34885ef..b18ace44b 100644
--- a/test/utilities/meta/meta.unary/meta.unary.prop/is_trivially_destructible.pass.cpp
+++ b/test/utilities/meta/meta.unary/meta.unary.prop/is_trivially_destructible.pass.cpp
@@ -23,7 +23,7 @@ void test_is_trivially_destructible()
}
template <class T>
-void test_has_not_trivial_destructor()
+void test_is_not_trivially_destructible()
{
static_assert(!std::is_trivially_destructible<T>::value, "");
static_assert(!std::is_trivially_destructible<const T>::value, "");
@@ -64,10 +64,11 @@ struct A
int main()
{
- test_has_not_trivial_destructor<void>();
- test_has_not_trivial_destructor<A>();
- test_has_not_trivial_destructor<AbstractDestructor>();
- test_has_not_trivial_destructor<NotEmpty>();
+ test_is_not_trivially_destructible<void>();
+ test_is_not_trivially_destructible<A>();
+ test_is_not_trivially_destructible<AbstractDestructor>();
+ test_is_not_trivially_destructible<NotEmpty>();
+ test_is_not_trivially_destructible<char[]>();
test_is_trivially_destructible<Abstract>();
test_is_trivially_destructible<int&>();
@@ -78,6 +79,5 @@ int main()
test_is_trivially_destructible<int*>();
test_is_trivially_destructible<const int*>();
test_is_trivially_destructible<char[3]>();
- test_is_trivially_destructible<char[3]>();
test_is_trivially_destructible<bit_zero>();
}
diff --git a/test/utilities/meta/meta.unary/meta.unary.prop/is_unsigned.pass.cpp b/test/utilities/meta/meta.unary/meta.unary.prop/is_unsigned.pass.cpp
index 2cd494546..dfdb15542 100644
--- a/test/utilities/meta/meta.unary/meta.unary.prop/is_unsigned.pass.cpp
+++ b/test/utilities/meta/meta.unary/meta.unary.prop/is_unsigned.pass.cpp
@@ -45,7 +45,7 @@ int main()
test_is_not_unsigned<int*>();
test_is_not_unsigned<const int*>();
test_is_not_unsigned<char[3]>();
- test_is_not_unsigned<char[3]>();
+ test_is_not_unsigned<char[]>();
test_is_not_unsigned<int>();
test_is_not_unsigned<double>();
diff --git a/test/utilities/meta/meta.unary/meta.unary.prop/is_volatile.pass.cpp b/test/utilities/meta/meta.unary/meta.unary.prop/is_volatile.pass.cpp
index 8e1fca4d4..f6805bc1c 100644
--- a/test/utilities/meta/meta.unary/meta.unary.prop/is_volatile.pass.cpp
+++ b/test/utilities/meta/meta.unary/meta.unary.prop/is_volatile.pass.cpp
@@ -30,7 +30,7 @@ int main()
test_is_volatile<int*>();
test_is_volatile<const int*>();
test_is_volatile<char[3]>();
- test_is_volatile<char[3]>();
+ test_is_volatile<char[]>();
static_assert(!std::is_volatile<int&>::value, "");
static_assert(!std::is_volatile<volatile int&>::value, "");