analyzer: fix missing check for uninit of return values
authorDavid Malcolm <dmalcolm@redhat.com>
Fri, 28 Jan 2022 18:37:51 +0000 (13:37 -0500)
committerDavid Malcolm <dmalcolm@redhat.com>
Wed, 2 Feb 2022 14:55:29 +0000 (09:55 -0500)
commit13ad6d9f50e3f197246b460c4d9a9e80ba2559cf
tree5e0440468c2de0836d9963f6b68da0d59565a2c6
parentea3e1915954371d8230fda44ce6821928f04f80e
analyzer: fix missing check for uninit of return values

When moving the -fanalyzer tests for -ftrivial-auto-var-init to the
"torture" subdirectory of gcc.dg/analyzer I noticed that -fanalyzer
wasn't always properly checking for initialization of return values.

The issue was that some "return" handling was using
region_model::copy_region to copy to the RESULT_DECL, and copy_region
wasn't checking for poisoned svalues.

This patch eliminates region_model::copy_region in favor of simply
doing a get_ravlue/set_value pair, fixing the issue.

gcc/analyzer/ChangeLog:
* region-model.cc (region_model::on_return): Replace usage of
copy_region with get_rvalue/set_value pair.
(region_model::pop_frame): Likewise.
(selftest::test_compound_assignment): Likewise.
* region-model.h (region_model::copy_region): Delete decl.
* region.cc (region_model::copy_region): Delete.

gcc/testsuite/ChangeLog:
* gcc.dg/analyzer/torture/ubsan-1.c: Add missing return stmts.
* gcc.dg/analyzer/uninit-trivial-auto-var-init-pattern.c: Move
to...
* gcc.dg/analyzer/torture/uninit-trivial-auto-var-init-pattern.c:
...here.
* gcc.dg/analyzer/uninit-trivial-auto-var-init-uninitialized.c:
Move to...
* gcc.dg/analyzer/torture/uninit-trivial-auto-var-init-uninitialized.c:
...here.
* gcc.dg/analyzer/uninit-trivial-auto-var-init-zero.c: Move to...
* gcc.dg/analyzer/torture/uninit-trivial-auto-var-init-zero.c: ...here.

Signed-off-by: David Malcolm <dmalcolm@redhat.com>
gcc/analyzer/region-model.cc
gcc/analyzer/region-model.h
gcc/analyzer/region.cc
gcc/testsuite/gcc.dg/analyzer/torture/ubsan-1.c
gcc/testsuite/gcc.dg/analyzer/torture/uninit-trivial-auto-var-init-pattern.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/analyzer/torture/uninit-trivial-auto-var-init-uninitialized.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/analyzer/torture/uninit-trivial-auto-var-init-zero.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/analyzer/uninit-trivial-auto-var-init-pattern.c [deleted file]
gcc/testsuite/gcc.dg/analyzer/uninit-trivial-auto-var-init-uninitialized.c [deleted file]
gcc/testsuite/gcc.dg/analyzer/uninit-trivial-auto-var-init-zero.c [deleted file]