diff mbox

Fix PR64068 and PR64559

Message ID 54D2AFF7.7060003@ubuntu.com
State New
Headers show

Commit Message

Matthias Klose Feb. 4, 2015, 11:49 p.m. UTC
On 02/05/2015 12:38 AM, Jakub Jelinek wrote:
> On Thu, Feb 05, 2015 at 12:33:18AM +0100, Matthias Klose wrote:
>> On 01/15/2015 06:23 PM, Martin Liška wrote:
>>> Hello.
>>>
>>> This is Honsa's patch that I've just tested on x86_64-linux-pc. The patch is
>>> preapproved by Honza
>>> and is going to be installed.
>>
>> backporting the fix for PR63970 introduced PR64938.  Backporting this patch as
>> well fixes the ICE reported in PR64938.  Honza approved the backport on IRC.
> 
> How can an aarch64 patch fix an arm PR64938 issue?

sorry, attached the wrong file.
diff mbox

Patch


gcc/
2015-02-04  Matthias Klose  <doko@ubuntu.com>

	PR target/64938
	Backport from mainline
	2015-01-15  Jan Hubicka  <hubicka@ucw.cz>

	PR ipa/64068
	PR ipa/64559
	* ipa.c (symbol_table::remove_unreachable_nodes):
	Do not put abstract origins into boundary.

gcc/testsuite/
2015-02-04  Matthias Klose  <doko@ubuntu.com>

	Backport from mainline
	2015-01-15  Martin Liska  <mliska@suse.cz>

	* g++.dg/ipa/pr64068.C: New test.
	* gcc.dg/ipa/PR64559.c: New test.

Index: gcc/ipa.c
===================================================================
--- a/src/gcc/ipa.c	(revision 220417)
+++ a/src/gcc/ipa.c	(working copy)
@@ -374,7 +374,6 @@ 
 		       n = n->next_sibling_clone)
 		    if (n->decl == DECL_ABSTRACT_ORIGIN (node->decl))
 		      n->used_as_abstract_origin = true;
-	          enqueue_node (origin_node, &first, reachable);
 		}
 	    }
 	  /* If any symbol in a comdat group is reachable, force
Index: gcc/testsuite/g++.dg/ipa/pr64068.C
===================================================================
--- a/src/gcc/testsuite/g++.dg/ipa/pr64068.C	(revision 0)
+++ a/src/gcc/testsuite/g++.dg/ipa/pr64068.C	(working copy)
@@ -0,0 +1,49 @@ 
+/* { dg-do compile } */
+/* { dg-options "-O2" } */
+
+typedef int PROV_ENUMALGS_EX, PCCRYPT_OID_INFO;
+class A {
+  int m_fn2();
+  virtual bool m_fn1(PCCRYPT_OID_INFO);
+};
+int fn1();
+void fn2();
+int A::m_fn2() { m_fn1(0); }
+
+bool fn3() {
+  for (;;) {
+    if (fn1()) {
+      if (fn1() != 259)
+        fn2();
+      break;
+    }
+    return 1;
+  }
+  return 0;
+}
+
+class B {
+public:
+  B() { fn3(); }
+};
+class C : A {
+  bool m_fn1(PCCRYPT_OID_INFO) { m_fn3(); }
+  int isSupportedByProvider_algId;
+  PROV_ENUMALGS_EX isSupportedByProvider_outEnumAlgs;
+  PROV_ENUMALGS_EX isSupportedByProvider_enumAlgs;
+  bool m_fn3() {
+    while (1) {
+      if (fn1()) {
+        if (fn1() != 259)
+          fn2();
+        break;
+      }
+      if (isSupportedByProvider_algId)
+        isSupportedByProvider_outEnumAlgs = isSupportedByProvider_enumAlgs;
+      return 1;
+    }
+    return 0;
+  }
+};
+
+void fn4() { B(); }
Index: gcc/testsuite/gcc.dg/ipa/PR64559.c
===================================================================
--- a/src/gcc/testsuite/gcc.dg/ipa/PR64559.c	(revision 0)
+++ a/src/gcc/testsuite/gcc.dg/ipa/PR64559.c	(working copy)
@@ -0,0 +1,39 @@ 
+/* { dg-do compile } */
+/* { dg-options "-Os"  } */
+
+int a, b, c, d;
+
+struct S
+{
+  int f0;
+};
+
+static int
+fn1 (int p)
+{
+  return p == 0 || a;
+}
+
+static int
+fn2 ()
+{
+  d = fn1 (c);
+  return 0;
+}
+
+static int
+fn3 (struct S p)
+{
+  p.f0 || fn2 ();
+  if (fn1 (1))
+    b = 0;
+  return 0;
+}
+
+int
+main ()
+{
+  struct S e = { 1 };
+  fn3 (e);
+  return 0;
+}