aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/g++.dg/ipa/pr79776.C29
-rw-r--r--gcc/tree-ssa-structalias.c4
4 files changed, 43 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index f2f40b8..2997a00 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2017-03-27 Richard Biener <rguenther@suse.de>
+
+ PR ipa/79776
+ * tree-ssa-structalias.c (associate_varinfo_to_alias): Skip
+ inlined thunk clones.
+
2017-03-27 Jakub Jelinek <jakub@redhat.com>
PR sanitizer/80168
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 3a8e22e..169a2ca 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2017-03-27 Richard Biener <rguenther@suse.de>
+
+ PR ipa/79776
+ * g++.dg/ipa/pr79776.C: New testcase.
+
2017-03-27 Jakub Jelinek <jakub@redhat.com>
PR sanitizer/80168
diff --git a/gcc/testsuite/g++.dg/ipa/pr79776.C b/gcc/testsuite/g++.dg/ipa/pr79776.C
new file mode 100644
index 0000000..2d53ed3
--- /dev/null
+++ b/gcc/testsuite/g++.dg/ipa/pr79776.C
@@ -0,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;
+}
diff --git a/gcc/tree-ssa-structalias.c b/gcc/tree-ssa-structalias.c
index c043e5e..aab6821 100644
--- a/gcc/tree-ssa-structalias.c
+++ b/gcc/tree-ssa-structalias.c
@@ -7615,7 +7615,9 @@ struct pt_solution ipa_escaped_pt
static bool
associate_varinfo_to_alias (struct cgraph_node *node, void *data)
{
- if ((node->alias || node->thunk.thunk_p)
+ if ((node->alias
+ || (node->thunk.thunk_p
+ && ! node->global.inlined_to))
&& node->analyzed)
insert_vi_for_tree (node->decl, (varinfo_t)data);
return false;