diff options
author | Jakub Jelinek <jakub@redhat.com> | 2020-05-12 10:00:32 +0200 |
---|---|---|
committer | Jakub Jelinek <jakub@redhat.com> | 2020-05-12 10:05:27 +0200 |
commit | 99b0c9ec47d563d1f780cb678c04d37c9835440f (patch) | |
tree | b7b9cd82ea49c3c7dea130f968b12ed5cf84991f /gcc | |
parent | 4c0283b9ad75b128b79c507d78d678123fe9f471 (diff) | |
download | gcc-99b0c9ec47d563d1f780cb678c04d37c9835440f.zip gcc-99b0c9ec47d563d1f780cb678c04d37c9835440f.tar.gz gcc-99b0c9ec47d563d1f780cb678c04d37c9835440f.tar.bz2 |
openmp: Fix up handling of DECL_OMP_PRIVATIZED_MEMBER for bit-fields [PR95063]
The r11-15 change broke this testcase, as it now asserts type is equal to
the type of the DECL_VALUE_EXPR, but for DECL_OMP_PRIVATIZED_MEMBER artificial
vars mapping to bitfields it wasn't. Fixed by changing the
DECL_OMP_PRIVATIZED_MEMBER var type in that case.
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.
* g++.dg/gomp/pr95063.C: New test.
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; |