diff options
author | Jonathan Wakely <jwakely@redhat.com> | 2019-10-31 09:39:48 +0000 |
---|---|---|
committer | Jonathan Wakely <redi@gcc.gnu.org> | 2019-10-31 09:39:48 +0000 |
commit | 164abd6786e5ddab0c3a4a0a9a6cdc67f84b1a17 (patch) | |
tree | 5c1f4a96d5ae2adbfd3454fb751c276b64500370 | |
parent | 83f58fe3ad862955b16e6a2f14ad69a1e82dd3ed (diff) | |
download | gcc-164abd6786e5ddab0c3a4a0a9a6cdc67f84b1a17.zip gcc-164abd6786e5ddab0c3a4a0a9a6cdc67f84b1a17.tar.gz gcc-164abd6786e5ddab0c3a4a0a9a6cdc67f84b1a17.tar.bz2 |
Check precondition for std::ssize(const Container&)
This precondition is the subject of a national body comment on the C++20
CD. This just adds a test to ensure we enforce the precondition.
Also move existing 24_iterator/range_access*.cc tests to a dedicated
directory for the [iterator.range] subclause.
* testsuite/24_iterators/range_access*.cc: Move to ...
* testsuite/24_iterators/range_access/range_access*.cc: ... here.
* testsuite/24_iterators/range_access/range_access_cpp20_neg.cc: New
test.
From-SVN: r277658
-rw-r--r-- | libstdc++-v3/ChangeLog | 7 | ||||
-rw-r--r-- | libstdc++-v3/testsuite/24_iterators/range_access/range_access.cc (renamed from libstdc++-v3/testsuite/24_iterators/range_access.cc) | 0 | ||||
-rw-r--r-- | libstdc++-v3/testsuite/24_iterators/range_access/range_access_cpp14.cc (renamed from libstdc++-v3/testsuite/24_iterators/range_access_cpp14.cc) | 0 | ||||
-rw-r--r-- | libstdc++-v3/testsuite/24_iterators/range_access/range_access_cpp17.cc (renamed from libstdc++-v3/testsuite/24_iterators/range_access_cpp17.cc) | 0 | ||||
-rw-r--r-- | libstdc++-v3/testsuite/24_iterators/range_access/range_access_cpp17_neg.cc (renamed from libstdc++-v3/testsuite/24_iterators/range_access_cpp17_neg.cc) | 0 | ||||
-rw-r--r-- | libstdc++-v3/testsuite/24_iterators/range_access/range_access_cpp20.cc (renamed from libstdc++-v3/testsuite/24_iterators/range_access_cpp20.cc) | 0 | ||||
-rw-r--r-- | libstdc++-v3/testsuite/24_iterators/range_access/range_access_cpp20_neg.cc | 49 |
7 files changed, 56 insertions, 0 deletions
diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 059976e..78ea447 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,10 @@ +2019-10-31 Jonathan Wakely <jwakely@redhat.com> + + * testsuite/24_iterators/range_access*.cc: Move to ... + * testsuite/24_iterators/range_access/range_access*.cc: ... here. + * testsuite/24_iterators/range_access/range_access_cpp20_neg.cc: New + test. + 2019-10-30 Jonathan Wakely <jwakely@redhat.com> * include/std/concepts (std::ranges::swap): Use a single overload for diff --git a/libstdc++-v3/testsuite/24_iterators/range_access.cc b/libstdc++-v3/testsuite/24_iterators/range_access/range_access.cc index 8b1ac96..8b1ac96 100644 --- a/libstdc++-v3/testsuite/24_iterators/range_access.cc +++ b/libstdc++-v3/testsuite/24_iterators/range_access/range_access.cc diff --git a/libstdc++-v3/testsuite/24_iterators/range_access_cpp14.cc b/libstdc++-v3/testsuite/24_iterators/range_access/range_access_cpp14.cc index 29a469d..29a469d 100644 --- a/libstdc++-v3/testsuite/24_iterators/range_access_cpp14.cc +++ b/libstdc++-v3/testsuite/24_iterators/range_access/range_access_cpp14.cc diff --git a/libstdc++-v3/testsuite/24_iterators/range_access_cpp17.cc b/libstdc++-v3/testsuite/24_iterators/range_access/range_access_cpp17.cc index 9ba2009..9ba2009 100644 --- a/libstdc++-v3/testsuite/24_iterators/range_access_cpp17.cc +++ b/libstdc++-v3/testsuite/24_iterators/range_access/range_access_cpp17.cc diff --git a/libstdc++-v3/testsuite/24_iterators/range_access_cpp17_neg.cc b/libstdc++-v3/testsuite/24_iterators/range_access/range_access_cpp17_neg.cc index 6e407fd..6e407fd 100644 --- a/libstdc++-v3/testsuite/24_iterators/range_access_cpp17_neg.cc +++ b/libstdc++-v3/testsuite/24_iterators/range_access/range_access_cpp17_neg.cc diff --git a/libstdc++-v3/testsuite/24_iterators/range_access_cpp20.cc b/libstdc++-v3/testsuite/24_iterators/range_access/range_access_cpp20.cc index 567b056..567b056 100644 --- a/libstdc++-v3/testsuite/24_iterators/range_access_cpp20.cc +++ b/libstdc++-v3/testsuite/24_iterators/range_access/range_access_cpp20.cc diff --git a/libstdc++-v3/testsuite/24_iterators/range_access/range_access_cpp20_neg.cc b/libstdc++-v3/testsuite/24_iterators/range_access/range_access_cpp20_neg.cc new file mode 100644 index 0000000..8caa941 --- /dev/null +++ b/libstdc++-v3/testsuite/24_iterators/range_access/range_access_cpp20_neg.cc @@ -0,0 +1,49 @@ +// Copyright (C) 2019 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/>. + +// { dg-options "-std=gnu++2a" } +// { dg-do compile { target c++2a } } + +#include <iterator> + +void +test01() +{ + struct C { unsigned size() { return 0u; } }; + C c; + std::ssize(c); // { dg-error "no matching function" } +} +// { dg-error "discards qualifiers" "" { target *-*-* } 0 } + +void +test02() +{ + struct C { bool size() { return false; } }; + C c; + std::ssize(c); // { dg-error "no matching function" } +} +// { dg-error "incomplete type .*make_signed.*bool" "" { target *-*-* } 0 } + +void +test03() +{ + struct S { }; + struct C { S size() { return {}; } }; + C c; + std::ssize(c); // { dg-error "no matching function" } +} +// { dg-error "incomplete type .*make_signed.*S" "" { target *-*-* } 0 } |