1 // Special g++ Options: -O2
2
3 #include <exception>
4
5 using namespace std;
6
7 extern "C" void abort();
8
9 int i_0, i_1, i_2, i_3, i_4, i_5, i_6, i_7, i_8, i_9;
10 int j_0, j_1, j_2, j_3, j_4, j_5, j_6, j_7, j_8, j_9;
11 int k_0, k_1, k_2, k_3, k_4, k_5, k_6, k_7, k_8, k_9;
12 int l_0, l_1, l_2, l_3, l_4, l_5, l_6, l_7, l_8, l_9;
13 #define A(x,y,n) register int *x##n = &y##_##n;
14 #define B(x,y) \
15 A(x,y,0) A(x,y,1) A(x,y,2) A(x,y,3) A(x,y,4) \
16 A(x,y,5) A(x,y,6) A(x,y,7) A(x,y,8) A(x,y,9)
17 #define C(x,n) asm volatile ("" : "=r" (x##n) : "0" (x##n));
18 #define D(x) \
19 C(x,0) C(x,1) C(x,2) C(x,3) C(x,4) \
20 C(x,5) C(x,6) C(x,7) C(x,8) C(x,9)
21 #define E(x,y,n) if (x##n != &y##_##n) abort ();
22 #define F(x,y) \
23 E(x,y,0) E(x,y,1) E(x,y,2) E(x,y,3) E(x,y,4) \
24 E(x,y,5) E(x,y,6) E(x,y,7) E(x,y,8) E(x,y,9)
25
bar(long a0,long a1,long a2,long a3,long a4)26 void bar(long a0, long a1, long a2, long a3, long a4)
27 {
28 }
29
foo(long a0,long a1,long a2,long a3,long a4)30 void foo(long a0, long a1, long a2, long a3, long a4)
31 {
32 A(p,l,0) A(p,l,1) A(p,l,2)
33 C(p,0) C(p,1) C(p,2)
34 bar (0, 1, 2, 3, 4);
35 if (a0 == 0)
36 throw exception();
37 C(p,0) C(p,1) C(p,2)
38 E(p,l,0) E(p,l,1) E(p,l,2)
39 }
40
test(void)41 void test(void)
42 {
43 A(p,l,0) A(p,l,1) A(p,l,2) A(p,l,3) A(p,l,4) A(p,l,5) A(p,l,6)
44 C(p,0) C(p,1) C(p,2) C(p,3) C(p,4) C(p,5) C(p,6)
45 try {
46 foo(0, 1, 2, 3, 4);
47 } catch (exception) {}
48 C(p,0) C(p,1) C(p,2) C(p,3) C(p,4) C(p,5) C(p,6)
49 E(p,l,0) E(p,l,1) E(p,l,2) E(p,l,3) E(p,l,4) E(p,l,5) E(p,l,6)
50 }
51
main()52 int main()
53 {
54 B(x,i)
55 B(y,j)
56 B(z,k)
57 A(p,l,0) A(p,l,1) A(p,l,2) A(p,l,3)
58 D(x)
59 D(y)
60 D(z)
61 C(p,0) C(p,1) C(p,2) C(p,3)
62 test();
63 D(x)
64 D(y)
65 D(z)
66 C(p,0) C(p,1) C(p,2) C(p,3)
67 F(x,i)
68 F(y,j)
69 F(z,k)
70 E(p,l,0) E(p,l,1) E(p,l,2) E(p,l,3)
71 return 0;
72 }
73