[Bug c++/91774] Assignment from return value of function to reference returned by function occasionally produces wrong results
pinskia at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Mon Sep 16 09:38:00 GMT 2019
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=91774
--- Comment #4 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
I see the issue:
ListManager[probe].rchild = ListManager.Alloc();
If you take that, which side of the equals is evaluated first is the problem.
Is "ListManager[probe].rchild" or "ListManager.Alloc()".
GCC is evaluating the lhs side first and then rhs.
But ListManager.Alloc() has a side effect of doing a Array::resize() which
means the lhs has now a reference for the old array rather than the new one.
NOTE before C++17 is unspecified which side is evulated first. I don't
remember the rules for C++17 to say if it is evulated the way you want it to be
evulated.
More information about the Gcc-bugs
mailing list