OSDN Git Service

PR c++/53549
[pf3gnuchains/gcc-fork.git] / gcc / testsuite / g++.dg / eh / delayslot1.C
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
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 }