From 0c652ebbf79bd168766097f3ac4c1b3b79d68a43 Mon Sep 17 00:00:00 2001 From: David Malcolm Date: Wed, 22 Mar 2023 08:40:34 -0400 Subject: 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 --- gcc/analyzer/program-point.h | 3 +++ 1 file changed, 3 insertions(+) (limited to 'gcc/analyzer/program-point.h') diff --git a/gcc/analyzer/program-point.h b/gcc/analyzer/program-point.h index d1f8480..7df3b69 100644 --- a/gcc/analyzer/program-point.h +++ b/gcc/analyzer/program-point.h @@ -299,6 +299,9 @@ public: program_point get_next () const; + static bool effectively_intraprocedural_p (const program_point &point_a, + const program_point &point_b); + private: program_point (const function_point &fn_point) : m_function_point (fn_point), -- cgit v1.1