re PR target/61599 ([x86_64] With -mcmodel=medium, extern global arrays without size are not treated conservatively.)
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
This commit is contained in:
parent
fcb090b2cc
commit
dc58164b85
@ -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
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
@ -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
|
||||
|
14
gcc/testsuite/gcc.target/i386/pr61599-1.c
Normal file
14
gcc/testsuite/gcc.target/i386/pr61599-1.c
Normal file
@ -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];
|
||||
}
|
13
gcc/testsuite/gcc.target/i386/pr61599-2.c
Normal file
13
gcc/testsuite/gcc.target/i386/pr61599-2.c
Normal file
@ -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];
|
||||
}
|
Loading…
Reference in New Issue
Block a user