Hi! If a user decl conflicts with a use of a section without a decl (usually rtx constant), then we can ICE in get_section. This patch fixes it, to print the error that has been printed in older gcc versions. Bootstrapped/regtested on x86_64-linux and i686-linux, ok for trunk/4.7?
2012-04-23 Jakub Jelinek <ja...@redhat.com> PR middle-end/52999 * varasm.c (get_section): Don't ICE for section conflicts with built-in section kinds. --- gcc/varasm.c.jj 2012-04-23 11:11:21.000000000 +0200 +++ gcc/varasm.c 2012-04-23 11:38:11.990408562 +0200 @@ -314,11 +314,16 @@ get_section (const char *name, unsigned 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; } Jakub