| #include <cstdlib> | |
| struct A | |
| { | |
| virtual int foo (void) | |
| { | |
| return 42; | |
| } | |
| }; | |
| struct B: public A | |
| { | |
| int *ptr; | |
| void alloc () | |
| { | |
| ptr = (int*)malloc(sizeof(int)); | |
| } | |
| int foo (void) | |
| { | |
| free(ptr); /* { dg-warning "double-'free' of 'b.B::ptr'" } */ | |
| return 0; | |
| } | |
| }; | |
| int test () | |
| { | |
| struct B b, *bptr=&b; | |
| b.alloc (); | |
| bptr->foo (); /* { dg-message "\\(6\\) calling 'B::foo' from 'test'" "event 6" } */ | |
| /* { dg-message "\\(9\\) returning to 'test' from 'B::foo'" "event 9" { target *-*-* } .-1 } */ | |
| return bptr->foo (); | |
| } |