From: Jakub Jelinek Date: Wed, 29 Jan 2020 08:41:42 +0000 (+0100) Subject: openmp: c++: Consider typeinfo decls to be predetermined shared [PR91118] X-Git-Tag: releases/gcc-9.3.0~145 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=4b124e3c9c35121969cc23d0aea4bcb2c406fd21;p=thirdparty%2Fgcc.git 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 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. --- diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 64ca338029ba..31dee033f6ea 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,12 @@ +2020-02-13 Jakub Jelinek + + Backported from mainline + 2020-01-29 Jakub Jelinek + + PR c++/91118 + * cp-gimplify.c (cxx_omp_predetermined_sharing): Return + OMP_CLAUSE_DEFAULT_SHARED for typeinfo decls. + 2020-01-28 Jason Merrill PR c++/90546 diff --git a/gcc/cp/cp-gimplify.c b/gcc/cp/cp-gimplify.c index a7121b70a3b3..90a315003d49 100644 --- a/gcc/cp/cp-gimplify.c +++ b/gcc/cp/cp-gimplify.c @@ -2107,6 +2107,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; } diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index b5165efbc350..62df3f97f49e 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -3,6 +3,10 @@ Backported from mainline 2020-01-29 Jakub Jelinek + 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. diff --git a/gcc/testsuite/g++.dg/gomp/pr91118-1.C b/gcc/testsuite/g++.dg/gomp/pr91118-1.C new file mode 100644 index 000000000000..f29d69db0847 --- /dev/null +++ b/gcc/testsuite/g++.dg/gomp/pr91118-1.C @@ -0,0 +1,12 @@ +// PR c++/91118 +// { dg-do compile } +// { dg-additional-options "-fsanitize=undefined" } + +#include + +void +foo () +{ +#pragma omp parallel default(none) shared(std::cerr) + std::cerr << "hello" << std::endl; +} diff --git a/gcc/testsuite/g++.dg/gomp/pr91118-2.C b/gcc/testsuite/g++.dg/gomp/pr91118-2.C new file mode 100644 index 000000000000..80f1e3e45c42 --- /dev/null +++ b/gcc/testsuite/g++.dg/gomp/pr91118-2.C @@ -0,0 +1,14 @@ +// PR c++/91118 +// { dg-do compile } + +#include + +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)); +}