This is the mail archive of the
mailing list for the GCC project.
Re: strlen optimizations based on whether stpcpy is declared?
- From: Jakub Jelinek <jakub at redhat dot com>
- To: Martin Sebor <msebor at gmail dot com>
- Cc: GCC Mailing List <gcc at gcc dot gnu dot org>
- Date: Mon, 2 Oct 2017 09:11:53 +0200
- Subject: Re: strlen optimizations based on whether stpcpy is declared?
- Authentication-results: sourceware.org; auth=none
- Authentication-results: ext-mx10.extmail.prod.ext.phx2.redhat.com; dmarc=none (p=none dis=none) header.from=redhat.com
- Authentication-results: ext-mx10.extmail.prod.ext.phx2.redhat.com; spf=fail smtp.mailfrom=jakub at redhat dot com
- Dmarc-filter: OpenDMARC Filter v1.3.2 mx1.redhat.com A22C05D687
- References: <firstname.lastname@example.org>
- Reply-to: Jakub Jelinek <jakub at redhat dot com>
On Sun, Oct 01, 2017 at 03:52:39PM -0600, Martin Sebor wrote:
> While debugging some of my tests I noticed unexpected differences
> between the results depending on whether or not the stpcpy function
> is declared. It turns out that the differences are caused by
> the handle_builtin_strcpy function in tree-ssa-strlen.c testing
> for stpcpy having been declared:
> if (srclen == NULL_TREE)
> switch (bcode)
> case BUILT_IN_STRCPY:
> case BUILT_IN_STRCPY_CHK:
> case BUILT_IN_STRCPY_CHKP:
> case BUILT_IN_STRCPY_CHK_CHKP:
> if (lhs != NULL_TREE || !builtin_decl_implicit_p (BUILT_IN_STPCPY))
> and taking different paths depending on whether or not the test
> As far as can see, the tests have been there since the pass was
> added, but I don't understand from the comments in the file what
> their purpose is or why optimization decisions involving one set
> of functions (I think strcpy and strcat at a minimum) are based
> on whether another function has been declared or not.
> Can you explain what they're for?
The reason is that stpcpy is not a standard C function, so in non-POSIX
environments one could have stpcpy with completely unrelated prototype
used for something else. In such case we don't want to introduce stpcpy
into a TU that didn't have such a call. So, we use the existence of
a matching prototype as a sign that stpcpy can be synthetized.