// PR c++/54046 // { dg-do compile } // { dg-options "-O0 -Wall" } void foo (void) __attribute__((noreturn)); struct A { ~A () {} }; bool check1 (int x) { A z; switch (x) { case 0: return false; default: throw "X"; break; } } bool check2 (int x) { A z; switch (x) { case 0: return false; default: foo (); break; } } bool check3 (int x) { switch (x) { case 0: return false; default: throw "X"; break; } } bool check4 (int x) { switch (x) { case 0: return false; default: foo (); break; } } bool check5 (int x) { A z; switch (x) { case 0: return false; default: throw "X"; } } bool check6 (int x) { A z; switch (x) { case 0: return false; default: foo (); } }