From: Jakub Jelinek Date: Mon, 25 Jun 2018 16:52:31 +0000 (+0200) Subject: backport: re PR fortran/81841 (THREADPRIVATE (OpenMP) wrongly rejected in BLOCK DATA) X-Git-Tag: releases/gcc-6.5.0~248 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=0778300044e7934b06843daea034e57a0294fbab;p=thirdparty%2Fgcc.git backport: re PR fortran/81841 (THREADPRIVATE (OpenMP) wrongly rejected in BLOCK DATA) Backported from mainline 2017-11-23 Dirk Broemmel Jakub Jelinek PR fortran/81841 * parse.c (parse_spec): Allow ST_OMP_THREADPRIVATE inside of BLOCK DATA. * libgomp.fortran/pr81841.f90: New test. From-SVN: r262035 --- diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index e7f9e53211e8..de557c79a13e 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,13 @@ +2018-06-25 Jakub Jelinek + + Backported from mainline + 2017-11-23 Dirk Broemmel + Jakub Jelinek + + PR fortran/81841 + * parse.c (parse_spec): Allow ST_OMP_THREADPRIVATE inside of + BLOCK DATA. + 2018-06-09 Steven G. Kargl PR fortran/85138 diff --git a/gcc/fortran/parse.c b/gcc/fortran/parse.c index 3afdf4df5e5e..2cfe5fae1953 100644 --- a/gcc/fortran/parse.c +++ b/gcc/fortran/parse.c @@ -3568,6 +3568,7 @@ loop: case ST_EQUIVALENCE: case ST_IMPLICIT: case ST_IMPLICIT_NONE: + case ST_OMP_THREADPRIVATE: case ST_PARAMETER: case ST_STRUCTURE_DECL: case ST_TYPE: diff --git a/libgomp/ChangeLog b/libgomp/ChangeLog index a5e99d38a5ef..4b777e831a8b 100644 --- a/libgomp/ChangeLog +++ b/libgomp/ChangeLog @@ -1,3 +1,12 @@ +2018-06-25 Jakub Jelinek + + Backported from mainline + 2017-11-23 Dirk Broemmel + Jakub Jelinek + + PR fortran/81841 + * libgomp.fortran/pr81841.f90: New test. + 2017-12-10 Tom de Vries backport from trunk: diff --git a/libgomp/testsuite/libgomp.fortran/pr81841.f90 b/libgomp/testsuite/libgomp.fortran/pr81841.f90 new file mode 100644 index 000000000000..176d1c8d9c0c --- /dev/null +++ b/libgomp/testsuite/libgomp.fortran/pr81841.f90 @@ -0,0 +1,26 @@ +! PR fortran/81841 +! { dg-do run } + +block data + integer :: a + real :: b(2) + common /c/ a, b + !$omp threadprivate (/c/) + data a / 32 / + data b /2*1./ +end + +program pr81841 + use omp_lib + integer :: e + real :: f(2) + common /c/ e, f + !$omp threadprivate (/c/) + !$omp parallel num_threads(8) + if ((e /= 32) .or. any(f /= 1.)) call abort + e = omp_get_thread_num () + f = e + 19. + !$omp barrier + if ((e /= omp_get_thread_num ()) .or. any(f /= e + 19.)) call abort + !$omp end parallel +end