Merge from mainline (167278:168000).
[official-gcc/graphite-test-results.git] / gcc / testsuite / g++.dg / ext / cleanup-3.C
blob5367c496e7ead9e8140dfd54256e15aa3a0510aa
1 /* { dg-do run } */
2 /* { dg-options "" } */
3 /* Verify that the cleanup handler receives the proper contents
4    of the variable.  */
6 extern "C" void exit(int);
7 extern "C" void abort(void);
9 static int expected;
11 static void
12 handler(int *p)
14   if (*p != expected)
15     abort ();
18 static void __attribute__((noinline))
19 bar(void)
23 static void doit(int x, int y)
25   int r __attribute__((cleanup (handler)));
26   if (x < y)
27     {
28       r = 0;
29       return;
30     }
32   bar();
33   r = x + y;
36 int main()
38   expected = 0;
39   doit (1, 2);
41   expected = 3;
42   doit (2, 1);
44   return 0;