analyzer: fix reproducer for PR 93375
authorDavid Malcolm <dmalcolm@redhat.com>
Thu, 6 Feb 2020 19:17:48 +0000 (14:17 -0500)
committerDavid Malcolm <dmalcolm@redhat.com>
Fri, 7 Feb 2020 00:37:34 +0000 (19:37 -0500)
commit13f5b93e6453d121abc15c718dfcc588aca976c3
treefa3e783d717606c091e291dd56c2b117caa2bf12
parente032e7a9ab55e893edfcf1f7fef86b2f52f21f32
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.
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/analyzer/pr93375.c