diff options
author | Thomas Schwinge <thomas@codesourcery.com> | 2021-05-20 15:37:07 +0200 |
---|---|---|
committer | Thomas Schwinge <thomas@codesourcery.com> | 2021-05-21 20:02:41 +0200 |
commit | ff451ea723deb3fe8471eb96ac9381c063ec6533 (patch) | |
tree | 21e533705243b80596f804633071afd393696b09 | |
parent | 3a285ebd0cf5ab762726018515d23280fa6dd445 (diff) | |
download | gcc-ff451ea723deb3fe8471eb96ac9381c063ec6533.zip gcc-ff451ea723deb3fe8471eb96ac9381c063ec6533.tar.gz gcc-ff451ea723deb3fe8471eb96ac9381c063ec6533.tar.bz2 |
[OpenACC privatization] Don't let unhandled 'IFN_UNIQUE_OACC_PRIVATE' linger [PR90115]
Make sure they're all handled in 'execute_oacc_device_lower'. Why we at all
can have 'level == -1' cases is a separate bug to be fixed.
gcc/
PR middle-end/90115
* omp-offload.c (execute_oacc_device_lower)
<IFN_UNIQUE_OACC_PRIVATE>: Diagnose and handle for 'level == -1'
case, too.
* internal-fn.c (expand_UNIQUE): Don't expect
'IFN_UNIQUE_OACC_PRIVATE'.
-rw-r--r-- | gcc/internal-fn.c | 2 | ||||
-rw-r--r-- | gcc/omp-offload.c | 10 |
2 files changed, 6 insertions, 6 deletions
diff --git a/gcc/internal-fn.c b/gcc/internal-fn.c index d92080c..d209a52 100644 --- a/gcc/internal-fn.c +++ b/gcc/internal-fn.c @@ -2969,8 +2969,6 @@ expand_UNIQUE (internal_fn, gcall *stmt) else gcc_unreachable (); break; - case IFN_UNIQUE_OACC_PRIVATE: - break; } if (pattern) diff --git a/gcc/omp-offload.c b/gcc/omp-offload.c index 080bddd..36bd2e4 100644 --- a/gcc/omp-offload.c +++ b/gcc/omp-offload.c @@ -2139,8 +2139,9 @@ execute_oacc_device_lower () { HOST_WIDE_INT level = TREE_INT_CST_LOW (gimple_call_arg (call, 2)); - if (level == -1) - break; + gcc_checking_assert (level == -1 + || (level >= 0 + && level < GOMP_DIM_MAX)); for (unsigned i = 3; i < gimple_call_num_args (call); i++) @@ -2156,11 +2157,12 @@ execute_oacc_device_lower () { "gang", "worker", "vector" }; fprintf (dump_file, "Decl UID %u has %s " "partitioning:", DECL_UID (decl), - axes[level]); + (level == -1 ? "UNKNOWN" : axes[level])); print_generic_decl (dump_file, decl, TDF_SLIM); fputc ('\n', dump_file); } - if (targetm.goacc.adjust_private_decl) + if (level != -1 + && targetm.goacc.adjust_private_decl) { tree oldtype = TREE_TYPE (decl); tree newdecl |