aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJan Hubicka <jh@suse.cz>2011-01-15 16:44:56 +0100
committerJan Hubicka <hubicka@gcc.gnu.org>2011-01-15 15:44:56 +0000
commitbe46831f5a914a19bce02cb73a5c31bbba95d1b0 (patch)
treef0d2df8b9a10af944cde23619b915e72b462a63c
parent620437f2d4773ab2b42f4edebbd949577788ca86 (diff)
downloadgcc-be46831f5a914a19bce02cb73a5c31bbba95d1b0.zip
gcc-be46831f5a914a19bce02cb73a5c31bbba95d1b0.tar.gz
gcc-be46831f5a914a19bce02cb73a5c31bbba95d1b0.tar.bz2
re PR tree-optimization/47276 (ICE in function_and_variable_visibility, at ipa.c:857 during compiling glibc.)
PR tree-optimization/47276 * ipa.c (function_and_variable_visibility): Do not try to mark alias declarations as needed. * gcc.dg/pr47276.c: New testcase. From-SVN: r168844
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/ipa.c2
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.dg/pr47276.c30
4 files changed, 43 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index f9e9b35..610507b 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -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-15 Martin Jambor <mjambor@suse.cz>
* common.opt (fdevirtualize): New flag.
diff --git a/gcc/ipa.c b/gcc/ipa.c
index fa39f92..0320ded 100644
--- a/gcc/ipa.c
+++ b/gcc/ipa.c
@@ -847,6 +847,8 @@ function_and_variable_visibility (bool whole_program)
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. */
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index b30e532..d95034f 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2011-01-13 Jan Hubicka <jh@suse.cz>
+
+ PR tree-optimization/47276
+ * gcc.dg/pr47276.c: New testcase.
+
2011-01-15 Giovanni Funchal <gafunchal@gmail.com>
Jonathan Wakely <jwakely.gcc@gmail.com>
diff --git a/gcc/testsuite/gcc.dg/pr47276.c b/gcc/testsuite/gcc.dg/pr47276.c
new file mode 100644
index 0000000..ae1e81a
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pr47276.c
@@ -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")));