| struct node |
| { |
| struct node *next; |
| }; |
| |
| void test_1 (struct node *n) |
| { |
| while (n) |
| { |
| struct node *next = n->next; |
| __builtin_free (n); |
| n = next; |
| } |
| } |
| |
| extern void *get_ptr (void); |
| |
| void test_2 (void) |
| { |
| void *p; |
| while (p = get_ptr ()) |
| __builtin_free (p); /* { dg-bogus "double-'free' of 'p'" } */ |
| } |
| |
| extern void **get_ptr_ptr (void); |
| |
| void test_3 (void) |
| { |
| void **p; |
| while (p = get_ptr_ptr ()) |
| __builtin_free (*p); /* { dg-bogus "double-'free'" } */ |
| } |
| |
| void test_4 (void) |
| { |
| void *p = (void *)0; |
| while (1) |
| { |
| __builtin_free (p); /* { dg-bogus "double-'free' of 'p'" } */ |
| p = get_ptr (); |
| } |
| } |