From: Jakub Jelinek Date: Tue, 8 Jun 2021 09:16:41 +0000 (+0200) Subject: openmp: Fix ICE on depend(source) clause during cdtor cloning [PR100957] X-Git-Tag: basepoints/gcc-13~7029 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=8b4641033ab6901c18f68b98843f1038a9a52e03;p=thirdparty%2Fgcc.git 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. --- 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 000000000000..1fd63570f4a2 --- /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 4250fd86487f..9eb08d23320d 100644 --- a/gcc/tree-inline.c +++ b/gcc/tree-inline.c @@ -1458,7 +1458,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) {