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)11handler(int *p) 12 { 13 counter += *p; 14 } 15 16 static void __attribute__((noinline)) bar(void)17bar(void) 18 { 19 } 20 doit(int n,int n2)21static 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()33int main() 34 { 35 doit (10, 6); 36 if (counter != 0 + 1 + 2 + 3 + 4 + 5 + 6) 37 abort (); 38 return 0; 39 } 40