This is the mail archive of the mailing list for the GCC project.

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[Bug target/24188] [4.1 Regression] WRITE(6,*) causes an ICE with -mcmodel=medium

------- Comment #6 from hubicka at ucw dot cz  2005-11-03 20:52 -------
Subject: Re:  [4.1 Regression] WRITE(6,*) causes an ICE with -mcmodel=medium

OK, I think what is going on.
For some reason the code deciding whether data should be small or big
considers everything zero sized as unfinished potentially big.  Not
quite sure why.  This makes it to exceptionally consider zero sized
string constants small and to actually avoid named_section from

I am not quite certain by both chunks, but it is best I can think of

   WRITE(6,*) ''
2005-11-03  Jan Hubicka  <>
        PR target/24188
        * i386.c (x86_64_elf_select_section): Handle STRING_CST without crash.
        (ix86_in_large_data_p): Zero sized STRING_CSTs are complette.
Index: gcc/config/i386/i386.c
--- gcc/config/i386/i386.c      (revision 106422)
+++ gcc/config/i386/i386.c      (working copy)
@@ -1741,6 +1741,10 @@ x86_64_elf_select_section (tree decl, in
       if (sname)
+         /* We might get called with string constants, but named_section
+            don't like them as they are not DECLs.  */
+         if (!DECL_P (decl))
+           decl = NULL;
           named_section (decl, sname, reloc);
@@ -17996,7 +18000,9 @@ ix86_in_large_data_p (tree exp)

       /* If this is an incomplete type with size 0, then we can't put it
         in data because it might be too big when completed.  */
-      if (!size || size > ix86_section_threshold)
+      if ((!size && TREE_CODE (exp) != STRING_CST)
+         || size < 0
+         || size > ix86_section_threshold)
        return true;


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]