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)12 handler(int *p)
13 {
14   if (*p != expected)
15     abort ();
16 }
17 
18 static void __attribute__((noinline))
bar(void)19 bar(void)
20 {
21 }
22 
doit(int x,int y)23 static 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()36 int main()
37 {
38   expected = 0;
39   doit (1, 2);
40 
41   expected = 3;
42   doit (2, 1);
43 
44   return 0;
45 }
46