This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
PR tree-optimization/47276 (glibc build failure due to chained aliases)
- From: Jan Hubicka <hubicka at ucw dot cz>
- To: gcc-patches at gcc dot gnu dot org
- Date: Sat, 15 Jan 2011 15:24:45 +0100
- Subject: PR tree-optimization/47276 (glibc build failure due to chained aliases)
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
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. */