aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2018-03-09 20:12:29 +0100
committerJakub Jelinek <jakub@gcc.gnu.org>2018-03-09 20:12:29 +0100
commit9d9a9a90ce25d3b2748df78e4ae05e0c74d0b671 (patch)
tree8ba818bf34faf26a1cda12cf3f6226b161225e79 /gcc
parent8286793a2b050a9c51501b0b3737ff73c71d189d (diff)
downloadgcc-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/ChangeLog6
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/g++.dg/ext/vla18.C19
-rw-r--r--gcc/tree-inline.c1
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