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

Reply via email to