diff options
author | Jakub Jelinek <jakub@redhat.com> | 2019-06-21 08:46:45 +0200 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2019-06-21 08:46:45 +0200 |
commit | e73fb06d5a1386fe0a18285d52bcc7865a13a84c (patch) | |
tree | eed3d392ed4410bccece3a2a65b705805b6026db | |
parent | 080c269b61251983df2115b783f749216969d8c8 (diff) | |
download | gcc-e73fb06d5a1386fe0a18285d52bcc7865a13a84c.zip gcc-e73fb06d5a1386fe0a18285d52bcc7865a13a84c.tar.gz gcc-e73fb06d5a1386fe0a18285d52bcc7865a13a84c.tar.bz2 |
re PR c++/90950 (OpenMP clause handling rejecting references to incomplete types in templates)
PR c++/90950
* semantics.c (finish_omp_clauses): Don't reject references to
incomplete types if processing_template_decl.
* g++.dg/gomp/lastprivate-1.C: New test.
From-SVN: r272543
-rw-r--r-- | gcc/cp/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/cp/semantics.c | 3 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 3 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/gomp/lastprivate-1.C | 16 |
4 files changed, 27 insertions, 1 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 5b65926..c958318 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2019-06-21 Jakub Jelinek <jakub@redhat.com> + + PR c++/90950 + * semantics.c (finish_omp_clauses): Don't reject references to + incomplete types if processing_template_decl. + 2019-06-19 Marek Polacek <polacek@redhat.com> PR c++/60364 - noreturn after first decl not diagnosed. diff --git a/gcc/cp/semantics.c b/gcc/cp/semantics.c index 6cf3af7..92c4875 100644 --- a/gcc/cp/semantics.c +++ b/gcc/cp/semantics.c @@ -7831,7 +7831,8 @@ finish_omp_clauses (tree clauses, enum c_omp_region_type ort) t = require_complete_type (t); if (t == error_mark_node) remove = true; - else if (TYPE_REF_P (TREE_TYPE (t)) + else if (!processing_template_decl + && TYPE_REF_P (TREE_TYPE (t)) && !complete_type_or_else (TREE_TYPE (TREE_TYPE (t)), t)) remove = true; } diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 221fb69..ab8cc800 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,8 @@ 2019-06-21 Jakub Jelinek <jakub@redhat.com> + PR c++/90950 + * g++.dg/gomp/lastprivate-1.C: New test. + * gcc.dg/vect/vect-simd-11.c: New test. * gcc.target/i386/sse2-vect-simd-11.c: New test. * gcc.target/i386/avx2-vect-simd-11.c: New test. diff --git a/gcc/testsuite/g++.dg/gomp/lastprivate-1.C b/gcc/testsuite/g++.dg/gomp/lastprivate-1.C new file mode 100644 index 0000000..ce25e1a --- /dev/null +++ b/gcc/testsuite/g++.dg/gomp/lastprivate-1.C @@ -0,0 +1,16 @@ +// PR c++/90950 +// { dg-do compile } + +template <typename T> +T +foo (void) +{ + T y = 0; + T &x = y; + #pragma omp parallel for lastprivate (x) + for (int i = 0; i < 8; ++i) + x = i; + return x; +} + +int a = foo<int> (); |