]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
backport: [multiple changes]
authorMatthias Klose <doko@ubuntu.com>
Wed, 4 Feb 2015 23:36:22 +0000 (23:36 +0000)
committerMatthias Klose <doko@gcc.gnu.org>
Wed, 4 Feb 2015 23:36:22 +0000 (23:36 +0000)
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.

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.

From-SVN: r220426

gcc/ChangeLog
gcc/ipa.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/ipa/pr64068.C [new file with mode: 0644]
gcc/testsuite/gcc.dg/ipa/PR64559.c [new file with mode: 0644]

index db84437bb64fd875ef17731d18739854cbbc9a8d..fb2957568f55c8b55a2d51797d02f439421c9d05 100644 (file)
@@ -1,3 +1,14 @@
+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.
+
 2015-02-04  Uros Bizjak  <ubizjak@gmail.com>
 
        Backport from mainline
index c6f5da7edb0eb54a51608aebb417a329747030c7..fe4d0fbf1601e24d94d30095876d6d00cb3451d8 100644 (file)
--- a/gcc/ipa.c
+++ b/gcc/ipa.c
@@ -374,7 +374,6 @@ symtab_remove_unreachable_nodes (bool before_inlining_p, FILE *file)
                       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 a5b2b2a43c4acdf18897578ab3f293f5fa9d4fbe..1c6a7803dc3230663a7b4a7ba27427bb8ba863e7 100644 (file)
@@ -1,3 +1,11 @@
+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.
+
 2015-02-04  Uros Bizjak  <ubizjak@gmail.com>
 
        Backport from mainline
diff --git a/gcc/testsuite/g++.dg/ipa/pr64068.C b/gcc/testsuite/g++.dg/ipa/pr64068.C
new file mode 100644 (file)
index 0000000..9528883
--- /dev/null
@@ -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(); }
diff --git a/gcc/testsuite/gcc.dg/ipa/PR64559.c b/gcc/testsuite/gcc.dg/ipa/PR64559.c
new file mode 100644 (file)
index 0000000..463afdc
--- /dev/null
@@ -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;
+}