[PATCH] Fix PR79776

Richard Biener rguenther@suse.de
Mon Mar 27 10:56:00 GMT 2017


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;
+ }



More information about the Gcc-patches mailing list