]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR target/61599 ([x86_64] With -mcmodel=medium, extern global arrays without size...
authorSriraman Tallam <tmsriram@google.com>
Wed, 9 Jul 2014 00:50:25 +0000 (00:50 +0000)
committerSriraman Tallam <tmsriram@gcc.gnu.org>
Wed, 9 Jul 2014 00:50:25 +0000 (00:50 +0000)
2014-07-08  Sriraman Tallam  <tmsriram@google.com>

PR target/61599
* config/i386/i386.c (ix86_in_large_data_p): Check for size less
than zero.

PR target/61599
* gcc.target/i386/pr61599-1.c: New test.
* gcc.target/i386/pr61599-2.c: New test.

From-SVN: r212380

gcc/ChangeLog
gcc/config/i386/i386.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.target/i386/pr61599-1.c [new file with mode: 0644]
gcc/testsuite/gcc.target/i386/pr61599-2.c [new file with mode: 0644]

index 19506531bd6ac6166163bac24b71d4a787259ecb..783bd63e27fc04189a11085d5176655f2f494d45 100644 (file)
@@ -1,3 +1,9 @@
+2014-07-08  Sriraman Tallam  <tmsriram@google.com>
+
+       PR target/61599
+       * config/i386/i386.c (ix86_in_large_data_p): Check for size less
+       than zero.
+
 2014-07-08  Jakub Jelinek  <jakub@redhat.com>
 
        PR rtl-optimization/61673
index d29a25b13cbd8b5632d7dea0c3809087f2598aa5..a280b46ebca435b9b33247033ab7f1f8b8e78064 100644 (file)
@@ -5039,8 +5039,11 @@ ix86_in_large_data_p (tree exp)
       HOST_WIDE_INT size = int_size_in_bytes (TREE_TYPE (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)
+        in data because it might be too big when completed.  Also,
+        int_size_in_bytes returns -1 if size can vary or is larger than
+        an integer in which case also it is safer to assume that it goes in
+        large data.  */
+      if (size <= 0 || size > ix86_section_threshold)
        return true;
     }
 
index 83015edd995a28bc6cfcdaca0071146dccbfac63..98342bbbb2812fbae554c93dd23b94804d1cb5a1 100644 (file)
@@ -1,3 +1,9 @@
+2014-07-08  Sriraman Tallam  <tmsriram@google.com>
+
+       PR target/61599
+       * gcc.target/i386/pr61599-1.c: New test.
+       * gcc.target/i386/pr61599-2.c: New test.
+
 2014-07-08  Jakub Jelinek  <jakub@redhat.com>
 
        PR rtl-optimization/61673
diff --git a/gcc/testsuite/gcc.target/i386/pr61599-1.c b/gcc/testsuite/gcc.target/i386/pr61599-1.c
new file mode 100644 (file)
index 0000000..847e736
--- /dev/null
@@ -0,0 +1,14 @@
+/* PR target/61599 */
+/* { dg-options "-mcmodel=medium -fdata-sections" { target lp64 } } */
+/* { dg-additional-sources pr61599-2.c } */
+/* { dg-do run { target lp64 } } */
+
+char a[1*1024*1024*1024];
+char b[1*1024*1024*1024];
+char c[1*1024*1024*1024];
+
+extern int bar();
+int main()
+{
+  return bar() + c[225];
+}
diff --git a/gcc/testsuite/gcc.target/i386/pr61599-2.c b/gcc/testsuite/gcc.target/i386/pr61599-2.c
new file mode 100644 (file)
index 0000000..22a53a4
--- /dev/null
@@ -0,0 +1,13 @@
+/* PR target/61599 */
+/* With -mcmodel=medium, all the arrays will be treated as large data.  */
+/* { dg-options "-mcmodel=medium -fdata-sections" { target lp64 } } */
+/* { dg-do compile { target lp64 } } */
+
+extern char a[];
+extern char b[];
+extern char c[];
+
+int bar()
+{
+  return a[2] + b[16] + c[256];
+}