/* { 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; | |
} |