1 /* { dg-do run } */ 2 /* { dg-options "" } */ 3 /* Verify that the cleanup handler receives the proper contents 4 of the variable. */ 5 6 extern void exit(int); 7 extern void abort(void); 8 9 static int expected; 10 11 static void handler(int * p)12handler(int *p) 13 { 14 if (*p != expected) 15 abort (); 16 } 17 18 static void __attribute__((noinline)) bar(void)19bar(void) 20 { 21 } 22 doit(int x,int y)23static void doit(int x, int y) 24 { 25 int r __attribute__((cleanup (handler))); 26 if (x < y) 27 { 28 r = 0; 29 return; 30 } 31 32 bar(); 33 r = x + y; 34 } 35 main()36int main() 37 { 38 expected = 0; 39 doit (1, 2); 40 41 expected = 3; 42 doit (2, 1); 43 44 return 0; 45 } 46