| // PR target/12301 |
| // Origin: Colin Hirsch <gcc@cohi.at> |
| // Testcase by Christian Ehrhardt <ehrhardt@mathematik.uni-ulm.de> |
| |
| // This used to fail on SPARC because the reorg pass moved an insn |
| // across a function call that can throw internally, in order to put |
| // it in a delay slot. |
| |
| // { dg-do run } |
| // { dg-options "-O" } |
| |
| struct S{ |
| char *c; |
| char data[100]; |
| S () : c (data) {}; |
| S (const S& s) { |
| c = data; |
| data[0] = s.c[0]; |
| } |
| }; |
| |
| S real_cast () |
| { |
| throw 3; |
| } |
| |
| S cast_helper(S& debug) |
| { |
| try { |
| return real_cast(); |
| } |
| catch (int e) { |
| throw debug; |
| } |
| } |
| |
| int main() |
| { |
| S tmp; |
| |
| try { |
| cast_helper (tmp); |
| } |
| catch (S& e) {} |
| |
| return 0; |
| } |