| struct foo |
| { |
| char *expr; |
| }; |
| |
| void |
| test_1 (__UINTPTR_TYPE__ i) |
| { |
| struct foo *f = (struct foo *)i; |
| f->expr = (char *) __builtin_malloc (1024); |
| } /* { dg-bogus "leak" } */ |
| |
| void |
| test_2 (__UINTPTR_TYPE__ i) |
| { |
| __builtin_free (((struct foo *)i)->expr); |
| __builtin_free (((struct foo *)i)->expr); /* { dg-warning "double-'free' of '\\*\\(\\(struct foo \\*\\)i\\)\\.expr'" "" { target c } } */ |
| /* { dg-warning "double-'free' of '\\*\\(\\(foo\\*\\)i\\)\\.foo::expr'" "" { target c++ } .-1 } */ |
| } |
| |
| void |
| test_3 (void *p) |
| { |
| void **q = (void **)p; |
| *q = __builtin_malloc (1024); |
| } |