On Fri, Aug 6, 2021 at 12:01 AM Martin Sebor via Gcc-patches <gcc-patches@gcc.gnu.org> wrote: > > As I mentioned in the description of the access warning pass when > I submitted it in July(*), I planned to change the -Wstringop-xxx > code in the pass to run on the GIMPLE IL instead of on trees in > builtins.c (and elsewhere). The attached patch implements this > change along with moving more warning code from builtins.c and > calls.c into the pass source. > > The changes are mostly mechanical but I should explain one aspect > that might draw attention: since some of the warning functions are > still called from outside the pass with tree arguments, I made them > templates parameterized on the type of the argument: either gimple* > or tree, and provided overloads for each(**). I expect this to be > a transient solution until remaining callers that pass in trees are > moved into the new pass. This might take a bit of effort and time > and involve more churn than feels appropriate for a single patch.
ICK. I'll take your word that this is transitional only. OK. Thanks, Richard. > Tested on x86_64-linux and by building Glibc and GDB+Binutils with > no new warnings. > > As the next steps I plan to: > > * integrate the new pass with ranger and enable the pointer query > caching to avoid repeatedly computing object sizes for statements > involving related pointers > * move remaining warning code from builtins.c and calls.c (and > possibly also gimple-fold.c) into the new pass (as much of it > as possible > * investigate running a subset of the new pass early on during > optimization in addition to late as it does now, to detect > problems that are impossible to detect otherwise (i.e., split > the pass into two stages similar to -Wuninitialized and > -Wmaybe-uninitialized) > * investigate integrating the uninitialized predicate analyzer > into the pass to help reduce false positives and perhaps also > false negatives by enabling maybe-kinds of diagnostics for > conditional code > * integrate -Warray-bounds into the pass (and remove it from vrp) > > Martin > > [*] https://gcc.gnu.org/pipermail/gcc-patches/2021-July/575377.html > [**] This was made easy by introducing overloads of functions like > get_location(gimple*) and get_location(tree) to return the location > of a GIMPLE statement or a tree decl or expression.