On Tue, 2020-02-04 at 10:34 +0100, Richard Biener wrote: > On Tue, Feb 4, 2020 at 1:44 AM Martin Sebor <mse...@gmail.com> wrote: > > PR 93519 reports a false positive -Wrestrict issued for an inlined call > > to strcpy that carefully guards against self-copying. This is caused > > by the caller's arguments substituted into the call during inlining and > > before dead code elimination. > > > > The attached patch avoids this by removing -Wrestrict from the folder > > and deferring folding perfectly overlapping (and so undefined) calls > > to strcpy (and mempcpy, but not memcpy) until much later. Calls to > > perfectly overlapping calls to memcpy are still folded early. > > Why do we bother to warn at all for this case? Just DWIM here. Warnings like > this can be emitted from the analyzer? They potentially can, but the analyzer is and will almost always certainly be considerably slower. I would not expect it to be used nearly as much as the core compiler.
WHether or not a particular warning makes sense in the core compiler or analyzer would seem to me to depend on whether or not we can reasonably issue warnings without interprocedural analysis. double-free realistically requires interprocedural analysis to be effective. I'm not sure Wrestrict really does. > > That is, I suggest to simply remove the bogus warning code from folding > (and _not_ fail the folding). I haven't looked at the patch, but if we can get the warning out of the folder that's certainly preferable. And we could investigate deferring self-copy removal. Jeff