[OG12] openmp: Fix handling of target constructs in static member
Commit Message
Hello,
This patch intends to backport e90af965e5c by Jakub Jelinek to
devel/omp/gcc-12.
The original patch was described here:
https://gcc.gnu.org/pipermail/gcc-patches/2022-September/601189.html
Thanks,
Comments
On 13/09/2022 12:03, Paul-Antoine Arras wrote:
> Hello,
>
> This patch intends to backport e90af965e5c by Jakub Jelinek to
> devel/omp/gcc-12.
> The original patch was described here:
> https://gcc.gnu.org/pipermail/gcc-patches/2022-September/601189.html
I've merged and committed it for you.
Andrew
@@ -1,3 +1,13 @@
+2022-09-09 Paul-Antoine Arras <pa@codesourcery.com>
+
+ Backport from mainline:
+ 2022-09-07 Jakub Jelinek <jakub@redhat.com>
+
+ PR c++/106829
+ * semantics.cc (finish_omp_target_clauses): If current_function_decl
+ isn't a nonstatic member function, don't set data.current_object to
+ non-NULL.
+
2022-09-07 Tobias Burnus <tobias@codesourcery.com>
Backport from mainline:
@@ -9727,16 +9727,15 @@ finish_omp_target_clauses (location_t loc, tree body, tree *clauses_ptr)
{
omp_target_walk_data data;
data.this_expr_accessed = false;
+ data.current_object = NULL_TREE;
- tree ct = current_nonlambda_class_type ();
- if (ct)
- {
- tree object = maybe_dummy_object (ct, NULL);
- object = maybe_resolve_dummy (object, true);
- data.current_object = object;
- }
- else
- data.current_object = NULL_TREE;
+ if (DECL_NONSTATIC_MEMBER_P (current_function_decl) && current_class_ptr)
+ if (tree ct = current_nonlambda_class_type ())
+ {
+ tree object = maybe_dummy_object (ct, NULL);
+ object = maybe_resolve_dummy (object, true);
+ data.current_object = object;
+ }
if (DECL_LAMBDA_FUNCTION_P (current_function_decl))
{
@@ -1,3 +1,11 @@
+2022-09-09 Paul-Antoine Arras <pa@codesourcery.com>
+
+ Backport from mainline:
+ 2022-09-07 Jakub Jelinek <jakub@redhat.com>
+
+ PR c++/106829
+ * g++.dg/gomp/pr106829.C: New test.
+
2022-09-07 Tobias Burnus <tobias@codesourcery.com>
Backport from mainline:
new file mode 100644
@@ -0,0 +1,15 @@
+// PR c++/106829
+
+namespace std
+{
+ template <typename> class complex;
+ template <> struct complex<double> { complex (double); _Complex double d; };
+}
+struct S { void static foo (); };
+
+void
+S::foo ()
+{
+#pragma omp target
+ std::complex<double> c = 0.0;
+}