aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/testsuite/ChangeLog3
-rw-r--r--gcc/testsuite/gcc.c-torture/compile/pr94621.c16
-rw-r--r--gcc/tree-inline.c5
4 files changed, 28 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 80a3761..80b0534 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2020-04-17 Jakub Jelinek <jakub@redhat.com>
+
+ PR tree-optimization/94621
+ * tree-inline.c (remap_type_1): Don't dereference NULL TYPE_DOMAIN.
+ Move id->adjust_array_error_bounds check first in the condition.
+
2020-04-17 Martin Liska <mliska@suse.cz>
Jonathan Yong <10walls@gmail.com>
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 1341eb2..64181e4 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,5 +1,8 @@
2020-04-17 Jakub Jelinek <jakub@redhat.com>
+ PR tree-optimization/94621
+ * gcc.c-torture/compile/pr94621.c: New test.
+
PR c++/94314
* g++.dg/pr94314-4.C: Require c++14 rather than c++11.
diff --git a/gcc/testsuite/gcc.c-torture/compile/pr94621.c b/gcc/testsuite/gcc.c-torture/compile/pr94621.c
new file mode 100644
index 0000000..0d98dfd
--- /dev/null
+++ b/gcc/testsuite/gcc.c-torture/compile/pr94621.c
@@ -0,0 +1,16 @@
+/* PR tree-optimization/94621 */
+
+struct S { int c, e[]; };
+
+static inline int
+foo (struct S *m, int r, int c)
+{
+ int (*a)[][m->c] = (int (*)[][m->c])&m->e;
+ return (*a)[r][c];
+}
+
+void
+bar (struct S *a)
+{
+ foo (a, 0, 0);
+}
diff --git a/gcc/tree-inline.c b/gcc/tree-inline.c
index f095795..26c23f5 100644
--- a/gcc/tree-inline.c
+++ b/gcc/tree-inline.c
@@ -556,8 +556,9 @@ remap_type_1 (tree type, copy_body_data *id)
/* For array bounds where we have decided not to copy over the bounds
variable which isn't used in OpenMP/OpenACC region, change them to
an uninitialized VAR_DECL temporary. */
- if (TYPE_MAX_VALUE (TYPE_DOMAIN (new_tree)) == error_mark_node
- && id->adjust_array_error_bounds
+ if (id->adjust_array_error_bounds
+ && TYPE_DOMAIN (new_tree)
+ && TYPE_MAX_VALUE (TYPE_DOMAIN (new_tree)) == error_mark_node
&& TYPE_MAX_VALUE (TYPE_DOMAIN (type)) != error_mark_node)
{
tree v = create_tmp_var (TREE_TYPE (TYPE_DOMAIN (new_tree)));