1 /* { dg-do run } */
2 /* { dg-options "" } */
3 /* Verify cleanup execution on non-trivial exit from a block.  */
4 
5 extern void exit(int);
6 extern void abort(void);
7 
8 static int counter;
9 
10 static void
handler(int * p)11 handler(int *p)
12 {
13   counter += *p;
14 }
15 
16 static void __attribute__((noinline))
bar(void)17 bar(void)
18 {
19 }
20 
doit(int n,int n2)21 static void doit(int n, int n2)
22 {
23   int i;
24   for (i = 0; i < n; ++i)
25     {
26       int dummy __attribute__((cleanup (handler))) = i;
27       if (i == n2)
28 	break;
29       bar();
30     }
31 }
32 
main()33 int main()
34 {
35   doit (10, 6);
36   if (counter != 0 + 1 + 2 + 3 + 4 + 5 + 6)
37     abort ();
38   return 0;
39 }
40