diff options
author | Jonathan Wakely <jwakely@redhat.com> | 2016-10-19 11:10:54 +0100 |
---|---|---|
committer | Jonathan Wakely <redi@gcc.gnu.org> | 2016-10-19 11:10:54 +0100 |
commit | d40627f9335050467ae3fdb8bcf31ed695b290ea (patch) | |
tree | 13791c9eada7c818ac1ab1a2bb80f678cf145447 | |
parent | 84870b6bb2691cc4031b8408b41bbb6583526c0f (diff) | |
download | gcc-d40627f9335050467ae3fdb8bcf31ed695b290ea.zip gcc-d40627f9335050467ae3fdb8bcf31ed695b290ea.tar.gz gcc-d40627f9335050467ae3fdb8bcf31ed695b290ea.tar.bz2 |
Move negative unique_ptr tests to new file
* testsuite/20_util/unique_ptr/cons/cv_qual.cc: Move negative tests
to new file.
* testsuite/20_util/unique_ptr/cons/cv_qual_neg.cc: New file. Fix
test for incompatible deleters to not also use incompatible types.
Add tests for incompatible array types.
From-SVN: r241332
-rw-r--r-- | libstdc++-v3/ChangeLog | 6 | ||||
-rw-r--r-- | libstdc++-v3/testsuite/20_util/unique_ptr/cons/cv_qual.cc | 26 | ||||
-rw-r--r-- | libstdc++-v3/testsuite/20_util/unique_ptr/cons/cv_qual_neg.cc | 72 |
3 files changed, 78 insertions, 26 deletions
diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 200a5bd..f2a143e 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,5 +1,11 @@ 2016-10-19 Jonathan Wakely <jwakely@redhat.com> + * testsuite/20_util/unique_ptr/cons/cv_qual.cc: Move negative tests + to new file. + * testsuite/20_util/unique_ptr/cons/cv_qual_neg.cc: New file. Fix + test for incompatible deleters to not also use incompatible types. + Add tests for incompatible array types. + * include/experimental/bits/shared_ptr.h (__shared_ptr<__libfund_v1<_Tp, false>, _Lp>::_Compatible): Just use is_convertible for non-array specialization. diff --git a/libstdc++-v3/testsuite/20_util/unique_ptr/cons/cv_qual.cc b/libstdc++-v3/testsuite/20_util/unique_ptr/cons/cv_qual.cc index 829d112..8d6847b 100644 --- a/libstdc++-v3/testsuite/20_util/unique_ptr/cons/cv_qual.cc +++ b/libstdc++-v3/testsuite/20_util/unique_ptr/cons/cv_qual.cc @@ -99,30 +99,4 @@ test07() std::unique_ptr<const A[]> cA2((A*)p); std::unique_ptr<volatile A[]> vA2((A*)p); std::unique_ptr<const volatile A[]> cvA2((A*)p); - // Disallow conversions from user-defined pointer-like types - // for the array version - std::unique_ptr<A[]> upA3(p); // { dg-error "no matching function" } - std::unique_ptr<const A[]> cA3(p); // { dg-error "no matching function" } - std::unique_ptr<volatile A[]> vA3(p); // { dg-error "no matching function" } - std::unique_ptr<const volatile A[]> cvA3(p); // { dg-error "no matching function" } - // { dg-error "no type" "" { target *-*-* } 446 } } - -template<typename T> -struct deleter -{ - deleter() = default; - template<typename U> - deleter(const deleter<U>) { } - typedef T pointer; - void operator()(T) const { } -}; - -void -test08() -{ - // Disallow conversions from non-assignable deleter - std::unique_ptr<B[], deleter<A_pointer>> p; - std::unique_ptr<A[], deleter<A*>> upA(std::move(p)); // { dg-error "no matching function" } -} - diff --git a/libstdc++-v3/testsuite/20_util/unique_ptr/cons/cv_qual_neg.cc b/libstdc++-v3/testsuite/20_util/unique_ptr/cons/cv_qual_neg.cc new file mode 100644 index 0000000..d744c1b --- /dev/null +++ b/libstdc++-v3/testsuite/20_util/unique_ptr/cons/cv_qual_neg.cc @@ -0,0 +1,72 @@ +// { dg-do compile { target c++11 } } + +// Copyright (C) 2016 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING3. If not see +// <http://www.gnu.org/licenses/>. + +// 20.7.1 Class template unique_ptr [unique.ptr] + +#include <memory> + +struct A { virtual ~A() = default; }; + +struct B : A { }; + +// Construction from objects with different cv-qualification + +struct A_pointer { operator A*() const { return nullptr; } }; + +void +test07() +{ + A_pointer p; + // Disallow conversions from user-defined pointer-like types + // for the array version + std::unique_ptr<A[]> upA3(p); // { dg-error "no matching function" } + std::unique_ptr<const A[]> cA3(p); // { dg-error "no matching function" } + std::unique_ptr<volatile A[]> vA3(p); // { dg-error "no matching function" } + std::unique_ptr<const volatile A[]> cvA3(p); // { dg-error "no matching function" } + // { dg-error "no type" "" { target *-*-* } 446 } +} + +template<typename T> +struct deleter +{ + deleter() = default; + template<typename U> + deleter(const deleter<U>) { } + typedef T pointer; + void operator()(T) const { } +}; + +void +test08() +{ + // Disallow conversions from non-assignable deleter + std::unique_ptr<A[], deleter<A_pointer>> p; + std::unique_ptr<A[], deleter<A*>> upA(std::move(p)); // { dg-error "no matching function" } +} + +void +test011() +{ + // Disallow conversions between different array types. + std::unique_ptr<B[]> upB; + + std::unique_ptr<const A[]> cA(std::move(upB)); // { dg-error "no matching function" } + std::unique_ptr<volatile A[]> vA(std::move(upB)); // { dg-error "no matching function" } + std::unique_ptr<const volatile A[]> cvA(std::move(upB)); // { dg-error "no matching function" } +} |