| // PR c++/19808 |
| // { dg-do compile } |
| // { dg-options "-Wuninitialized" } |
| |
| class AllocatorWithCleanup { |
| public: |
| int *allocate(int); |
| }; |
| class SecBlock { |
| SecBlock() : m_ptr(m_alloc.allocate(0)) {} // { dg-bogus "uninitialized" } |
| AllocatorWithCleanup m_alloc; |
| int *m_ptr; |
| }; |
| |
| struct A { |
| int *allocate(int); |
| }; |
| |
| struct B { |
| int : 0; |
| int *allocate(int); |
| }; |
| |
| struct C : B { |
| }; |
| |
| struct D { |
| char arr[0]; |
| int *allocate(int); |
| }; |
| |
| struct E { }; |
| |
| struct F { |
| E arr[10]; |
| int *allocate(int); |
| }; |
| |
| struct G { |
| E e; |
| int *allocate(int); |
| }; |
| |
| struct H { |
| virtual void foo (); |
| int *allocate(int); |
| }; |
| |
| template<typename T> |
| struct X { |
| X() : m_ptr(t.allocate(0)) {} // { dg-bogus "uninitialized" } |
| T t; |
| int *m_ptr; |
| }; |
| |
| struct V { |
| int a; |
| int *allocate(int); |
| }; |
| |
| struct Z { |
| Z() : m_ptr(v.allocate(0)) {} // { dg-warning "uninitialized" } |
| V v; |
| int *m_ptr; |
| }; |
| |
| X<A> x1; |
| X<B> x2; |
| X<C> x3; |
| X<D> x4; |
| X<F> x5; |
| X<G> x6; |
| X<H> x7; |