diff options
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/cp/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/cp/pt.c | 6 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/gomp/pr95063.C | 24 |
4 files changed, 41 insertions, 0 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 5cf9dda..db80907 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2020-05-12 Jakub Jelinek <jakub@redhat.com> + + PR c++/95063 + * pt.c (tsubst_decl): Deal with DECL_OMP_PRIVATIZED_MEMBER for + a bit-field. + 2020-05-11 Jason Merrill <jason@redhat.com> Resolve C++20 NB comment CA104 diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c index 8486456..7911293 100644 --- a/gcc/cp/pt.c +++ b/gcc/cp/pt.c @@ -14627,6 +14627,12 @@ tsubst_decl (tree t, tree args, tsubst_flags_t complain) } if (nop) ve = build_nop (type, ve); + else if (DECL_LANG_SPECIFIC (t) + && DECL_OMP_PRIVATIZED_MEMBER (t) + && TREE_CODE (ve) == COMPONENT_REF + && TREE_CODE (TREE_OPERAND (ve, 1)) == FIELD_DECL + && DECL_BIT_FIELD_TYPE (TREE_OPERAND (ve, 1)) == type) + type = TREE_TYPE (ve); else gcc_checking_assert (TREE_TYPE (ve) == type); SET_DECL_VALUE_EXPR (r, ve); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index dc7eb31..0c8a73a 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2020-05-12 Jakub Jelinek <jakub@redhat.com> + + PR c++/95063 + * g++.dg/gomp/pr95063.C: New test. + 2020-05-12 Richard Sandiford <richard.sandiford@arm.com> PR tree-optimization/94980 diff --git a/gcc/testsuite/g++.dg/gomp/pr95063.C b/gcc/testsuite/g++.dg/gomp/pr95063.C new file mode 100644 index 0000000..fe5894c --- /dev/null +++ b/gcc/testsuite/g++.dg/gomp/pr95063.C @@ -0,0 +1,24 @@ +// PR c++/95063 + +template <typename T> +struct S { + T a : 12; + S () : a(0) + { +#pragma omp for linear(a) + for (int k = 0; k < 64; ++k) + a++; + } +}; +struct U { + int a : 12; + U () : a(0) + { +#pragma omp for linear(a) + for (int k = 0; k < 64; ++k) + a++; + } +}; + +S<int> s; +U u; |