1// PR target/12301 2// Origin: Colin Hirsch <gcc@cohi.at> 3// Testcase by Christian Ehrhardt <ehrhardt@mathematik.uni-ulm.de> 4 5// This used to fail on SPARC because the reorg pass moved an insn 6// across a function call that can throw internally, in order to put 7// it in a delay slot. 8 9// { dg-do run } 10// { dg-options "-O" } 11 12struct S{ 13 char *c; 14 char data[100]; 15 S () : c (data) {}; 16 S (const S& s) { 17 c = data; 18 data[0] = s.c[0]; 19 } 20}; 21 22S real_cast () 23{ 24 throw 3; 25} 26 27S cast_helper(S& debug) 28{ 29 try { 30 return real_cast(); 31 } 32 catch (int e) { 33 throw debug; 34 } 35} 36 37int main() 38{ 39 S tmp; 40 41 try { 42 cast_helper (tmp); 43 } 44 catch (S& e) {} 45 46 return 0; 47} 48