re PR c++/81130 (ICE OpenMP shared clause in gimplify_var_or_parm_decl, at gimplify.c:2584)

PR c++/81130
	* gimplify.c (omp_add_variable): Don't force GOVD_SEEN for types
	with ctors/dtors if GOVD_SHARED is set.

	* testsuite/libgomp.c++/pr81130.C: New test.

From-SVN: r249482
This commit is contained in:
Jakub Jelinek 2017-06-22 00:19:38 +02:00 committed by Jakub Jelinek
parent 67d4a7232c
commit 8887fa1078
4 changed files with 55 additions and 3 deletions

View File

@ -1,5 +1,9 @@
2017-06-21 Jakub Jelinek <jakub@redhat.com>
PR c++/81130
* gimplify.c (omp_add_variable): Don't force GOVD_SEEN for types
with ctors/dtors if GOVD_SHARED is set.
Backported from mainline
2017-06-20 Jakub Jelinek <jakub@redhat.com>

View File

@ -6608,9 +6608,11 @@ omp_add_variable (struct gimplify_omp_ctx *ctx, tree decl, unsigned int flags)
return;
/* Never elide decls whose type has TREE_ADDRESSABLE set. This means
there are constructors involved somewhere. */
if (TREE_ADDRESSABLE (TREE_TYPE (decl))
|| TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (decl)))
there are constructors involved somewhere. Exception is a shared clause,
there is nothing privatized in that case. */
if ((flags & GOVD_SHARED) == 0
&& (TREE_ADDRESSABLE (TREE_TYPE (decl))
|| TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (decl))))
flags |= GOVD_SEEN;
n = splay_tree_lookup (ctx->variables, (splay_tree_key)decl);

View File

@ -1,3 +1,8 @@
2017-06-21 Jakub Jelinek <jakub@redhat.com>
PR c++/81130
* testsuite/libgomp.c++/pr81130.C: New test.
2017-06-02 Jakub Jelinek <jakub@redhat.com>
Backported from mainline

View File

@ -0,0 +1,41 @@
// PR c++/81130
// { dg-do run }
struct A
{
A ();
~A ();
int a;
};
A::A ()
{
a = 0;
}
A::~A ()
{
}
struct B
{
A b;
int c;
B () : c (1)
{
#pragma omp parallel shared (b, c) num_threads (2)
#pragma omp master
{
b.a++;
c += 2;
}
}
};
int
main ()
{
B v;
if (v.b.a != 1 || v.c != 3)
__builtin_abort ();
}