http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59374
--- Comment #2 from Richard Biener <rguenth at gcc dot gnu.org> --- bar = myalloc (); [return slot optimization] <bb 3>: _22 = MEM[(struct Bar * const &)&bar + 8]; MEM[(struct Bar * &)&bar + 8] = 0B; MEM[(struct Foo * &)&foo + 8] = _22; _23 = MEM[(const struct BarDelete *)&bar].D.39226.alloc_; MEM[(struct deleter_type *)&foo] = _23; _7 = std::operator<< <std::char_traits<char> > (&cout, "p "); is vectorized to bar = myalloc (); [return slot optimization] <bb 3>: _22 = MEM[(struct Bar * const &)&bar + 8]; MEM[(struct Bar * &)&bar + 8] = 0B; vectp.87_1 = &MEM[(const struct BarDelete *)&bar].D.39226.alloc_; vect__23.88_36 = MEM[(const struct BarDelete *)vectp.87_1]; _23 = MEM[(const struct BarDelete *)&bar].D.39226.alloc_; vectp.90_37 = &foo; MEM[(struct deleter_type *)vectp.90_37] = vect__23.88_36; _7 = std::operator<< <std::char_traits<char> > (&cout, "p "); obvious violating a WAR dependency. I'm sure it was me who broke this.