1 /* { dg-do compile } */ 2 3 void deallocate(void *); 4 void *a; 5 6 struct C { 7 virtual void m_fn1(); 8 }; 9 10 struct D { m_fn2D11 C *m_fn2() { 12 if (a) 13 __builtin_abort(); 14 } // { dg-warning "control reaches end of non-void function" } 15 }; 16 D getd(); 17 18 struct vec_int { 19 int _M_start; ~vec_intvec_int20 ~vec_int() { 21 if (_M_start) 22 deallocate(&_M_start); 23 } 24 }; 25 vec_int *b; 26 27 struct I { 28 virtual void m_fn3(); 29 }; 30 m_fn3()31void I::m_fn3() { 32 if (a) 33 getd().m_fn2()->m_fn1(); 34 b->~vec_int(); 35 } 36 37