diff options
author | Marshall Clow <mclow.lists@gmail.com> | 2014-09-02 16:19:38 +0000 |
---|---|---|
committer | Marshall Clow <mclow.lists@gmail.com> | 2014-09-02 16:19:38 +0000 |
commit | e33e03e5580f48837391ff06843c3dcc057ff612 (patch) | |
tree | 71e86a68cd4b0b6be360fe9e140e3bfeecbd7226 | |
parent | b26c9661747076332c044f3baf903841494ab9d6 (diff) | |
download | external_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
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, ""); |