From: Jakub Jelinek Date: Fri, 30 Aug 2019 12:46:52 +0000 (+0200) Subject: backport: re PR c++/90950 (OpenMP clause handling rejecting references to incomplete... X-Git-Tag: releases/gcc-7.5.0~203 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=630bb153d6a64d274087f4a60c848da3ce54df86;p=thirdparty%2Fgcc.git backport: re PR c++/90950 (OpenMP clause handling rejecting references to incomplete types in templates) Backported from mainline 2019-06-21 Jakub Jelinek 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: r275160 --- diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index bd1e464c107d..4f55803a5dc3 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,6 +1,12 @@ 2019-08-30 Jakub Jelinek Backported from mainline + 2019-06-21 Jakub Jelinek + + PR c++/90950 + * semantics.c (finish_omp_clauses): Don't reject references to + incomplete types if processing_template_decl. + 2019-05-10 Jakub Jelinek PR pch/90326 diff --git a/gcc/cp/semantics.c b/gcc/cp/semantics.c index 6ed0495c33bd..694aef52fa09 100644 --- a/gcc/cp/semantics.c +++ b/gcc/cp/semantics.c @@ -7369,7 +7369,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 (TREE_CODE (TREE_TYPE (t)) == REFERENCE_TYPE + else if (!processing_template_decl + && TREE_CODE (TREE_TYPE (t)) == REFERENCE_TYPE && !complete_type_or_else (TREE_TYPE (TREE_TYPE (t)), t)) remove = true; } diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index dcb3634ead05..5ec7de87a3ec 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,6 +1,11 @@ 2019-08-30 Jakub Jelinek Backported from mainline + 2019-06-21 Jakub Jelinek + + PR c++/90950 + * g++.dg/gomp/lastprivate-1.C: New test. + 2019-06-12 Jakub Jelinek PR c/90760 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 000000000000..ce25e1a6b900 --- /dev/null +++ b/gcc/testsuite/g++.dg/gomp/lastprivate-1.C @@ -0,0 +1,16 @@ +// PR c++/90950 +// { dg-do compile } + +template +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 ();