re PR tree-optimization/63574 (ICE building libjava (segfault) on arm-linux-gnueabihf)
authorMartin Liska <mliska@suse.cz>
Thu, 30 Oct 2014 10:10:58 +0000 (11:10 +0100)
committerMartin Liska <marxin@gcc.gnu.org>
Thu, 30 Oct 2014 10:10:58 +0000 (10:10 +0000)
PR ipa/63574
PR ipa/63664
* g++.dg/ipa/pr63574.C: New test.
* ipa-icf-gimple.c (func_checker::parse_labels): Missing comment added.
(func_checker::compare_gimple_label): Simlified comparison introduced.
* ipa-icf-gimple.h: Missing comment added.

From-SVN: r216913

gcc/ChangeLog
gcc/ipa-icf-gimple.c
gcc/ipa-icf-gimple.h
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/ipa/pr63574.C [new file with mode: 0644]

index 373b44209bcc98ae879fa59b2ff7cc07aad59d30..d587890fa73998940549d17e96bc596f1ba8eed8 100644 (file)
@@ -1,3 +1,11 @@
+2014-10-30  Martin Liska  <mliska@suse.cz>
+
+       PR ipa/63574
+       PR ipa/63664
+       * ipa-icf-gimple.c (func_checker::parse_labels): Missing comment added.
+       (func_checker::compare_gimple_label): Simlified comparison introduced.
+       * ipa-icf-gimple.h: Missing comment added.
+
 2014-10-30  Jeff Law  <law@redhat.com>
        
        * config/pa/pa-protos.h (pa_output_arg_descriptor): Strengthen
index d3f379557f16528d59a1f33b3314c79bd1797375..ecb96671fb76d164b03ea92c4a9f91f301f8e515 100644 (file)
@@ -527,6 +527,10 @@ func_checker::compare_variable_decl (tree t1, tree t2)
   return return_with_debug (ret);
 }
 
+
+/* Function visits all gimple labels and creates corresponding
+   mapping between basic blocks and labels.  */
+
 void
 func_checker::parse_labels (sem_bb *bb)
 {
@@ -765,7 +769,8 @@ func_checker::compare_gimple_label (gimple g1, gimple g2)
   if (FORCED_LABEL (t1) || FORCED_LABEL (t2))
     return return_false_with_msg ("FORCED_LABEL");
 
-  return compare_tree_ssa_label (t1, t2);
+  /* As the pass build BB to label mapping, no further check is needed.  */
+  return true;
 }
 
 /* Verifies for given GIMPLEs S1 and S2 that
index 8487a2ad745e4b1a3866f53844e87ae1c73cef0b..5811bd132f0b262841e4a3f2e66ef18730e41413 100644 (file)
@@ -145,6 +145,8 @@ public:
   /* Memory release routine.  */
   ~func_checker();
 
+  /* Function visits all gimple labels and creates corresponding
+     mapping between basic blocks and labels.  */
   void parse_labels (sem_bb *bb);
 
   /* Basic block equivalence comparison function that returns true if
index a362f13578263ae4dfda52b9c5138c3db1089ae3..2c290daa8e53f7acc19af41e6d5aab6ca7329bad 100644 (file)
@@ -1,3 +1,9 @@
+2014-10-30  Martin Liska  <mliska@suse.cz>
+
+       PR ipa/63574
+       PR ipa/63664
+       * g++.dg/ipa/pr63574.C: New test.
+
 2014-10-29  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>
 
        * gcc.target/aarch64/madd_after_asm_1.c: New test.
diff --git a/gcc/testsuite/g++.dg/ipa/pr63574.C b/gcc/testsuite/g++.dg/ipa/pr63574.C
new file mode 100644 (file)
index 0000000..59b82d5
--- /dev/null
@@ -0,0 +1,47 @@
+/* { dg-do compile } */
+/* { dg-options "-O3" } */
+
+class test
+{
+public:
+  test (int val, int *p)
+  {
+    int_val = *p;
+    bool_val = (val != int_val);
+  }
+
+  ~test ()
+  {
+    if (!bool_val)
+      return;
+  }
+
+  int get_int_val () const
+  {
+    return int_val;
+  }
+
+private:
+  bool bool_val;
+  int int_val;
+};
+
+static int __attribute__ ((noinline))
+f1 (int i, int *p)
+{
+  test obj (i, p);
+  return obj.get_int_val ();
+}
+
+static int __attribute__ ((noinline))
+f2 (int i, int *p)
+{
+  test obj (i, p);
+  return obj.get_int_val ();
+}
+
+int
+f (int i, int *p)
+{
+  return f1 (i, p) + f2 (i, p);
+}