testsuite: Add noexcept(false) to throwing destructor
authorJonathan Wakely <jwakely@redhat.com>
Fri, 23 Oct 2020 14:03:38 +0000 (15:03 +0100)
committerJonathan Wakely <jwakely@redhat.com>
Fri, 23 Oct 2020 14:03:38 +0000 (15:03 +0100)
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.

gcc/testsuite/g++.dg/compat/eh/filter2_y.C

index 87c6fea101272584cc4b51b5dc8ec2ff1bbb0a8a..67a4ffedd8655d29cba15d44c5bb2269f2f3564e 100644 (file)
@@ -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
        {