diff options
author | Richard Biener <rguenther@suse.de> | 2019-06-13 13:03:13 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2019-06-13 13:03:13 +0000 |
commit | 9bc83b61ff2b3353934704befe02c2262c48d2bc (patch) | |
tree | d62d7be7dce897a073877475825ae0e99570be7d /gcc | |
parent | 478cb3ce7efa71bf18f81dab37f562f7504c7e0f (diff) | |
download | gcc-9bc83b61ff2b3353934704befe02c2262c48d2bc.zip gcc-9bc83b61ff2b3353934704befe02c2262c48d2bc.tar.gz gcc-9bc83b61ff2b3353934704befe02c2262c48d2bc.tar.bz2 |
re PR tree-optimization/90856 (ICE: verify_gimple failed (error: incompatible types in 'PHI' argument 1))
2019-06-13 Richard Biener <rguenther@suse.de>
PR tree-optimization/90856
* tree-sra.c (build_ref_for_model): Only use
build_reconstructed_reference when address-spaces are the same.
* gcc.target/i386/pr90856.c: New testcase.
From-SVN: r272244
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/pr90856.c | 14 | ||||
-rw-r--r-- | gcc/tree-sra.c | 2 |
4 files changed, 27 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index b8eba5e..685c06d 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2019-06-13 Richard Biener <rguenther@suse.de> + + PR tree-optimization/90856 + * tree-sra.c (build_ref_for_model): Only use + build_reconstructed_reference when address-spaces are the same. + 2019-06-13 Jakub Jelinek <jakub@redhat.com> * config/nvptx/nvptx.c (nvptx_sese_number, nvptx_sese_pseudo): Don't diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 5dbfc35..b1d8ecc 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2019-06-13 Richard Biener <rguenther@suse.de> + + PR tree-optimization/90856 + * gcc.target/i386/pr90856.c: New testcase. + 2019-06-13 Jakub Jelinek <jakub@redhat.com> * g++.dg/tree-ssa/ssa-dse-1.C: Don't match exact number of chars of diff --git a/gcc/testsuite/gcc.target/i386/pr90856.c b/gcc/testsuite/gcc.target/i386/pr90856.c new file mode 100644 index 0000000..a9a909b --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr90856.c @@ -0,0 +1,14 @@ +/* { dg-do compile } */ +/* { dg-options "-O3" } */ + +typedef struct { int v; } S1; +typedef struct { S1 s1[32]; } S2; + +S1 clearS1() { S1 s; s.v = 1; return s; } + +void +clearS2(__seg_gs S2 *p, int n) +{ + for (int i = 0; i < n; ++i) + p->s1[i] = clearS1(); +} diff --git a/gcc/tree-sra.c b/gcc/tree-sra.c index 074d496..03c1a2a 100644 --- a/gcc/tree-sra.c +++ b/gcc/tree-sra.c @@ -1854,6 +1854,8 @@ build_ref_for_model (location_t loc, tree base, HOST_WIDE_INT offset, tree res; if (model->grp_same_access_path && !TREE_THIS_VOLATILE (base) + && (TYPE_ADDR_SPACE (TREE_TYPE (base)) + == TYPE_ADDR_SPACE (TREE_TYPE (model->expr))) && offset <= model->offset /* build_reconstructed_reference can still fail if we have already massaged BASE because of another type incompatibility. */ |