diff options
author | David Malcolm <dmalcolm@redhat.com> | 2020-02-06 14:17:48 -0500 |
---|---|---|
committer | David Malcolm <dmalcolm@redhat.com> | 2020-02-06 19:37:34 -0500 |
commit | 13f5b93e6453d121abc15c718dfcc588aca976c3 (patch) | |
tree | fa3e783d717606c091e291dd56c2b117caa2bf12 | |
parent | e032e7a9ab55e893edfcf1f7fef86b2f52f21f32 (diff) | |
download | gcc-13f5b93e6453d121abc15c718dfcc588aca976c3.zip gcc-13f5b93e6453d121abc15c718dfcc588aca976c3.tar.gz gcc-13f5b93e6453d121abc15c718dfcc588aca976c3.tar.bz2 |
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 <unsigned int> [(char * {ref-all})0B];
MEM <unsigned int> [(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]
<built-in>: 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.
-rw-r--r-- | gcc/testsuite/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/analyzer/pr93375.c | 4 |
2 files changed, 10 insertions, 1 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index f6f12dd..a6fbf5b 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,12 @@ 2020-02-06 David Malcolm <dmalcolm@redhat.com> + 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 <dmalcolm@redhat.com> + * gcc.dg/analyzer/torture/intptr_t.c: New test. 2020-02-06 Segher Boessenkool <segher@kernel.crashing.org> diff --git a/gcc/testsuite/gcc.dg/analyzer/pr93375.c b/gcc/testsuite/gcc.dg/analyzer/pr93375.c index 93a3e87..f610854 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" } */ } |