// rdar: //8540501 extern "C" void abort(); struct A { int i; A (int j) : i(j) {} A (const A &j) : i(j.i) {} A& operator= (const A &j) { i = j.i; abort(); return *this; } ~A() { } }; struct B { int i; B (const A& a) { i = a.i; } B() {} B (const B &j) : i(j.i) {} ~B() { } }; A foo(int j) { return ({ j ? A(1) : A(0); }); } void foo2() { A b = ({ A a(1); A a1(2); A a2(3); a1; a2; a; }); if (b.i != 1) abort(); A c = ({ A a(1); A a1(2); A a2(3); a1; a2; a; A a3(4); a2; a3; }); if (c.i != 4) abort(); } void foo3() { const A &b = ({ A a(1); a; }); if (b.i != 1) abort(); } void foo4() { const B &b = ({ A a(1); a; }); if (b.i != 1) abort(); } int main() { foo2(); foo3(); foo4(); return foo(1).i-1; }