diff options
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 3 | ||||
-rw-r--r-- | gcc/testsuite/gcc.c-torture/compile/pr94621.c | 16 | ||||
-rw-r--r-- | gcc/tree-inline.c | 5 |
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))); |