diff mbox

PR tree-optimization/47276 (glibc build failure due to chained aliases)

Message ID 20110115142445.GE24428@kam.mff.cuni.cz
State New
Headers show

Commit Message

Jan Hubicka Jan. 15, 2011, 2:24 p.m. UTC
Hi,
this patch fixes problem with chained aliases (we was overactive on marking
targets of aliases that are themselves aliases as needed functions).

Bootstrapped/regtested x86_64-linux, will commit it shortly.
Honza
diff mbox

Patch

Index: ChangeLog
===================================================================
--- ChangeLog	(revision 168753)
+++ ChangeLog	(working copy)
@@ -1,3 +1,9 @@ 
+2011-01-13  Jan Hubicka  <jh@suse.cz>
+
+	PR tree-optimization/47276 
+	* ipa.c (function_and_variable_visibility): Do not try to mark alias
+	declarations as needed.
+
 2011-01-13  Michael Meissner  <meissner@linux.vnet.ibm.com>
 
 	PR target/47251
Index: testsuite/ChangeLog
===================================================================
--- testsuite/ChangeLog	(revision 168753)
+++ testsuite/ChangeLog	(working copy)
@@ -1,3 +1,8 @@ 
+2011-01-13  Jan Hubicka  <jh@suse.cz>
+
+	PR tree-optimization/47276 
+	* gcc.dg/pr47276.c: New testcase.
+
 2011-01-13  Tobias Burnus  <burnus@net-b.de>
 	    Mikael Morin  <mikael@gcc.gnu.org>
 
Index: testsuite/gcc.dg/pr47276.c
===================================================================
--- testsuite/gcc.dg/pr47276.c	(revision 0)
+++ testsuite/gcc.dg/pr47276.c	(revision 0)
@@ -0,0 +1,30 @@ 
+/* { dg-do compile } */
+/* { dg-require-alias "" } */
+extern void syslog (int __pri, __const char *__fmt, ...)
+     __attribute__ ((__format__ (__printf__, 2, 3)));
+extern void vsyslog (int __pri, __const char *__fmt, int __ap)
+     __attribute__ ((__format__ (__printf__, 2, 0)));
+void
+__vsyslog(int pri, const char *fmt, int ap)
+{
+}
+void
+__syslog_chk(int pri, int flag, const char *fmt, ...)
+{
+}
+void
+__vsyslog_chk(int pri, int flag, const char *fmt, int ap)
+{
+}
+extern __typeof (__vsyslog_chk) __EI___vsyslog_chk __asm__("" "__vsyslog_chk"); extern __typeof (__vsyslog_chk) __EI___vsyslog_chk __attribute__((alias ("" "__GI___vsyslog_chk")));
+void
+__syslog(int pri, const char *fmt, ...)
+{
+}
+extern __typeof (__syslog) syslog __attribute__ ((alias ("__syslog")));
+extern __typeof (syslog) __EI_syslog __asm__("" "syslog"); extern __typeof (syslog) __EI_syslog __attribute__((alias ("" "__GI_syslog")));
+extern __typeof (__vsyslog) vsyslog __attribute__ ((alias ("__vsyslog")));
+extern __typeof (vsyslog) __EI_vsyslog __asm__("" "vsyslog"); extern __typeof (vsyslog) __EI_vsyslog __attribute__((alias ("" "__GI_vsyslog")));
+extern __typeof (syslog) syslog __asm__ ("" "__GI_syslog") __attribute__ ((visibility ("hidden")));
+extern __typeof (vsyslog) vsyslog __asm__ ("" "__GI_vsyslog") __attribute__ ((visibility ("hidden")));
+extern __typeof (__vsyslog_chk) __vsyslog_chk __asm__ ("" "__GI___vsyslog_chk") __attribute__ ((visibility ("hidden")));
Index: ipa.c
===================================================================
--- ipa.c	(revision 168753)
+++ ipa.c	(working copy)
@@ -847,6 +847,8 @@  function_and_variable_visibility (bool w
       if ((node = cgraph_node_for_asm (p->target)) != NULL
 	  && !DECL_EXTERNAL (node->decl))
         {
+	  if (!node->analyzed)
+	    continue;
 	  /* Weakrefs alias symbols from other compilation unit.  In the case
 	     the destination of weakref became available because of LTO, we must
 	     mark it as needed.  */