This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: [PATCH] look harder for MEM_REF operand equality to avoid -Wstringop-truncation (PR 84561)
- From: Jeff Law <law at redhat dot com>
- To: Bernd Edlinger <bernd dot edlinger at hotmail dot de>, Martin Sebor <msebor at gmail dot com>
- Cc: Richard Biener <richard dot guenther at gmail dot com>, "gcc-patches at gcc dot gnu dot org" <gcc-patches at gcc dot gnu dot org>
- Date: Mon, 17 Sep 2018 11:24:16 -0600
- Subject: Re: [PATCH] look harder for MEM_REF operand equality to avoid -Wstringop-truncation (PR 84561)
- References: <VI1PR0701MB286216FB1370E54471D47D6FE4180@VI1PR0701MB2862.eurprd07.prod.outlook.com>
On 9/15/18 2:14 AM, Bernd Edlinger wrote:
> On 9/14/18, Martin Sebor wrote:
>> As I said above, this happens during the dom walk in the ccp
>> pass:
>>
>> substitute_and_fold_dom_walker walker (CDI_DOMINATORS, this);
>> walker.walk (ENTRY_BLOCK_PTR_FOR_FN (cfun));
>>
>> The warning is issued during the walker.walk() call as
>> strncpy is being folded into memcpy. The prior assignments are
>> only propagated later, when the next statement after the strncpy
>> call is reached. It happens in
>> substitute_and_fold_dom_walker::before_dom_children(). So during
>> the strncpy folding we see the next statement as:
>>
>> MEM[(struct S *)_1].a[n_7] = 0;
>>
>> After the strncpy call is transformed to memcpy, the assignment
>> above is transformed to
>>
>> MEM[(struct S *)_8].a[3] = 0;
>>
>>
>>> If they're only discovered as copies within the pass where you're trying
>>> to issue the diagnostic, then you'd want to see if the pass has any
>>> internal structures that tell you about equivalences.
>>
>>
>> I don't know if this is possible. I don't see any APIs in
>> tree-ssa-propagate.h that would let me query the internal data
>> somehow to find out during folding (when the warning is issued).
>
>
> Well,
>
> if I see this right, the CCP is doing tree transformations
> while from the folding of strncpy the predicate maybe_diag_stxncpy_trunc
> is called, and sees inconsistent information, in the tree,
> and therefore it issues a warning.
>
> I understand that walking the references is fragile at least
> in this state.
>
> But why not just prevent warnings when this is called from CCP?
>
>
> Like this?
>
> Bootstrapped and reg-tested on x86_64-pc-linux-gnu.
> Is it OK for trunk?
No. That's just hacking around the real problem.
jeff