On Tue, 28 Feb 2017, Jeff Law wrote:

> On 02/28/2017 05:59 AM, Prathamesh Kulkarni wrote:
> > On 28 February 2017 at 15:40, Jakub Jelinek <ja...@redhat.com> wrote:
> > > On Tue, Feb 28, 2017 at 03:33:11PM +0530, Prathamesh Kulkarni wrote:
> > > > Hi,
> > > > The attached patch adds special-casing for strcpy/strncpy to dse pass.
> > > > Bootstrapped+tested on x86_64-unknown-linux-gnu.
> > > > OK for GCC 8 ?
> > > 
> > > What is special on strcpy/strncpy?  Unlike memcpy/memmove/memset, you
> > > don't
> > > know the length they store (at least not in general), you don't know the
> > > value, all you know is that they are for the first argument plain store
> > > without remembering the pointer or anything based on it anywhere except in
> > > the return value.
> > > I believe stpcpy, stpncpy, strcat, strncat at least have the same
> > > behavior.
> > > On the other side, without knowing the length of the store, you can't
> > > treat
> > > it as killing something (ok, some calls like strcpy or stpcpy store at
> > > least
> > > the first byte).
> > Well, I assumed a store to dest by strcpy (and friends), which gets
> > immediately freed would count
> > as a dead store since free would kill the whole memory block pointed
> > to by dest ?
> Yes.  But does it happen often in practice?  I wouldn't mind exploring this
> for gcc-8, but I'd like to see real-world code where this happens.

Actually I don't mind for "real-world code" - the important part is
that I believe it's reasonable to assume it can happen from some C++
abstraction and optimization.

Richard.

Reply via email to