From: David Malcolm Date: Thu, 6 Feb 2020 19:17:48 +0000 (-0500) Subject: analyzer: fix reproducer for PR 93375 X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=13f5b93e6453d121abc15c718dfcc588aca976c3;p=gcc.git analyzer: fix reproducer for PR 93375 Reproducing the ICE in PR analyzer/93375 required some kind of analyzer diagnostic occurring after a call with fewer arguments than required by the callee. The testcase used __builtin_memcpy with a NULL argument for this. On x86_64-pc-linux-gnu this happened to be already optimized into: _4 = MEM [(char * {ref-all})0B]; MEM [(char * {ref-all})rl_1] = _4; by the time of the analyzer pass, leading to the diagnostic in question being: warning: dereference of NULL ‘rl’ [CWE-690] [-Wanalyzer-null-dereference] On other targets e.g. arm-unknown-linux-gnueabi, the builtin isn't optimized at the time of the analyzer pass, leading to this diagnostic instead: warning: use of NULL ‘rl’ where non-null expected [CWE-690] [-Wanalyzer-null-argument] : note: argument 1 of ‘__builtin_memcpy’ must be non-null This patch fixes the test case by using a custom function marked as nonnull. I manually verified that it still reproduces the ICE if the patch for the PR is reverted. gcc/testsuite/ChangeLog: PR analyzer/93375 * gcc.dg/analyzer/pr93375.c: Rework test case to avoid per-target differences in how __builtin_memcpy has been optimized at the time the analyzer runs. --- diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index f6f12dd764c..a6fbf5bec59 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,10 @@ +2020-02-06 David Malcolm + + PR analyzer/93375 + * gcc.dg/analyzer/pr93375.c: Rework test case to avoid per-target + differences in how __builtin_memcpy has been optimized at the time + the analyzer runs. + 2020-02-06 David Malcolm * gcc.dg/analyzer/torture/intptr_t.c: New test. diff --git a/gcc/testsuite/gcc.dg/analyzer/pr93375.c b/gcc/testsuite/gcc.dg/analyzer/pr93375.c index 93a3e87f2cb..f6108547fb7 100644 --- a/gcc/testsuite/gcc.dg/analyzer/pr93375.c +++ b/gcc/testsuite/gcc.dg/analyzer/pr93375.c @@ -1,5 +1,7 @@ /* { dg-additional-options "-Wno-implicit-int" } */ +extern void foo (void *) __attribute__((nonnull)); + void en (jm) { @@ -11,5 +13,5 @@ p2 () char *rl = 0; en (); - __builtin_memcpy (rl, 0, sizeof (0)); /* { dg-warning "dereference of NULL" } */ + foo (rl); /* { dg-warning "use of NULL 'rl' where non-null expected" } */ }