[Bug tree-optimization/67618] malloc+memset optimization breaks code

daniel.gutson at tallertechnologies dot com gcc-bugzilla@gcc.gnu.org
Thu Sep 17 22:35:00 GMT 2015


https://gcc.gnu.org/bugzilla/show_bug.cgi?id=67618

--- Comment #11 from Daniel Gutson <daniel.gutson at tallertechnologies dot com> ---
(In reply to Andrew Pinski from comment #10)
> (In reply to Daniel Gutson from comment #9)
> > (In reply to Marc Glisse from comment #8)
> > > (bugzilla bug that reset the component...)
> > > 
> > > (In reply to Daniel Gutson from comment #6)
> > > > That's why the 'if (ptr != NULL)' should not be ignored, which currently is.
> > > > The 'if' prevents the UB.
> > > 
> > > Uh, if you consider it UB, I don't understand the problem. At runtime,
> > > either malloc succeeded and the transformation is fine, or x<=12 and the
> > > transformation is fine, or the call to memset is undefined behavior so
> > > anything is fine (including the transformation). Unless you explicitly want
> > > to catch the trap, I don't understand what you are saying. Could you detail
> > > step by step where a well-defined behavior in the original program is turned
> > > into a different behavior in the optimization?
> > 
> > See this example: ('function' is same as above)
> > 
> > void caller(void)
> > {
> >     void* ptr = function(1);
> >     *(char*)ptr = 1;
> > }
> 
> Maybe file another bug which does the opposite transformation for the cases
> where memcpy happens after the calloc.  There is not enough information to
> know if the value is going to be <=15 most of the time or not so we just
> guess.

Can't we use this one?

> 
> Anyways there is no breaking of code.

OK, my bad.

>  If you don't want this transformation
> inside a function which is called calloc, then you need to use
> -fno-builtin-malloc to disable finding of the malloc call.

Shouldn't be -fno-builtin-calloc the flag to prevent this optimization? I don't
want to disable malloc's builtin flavor everywhere else.



More information about the Gcc-bugs mailing list