| /* { dg-do compile } */ | |
| /* { dg-options "-O2 -Wstrict-aliasing" } */ | |
| inline void *operator new (__SIZE_TYPE__, void *__p) throw() { return __p; } | |
| struct Y { | |
| Y() {} | |
| int i; | |
| }; | |
| struct X { | |
| X() {} | |
| void construct(const Y& y) | |
| { | |
| new (&m_data[0]) Y(y); | |
| } | |
| bool initialized; | |
| char m_data[sizeof (Y)]; | |
| }; | |
| void bar(const X&); | |
| void foo(Y& y) | |
| { | |
| X x; | |
| x.construct(y); | |
| x.initialized = true; | |
| bar(x); | |
| } | |