From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 2153) id 4E94E385DC1D; Fri, 17 Apr 2020 07:24:37 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 4E94E385DC1D DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1587108277; bh=DYiWTBthmW/g3eHngHrx/10vI/lnQ/pcndWUsB0ao38=; h=From:To:Subject:Date:From; b=uVcoURQ4pb9SnXiNfDaG7vKSpLIXiKrzz08jdiOYVcKMoS2iAsuYX3LPniRGvvnLJ e5vl4uH99iTjVXjzLUiJKduTbcmk1bxyHuCgc8ExBs6H4N0+RopJKpA9y2DSWIW2l4 DCjIc4AbBzbz3e+rVHbhkyLkD4D03owY0vFnerGA= Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: Jakub Jelinek To: gcc-cvs@gcc.gnu.org Subject: [gcc r10-7768] inliner: Don't ICE on NULL TYPE_DOMAIN [PR94621] X-Act-Checkin: gcc X-Git-Author: Jakub Jelinek X-Git-Refname: refs/heads/master X-Git-Oldrev: e9f799d25973fc38022c5ea71ed5a2bca58a847f X-Git-Newrev: c58cb6ac6891886b7aa01c440ac71a5e7cbcba97 Message-Id: <20200417072437.4E94E385DC1D@sourceware.org> Date: Fri, 17 Apr 2020 07:24:37 +0000 (GMT) X-BeenThere: gcc-cvs@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-cvs mailing list List-Unsubscribe: , List-Archive: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 17 Apr 2020 07:24:37 -0000 https://gcc.gnu.org/g:c58cb6ac6891886b7aa01c440ac71a5e7cbcba97 commit r10-7768-gc58cb6ac6891886b7aa01c440ac71a5e7cbcba97 Author: Jakub Jelinek Date: Fri Apr 17 09:07:49 2020 +0200 inliner: Don't ICE on NULL TYPE_DOMAIN [PR94621] When I've added the VLA tweak for OpenMP to avoid error_mark_nodes in the IL in type, I forgot that TYPE_DOMAIN could be NULL. Furthermore, as an optimization, this patch checks the hopefully cheapest condition that is very likely false most of the time (enabled only during OpenMP handling) first. 2020-04-17 Jakub Jelinek 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. * gcc.c-torture/compile/pr94621.c: New test. Diff: --- gcc/ChangeLog | 6 ++++++ gcc/testsuite/ChangeLog | 3 +++ gcc/testsuite/gcc.c-torture/compile/pr94621.c | 16 ++++++++++++++++ gcc/tree-inline.c | 5 +++-- 4 files changed, 28 insertions(+), 2 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 80a37618d75..80b0534ba51 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2020-04-17 Jakub Jelinek + + 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 Jonathan Yong <10walls@gmail.com> diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 1341eb2745a..64181e4e532 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,8 @@ 2020-04-17 Jakub Jelinek + 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 00000000000..0d98dfd53a5 --- /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 f095795f06f..26c23f504be 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)));