]> git.ipfire.org Git - thirdparty/gcc.git/commit - gcc/analyzer/sm-malloc.cc
analyzer: fix false +ves from -Wanalyzer-deref-before-check due to inlining [PR109239]
authorDavid Malcolm <dmalcolm@redhat.com>
Wed, 22 Mar 2023 12:40:34 +0000 (08:40 -0400)
committerDavid Malcolm <dmalcolm@redhat.com>
Wed, 22 Mar 2023 12:40:34 +0000 (08:40 -0400)
commit0c652ebbf79bd168766097f3ac4c1b3b79d68a43
tree820aef7492def9c7de3fc8740cb0606222aa4e39
parent1bde3acee77c171117dfb988998daa8197c73b34
analyzer: fix false +ves from -Wanalyzer-deref-before-check due to inlining [PR109239]

The patch has this effect on my integration tests of -fanalyzer:

  Comparison:
    GOOD: 129        (17.70% -> 17.92%)
     BAD: 600 -> 591 (-9)

which is purely due to improvements to -Wanalyzer-deref-before-check
on the Linux kernel:

  -Wanalyzer-deref-before-check:
    GOOD: 1        (4.55% -> 7.69%)
     BAD: 21 -> 12 (-9)
     Known false positives: 16 -> 10 (-6)
       linux-5.10.162: 7 -> 1 (-6)
     Suspected false positives: 3 -> 0 (-3)
       linux-5.10.162: 3 -> 0 (-3)

gcc/analyzer/ChangeLog:
PR analyzer/109239
* program-point.cc: Include "analyzer/inlining-iterator.h".
(program_point::effectively_intraprocedural_p): New function.
* program-point.h (program_point::effectively_intraprocedural_p):
New decl.
* sm-malloc.cc (deref_before_check::emit): Use it when rejecting
interprocedural cases, so that we reject interprocedural cases
that have become intraprocedural due to inlining.

gcc/testsuite/ChangeLog:
PR analyzer/109239
* gcc.dg/analyzer/deref-before-check-pr109239-linux-bus.c: New test.

Signed-off-by: David Malcolm <dmalcolm@redhat.com>
gcc/analyzer/program-point.cc
gcc/analyzer/program-point.h
gcc/analyzer/sm-malloc.cc
gcc/testsuite/gcc.dg/analyzer/deref-before-check-pr109239-linux-bus.c [new file with mode: 0644]