openmp: c++: Consider typeinfo decls to be predetermined shared [PR91118]
If the typeinfo decls appear in OpenMP default(none) regions, as we no longer predetermine const with no mutable members, they are diagnosed as errors, but it isn't something the users can actually provide explicit sharing for in the clauses. 2020-01-29 Jakub Jelinek <jakub@redhat.com> PR c++/91118 * cp-gimplify.c (cxx_omp_predetermined_sharing): Return OMP_CLAUSE_DEFAULT_SHARED for typeinfo decls. * g++.dg/gomp/pr91118-1.C: New test. * g++.dg/gomp/pr91118-2.C: New test.
This commit is contained in:
parent
aa1b56967d
commit
8d7c0bf876
5 changed files with 40 additions and 0 deletions
|
@ -1,3 +1,9 @@
|
|||
2020-01-29 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR c++/91118
|
||||
* cp-gimplify.c (cxx_omp_predetermined_sharing): Return
|
||||
OMP_CLAUSE_DEFAULT_SHARED for typeinfo decls.
|
||||
|
||||
2020-01-28 Jason Merrill <jason@redhat.com>
|
||||
|
||||
PR c++/93442
|
||||
|
|
|
@ -2187,6 +2187,10 @@ cxx_omp_predetermined_sharing (tree decl)
|
|||
&& DECL_OMP_PRIVATIZED_MEMBER (decl)))
|
||||
return OMP_CLAUSE_DEFAULT_SHARED;
|
||||
|
||||
/* Similarly for typeinfo symbols. */
|
||||
if (VAR_P (decl) && DECL_ARTIFICIAL (decl) && DECL_TINFO_P (decl))
|
||||
return OMP_CLAUSE_DEFAULT_SHARED;
|
||||
|
||||
return OMP_CLAUSE_DEFAULT_UNSPECIFIED;
|
||||
}
|
||||
|
||||
|
|
|
@ -1,5 +1,9 @@
|
|||
2020-01-29 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR c++/91118
|
||||
* g++.dg/gomp/pr91118-1.C: New test.
|
||||
* g++.dg/gomp/pr91118-2.C: New test.
|
||||
|
||||
PR fortran/93463
|
||||
* gfortran.dg/goacc/pr93463.f90: New test.
|
||||
|
||||
|
|
12
gcc/testsuite/g++.dg/gomp/pr91118-1.C
Normal file
12
gcc/testsuite/g++.dg/gomp/pr91118-1.C
Normal file
|
@ -0,0 +1,12 @@
|
|||
// PR c++/91118
|
||||
// { dg-do compile }
|
||||
// { dg-additional-options "-fsanitize=undefined" }
|
||||
|
||||
#include <iostream>
|
||||
|
||||
void
|
||||
foo ()
|
||||
{
|
||||
#pragma omp parallel default(none) shared(std::cerr)
|
||||
std::cerr << "hello" << std::endl;
|
||||
}
|
14
gcc/testsuite/g++.dg/gomp/pr91118-2.C
Normal file
14
gcc/testsuite/g++.dg/gomp/pr91118-2.C
Normal file
|
@ -0,0 +1,14 @@
|
|||
// PR c++/91118
|
||||
// { dg-do compile }
|
||||
|
||||
#include <typeinfo>
|
||||
|
||||
struct S { virtual ~S (); };
|
||||
void bar (const std::type_info &, const std::type_info &);
|
||||
|
||||
void
|
||||
foo (S *p)
|
||||
{
|
||||
#pragma omp parallel default (none) firstprivate (p)
|
||||
bar (typeid (*p), typeid (S));
|
||||
}
|
Loading…
Add table
Reference in a new issue