| // related to PR c++/38233 |
| // test for value-init of a member array |
| // { dg-do run } |
| |
| struct elt |
| { |
| virtual void f(); |
| char c; |
| }; |
| |
| void elt::f() { } |
| |
| struct foo { |
| elt buffer[500]; |
| foo() ; |
| bool check () const; |
| }; |
| |
| foo::foo () |
| : buffer() |
| {} |
| |
| bool foo::check () const |
| { |
| for (unsigned ix = sizeof (buffer)/ sizeof (buffer[0]); ix--;) |
| if (buffer[ix].c) |
| return false; |
| return true; |
| } |
| |
| inline void *operator new (__SIZE_TYPE__ size, void *p) |
| { |
| return p; |
| } |
| |
| char heap[sizeof(elt[500])]; |
| |
| int main () |
| { |
| for (unsigned ix = sizeof (heap); ix--;) |
| heap[ix] = ix; |
| |
| foo *f = new (heap) foo (); |
| if (!f->check ()) |
| return 3; |
| return 0; |
| } |
| |
| |