re PR ipa/64146 (ipa-icf breaks gold dynamic_test_2 test)
authorMartin Liska <mliska@suse.cz>
Thu, 18 Dec 2014 12:02:22 +0000 (13:02 +0100)
committerMartin Liska <marxin@gcc.gnu.org>
Thu, 18 Dec 2014 12:02:22 +0000 (12:02 +0000)
Fix for PR ipa/64146

PR ipa/64146
* ipa-icf.c (sem_function::merge): Check for
decl_binds_to_current_def_p is newly added to merge operation.
* g++.dg/ipa/pr64146.C: New test.

From-SVN: r218860

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

index 3757021fff54da052faaf5feca56c0f2257436aa..24a252ac68fe7fb597ca18ad7a210bf198432276 100644 (file)
@@ -1,3 +1,9 @@
+2014-12-18  Martin Liska  <mliska@suse.cz>
+
+       PR ipa/64146
+       * ipa-icf.c (sem_function::merge): Check for
+       decl_binds_to_current_def_p is newly added to merge operation.
+
 2014-12-18  Bin Cheng  <bin.cheng@arm.com>
 
        PR tree-optimization/62178
index b1932008f655f72aa81b54d0cb82fb86a4e81970..91878b2d3fce738aac550f81ffddf1eb604928e8 100644 (file)
@@ -101,6 +101,7 @@ along with GCC; see the file COPYING3.  If not see
 #include <list>
 #include "ipa-icf-gimple.h"
 #include "ipa-icf.h"
+#include "varasm.h"
 
 using namespace ipa_icf_gimple;
 
@@ -624,6 +625,13 @@ sem_function::merge (sem_item *alias_item)
        return false;
       }
 
+  if (!decl_binds_to_current_def_p (alias->decl))
+    {
+      if (dump_file)
+       fprintf (dump_file, "Declaration does not bind to currect definition.\n\n");
+      return false;
+    }
+
   if (redirect_callers)
     {
       /* If alias is non-overwritable then
index aa7e8c7409d03dae444bafcdd21f6bf1d43d0aea..025dfcead10ea6ba602f136ba0d558d5c08cb3b1 100644 (file)
@@ -1,3 +1,7 @@
+2014-12-18  Martin Liska  <mliska@suse.cz>
+
+       * g++.dg/ipa/pr64146.C: New test.
+
 2014-12-18  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
 
        * lib/mpx-dg.exp (check_effective_target_mpx): Change into link test.
diff --git a/gcc/testsuite/g++.dg/ipa/pr64146.C b/gcc/testsuite/g++.dg/ipa/pr64146.C
new file mode 100644 (file)
index 0000000..8a2b947
--- /dev/null
@@ -0,0 +1,38 @@
+/* { dg-do compile } */
+/* { dg-require-alias "" } */
+/* { dg-options "-fpic -fdump-ipa-icf-details -fipa-icf"  } */
+
+extern "C" const char*
+foo()
+{
+  return "original";
+}
+
+const char*
+test_foo()
+{
+  return foo();
+}
+
+extern "C" const char*
+bar()
+{
+  return "original";
+}
+
+const char*
+test_bar()
+{
+  return bar();
+}
+
+int main (int argc, char **argv)
+{
+  test_foo ();
+  test_bar ();
+
+  return 0;
+}
+
+/* { dg-final { scan-ipa-dump-times "Declaration does not bind to currect definition." 2 "icf"  } } */
+/* { dg-final { scan-ipa-dump "Equal symbols: 2" "icf"  } } */