sequence point across assignment
Jonathan Wakely
jwakely.gcc@gmail.com
Thu Nov 12 08:44:00 GMT 2015
On 12 November 2015 at 00:33, Anthony Shipman wrote:
> I had some code:
>
> states_[ix].next_ = compileStep(vec);
>
> The compileStep() function pushed something onto states_
> which caused its internal memory to be reallocated. As a result
> the returned value was copied to the wrong place. It appears
> that the left hand side is reduced to an address before the
> call is made.
>
> The compiler is g++ (SUSE Linux) 4.8.3 with options
> g++ -g -O0 -Wall -m64 -std=gnu++11 -fpic
>
> Have I strayed into undefined behaviour or is the compiler
> being silly? (Might this a consequence of the return value
> optimisation)?
>
(This question has nothing to do with libstdc++ so would be more
appropriate on gcc-help or a general C++ forum not specific to GCC).
THis has nothing to do with RVO.
The evaluation of the LHS and RHS of the assignment are
indeterminately sequenced, meaning that they do not overlap but it is
unspecified which happens first. You need to modify the code to ensure
the function call happens before evaluation of states_[ix].
More information about the Libstdc++
mailing list