Request to merge Undefined Behavior Sanitizer in (take 2)

Jason Merrill jason@redhat.com
Sat Aug 3 16:24:00 GMT 2013


On 08/01/2013 02:06 PM, Marek Polacek wrote:
> SAVE_EXPRs are evaluated only once;
> in that COMPOUND_EXPR, when we first encounter SAVE_EXPR <x> and
> call get_initialized_tmp_var, we get temporary value for it, x.2.
> Then, in the second part of the COMPOUND_EXPR, we meet SAVE_EXPR <x>
> again, but it already has been resolved, so we don't create any
> initialized var for it.

Right.  When you have a SAVE_EXPR in a conditional context, you need to 
make sure that it gets evaluated before the condition.

> What we could perhaps do is to move the x.2 = x; initialization
> before the condition, so that it's always initialized.  It's not readily
> obvious to me how to implement that nicely, but I could try something, if
> this is the way to go.  Does anyone have a better idea?

Where are the SAVE_EXPRs coming from?  It doesn't seem to me that x 
needs to be wrapped in a SAVE_EXPR at all in this case.  For cases where 
the SAVE_EXPR is needed and not used in the test, you could add the 
SAVE_EXPR before the condition with a COMPOUND_EXPR.

Jason



More information about the Gcc-patches mailing list