diff options
author | Jakub Jelinek <jakub@redhat.com> | 2017-06-08 20:55:04 +0200 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2017-06-08 20:55:04 +0200 |
commit | 34361776fb238310222e0b24d4f0b51a3717a785 (patch) | |
tree | 837548135068a58003acb2d0c4cd27c1be33b945 /gcc | |
parent | 0d05f68547fb7478f3a210a6240d3a05465daad9 (diff) | |
download | gcc-34361776fb238310222e0b24d4f0b51a3717a785.zip gcc-34361776fb238310222e0b24d4f0b51a3717a785.tar.gz gcc-34361776fb238310222e0b24d4f0b51a3717a785.tar.bz2 |
re PR c++/81011 (ICE with #pragma omp task and inaccessible copy-constructor)
PR c++/81011
* cp-gimplify.c (cxx_omp_finish_clause): When changing clause
to OMP_CLAUSE_SHARED, also clear OMP_CLAUSE_SHARED_FIRSTPRIVATE
and OMP_CLAUSE_SHARED_READONLY flags.
* g++.dg/gomp/pr81011.C: New test.
From-SVN: r249031
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/cp/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/cp/cp-gimplify.c | 6 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 3 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/gomp/pr81011.C | 19 |
4 files changed, 34 insertions, 1 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 14f33c7..bb0466d 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,10 @@ +2017-06-08 Jakub Jelinek <jakub@redhat.com> + + PR c++/81011 + * cp-gimplify.c (cxx_omp_finish_clause): When changing clause + to OMP_CLAUSE_SHARED, also clear OMP_CLAUSE_SHARED_FIRSTPRIVATE + and OMP_CLAUSE_SHARED_READONLY flags. + 2017-06-08 Jan Hubicka <hubicka@ucw.cz> * cp-tree.h (lang_check_failed): Annotate by ATTRIBUTE_COLD. diff --git a/gcc/cp/cp-gimplify.c b/gcc/cp/cp-gimplify.c index 898a5ae..106d722 100644 --- a/gcc/cp/cp-gimplify.c +++ b/gcc/cp/cp-gimplify.c @@ -1912,7 +1912,11 @@ cxx_omp_finish_clause (tree c, gimple_seq *) make_shared = true; if (make_shared) - OMP_CLAUSE_CODE (c) = OMP_CLAUSE_SHARED; + { + OMP_CLAUSE_CODE (c) = OMP_CLAUSE_SHARED; + OMP_CLAUSE_SHARED_FIRSTPRIVATE (c) = 0; + OMP_CLAUSE_SHARED_READONLY (c) = 0; + } } /* Return true if DECL's DECL_VALUE_EXPR (if any) should be diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 60d3e93..956f400 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,8 @@ 2017-06-08 Jakub Jelinek <jakub@redhat.com> + PR c++/81011 + * g++.dg/gomp/pr81011.C: New test. + PR middle-end/81005 * c-c++-common/ubsan/align-10.c: New test. * c-c++-common/ubsan/null-13.c: New test. diff --git a/gcc/testsuite/g++.dg/gomp/pr81011.C b/gcc/testsuite/g++.dg/gomp/pr81011.C new file mode 100644 index 0000000..4abd609 --- /dev/null +++ b/gcc/testsuite/g++.dg/gomp/pr81011.C @@ -0,0 +1,19 @@ +// PR c++/81011 +// { dg-do compile } + +class A { A (const A&); }; // { dg-message "declared private here" } +void foo (const A&); + +void +bar (A& a) +{ +#pragma omp task // { dg-error "is private within this context" } + foo (a); +} + +void +baz (A& a) +{ +#pragma omp task firstprivate (a) // { dg-error "is private within this context" } + foo (a); +} |