1 // related to PR c++/38233 2 // test for value-init of a member array 3 // { dg-do run } 4 5 struct elt 6 { 7 virtual void f(); 8 char c; 9 }; 10 f()11void elt::f() { } 12 13 struct foo { 14 elt buffer[500]; 15 foo() ; 16 bool check () const; 17 }; 18 foo()19foo::foo () 20 : buffer() 21 {} 22 check()23bool foo::check () const 24 { 25 for (unsigned ix = sizeof (buffer)/ sizeof (buffer[0]); ix--;) 26 if (buffer[ix].c) 27 return false; 28 return true; 29 } 30 new(__SIZE_TYPE__ size,void * p)31inline void *operator new (__SIZE_TYPE__ size, void *p) 32 { 33 return p; 34 } 35 36 char heap[sizeof(elt[500])]; 37 main()38int main () 39 { 40 for (unsigned ix = sizeof (heap); ix--;) 41 heap[ix] = ix; 42 43 foo *f = new (heap) foo (); 44 if (!f->check ()) 45 return 3; 46 return 0; 47 } 48 49 50