From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 7885) id D63133858D1E; Mon, 15 Aug 2022 16:52:47 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org D63133858D1E MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset="utf-8" From: Immad Mir To: gcc-cvs@gcc.gnu.org Subject: [gcc r13-2051] analyzer: fix for ICE in sm-fd.cc [PR106551] X-Act-Checkin: gcc X-Git-Author: Immad Mir X-Git-Refname: refs/heads/master X-Git-Oldrev: f8cada540d85ac9d53b10f2e9265cb51f6f72514 X-Git-Newrev: ed7e7620188dc0e653815bdd40d8802bd5446638 Message-Id: <20220815165247.D63133858D1E@sourceware.org> Date: Mon, 15 Aug 2022 16:52:47 +0000 (GMT) X-BeenThere: gcc-cvs@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-cvs mailing list List-Unsubscribe: , List-Archive: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 15 Aug 2022 16:52:47 -0000 https://gcc.gnu.org/g:ed7e7620188dc0e653815bdd40d8802bd5446638 commit r13-2051-ged7e7620188dc0e653815bdd40d8802bd5446638 Author: Immad Mir Date: Mon Aug 15 22:21:27 2022 +0530 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 Diff: --- gcc/analyzer/sm-fd.cc | 3 +-- 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 e02b86baad1..505d598f3f0 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 b971d31b1c7..b4f43e7f0ef 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(); + } +}