aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJonathan Wakely <jwakely@redhat.com>2020-07-30 12:23:54 +0100
committerJonathan Wakely <jwakely@redhat.com>2020-07-30 12:50:02 +0100
commit4c27c6584d0c15926f57ac40f931e238cf0b3110 (patch)
tree9b36a440b2c106289b413e3cccb3d19c291f08b8
parent7d4ee8bc5843997cdc4408848ab2d9ec82f085b2 (diff)
downloadgcc-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.
-rw-r--r--libstdc++-v3/testsuite/23_containers/vector/bool/72847.cc2
-rw-r--r--libstdc++-v3/testsuite/util/testsuite_abi.cc11
-rw-r--r--libstdc++-v3/testsuite/util/testsuite_allocator.h4
-rw-r--r--libstdc++-v3/testsuite/util/testsuite_containers.h5
-rw-r--r--libstdc++-v3/testsuite/util/testsuite_shared.cc7
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()); }