This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
[PATCH] Fix ICE during diagnosing of section conflict (PR middle-end/52999)
- From: Jakub Jelinek <jakub at redhat dot com>
- To: gcc-patches at gcc dot gnu dot org
- Date: Tue, 24 Apr 2012 00:57:49 +0200
- Subject: [PATCH] Fix ICE during diagnosing of section conflict (PR middle-end/52999)
- Reply-to: Jakub Jelinek <jakub at redhat dot com>
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 <jakub@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