diff options
author | Immad Mir <mirimmad@outlook.com> | 2022-08-15 22:21:27 +0530 |
---|---|---|
committer | Immad Mir <mirimmad@outlook.com> | 2022-08-15 22:21:36 +0530 |
commit | ed7e7620188dc0e653815bdd40d8802bd5446638 (patch) | |
tree | a3a31c61fb9c9941944fc1e19ebe401ea9573cdd | |
parent | f8cada540d85ac9d53b10f2e9265cb51f6f72514 (diff) | |
download | gcc-ed7e7620188dc0e653815bdd40d8802bd5446638.zip gcc-ed7e7620188dc0e653815bdd40d8802bd5446638.tar.gz gcc-ed7e7620188dc0e653815bdd40d8802bd5446638.tar.bz2 |
analyzer: fix for ICE in sm-fd.cc [PR106551]
This patch fixes the ICE caused by valid_to_unchecked_state
in sm-fd.cc by exiting early if first argument of any "dup"
functions is invalid.
gcc/analyzer/ChangeLog:
PR analyzer/106551
* sm-fd.cc (check_for_dup): exit early if first
argument is invalid for all dup functions.
gcc/testsuite/ChangeLog:
PR analyzer/106551
* gcc.dg/analyzer/fd-dup-1.c: New testcase.
Signed-off-by: Immad Mir <mirimmad@outlook.com>
-rw-r--r-- | gcc/analyzer/sm-fd.cc | 3 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/analyzer/fd-dup-1.c | 11 |
2 files changed, 12 insertions, 2 deletions
diff --git a/gcc/analyzer/sm-fd.cc b/gcc/analyzer/sm-fd.cc index e02b86b..505d598 100644 --- a/gcc/analyzer/sm-fd.cc +++ b/gcc/analyzer/sm-fd.cc @@ -976,8 +976,7 @@ fd_state_machine::check_for_dup (sm_context *sm_ctxt, const supernode *node, { check_for_open_fd (sm_ctxt, node, stmt, call, callee_fndecl, DIRS_READ_WRITE); - if (kind == DUP_1) - return; + return; } switch (kind) { diff --git a/gcc/testsuite/gcc.dg/analyzer/fd-dup-1.c b/gcc/testsuite/gcc.dg/analyzer/fd-dup-1.c index b971d31..b4f43e7 100644 --- a/gcc/testsuite/gcc.dg/analyzer/fd-dup-1.c +++ b/gcc/testsuite/gcc.dg/analyzer/fd-dup-1.c @@ -245,4 +245,15 @@ test_22 (int flags) close (fd); } +void do_something(); +void +test_23 () +{ + int nullfd = -1; + int fd = 1; + if (dup2 (nullfd, fd) < 0) /* { dg-warning "'dup2' on possibly invalid file descriptor 'nullfd'" } */ + { + do_something(); + } +} |