I think this test is intended to check this property of the C++ standard: "If a destructor directly invoked by stack unwinding exits via an exception, std::terminate is invoked." [except.throw]
Since C++11 any exception escaping a destructor will call std::terminate, so the test would terminate even if the unwinding behaviour was wrong. Give the destructor a potentially-throwing exception specification, so that we know that terminate was called for the right reason. gcc/testsuite/ChangeLog: * g++.dg/compat/eh/filter2_y.C: Add noexcept(false) to destructor. Tested powerpc64le-linux. OK for trunk?
commit a1ef6bb4c681062c477f6a7a0859badf1bec4b09 Author: Jonathan Wakely <jwak...@redhat.com> Date: Fri Oct 23 11:57:53 2020 testsuite: Add noexcept(false) to throwing destructor I think this test is intended to check this property of the C++ standard: "If a destructor directly invoked by stack unwinding exits via an exception, std::terminate is invoked." [except.throw] Since C++11 any exception escaping a destructor will call std::terminate, so the test would terminate even if the unwinding behaviour was wrong. Give the destructor a potentially-throwing exception specification, so that we know that terminate was called for the right reason. gcc/testsuite/ChangeLog: * g++.dg/compat/eh/filter2_y.C: Add noexcept(false) to destructor. diff --git a/gcc/testsuite/g++.dg/compat/eh/filter2_y.C b/gcc/testsuite/g++.dg/compat/eh/filter2_y.C index 87c6fea1012..67a4ffedd86 100644 --- a/gcc/testsuite/g++.dg/compat/eh/filter2_y.C +++ b/gcc/testsuite/g++.dg/compat/eh/filter2_y.C @@ -9,6 +9,12 @@ struct a a () { } ~a () +#if __cplusplus >= 201103L + // Give this destructor a potentially-throwing exception specification so + // that we verify std::terminate gets called due to an exception during + // unwinding, not just because the destructor is noexcept. + noexcept(false) +#endif { try {