diff options
author | Thomas Schwinge <thomas@codesourcery.com> | 2021-05-21 08:51:47 +0200 |
---|---|---|
committer | Thomas Schwinge <thomas@codesourcery.com> | 2021-05-21 20:23:34 +0200 |
commit | 325aa13996bafce0c4927876c315d1fa706d9881 (patch) | |
tree | cbbbb65dda09b3881b6af1b2f8b24becb683df03 /gcc/omp-low.c | |
parent | 11b8286a83289f5b54e813f14ff56d730c3f3185 (diff) | |
download | gcc-325aa13996bafce0c4927876c315d1fa706d9881.zip gcc-325aa13996bafce0c4927876c315d1fa706d9881.tar.gz gcc-325aa13996bafce0c4927876c315d1fa706d9881.tar.bz2 |
[OpenACC privatization] Reject 'static', 'external' in blocks [PR90115]
gcc/
PR middle-end/90115
* omp-low.c (oacc_privatization_candidate_p): Reject 'static',
'external' in blocks.
gcc/testsuite/
PR middle-end/90115
* c-c++-common/goacc/privatization-1-compute-loop.c: Update.
* c-c++-common/goacc/privatization-1-compute.c: Likewise.
* c-c++-common/goacc/privatization-1-routine_gang-loop.c:
Likewise.
* c-c++-common/goacc/privatization-1-routine_gang.c: Likewise.
libgomp/
PR middle-end/90115
* testsuite/libgomp.oacc-c-c++-common/static-variable-1.c: Update.
* testsuite/libgomp.oacc-fortran/privatized-ref-2.f90: Likewise.
Diffstat (limited to 'gcc/omp-low.c')
-rw-r--r-- | gcc/omp-low.c | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/gcc/omp-low.c b/gcc/omp-low.c index 0d63e82..e00051b 100644 --- a/gcc/omp-low.c +++ b/gcc/omp-low.c @@ -10192,6 +10192,9 @@ oacc_privatization_candidate_p (const location_t loc, const tree c, { dump_flags_t l_dump_flags = get_openacc_privatization_dump_flags (); + /* There is some differentiation depending on block vs. clause. */ + bool block = !c; + bool res = true; if (res && !VAR_P (decl)) @@ -10207,6 +10210,32 @@ oacc_privatization_candidate_p (const location_t loc, const tree c, } } + if (res && block && TREE_STATIC (decl)) + { + res = false; + + if (dump_enabled_p ()) + { + oacc_privatization_begin_diagnose_var (l_dump_flags, loc, c, decl); + dump_printf (l_dump_flags, + "isn%'t candidate for adjusting OpenACC privatization level: %s\n", + "static"); + } + } + + if (res && block && DECL_EXTERNAL (decl)) + { + res = false; + + if (dump_enabled_p ()) + { + oacc_privatization_begin_diagnose_var (l_dump_flags, loc, c, decl); + dump_printf (l_dump_flags, + "isn%'t candidate for adjusting OpenACC privatization level: %s\n", + "external"); + } + } + if (res && !TREE_ADDRESSABLE (decl)) { res = false; |