[Bug tree-optimization/61203] [4.8/4.9/5 Regression] g++.old-deja/g++.jason/rvalue2.C FAILs with -O2 -fno-inline

rguenth at gcc dot gnu.org gcc-bugzilla@gcc.gnu.org
Mon Dec 1 12:20:00 GMT 2014


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

Richard Biener <rguenth at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|UNCONFIRMED                 |WAITING
   Last reconfirmed|                            |2014-12-01
                 CC|                            |jason at gcc dot gnu.org
     Ever confirmed|0                           |1
      Known to fail|4.10.0                      |5.0

--- Comment #4 from Richard Biener <rguenth at gcc dot gnu.org> ---
(In reply to Michael Matz from comment #3)
> (In reply to Jakub Jelinek from comment #2)
> > same spot.  No idea what to do against this though, treating a CLOBBER as a
> > barrier for propagation of addresses to other local variables would penalize
> > stuff way too much.
> 
> Conceptually this should be the right thing.  The clobber says
> the object doesn't exist anymore, so also forming its address should be
> invalid/implementation defined.  Either the clobber should move or it should
> be a barrier also for addresses of the clobbered object.  I'm not sure if
> that
> really would penalize much.

But I don't see how it could be easily implemented.

> > And giving up on stack slot sharing because of such an
> > artificial testcase is not useful either.
> 
> Perhaps expansion could detect the situation (address of clobbered object
> leaked after the clobber) and disable sharing just for such problematic
> objects.

Likewise.  (it would be whether the address escaped the function before
the clobber)

I'd rather say that optimization is permitted to make &a and A(a).get_this ()
equal.

Btw, there is also the missed optimization that get_this, discovered as
'const', passed &decl can only return either NULL or an address based on
&decl and thus the result cannot compare equal to &a.  So even without
inlining we could statically compute the comparison.



More information about the Gcc-bugs mailing list