diff options
author | Martin Liska <mliska@suse.cz> | 2017-03-09 11:10:02 +0100 |
---|---|---|
committer | Martin Liska <marxin@gcc.gnu.org> | 2017-03-09 10:10:02 +0000 |
commit | 8a7df0316d5332199127912ef048cccdc8d86bac (patch) | |
tree | 396f65b0b5c74091627a2048196c183cca6d90bc /gcc | |
parent | 3828bb0d7ed18e03d0794c0a38a51d155421559c (diff) | |
download | gcc-8a7df0316d5332199127912ef048cccdc8d86bac.zip gcc-8a7df0316d5332199127912ef048cccdc8d86bac.tar.gz gcc-8a7df0316d5332199127912ef048cccdc8d86bac.tar.bz2 |
Fix ICE in tree-chkp-opt.c (PR tree-optimization/79631).
2017-03-09 Martin Liska <mliska@suse.cz>
PR tree-optimization/79631
* tree-chkp-opt.c (chkp_is_constant_addr): Call
tree_int_cst_sign_bit just for INTEGER constants.
2017-03-09 Martin Liska <mliska@suse.cz>
PR tree-optimization/79631
* gcc.target/i386/mpx/pr79631.c: New test.
From-SVN: r245998
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/i386/mpx/pr79631.c | 15 | ||||
-rw-r--r-- | gcc/tree-chkp-opt.c | 4 |
4 files changed, 29 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 33670ab..c3718e3 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,11 @@ 2017-03-09 Martin Liska <mliska@suse.cz> + PR tree-optimization/79631 + * tree-chkp-opt.c (chkp_is_constant_addr): Call + tree_int_cst_sign_bit just for INTEGER constants. + +2017-03-09 Martin Liska <mliska@suse.cz> + PR target/65705 PR target/69804 * toplev.c (process_options): Disable -fcheck-pointer-bounds with diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index e31735b..f576273 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,10 @@ 2017-03-09 Martin Liska <mliska@suse.cz> + PR tree-optimization/79631 + * gcc.target/i386/mpx/pr79631.c: New test. + +2017-03-09 Martin Liska <mliska@suse.cz> + PR target/65705 PR target/69804 * gcc.target/i386/pr71458.c: Update scanned pattern. diff --git a/gcc/testsuite/gcc.target/i386/mpx/pr79631.c b/gcc/testsuite/gcc.target/i386/mpx/pr79631.c new file mode 100644 index 0000000..075d46b --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/mpx/pr79631.c @@ -0,0 +1,15 @@ +/* { dg-do compile { target { ! x32 } } } */ +/* { dg-options "-fcheck-pointer-bounds -mmpx -O2" } */ + +typedef struct { int _mp_size; } mpz_t[1]; +int a, b; +void fn1() +{ + mpz_t c[1][b]; + for (;;) { + int d = 0 >= 0 ? 0 == 0 ? c[0][0]->_mp_size ? -1 : 0 : 0 : 0, + e = 0 >= 0 ? 0 == 0 ? c[1][1]->_mp_size ? -1 : 0 : 0 : 0; + if (d != e) + a++; + } +} diff --git a/gcc/tree-chkp-opt.c b/gcc/tree-chkp-opt.c index ebe0545..ab98edb 100644 --- a/gcc/tree-chkp-opt.c +++ b/gcc/tree-chkp-opt.c @@ -239,9 +239,11 @@ chkp_is_constant_addr (const address_t &addr, int *sign) return false; else if (addr.pol[0].var) return false; + else if (TREE_CODE (addr.pol[0].cst) != INTEGER_CST) + return false; else if (integer_zerop (addr.pol[0].cst)) *sign = 0; - else if (tree_int_cst_sign_bit (addr.pol[0].cst)) + else if (tree_int_cst_sign_bit (addr.pol[0].cst)) *sign = -1; else *sign = 1; |