| /* { dg-do compile } */ | |
| void deallocate(void *); | |
| void *a; | |
| struct C { | |
| virtual void m_fn1(); | |
| }; | |
| struct D { | |
| C *m_fn2() { | |
| if (a) | |
| __builtin_abort(); | |
| } // { dg-warning "control reaches end of non-void function" } | |
| }; | |
| D getd(); | |
| struct vec_int { | |
| int _M_start; | |
| ~vec_int() { | |
| if (_M_start) | |
| deallocate(&_M_start); | |
| } | |
| }; | |
| vec_int *b; | |
| struct I { | |
| virtual void m_fn3(); | |
| }; | |
| void I::m_fn3() { | |
| if (a) | |
| getd().m_fn2()->m_fn1(); | |
| b->~vec_int(); | |
| } | |