Merge from mainline (167278:168000).
[official-gcc/graphite-test-results.git] / gcc / testsuite / g++.dg / torture / stackalign / throw-1.C
blob3eddc1d02ab2d676238754df7a647b2817498dca
1 /* { dg-do run } */
2 /* { dg-skip-if "Stack alignment is too small" { hppa*-*-hpux* } "*" "" } */
4 #include "check.h"
6 #ifndef ALIGNMENT
7 #define ALIGNMENT       64
8 #endif
10 typedef int t_align __attribute__((aligned(ALIGNMENT)));
13 int global, global2;
14 void bar()
16         volatile t_align a = 1;
17         int i,j,k,l,m,n;
18         i=j=k=0;
19         for (i=0; i < global; i++)
20           for (j=0; j < i; j++)
21           for (k=0; k < j; k++)
22           for (l=0; l < k; l++)
23           for (m=0; m < l; m++)
24           for (n=0; n < m; n++)
25                 global2 = k;
26         if (check_int ((int *) &a,  __alignof__(a)) != a)
27           abort ();
28         throw 0;
31 void foo()
33         bar();
36 int main()
38         int ll = 1;
39         int i = 0,j = 1,k = 2,l = 3,m = 4,n = 5;
40         try {
41           for (; i < global; i++)
42           for (; j < i; j++)
43           for (; k < j; k++)
44           for (; l < k; l++)
45           for (; m < l; m++)
46           for (; n < m; n++)
47                 global2 = k;
48           foo();
49         }
50         catch (...)
51         {
52         }
53         ll = i+j+k+l+m+n;
54         if (ll != 15)
55         {
56 #ifdef DEBUG
57                 printf("FAIL: sum %d != 15\n", ll);
58 #endif
59                 abort();
60         }
61         return 0;