From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 2209) id 91033384F48B; Tue, 22 Nov 2022 00:10:13 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 91033384F48B DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1669075813; bh=g9zAXWlxU0Uoxx//M4KsuqMFcFgj68Ui9nKgF+Ba1mU=; h=From:To:Subject:Date:From; b=r0m8+SrY0+migX8RaSxgQgS9y5X64ujSEGSNGP1pdBkV45WwYpeYSIIh43VzE+ONo 6px3AXnrW6YO7QwolsIlCO9XNjkFL0upLZRQkBM7dv2JR0DToIQ7mKTNggd2vP20sU D7N4O1Aw/1VD66McQimpK1epE7ooBkJ3Tu/o/EJY= MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset="utf-8" From: David Malcolm To: gcc-cvs@gcc.gnu.org Subject: [gcc r13-4220] analyzer: fix ICE on 'bind' with non-pointer arg [P107783] X-Act-Checkin: gcc X-Git-Author: David Malcolm X-Git-Refname: refs/heads/master X-Git-Oldrev: 358dab90186b30a5d287710f13625c327210218d X-Git-Newrev: 12a4785c9120beeef42f1bded52cc2674e206f57 Message-Id: <20221122001013.91033384F48B@sourceware.org> Date: Tue, 22 Nov 2022 00:10:13 +0000 (GMT) List-Id: https://gcc.gnu.org/g:12a4785c9120beeef42f1bded52cc2674e206f57 commit r13-4220-g12a4785c9120beeef42f1bded52cc2674e206f57 Author: David Malcolm Date: Mon Nov 21 19:08:17 2022 -0500 analyzer: fix ICE on 'bind' with non-pointer arg [P107783] gcc/analyzer/ChangeLog: PR analyzer/107783 * region-model-impl-calls.cc (kf_accept::matches_call_types_p): Require that args 1 and 2 be pointers. (kf_bind::matches_call_types_p): Require that arg 1 be a pointer. * region-model.h (call_details::arg_is_pointer_p): New gcc/testsuite/ChangeLog: PR analyzer/107783 * gcc.dg/analyzer/fd-bind-pr107783.c: New test. Signed-off-by: David Malcolm Diff: --- gcc/analyzer/region-model-impl-calls.cc | 6 ++++-- gcc/analyzer/region-model.h | 4 ++++ gcc/testsuite/gcc.dg/analyzer/fd-bind-pr107783.c | 5 +++++ 3 files changed, 13 insertions(+), 2 deletions(-) diff --git a/gcc/analyzer/region-model-impl-calls.cc b/gcc/analyzer/region-model-impl-calls.cc index a71eb3de98f..8a44c97eec9 100644 --- a/gcc/analyzer/region-model-impl-calls.cc +++ b/gcc/analyzer/region-model-impl-calls.cc @@ -595,7 +595,9 @@ class kf_accept : public known_function bool matches_call_types_p (const call_details &cd) const final override { - return cd.num_args () == 3; + return (cd.num_args () == 3 + && cd.arg_is_pointer_p (1) + && cd.arg_is_pointer_p (2)); } void impl_call_post (const call_details &cd) const final override @@ -633,7 +635,7 @@ public: bool matches_call_types_p (const call_details &cd) const final override { - return cd.num_args () == 3; + return (cd.num_args () == 3 && cd.arg_is_pointer_p (1)); } void impl_call_post (const call_details &cd) const final override diff --git a/gcc/analyzer/region-model.h b/gcc/analyzer/region-model.h index c828d739482..244780eb4f4 100644 --- a/gcc/analyzer/region-model.h +++ b/gcc/analyzer/region-model.h @@ -256,6 +256,10 @@ public: bool maybe_set_lhs (const svalue *result) const; unsigned num_args () const; + bool arg_is_pointer_p (unsigned idx) const + { + return POINTER_TYPE_P (get_arg_type (idx)); + } const gcall *get_call_stmt () const { return m_call; } location_t get_location () const; diff --git a/gcc/testsuite/gcc.dg/analyzer/fd-bind-pr107783.c b/gcc/testsuite/gcc.dg/analyzer/fd-bind-pr107783.c new file mode 100644 index 00000000000..36304179b43 --- /dev/null +++ b/gcc/testsuite/gcc.dg/analyzer/fd-bind-pr107783.c @@ -0,0 +1,5 @@ +int +foo (void) +{ + return bind (0, 0, 0); /* { dg-warning "implicit declaration of function 'bind'" } */ +}