diff options
author | Jakub Jelinek <jakub@redhat.com> | 2018-03-09 20:12:29 +0100 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2018-03-09 20:12:29 +0100 |
commit | 9d9a9a90ce25d3b2748df78e4ae05e0c74d0b671 (patch) | |
tree | 8ba818bf34faf26a1cda12cf3f6226b161225e79 /gcc | |
parent | 8286793a2b050a9c51501b0b3737ff73c71d189d (diff) | |
download | gcc-9d9a9a90ce25d3b2748df78e4ae05e0c74d0b671.zip gcc-9d9a9a90ce25d3b2748df78e4ae05e0c74d0b671.tar.gz gcc-9d9a9a90ce25d3b2748df78e4ae05e0c74d0b671.tar.bz2 |
re PR c++/84767 (ICE with pointer to VLA)
PR c++/84767
* tree-inline.c (copy_tree_body_r): For INDIRECT_REF of a remapped
decl, use remap_type if we want to use the type.
* g++.dg/ext/vla18.C: New test.
From-SVN: r258395
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/ext/vla18.C | 19 | ||||
-rw-r--r-- | gcc/tree-inline.c | 1 |
4 files changed, 31 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 346262e..7d7ece8 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2018-03-09 Jakub Jelinek <jakub@redhat.com> + + PR c++/84767 + * tree-inline.c (copy_tree_body_r): For INDIRECT_REF of a remapped + decl, use remap_type if we want to use the type. + 2018-03-09 Martin Sebor <msebor@redhat.com> PR tree-optimization/84526 diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index ecd0fb8..3b3f44f 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2018-03-09 Jakub Jelinek <jakub@redhat.com> + + PR c++/84767 + * g++.dg/ext/vla18.C: New test. + 2018-03-09 Martin Sebor <msebor@redhat.com> PR tree-optimization/84526 diff --git a/gcc/testsuite/g++.dg/ext/vla18.C b/gcc/testsuite/g++.dg/ext/vla18.C new file mode 100644 index 0000000..31a1bb3 --- /dev/null +++ b/gcc/testsuite/g++.dg/ext/vla18.C @@ -0,0 +1,19 @@ +// PR c++/84767 +// { dg-do compile } +// { dg-options "" } + +int v[1][10]; + +struct A +{ + A (int); +}; + +A::A (int i) +{ + typedef int T[1][i]; + T *x = (T *) v; + (*x)[0][0] = 0; +} + +A a = 10; diff --git a/gcc/tree-inline.c b/gcc/tree-inline.c index 811829e..5a0a252 100644 --- a/gcc/tree-inline.c +++ b/gcc/tree-inline.c @@ -1192,6 +1192,7 @@ copy_tree_body_r (tree *tp, int *walk_subtrees, void *data) *tp = gimple_fold_indirect_ref (ptr); if (! *tp) { + type = remap_type (type, id); if (TREE_CODE (ptr) == ADDR_EXPR) { *tp |