https://gcc.gnu.org/bugzilla/show_bug.cgi?id=82918
--- Comment #4 from Antony Polukhin <antoshkka at gmail dot com> --- Still rereads the value2.data[0] value in this sample: struct array { int data[3]; }; void foo2(array& value, const array& value2) { value.data[1] = value2.data[0]; value.data[0] = value2.data[0]; value.data[2] = value2.data[0]; // Rereads here }