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