// PR c++/50618 // { dg-options "-fdump-rtl-expand" } // { dg-do run } struct Base { const int text; Base():text(1) {} Base(int aText) : text(aText) {} }; struct SubA : public virtual Base { protected: int x; public: SubA(int aX) : x(aX) {} }; class SubB : public virtual Base {}; struct Diamond : public SubA, public SubB { Diamond(int text) : Base(text), SubA(5), SubB() {} void printText() { if(text != 2) __builtin_abort(); if(x!=5) __builtin_abort(); } }; int main(int, char**) { Diamond x(2); x.printText(); } // Verify that the SubB() mem-initializer is storing 0 directly into // this->D.whatever rather than into a stack temp that is then copied into the // base field. // { dg-final { scan-rtl-dump "set \[^\n\]*\n\[^\n\]*this\[^\n\]*\n\[^\n\]*const_int 0" "expand" { target { i?86-*-* x86_64-*-* } } } }