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