]> git.ipfire.org Git - thirdparty/gcc.git/commit
analyzer: handle "pipe" and "pipe2" [PR106300]
authorDavid Malcolm <dmalcolm@redhat.com>
Mon, 24 Oct 2022 20:38:22 +0000 (16:38 -0400)
committerDavid Malcolm <dmalcolm@redhat.com>
Mon, 24 Oct 2022 20:38:22 +0000 (16:38 -0400)
commit792f039fc37faa3446725a643c8018f084e8ccab
treed6f5bfae9af0528c090314d46b2c14859640d221
parent244021b6c1a7bdeb777874ddc2ebcecb95610ef1
analyzer: handle "pipe" and "pipe2" [PR106300]

gcc/analyzer/ChangeLog:
PR analyzer/106300
* engine.cc (impl_region_model_context::get_fd_map): New.
* exploded-graph.h (impl_region_model_context::get_fd_map): New
decl.
* region-model-impl-calls.cc (region_model::impl_call_pipe): New.
* region-model.cc (region_model::update_for_int_cst_return): New,
based on...
(region_model::update_for_zero_return): ...this.  Reimplement in
terms of the former.
(region_model::on_call_pre): Handle "pipe" and "pipe2".
(region_model::on_call_post): Likewise.
* region-model.h (region_model::impl_call_pipe): New decl.
(region_model::update_for_int_cst_return): New decl.
(region_model::mark_as_valid_fd): New decl.
(region_model_context::get_fd_map): New pure virtual fn.
(noop_region_model_context::get_fd_map): New.
(region_model_context_decorator::get_fd_map): New.
* sm-fd.cc: Include "analyzer/program-state.h".
(fd_state_machine::describe_state_change): Handle transitions from
start state to valid states.
(fd_state_machine::mark_as_valid_fd): New.
(fd_state_machine::on_stmt): Add missing return for "creat".
(region_model::mark_as_valid_fd): New.

gcc/ChangeLog:
PR analyzer/106300
* doc/invoke.texi (Static Analyzer Options): Add "pipe" and
"pipe2" to the list of functions the analyzer has hardcoded
knowledge of.

gcc/testsuite/ChangeLog:
PR analyzer/106300
* gcc.dg/analyzer/pipe-1.c: New test.
* gcc.dg/analyzer/pipe-glibc.c: New test.
* gcc.dg/analyzer/pipe-manpages.c: New test.
* gcc.dg/analyzer/pipe2-1.c: New test.

Signed-off-by: David Malcolm <dmalcolm@redhat.com>
gcc/analyzer/engine.cc
gcc/analyzer/exploded-graph.h
gcc/analyzer/region-model-impl-calls.cc
gcc/analyzer/region-model.cc
gcc/analyzer/region-model.h
gcc/analyzer/sm-fd.cc
gcc/doc/invoke.texi
gcc/testsuite/gcc.dg/analyzer/pipe-1.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/analyzer/pipe-glibc.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/analyzer/pipe-manpages.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/analyzer/pipe2-1.c [new file with mode: 0644]