From: Jonathan Wakely Date: Thu, 24 Oct 2019 12:54:35 +0000 (+0100) Subject: Fix testsuite bugs X-Git-Tag: releases/gcc-9.3.0~489 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=b2f56dd541c36c60a076769c2eabfa997c2970d8;p=thirdparty%2Fgcc.git Fix testsuite bugs One of the static assertions in 20_util/function_objects/invoke/1.cc was wrong, but didn't fail because by default it was compiled with -std=gnu++14 which didn't use that static assertion. Split out the C++17 parts to a new file that always runs with -std=gnu++17, so those checks are always done. Also backport some extra tests from an earlier commit on trunk (r271173). The 23_containers/unordered_set/allocator/ext_ptr.cc test is supposed to be a run-time test but was unintentionally compile-only. Backport from mainline 2019-05-23 Jonathan Wakely * testsuite/20_util/function_objects/invoke/1.cc: Add more tests. Move C++17-specific tests to ... * testsuite/20_util/function_objects/invoke/3.cc: New test. * testsuite/23_containers/unordered_set/allocator/ext_ptr.cc: Change "compile" test to "run". From-SVN: r277384 --- diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index e419f48c672e..256d5d7aa205 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,5 +1,14 @@ 2019-10-24 Jonathan Wakely + Backport from mainline + 2019-05-23 Jonathan Wakely + + * testsuite/20_util/function_objects/invoke/1.cc: Add more tests. + Move C++17-specific tests to ... + * testsuite/20_util/function_objects/invoke/3.cc: New test. + * testsuite/23_containers/unordered_set/allocator/ext_ptr.cc: Change + "compile" test to "run". + Backport from mainline 2019-10-08 Jonathan Wakely diff --git a/libstdc++-v3/testsuite/20_util/function_objects/invoke/1.cc b/libstdc++-v3/testsuite/20_util/function_objects/invoke/1.cc index e6a4a2ac5604..fe8d681e87bd 100644 --- a/libstdc++-v3/testsuite/20_util/function_objects/invoke/1.cc +++ b/libstdc++-v3/testsuite/20_util/function_objects/invoke/1.cc @@ -24,7 +24,18 @@ struct abstract { void operator()() noexcept; }; -static_assert( noexcept(std::__invoke(std::declval())), "" ); -#if __cpp_lib_invoke -static_assert( noexcept(std::invoke(std::declval())), "" ); -#endif +static_assert( noexcept(std::__invoke(std::declval())), + "It should be possible to use abstract types with INVOKE" ); + +struct F { + void operator()() &; + void operator()() && noexcept; + int operator()(int); + double* operator()(int, int) noexcept; +}; +struct D { D(void*); }; + +static_assert( !noexcept(std::__invoke(std::declval())), "" ); +static_assert( noexcept(std::__invoke(std::declval())), "" ); +static_assert( !noexcept(std::__invoke(std::declval(), 1)), "" ); +static_assert( noexcept(std::__invoke(std::declval(), 1, 2)), "" ); diff --git a/libstdc++-v3/testsuite/20_util/function_objects/invoke/3.cc b/libstdc++-v3/testsuite/20_util/function_objects/invoke/3.cc new file mode 100644 index 000000000000..74999eca0c33 --- /dev/null +++ b/libstdc++-v3/testsuite/20_util/function_objects/invoke/3.cc @@ -0,0 +1,49 @@ +// Copyright (C) 2016-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 +// . + +// { dg-options "-std=gnu++17" } +// { dg-do compile { target c++17 } } + +#include + +struct abstract { + virtual ~abstract() = 0; + void operator()() noexcept; +}; + +static_assert( noexcept(std::__invoke(std::declval())), + "It should be possible to use abstract types with INVOKE" ); +static_assert( noexcept(std::invoke(std::declval())), + "It should be possible to use abstract types with INVOKE" ); + +struct F { + void operator()() &; + void operator()() && noexcept; + int operator()(int); + double* operator()(int, int) noexcept; +}; +struct D { D(void*); }; + +static_assert( !noexcept(std::__invoke(std::declval())), "" ); +static_assert( noexcept(std::__invoke(std::declval())), "" ); +static_assert( !noexcept(std::__invoke(std::declval(), 1)), "" ); +static_assert( noexcept(std::__invoke(std::declval(), 1, 2)), "" ); + +static_assert( !noexcept(std::invoke(std::declval())), "" ); +static_assert( noexcept(std::invoke(std::declval())), "" ); +static_assert( !noexcept(std::invoke(std::declval(), 1)), "" ); +static_assert( noexcept(std::invoke(std::declval(), 1, 2)), "" ); diff --git a/libstdc++-v3/testsuite/23_containers/unordered_set/allocator/ext_ptr.cc b/libstdc++-v3/testsuite/23_containers/unordered_set/allocator/ext_ptr.cc index 707e6d27d007..5daa456e4400 100644 --- a/libstdc++-v3/testsuite/23_containers/unordered_set/allocator/ext_ptr.cc +++ b/libstdc++-v3/testsuite/23_containers/unordered_set/allocator/ext_ptr.cc @@ -15,7 +15,7 @@ // with this library; see the file COPYING3. If not see // . -// { dg-do compile { target c++11 } } +// { dg-do run { target c++11 } } #include #include