aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2005-12-14 12:00:50 +0100
committerJakub Jelinek <jakub@gcc.gnu.org>2005-12-14 12:00:50 +0100
commit3b10d286080e96f54509e7be39d5791da2527e01 (patch)
tree30fc47663bc7fc1421fbecedb0b2c6d00716536e /gcc
parent025509856a4457d15401a5d69962f451b23281c3 (diff)
downloadgcc-3b10d286080e96f54509e7be39d5791da2527e01.zip
gcc-3b10d286080e96f54509e7be39d5791da2527e01.tar.gz
gcc-3b10d286080e96f54509e7be39d5791da2527e01.tar.bz2
re PR target/25254 (ICE with -mcmodel=medium -mlarge-data-threshold=1)
PR target/25254 PR target/24188 * config/i386/i386.c (x86_64_elf_select_section): If DECL is not DECL_P, call get_section rather than get_named_section. Supply section flags to it. * gcc.target/i386/pr25254.c: New test. * gfortran.dg/PR24188.f: New test. From-SVN: r108506
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog8
-rw-r--r--gcc/config/i386/i386.c12
-rw-r--r--gcc/testsuite/ChangeLog7
-rw-r--r--gcc/testsuite/gcc.target/i386/pr25254.c11
-rw-r--r--gcc/testsuite/gfortran.dg/PR24188.f7
5 files changed, 44 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 417d69f..a58022f 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,11 @@
+2005-12-14 Jakub Jelinek <jakub@redhat.com>
+
+ PR target/25254
+ PR target/24188
+ * config/i386/i386.c (x86_64_elf_select_section): If DECL is not
+ DECL_P, call get_section rather than get_named_section. Supply
+ section flags to it.
+
2005-12-14 Ben Elliston <bje@au.ibm.com>
* c-common.c (c_common_truthvalue_conversion): Generalise warning
diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c
index 079ead8..33b9c6f 100644
--- a/gcc/config/i386/i386.c
+++ b/gcc/config/i386/i386.c
@@ -1703,6 +1703,7 @@ x86_64_elf_select_section (tree decl, int reloc,
&& ix86_in_large_data_p (decl))
{
const char *sname = NULL;
+ unsigned int flags = SECTION_WRITE;
switch (categorize_decl_for_section (decl, reloc, flag_pic))
{
case SECCAT_DATA:
@@ -1722,12 +1723,14 @@ x86_64_elf_select_section (tree decl, int reloc,
break;
case SECCAT_BSS:
sname = ".lbss";
+ flags |= SECTION_BSS;
break;
case SECCAT_RODATA:
case SECCAT_RODATA_MERGE_STR:
case SECCAT_RODATA_MERGE_STR_INIT:
case SECCAT_RODATA_MERGE_CONST:
sname = ".lrodata";
+ flags = 0;
break;
case SECCAT_SRODATA:
case SECCAT_SDATA:
@@ -1741,7 +1744,14 @@ x86_64_elf_select_section (tree decl, int reloc,
break;
}
if (sname)
- return get_named_section (decl, sname, reloc);
+ {
+ /* We might get called with string constants, but get_named_section
+ doesn't like them as they are not DECLs. Also, we need to set
+ flags in that case. */
+ if (!DECL_P (decl))
+ return get_section (sname, flags, NULL);
+ return get_named_section (decl, sname, reloc);
+ }
}
return default_elf_select_section (decl, reloc, align);
}
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 6d53230..1045181 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,10 @@
+2005-12-14 Jakub Jelinek <jakub@redhat.com>
+
+ PR target/25254
+ PR target/24188
+ * gcc.target/i386/pr25254.c: New test.
+ * gfortran.dg/PR24188.f: New test.
+
2005-12-14 David Billinghurst (David.Billinghurst@riotinto.com)
* lib/fortran-torture.exp: Catch remaining uses of
diff --git a/gcc/testsuite/gcc.target/i386/pr25254.c b/gcc/testsuite/gcc.target/i386/pr25254.c
new file mode 100644
index 0000000..b1eff6e
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/pr25254.c
@@ -0,0 +1,11 @@
+/* PR target/25254 */
+/* { dg-do compile { target lp64 } } */
+/* { dg-options "-mcmodel=medium -mlarge-data-threshold=1" } */
+
+const struct { int i; int j; } c = { 2, 6 };
+
+const char *
+foo (void)
+{
+ return "OK";
+}
diff --git a/gcc/testsuite/gfortran.dg/PR24188.f b/gcc/testsuite/gfortran.dg/PR24188.f
new file mode 100644
index 0000000..a33141f
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/PR24188.f
@@ -0,0 +1,7 @@
+C PR target/24188
+C { dg-do compile }
+C { dg-options "-O2" }
+C { dg-options "-O2 -mcmodel=medium" { target { x86_64-*-* && lp64 } } }
+C { dg-options "-O2 -mcmodel=medium" { target { i?86-*-* && lp64 } } }
+ WRITE(6,*) ''
+ END