From e33e03e5580f48837391ff06843c3dcc057ff612 Mon Sep 17 00:00:00 2001 From: Marshall Clow Date: Tue, 2 Sep 2014 16:19:38 +0000 Subject: [PATCH] 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 --- include/type_traits | 2 +- .../meta.unary.prop/has_virtual_destructor.pass.cpp | 2 +- .../meta.unary/meta.unary.prop/is_abstract.pass.cpp | 2 +- .../meta.unary/meta.unary.prop/is_const.pass.cpp | 2 +- .../meta.unary/meta.unary.prop/is_empty.pass.cpp | 2 +- .../meta.unary.prop/is_move_assignable.pass.cpp | 1 - .../meta.unary.prop/is_nothrow_destructible.pass.cpp | 10 +++++----- .../meta/meta.unary/meta.unary.prop/is_pod.pass.cpp | 2 +- .../meta.unary.prop/is_polymorphic.pass.cpp | 2 +- .../meta.unary/meta.unary.prop/is_signed.pass.cpp | 2 +- ...yable.pass.cpp => is_trivially_copyable.pass.cpp} | 0 .../is_trivially_destructible.pass.cpp | 12 ++++++------ .../meta.unary/meta.unary.prop/is_unsigned.pass.cpp | 2 +- .../meta.unary/meta.unary.prop/is_volatile.pass.cpp | 2 +- 14 files changed, 21 insertions(+), 22 deletions(-) rename test/utilities/meta/meta.unary/meta.unary.prop/{is_trivialially_copyable.pass.cpp => is_trivially_copyable.pass.cpp} (100%) diff --git a/include/type_traits b/include/type_traits index c0e1a6df..7eb0c03b 100644 --- a/include/type_traits +++ b/include/type_traits @@ -2861,7 +2861,7 @@ template struct _LIBCPP_TYPE_VIS_ONLY is_trivially_move_assignable #if __has_feature(has_trivial_destructor) || (_GNUC_VER >= 403) template struct _LIBCPP_TYPE_VIS_ONLY is_trivially_destructible - : public integral_constant {}; + : public integral_constant::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 92fd336e..685d30de 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(); test_has_not_virtual_destructor(); test_has_not_virtual_destructor(); - test_has_not_virtual_destructor(); + test_has_not_virtual_destructor(); test_has_not_virtual_destructor(); test_has_virtual_destructor(); 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 cba575f1..f2a8c232 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(); test_is_not_abstract(); test_is_not_abstract(); - test_is_not_abstract(); + test_is_not_abstract(); test_is_not_abstract(); test_is_not_abstract(); test_is_not_abstract(); 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 32857655..72f2ff45 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(); test_is_const(); test_is_const(); - test_is_const(); + test_is_const(); static_assert(!std::is_const::value, ""); static_assert(!std::is_const::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 584d2cce..47af3c45 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(); test_is_not_empty(); test_is_not_empty(); - test_is_not_empty(); + test_is_not_empty(); test_is_not_empty(); test_is_not_empty(); 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 892ffd78..a89ee7d4 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 (); test_is_not_move_assignable (); test_is_not_move_assignable (); - test_is_not_move_assignable (); #endif test_is_not_move_assignable (); } 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 78717329..8fd5bab5 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 -void test_has_not_nothrow_destructor() +void test_is_not_nothrow_destructible() { static_assert(!std::is_nothrow_destructible::value, ""); static_assert(!std::is_nothrow_destructible::value, ""); @@ -64,9 +64,10 @@ struct A int main() { - test_has_not_nothrow_destructor(); - test_has_not_nothrow_destructor(); - test_has_not_nothrow_destructor(); + test_is_not_nothrow_destructible(); + test_is_not_nothrow_destructible(); + test_is_not_nothrow_destructible(); + test_is_not_nothrow_destructible(); #if __has_feature(cxx_noexcept) test_is_nothrow_destructible(); @@ -83,7 +84,6 @@ int main() test_is_nothrow_destructible(); test_is_nothrow_destructible(); test_is_nothrow_destructible(); - test_is_nothrow_destructible(); test_is_nothrow_destructible(); #if __has_feature(cxx_noexcept) test_is_nothrow_destructible(); 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 a97685c0..4ec1ae99 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(); test_is_pod(); test_is_pod(); - test_is_pod(); + test_is_pod(); } 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 8f5547ec..6e82cddc 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(); test_is_not_polymorphic(); test_is_not_polymorphic(); - test_is_not_polymorphic(); + test_is_not_polymorphic(); test_is_not_polymorphic(); test_is_not_polymorphic(); test_is_not_polymorphic(); 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 7de65665..479c2529 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(); test_is_not_signed(); test_is_not_signed(); - test_is_not_signed(); + test_is_not_signed(); test_is_not_signed(); test_is_not_signed(); 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 similarity index 100% rename from test/utilities/meta/meta.unary/meta.unary.prop/is_trivialially_copyable.pass.cpp rename to 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 1b34885e..b18ace44 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 -void test_has_not_trivial_destructor() +void test_is_not_trivially_destructible() { static_assert(!std::is_trivially_destructible::value, ""); static_assert(!std::is_trivially_destructible::value, ""); @@ -64,10 +64,11 @@ struct A int main() { - test_has_not_trivial_destructor(); - test_has_not_trivial_destructor(); - test_has_not_trivial_destructor(); - test_has_not_trivial_destructor(); + test_is_not_trivially_destructible(); + test_is_not_trivially_destructible(); + test_is_not_trivially_destructible(); + test_is_not_trivially_destructible(); + test_is_not_trivially_destructible(); test_is_trivially_destructible(); test_is_trivially_destructible(); @@ -78,6 +79,5 @@ int main() test_is_trivially_destructible(); test_is_trivially_destructible(); test_is_trivially_destructible(); - test_is_trivially_destructible(); test_is_trivially_destructible(); } 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 2cd49454..dfdb1554 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(); test_is_not_unsigned(); test_is_not_unsigned(); - test_is_not_unsigned(); + test_is_not_unsigned(); test_is_not_unsigned(); test_is_not_unsigned(); 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 8e1fca4d..f6805bc1 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(); test_is_volatile(); test_is_volatile(); - test_is_volatile(); + test_is_volatile(); static_assert(!std::is_volatile::value, ""); static_assert(!std::is_volatile::value, "");