| /* { dg-do run } */ | |
| /* { dg-options "" } */ | |
| /* Verify that the cleanup handler receives the proper contents | |
| of the variable. */ | |
| extern void exit(int); | |
| extern void abort(void); | |
| static int expected; | |
| static void | |
| handler(int *p) | |
| { | |
| if (*p != expected) | |
| abort (); | |
| } | |
| static void __attribute__((noinline)) | |
| bar(void) | |
| { | |
| } | |
| static void doit(int x, int y) | |
| { | |
| int r __attribute__((cleanup (handler))); | |
| if (x < y) | |
| { | |
| r = 0; | |
| return; | |
| } | |
| bar(); | |
| r = x + y; | |
| } | |
| int main() | |
| { | |
| expected = 0; | |
| doit (1, 2); | |
| expected = 3; | |
| doit (2, 1); | |
| return 0; | |
| } |