/* Test that the NRV optimization doesn't cause a1 to change too soon. This is equivalent to c++/19317. */ /* { dg-do run } */ void abort (void); struct A { int i[100]; }; struct A a1; struct A f () { struct A a2; a2.i[0] = 42; /* a1.i[0] should still be 0 until we return. */ if (a1.i[0] != 0) abort (); return a2; } int main() { a1 = f(); return 0; }