Walter Bright Wrote:

> Steven Schveighoffer wrote:
> > As long as the spec says changing length may expand the array to hold
> > enough space, the optimizer can't, because the optimization would
> > change the side effects of the function.  An optimizer should not
> > change the outcome or side effects of a function.  It's not unheard
> > of for an optimizer to eliminate important operations that it thinks
> > are invalid, but in that case, it's a broken optimizer, I don't see
> > why we would add this case.
> 
> The optimizer is free to change around implementation-defined-behavior 
> and undefined-behavior. For defined-behavior, it can change things 
> around as long as the observer cannot observe a change.
> 
> > This point brought up is a non-issue, an optimizer that changes the
> > outcome/side effects of a function is a broken optimizer, end of
> > story.
> 
> It can within the constraints of defined-behavior.

So the real question is, is extension defined in terms of re-allocation or in 
terms of stomping. In the former case, the compiler should not optimize, 
because re-allocation is the expected side effect. In the latter case, it can 
eliminate the code, because what counts is the absence of stomping. 

Reply via email to