From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 1534) id 79D833844051; Tue, 8 Jun 2021 09:45:31 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 79D833844051 Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: Tobias Burnus To: gcc-cvs@gcc.gnu.org Subject: [gcc/devel/omp/gcc-11] openmp: Fix ICE on depend(source) clause during cdtor cloning [PR100957] X-Act-Checkin: gcc X-Git-Author: Jakub Jelinek X-Git-Refname: refs/heads/devel/omp/gcc-11 X-Git-Oldrev: 1bd8a1779943014375f60af568e241e211f4952b X-Git-Newrev: 5df2d7e94451182b6e6497198039701fa9028c8c Message-Id: <20210608094531.79D833844051@sourceware.org> Date: Tue, 8 Jun 2021 09:45:31 +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: Tue, 08 Jun 2021 09:45:31 -0000 https://gcc.gnu.org/g:5df2d7e94451182b6e6497198039701fa9028c8c commit 5df2d7e94451182b6e6497198039701fa9028c8c Author: Jakub Jelinek Date: Tue Jun 8 11:45:02 2021 +0200 openmp: Fix ICE on depend(source) clause during cdtor cloning [PR100957] The depend(source) clause has NULL OMP_CLAUSE_DECL, it has just the depend kind specified and no arguments. So copy_tree_body_r shouldn't check TREE_CODE on it without checking it is non-NULL. 2021-06-08 Jakub Jelinek PR c++/100957 * tree-inline.c (copy_tree_body_r): For OMP_CLAUSE_DEPEND don't check TREE_CODE if OMP_CLAUSE_DECL is NULL. * g++.dg/gomp/doacross-2.C: New test. (cherry picked from commit 8b4641033ab6901c18f68b98843f1038a9a52e03) Diff: --- gcc/ChangeLog.omp | 9 +++++++++ gcc/testsuite/ChangeLog.omp | 8 ++++++++ gcc/testsuite/g++.dg/gomp/doacross-2.C | 16 ++++++++++++++++ gcc/tree-inline.c | 3 ++- 4 files changed, 35 insertions(+), 1 deletion(-) diff --git a/gcc/ChangeLog.omp b/gcc/ChangeLog.omp index 25717436651..8bedf3033e9 100644 --- a/gcc/ChangeLog.omp +++ b/gcc/ChangeLog.omp @@ -1,3 +1,12 @@ +2021-06-08 Tobias Burnus + + Backported from master: + 2021-06-08 Jakub Jelinek + + PR c++/100957 + * tree-inline.c (copy_tree_body_r): For OMP_CLAUSE_DEPEND don't + check TREE_CODE if OMP_CLAUSE_DECL is NULL. + 2021-06-04 Tobias Burnus Backported from master: diff --git a/gcc/testsuite/ChangeLog.omp b/gcc/testsuite/ChangeLog.omp index 5221047c0c9..a0f0bcd94df 100644 --- a/gcc/testsuite/ChangeLog.omp +++ b/gcc/testsuite/ChangeLog.omp @@ -1,3 +1,11 @@ +2021-06-08 Tobias Burnus + + Backported from master: + 2021-06-08 Jakub Jelinek + + PR c++/100957 + * g++.dg/gomp/doacross-2.C: New test. + 2021-06-08 Tobias Burnus Backported from master: diff --git a/gcc/testsuite/g++.dg/gomp/doacross-2.C b/gcc/testsuite/g++.dg/gomp/doacross-2.C new file mode 100644 index 00000000000..1fd63570f4a --- /dev/null +++ b/gcc/testsuite/g++.dg/gomp/doacross-2.C @@ -0,0 +1,16 @@ +// PR c++/100957 +// { dg-do compile } + +struct S { + S () + { + #pragma omp for ordered(2) + for (int i = 0; i < 32; ++i) + for (int j = 0; j < 32; ++j) + { + #pragma omp ordered depend(source) + ; + #pragma omp ordered depend(sink: i - 1, j - 1) + } + } +}; diff --git a/gcc/tree-inline.c b/gcc/tree-inline.c index 78dc64886c4..0f607808801 100644 --- a/gcc/tree-inline.c +++ b/gcc/tree-inline.c @@ -1482,7 +1482,8 @@ copy_tree_body_r (tree *tp, int *walk_subtrees, void *data) || OMP_CLAUSE_CODE (*tp) == OMP_CLAUSE_DEPEND)) { tree t = OMP_CLAUSE_DECL (*tp); - if (TREE_CODE (t) == TREE_LIST + if (t + && TREE_CODE (t) == TREE_LIST && TREE_PURPOSE (t) && TREE_CODE (TREE_PURPOSE (t)) == TREE_VEC) {