diff options
author | Jonathan Wakely <jwakely@redhat.com> | 2020-07-30 12:23:54 +0100 |
---|---|---|
committer | Jonathan Wakely <jwakely@redhat.com> | 2020-07-30 12:50:02 +0100 |
commit | 4c27c6584d0c15926f57ac40f931e238cf0b3110 (patch) | |
tree | 9b36a440b2c106289b413e3cccb3d19c291f08b8 | |
parent | 7d4ee8bc5843997cdc4408848ab2d9ec82f085b2 (diff) | |
download | gcc-4c27c6584d0c15926f57ac40f931e238cf0b3110.zip gcc-4c27c6584d0c15926f57ac40f931e238cf0b3110.tar.gz gcc-4c27c6584d0c15926f57ac40f931e238cf0b3110.tar.bz2 |
libstdc++: Make testsuite usable with -fno-exceptions
Previously it was not possible to add -fno-exceptions to the testsuite
flags, because some files that are compiled by the v3-build_support
procedure failed with exceptions disabled.
This adjusts those files to still compile without exceptions (with
degraded functionality in some cases).
The sole testcase that explicitly checks for -fno-exceptions has also
been adjusted to use the more robust exceptions_enabled effective-target
keyword from gcc/testsuite/lib/target-supports.exp.
libstdc++-v3/ChangeLog:
* testsuite/23_containers/vector/bool/72847.cc: Use the
exceptions_enabled effective-target keyword instead of
checking for an explicit -fno-exceptions option.
* testsuite/util/testsuite_abi.cc (examine_symbol): Remove
redundant try-catch.
* testsuite/util/testsuite_allocator.h [!__cpp_exceptions]:
Do not define check_allocate_max_size and memory_resource.
* testsuite/util/testsuite_containers.h: Replace comment with
#error if wrong standard dialect used.
* testsuite/util/testsuite_shared.cc: Likewise.
5 files changed, 15 insertions, 14 deletions
diff --git a/libstdc++-v3/testsuite/23_containers/vector/bool/72847.cc b/libstdc++-v3/testsuite/23_containers/vector/bool/72847.cc index 26260e7..c4fbc75 100644 --- a/libstdc++-v3/testsuite/23_containers/vector/bool/72847.cc +++ b/libstdc++-v3/testsuite/23_containers/vector/bool/72847.cc @@ -15,7 +15,7 @@ // with this library; see the file COPYING3. If not see // <http://www.gnu.org/licenses/>. -// { dg-skip-if "" { *-*-* } { "-fno-exceptions" } } +// { dg-require-effective-target exceptions_enabled } #include <vector> #include <ext/throw_allocator.h> diff --git a/libstdc++-v3/testsuite/util/testsuite_abi.cc b/libstdc++-v3/testsuite/util/testsuite_abi.cc index fd8224b..f4bd319 100644 --- a/libstdc++-v3/testsuite/util/testsuite_abi.cc +++ b/libstdc++-v3/testsuite/util/testsuite_abi.cc @@ -362,14 +362,9 @@ get_symbol(const string& name, const symbols& s) void examine_symbol(const char* name, const char* file) { - try - { - symbols s = create_symbols(file); - const symbol& sym = get_symbol(name, s); - sym.print(); - } - catch(...) - { __throw_exception_again; } + symbols s = create_symbols(file); + const symbol& sym = get_symbol(name, s); + sym.print(); } int diff --git a/libstdc++-v3/testsuite/util/testsuite_allocator.h b/libstdc++-v3/testsuite/util/testsuite_allocator.h index e52ef78..e030ed5 100644 --- a/libstdc++-v3/testsuite/util/testsuite_allocator.h +++ b/libstdc++-v3/testsuite/util/testsuite_allocator.h @@ -257,6 +257,7 @@ namespace __gnu_test return true; } +#if __cpp_exceptions template<typename Alloc> bool check_allocate_max_size() @@ -276,6 +277,7 @@ namespace __gnu_test } throw; } +#endif // A simple allocator which can be constructed endowed of a given // "personality" (an integer), queried in operator== to simulate the @@ -761,7 +763,7 @@ namespace __gnu_test #endif // C++11 #if __cplusplus >= 201703L -#if __cpp_aligned_new && __cpp_rtti +#if __cpp_aligned_new && __cpp_rtti && __cpp_exceptions // A concrete memory_resource, with error checking. class memory_resource : public std::pmr::memory_resource { diff --git a/libstdc++-v3/testsuite/util/testsuite_containers.h b/libstdc++-v3/testsuite/util/testsuite_containers.h index 8566af1..33259ae 100644 --- a/libstdc++-v3/testsuite/util/testsuite_containers.h +++ b/libstdc++-v3/testsuite/util/testsuite_containers.h @@ -408,8 +408,9 @@ namespace __gnu_test void erase_external_iterators(std::multimap<int, int>& s); -// NB: "must be compiled with C++11" -#if __cplusplus >= 201103L +#if __cplusplus < 201103L +# error "must be compiled with C++11 (or later)" +#else template<typename _Tp> void linkage_check_cxx98_cxx11_erase(_Tp& container) diff --git a/libstdc++-v3/testsuite/util/testsuite_shared.cc b/libstdc++-v3/testsuite/util/testsuite_shared.cc index b0458dd..eabff4c 100644 --- a/libstdc++-v3/testsuite/util/testsuite_shared.cc +++ b/libstdc++-v3/testsuite/util/testsuite_shared.cc @@ -45,12 +45,14 @@ try_allocation() extern "C" void try_throw_exception() { +#if __cpp_exceptions try { std::__throw_bad_exception(); } catch (const std::exception& e) { } +#endif } extern "C" void @@ -75,8 +77,9 @@ try_function_random_fail() std::__throw_bad_exception(); } -#if __cplusplus < 201103L -// "must be compiled with C++98" +#if __cplusplus >= 201103L +# error "must be compiled with C++98" +#else void erase_external(std::set<int>& s) { s.erase(s.begin()); } |