1 // PR target/12301 2 // Origin: Colin Hirsch <gcc (at) cohi.at> 3 // Testcase by Christian Ehrhardt <ehrhardt (at) 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 12 struct 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 22 S real_cast () 23 { 24 throw 3; 25 } 26 27 S cast_helper(S& debug) 28 { 29 try { 30 return real_cast(); 31 } 32 catch (int e) { 33 throw debug; 34 } 35 } 36 37 int main() 38 { 39 S tmp; 40 41 try { 42 cast_helper (tmp); 43 } 44 catch (S& e) {} 45 46 return 0; 47 } 48