aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2012-04-24 08:03:43 +0200
committerJakub Jelinek <jakub@gcc.gnu.org>2012-04-24 08:03:43 +0200
commit06edd772e354ab922fa429bfe788a006f53511d8 (patch)
tree5a483344d3cecd7b768043f2c33fb78c230bde89 /gcc
parent234bdd5b07ad021270b1e81e419c9bd7ce679877 (diff)
downloadgcc-06edd772e354ab922fa429bfe788a006f53511d8.zip
gcc-06edd772e354ab922fa429bfe788a006f53511d8.tar.gz
gcc-06edd772e354ab922fa429bfe788a006f53511d8.tar.bz2
re PR target/52999 (ICE, segmentation fault in c_tree_printer)
PR middle-end/52999 * varasm.c (get_section): Don't ICE for section conflicts with built-in section kinds. From-SVN: r186741
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/varasm.c17
2 files changed, 17 insertions, 6 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 1cdac98..f3992e1 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2012-04-24 Jakub Jelinek <jakub@redhat.com>
+
+ PR middle-end/52999
+ * varasm.c (get_section): Don't ICE for section conflicts with
+ built-in section kinds.
+
2012-04-23 DJ Delorie <dj@redhat.com>
* config/s390/s390.h (LINK_SPEC): Remove, no longer needed.
diff --git a/gcc/varasm.c b/gcc/varasm.c
index c3d289e..b7939c5 100644
--- a/gcc/varasm.c
+++ b/gcc/varasm.c
@@ -1,7 +1,7 @@
/* Output variables, constants and external declarations, for GNU compiler.
Copyright (C) 1987, 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997,
1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009,
- 2010, 2011 Free Software Foundation, Inc.
+ 2010, 2011, 2012 Free Software Foundation, Inc.
This file is part of GCC.
@@ -314,11 +314,16 @@ get_section (const char *name, unsigned int flags, tree decl)
if (decl == 0)
decl = sect->named.decl;
gcc_assert (decl);
- error ("%+D causes a section type conflict with %D",
- decl, sect->named.decl);
- if (decl != sect->named.decl)
- inform (DECL_SOURCE_LOCATION (sect->named.decl),
- "%qD was declared here", sect->named.decl);
+ if (sect->named.decl == NULL)
+ error ("%+D causes a section type conflict", decl);
+ else
+ {
+ error ("%+D causes a section type conflict with %D",
+ decl, sect->named.decl);
+ if (decl != sect->named.decl)
+ inform (DECL_SOURCE_LOCATION (sect->named.decl),
+ "%qD was declared here", sect->named.decl);
+ }
/* Make sure we don't error about one section multiple times. */
sect->common.flags |= SECTION_OVERRIDE;
}