diff options
author | Jakub Jelinek <jakub@redhat.com> | 2015-04-07 16:34:06 +0200 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2015-04-07 16:34:06 +0200 |
commit | dcc72b9e73852d9e3b5f40c6dc51da12c444d699 (patch) | |
tree | f42a807458e5c2d2ddd09d1038d0bf44d207f68c /gcc | |
parent | 440f9408ea950a29ef7606b6114d84d1a5b53c90 (diff) | |
download | gcc-dcc72b9e73852d9e3b5f40c6dc51da12c444d699.zip gcc-dcc72b9e73852d9e3b5f40c6dc51da12c444d699.tar.gz gcc-dcc72b9e73852d9e3b5f40c6dc51da12c444d699.tar.bz2 |
re PR middle-end/65680 (ICE at -O1 and above on x86_64-linux-gnu in expand_assignment, at expr.c:4830)
PR middle-end/65680
* expr.c (get_inner_reference): Handle bit_offset that doesn't fit
into signed HOST_WIDE_INT the same as negative bit_offset.
* gcc.c-torture/compile/pr65680.c: New test.
From-SVN: r221899
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/expr.c | 2 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.c-torture/compile/pr65680.c | 20 |
4 files changed, 32 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 7b977dd..dcb7e99 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2015-04-07 Jakub Jelinek <jakub@redhat.com> + + PR middle-end/65680 + * expr.c (get_inner_reference): Handle bit_offset that doesn't fit + into signed HOST_WIDE_INT the same as negative bit_offset. + 2015-04-07 Ilya Enkovich <ilya.enkovich@intel.com> * ipa-comdats.c (ipa_comdats): Visit all thunks @@ -6941,7 +6941,7 @@ get_inner_reference (tree exp, HOST_WIDE_INT *pbitsize, if (offset) { /* Avoid returning a negative bitpos as this may wreak havoc later. */ - if (wi::neg_p (bit_offset)) + if (wi::neg_p (bit_offset) || !wi::fits_shwi_p (bit_offset)) { offset_int mask = wi::mask <offset_int> (LOG2_BITS_PER_UNIT, false); offset_int tem = bit_offset.and_not (mask); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 34d1253..933da2c 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2015-04-07 Jakub Jelinek <jakub@redhat.com> + + PR middle-end/65680 + * gcc.c-torture/compile/pr65680.c: New test. + 2015-04-07 Andre Vehreschild <vehre@gmx.de> PR fortran/65548 diff --git a/gcc/testsuite/gcc.c-torture/compile/pr65680.c b/gcc/testsuite/gcc.c-torture/compile/pr65680.c new file mode 100644 index 0000000..02f08ce --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/pr65680.c @@ -0,0 +1,20 @@ +/* PR middle-end/65680 */ +/* { dg-do compile { target lp64 } } */ + +struct S +{ + int f : 1; +} a[100000000000000001][3]; + +void +foo (void) +{ + struct S b = { 0 }; + a[100000000000000000][0] = b; +} + +void +bar (void) +{ + a[100000000000000000][0].f = 1; +} |