Hi.

The patch fixed PR mentioned in subject of this email. We should not call the 
transformation
on targets that do not support aliases.

Patch can bootstrap on ppc64le-redhat-linux and survives regression tests.
Apart from that, can you Yuri please take a look at failing test-case on 
ppc64le: 

FAIL: gcc.dg/pr56727-2.c scan-assembler @(PLT|plt)

in: https://gcc.gnu.org/ml/gcc-testresults/2017-07/msg02164.html

Ready to be installed?
Martin
>From 046931ec490d20a6c003094367f7f0bfae64647f Mon Sep 17 00:00:00 2001
From: marxin <mli...@suse.cz>
Date: Mon, 24 Jul 2017 11:21:18 +0200
Subject: [PATCH] Fix wrong condition in ipa-visibility.c (PR ipa/81520).

gcc/ChangeLog:

2017-07-24  Martin Liska  <mli...@suse.cz>

	PR ipa/81520
	* ipa-visibility.c (function_and_variable_visibility): Make the redirection
	just on target that do supporting aliasing.  Fix GNU coding style.

gcc/testsuite/ChangeLog:

2017-07-24  Martin Liska  <mli...@suse.cz>

	PR ipa/81520
	* gcc.dg/ipa/pr81520.c: New test.
---
 gcc/ipa-visibility.c               | 11 +++++++----
 gcc/testsuite/gcc.dg/ipa/pr81520.c | 11 +++++++++++
 2 files changed, 18 insertions(+), 4 deletions(-)
 create mode 100644 gcc/testsuite/gcc.dg/ipa/pr81520.c

diff --git a/gcc/ipa-visibility.c b/gcc/ipa-visibility.c
index 21321703dbb..13cf2a3a1cf 100644
--- a/gcc/ipa-visibility.c
+++ b/gcc/ipa-visibility.c
@@ -615,9 +615,10 @@ function_and_variable_visibility (bool whole_program)
   struct cgraph_node *node;
   varpool_node *vnode;
 
-  /* All aliases should be procssed at this point.  */
+  /* All aliases should be processed at this point.  */
   gcc_checking_assert (!alias_pairs || !alias_pairs->length ());
 
+#ifdef ASM_OUTPUT_DEF
   FOR_EACH_DEFINED_FUNCTION (node)
     {
       if (node->get_availability () != AVAIL_INTERPOSABLE
@@ -634,20 +635,22 @@ function_and_variable_visibility (bool whole_program)
 	    continue;
 
 	  if (!alias)
-	    { 
+	    {
 	      alias = dyn_cast<cgraph_node *> (node->noninterposable_alias ());
 	      gcc_assert (alias && alias != node);
 	    }
 
 	  e->redirect_callee (alias);
 	  if (gimple_has_body_p (e->caller->decl))
-	    { 
+	    {
 	      push_cfun (DECL_STRUCT_FUNCTION (e->caller->decl));
 	      e->redirect_call_stmt_to_callee ();
-	      pop_cfun (); 
+	      pop_cfun ();
 	    }
 	}
     }
+#endif
+
   FOR_EACH_FUNCTION (node)
     {
       int flags = flags_from_decl_or_type (node->decl);
diff --git a/gcc/testsuite/gcc.dg/ipa/pr81520.c b/gcc/testsuite/gcc.dg/ipa/pr81520.c
new file mode 100644
index 00000000000..b5d33d2dc96
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/ipa/pr81520.c
@@ -0,0 +1,11 @@
+/* PR ipa/81520 */
+/* { dg-do compile } */
+/* { dg-options "-O2 -fPIC" } */
+/* { dg-require-effective-target fpic } */
+
+char
+a (int b)
+{
+  a (b);
+  return 0;
+}
-- 
2.13.3

Reply via email to