From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 1851) id C85973858404; Tue, 24 Jan 2023 13:46:12 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org C85973858404 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1674567972; bh=K+vNGMY6LvHd5S+Q5i7eGtgAJyhFqJbPyCcM3yctrDk=; h=From:To:Subject:Date:From; b=oaUTzwOW3brSFrnuYCtIvx6oYhzPcUE+UPsBRm2s6wOsa7aAWgf7pD7v3qe4xOSE0 hK4IcJ0+PYA2KA94Bv6vawzOmxMSZVi6QRNnObL4zkdJBQ4vNsJvX0tGoI3D1+dxmp crY+aTrAqFOgGf/VkVhc3Gyg0DjWmYL8g7g/nnGg= Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: Martin Liska To: gcc-cvs@gcc.gnu.org Subject: [gcc(refs/users/marxin/heads/PR108509-hash-set)] ipa: check if cache_token != NULL before hash_set::add call X-Act-Checkin: gcc X-Git-Author: Martin Liska X-Git-Refname: refs/users/marxin/heads/PR108509-hash-set X-Git-Oldrev: 9f0cb3368af735e95776769c4f28fa9cbb60eaf8 X-Git-Newrev: 293c6ae61a3ba5269abf1b87967a44bbacf5ab33 Message-Id: <20230124134612.C85973858404@sourceware.org> Date: Tue, 24 Jan 2023 13:46:12 +0000 (GMT) List-Id: https://gcc.gnu.org/g:293c6ae61a3ba5269abf1b87967a44bbacf5ab33 commit 293c6ae61a3ba5269abf1b87967a44bbacf5ab33 Author: Martin Liska Date: Tue Jan 24 14:39:11 2023 +0100 ipa: check if cache_token != NULL before hash_set::add call We should not insert an empty value to the container. PR ipa/108509 gcc/ChangeLog: * cgraphunit.cc (walk_polymorphic_call_targets): Insert ony non-null values. * ipa.cc (walk_polymorphic_call_targets): Likewise. gcc/testsuite/ChangeLog: * g++.dg/ipa/pr108509.C: New test. Diff: --- gcc/cgraphunit.cc | 2 +- gcc/ipa.cc | 2 +- gcc/testsuite/g++.dg/ipa/pr108509.C | 22 ++++++++++++++++++++++ 3 files changed, 24 insertions(+), 2 deletions(-) diff --git a/gcc/cgraphunit.cc b/gcc/cgraphunit.cc index 832818d651f..a972900900b 100644 --- a/gcc/cgraphunit.cc +++ b/gcc/cgraphunit.cc @@ -1000,7 +1000,7 @@ walk_polymorphic_call_targets (hash_set *reachable_call_targets, = possible_polymorphic_call_targets (edge, &final, &cache_token); - if (!reachable_call_targets->add (cache_token)) + if (cache_token != NULL && !reachable_call_targets->add (cache_token)) { if (symtab->dump_file) dump_possible_polymorphic_call_targets diff --git a/gcc/ipa.cc b/gcc/ipa.cc index 4de605000b6..5c15b60a603 100644 --- a/gcc/ipa.cc +++ b/gcc/ipa.cc @@ -182,7 +182,7 @@ walk_polymorphic_call_targets (hash_set *reachable_call_targets, = possible_polymorphic_call_targets (edge, &final, &cache_token); - if (!reachable_call_targets->add (cache_token)) + if (cache_token != NULL && !reachable_call_targets->add (cache_token)) { for (i = 0; i < targets.length (); i++) { diff --git a/gcc/testsuite/g++.dg/ipa/pr108509.C b/gcc/testsuite/g++.dg/ipa/pr108509.C new file mode 100644 index 00000000000..2844189bbb4 --- /dev/null +++ b/gcc/testsuite/g++.dg/ipa/pr108509.C @@ -0,0 +1,22 @@ +// PR ipa/108509 +// { dg-do compile } +// { dg-options "-O1 -fdevirtualize -fno-tree-fre" } + +struct B { + virtual void deref (); +}; + +struct RefPtr { + B *p; + + RefPtr () + { + p->deref (); + } +}; + +void +f () +{ + RefPtr b; +}