Mercurial > hg > CbC > CbC_gcc
view gcc/testsuite/g++.dg/opt/eh4.C @ 131:84e7813d76e9
gcc-8.2
author | mir3636 |
---|---|
date | Thu, 25 Oct 2018 07:37:49 +0900 |
parents | 04ced10e8804 |
children |
line wrap: on
line source
// { dg-do run } // { dg-options "-O3" } // Make sure that the call to terminate within F2 is not eliminated // by incorrect MUST_NOT_THROW optimization. Note that we expect F1 // to be inlined into F2 in order to expose this case. #include <cstdlib> #include <exception> static volatile int zero = 0; // Note that we need F0 to not be marked nothrow, though we don't actually // want a throw to happen at runtime here. The noinline tag is merely to // make sure the assembly in F0 is not unnecessarily complex. static void __attribute__((noinline)) f0() { if (zero != 0) throw 0; } struct S1 { S1() { } ~S1() { f0(); } }; static void f1() { S1 s1; throw 1; } struct S2 { S2() { } ~S2() { f1(); } }; static void __attribute__((noinline)) f2() { S2 s2; throw 2; } static void pass() { exit (0); } int main() { std::set_terminate (pass); try { f2(); } catch (...) { } abort (); }