This is the mail archive of the libstdc++@gcc.gnu.org mailing list for the libstdc++ project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: sequence point across assignment


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].


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]