analyzer: ignore uninitialized uses of empty types [PR104274]
authorDavid Malcolm <dmalcolm@redhat.com>
Fri, 11 Feb 2022 00:01:30 +0000 (19:01 -0500)
committerDavid Malcolm <dmalcolm@redhat.com>
Fri, 11 Feb 2022 13:46:05 +0000 (08:46 -0500)
commitcc68ad87014a331399ccb2528db3bf47fabe6f72
tree8020fd5971b9177d75c2b8fada0c03f6b8e927eb
parentae117af43944101ca47b99b743c85a3c528b4b4f
analyzer: ignore uninitialized uses of empty types [PR104274]

PR analyzer/104274 reports a false positive from
-Wanalyzer-use-of-uninitialized-value on hppa when passing
an empty struct as a function parameter.

pa_pass_by_reference returns true for empty structs, so the
call is turned into:

  struct empty arg.0;
  arg.0 = arg
  called_function (arg.0);

by gimplify_parameters.

However, gimplify_modify_expr discards assignments statments
of empty types, so that we end up with:

  struct empty arg.0;
  called_function (arg.0);

which the analyzer considers to be a use of uninitialized "arg.0";

Given that gimplify_modify_expr will discard any assignments to
such types, it seems simplest for -Wanalyzer-use-of-uninitialized-value
to ignore values of empty types.

gcc/analyzer/ChangeLog:
PR analyzer/104274
* region-model.cc (region_model::check_for_poison): Ignore
uninitialized uses of empty types.

gcc/testsuite/ChangeLog:
PR analyzer/104274
* gcc.dg/analyzer/torture/empty-struct-1.c: New test.

Signed-off-by: David Malcolm <dmalcolm@redhat.com>
gcc/analyzer/region-model.cc
gcc/testsuite/gcc.dg/analyzer/torture/empty-struct-1.c [new file with mode: 0644]