From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 1851) id 5F5683858408; Mon, 9 Jan 2023 08:57:53 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 5F5683858408 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1673254673; bh=OKH2J2UEQZeBiIQGz2e1W0fMDyRqJQ/sT0EJI7jO72Y=; h=From:To:Subject:Date:From; b=j7Z2ALikaFqwgUE9fiqgOpOjzxKPeMB7UnlLm+8F+Rtoli7UOHKPT+m6xjJ3zqVlu Ut8akvAz5qLDhZo0dL1Ds1rtUX9HaNrjsCSI7kwJVKT1f4wFierWXC7t7I1R2AakCN yo1zZQ6DI3RfKBZf8NYwPVAd4qdp/Ir+F0KNFtEg= 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/PR108330-ipa-hash-checking)] hash: do not insert deleted value to a hash_set X-Act-Checkin: gcc X-Git-Author: Martin Liska X-Git-Refname: refs/users/marxin/heads/PR108330-ipa-hash-checking X-Git-Oldrev: cb93c5f8008b95743b741d6f1842f9be50c6985c X-Git-Newrev: 29d7f7735240509d2d2a34961a9f2d5ba3debbbc Message-Id: <20230109085753.5F5683858408@sourceware.org> Date: Mon, 9 Jan 2023 08:57:53 +0000 (GMT) List-Id: https://gcc.gnu.org/g:29d7f7735240509d2d2a34961a9f2d5ba3debbbc commit 29d7f7735240509d2d2a34961a9f2d5ba3debbbc Author: Martin Liska Date: Mon Jan 9 09:51:01 2023 +0100 hash: do not insert deleted value to a hash_set PR lto/108330 gcc/ChangeLog: * lto-cgraph.cc (compute_ltrans_boundary): Do not insert NULL (deleleted value) to a hash_set. gcc/testsuite/ChangeLog: * g++.dg/lto/pr108330_0.C: New test. Diff: --- gcc/lto-cgraph.cc | 3 ++- gcc/testsuite/g++.dg/lto/pr108330_0.C | 20 ++++++++++++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/gcc/lto-cgraph.cc b/gcc/lto-cgraph.cc index eef5ea1d061..805c7855eb3 100644 --- a/gcc/lto-cgraph.cc +++ b/gcc/lto-cgraph.cc @@ -918,7 +918,8 @@ compute_ltrans_boundary (lto_symtab_encoder_t in_encoder) vec 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/lto/pr108330_0.C b/gcc/testsuite/g++.dg/lto/pr108330_0.C new file mode 100644 index 00000000000..96656f67e4f --- /dev/null +++ b/gcc/testsuite/g++.dg/lto/pr108330_0.C @@ -0,0 +1,20 @@ +// PR lto/108330 +// { dg-do compile } + +class A { + virtual unsigned long m_fn1() const; + virtual int &m_fn2(unsigned long) const; +}; +class C : A { +public: + int &m_fn2(unsigned long) const; + unsigned long m_fn1() const; +}; +class B { + void m_fn3(const A &, const int &, const C &, int &) const; +}; +void B::m_fn3(const A &, const int &, const C &, int &) const { + C &a(a); + for (long b = 0; a.m_fn1(); b++) + a.m_fn2(0); +}