aboutsummaryrefslogtreecommitdiff
path: root/gcc/fortran/resolve.c
diff options
context:
space:
mode:
authorTobias Burnus <tobias@codesourcery.com>2021-03-12 16:34:10 +0100
committerTobias Burnus <tobias@codesourcery.com>2021-03-12 16:34:10 +0100
commitd0655763483008a421608d059cf26c93077621a9 (patch)
treef6ef42255470abe12c09f3414a977a5813d6985e /gcc/fortran/resolve.c
parent0b5437510c13dc0879349a4f259c800d2ce02eb2 (diff)
downloadgcc-d0655763483008a421608d059cf26c93077621a9.zip
gcc-d0655763483008a421608d059cf26c93077621a9.tar.gz
gcc-d0655763483008a421608d059cf26c93077621a9.tar.bz2
Fortran/OpenMP: Accept implicit-save DATA vars for threadprivate [PR99514]
gcc/fortran/ChangeLog: PR fortran/99514 * resolve.c (resolve_symbol): Accept vars which are in DATA and hence (either) implicit SAVE (or in common). gcc/testsuite/ChangeLog: PR fortran/99514 * gfortran.dg/gomp/threadprivate-1.f90: New test.
Diffstat (limited to 'gcc/fortran/resolve.c')
-rw-r--r--gcc/fortran/resolve.c10
1 files changed, 5 insertions, 5 deletions
diff --git a/gcc/fortran/resolve.c b/gcc/fortran/resolve.c
index 2a91ae7..32015c2 100644
--- a/gcc/fortran/resolve.c
+++ b/gcc/fortran/resolve.c
@@ -16024,12 +16024,12 @@ resolve_symbol (gfc_symbol *sym)
}
/* Check threadprivate restrictions. */
- if (sym->attr.threadprivate && !sym->attr.save
+ if (sym->attr.threadprivate
+ && !(sym->attr.save || sym->attr.data || sym->attr.in_common)
&& !(sym->ns->save_all && !sym->attr.automatic)
- && (!sym->attr.in_common
- && sym->module == NULL
- && (sym->ns->proc_name == NULL
- || sym->ns->proc_name->attr.flavor != FL_MODULE)))
+ && sym->module == NULL
+ && (sym->ns->proc_name == NULL
+ || sym->ns->proc_name->attr.flavor != FL_MODULE))
gfc_error ("Threadprivate at %L isn't SAVEd", &sym->declared_at);
/* Check omp declare target restrictions. */