This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
[PATCH] Fix PR79776
- From: Richard Biener <rguenther at suse dot de>
- To: gcc-patches at gcc dot gnu dot org
- Date: Mon, 27 Mar 2017 12:49:48 +0200 (CEST)
- Subject: [PATCH] Fix PR79776
- Authentication-results: sourceware.org; auth=none
Bootstrapped / tested on x86_64-unknown-linux-gnu, applied.
Richard.
2017-03-27 Richard Biener <rguenther@suse.de>
PR ipa/79776
* tree-ssa-structalias.c (associate_varinfo_to_alias): Skip
inlined thunk clones.
* g++.dg/ipa/pr79776.C: New testcase.
Index: gcc/tree-ssa-structalias.c
===================================================================
*** gcc/tree-ssa-structalias.c (revision 246489)
--- gcc/tree-ssa-structalias.c (working copy)
*************** struct pt_solution ipa_escaped_pt
*** 7615,7621 ****
static bool
associate_varinfo_to_alias (struct cgraph_node *node, void *data)
{
! if ((node->alias || node->thunk.thunk_p)
&& node->analyzed)
insert_vi_for_tree (node->decl, (varinfo_t)data);
return false;
--- 7615,7623 ----
static bool
associate_varinfo_to_alias (struct cgraph_node *node, void *data)
{
! if ((node->alias
! || (node->thunk.thunk_p
! && ! node->global.inlined_to))
&& node->analyzed)
insert_vi_for_tree (node->decl, (varinfo_t)data);
return false;
Index: gcc/testsuite/g++.dg/ipa/pr79776.C
===================================================================
*** gcc/testsuite/g++.dg/ipa/pr79776.C (nonexistent)
--- gcc/testsuite/g++.dg/ipa/pr79776.C (working copy)
***************
*** 0 ****
--- 1,29 ----
+ // PR ipa/71146
+ // { dg-do compile }
+ // { dg-options "-O3 -fipa-pta" }
+
+ typedef enum { X } E;
+ struct A {
+ virtual void bar ();
+ };
+ struct B {
+ virtual E fn (const char *, int, int *) = 0;
+ };
+ struct C : A, B {
+ E fn (const char *, int, int *);
+ void fn2 ();
+ B *foo;
+ };
+ void C::fn2 () {
+ if (!foo)
+ return;
+ foo->fn (0, 0, 0);
+ }
+ E
+ C::fn (const char *, int, int *)
+ {
+ fn2 ();
+ foo = 0;
+ fn (0, 0, 0);
+ return X;
+ }