diff options
author | Tobias Burnus <tobias@codesourcery.com> | 2019-12-05 15:18:39 +0000 |
---|---|---|
committer | Tobias Burnus <burnus@gcc.gnu.org> | 2019-12-05 16:18:39 +0100 |
commit | c3cb71ef35522f46afa6f11ee376cdcb73b893e8 (patch) | |
tree | 00586bccd3b51836b13802be9977e0024a9a7476 /gcc/omp-low.c | |
parent | 705f02b0ca8e625c4f513a66efe28b403c796c22 (diff) | |
download | gcc-c3cb71ef35522f46afa6f11ee376cdcb73b893e8.zip gcc-c3cb71ef35522f46afa6f11ee376cdcb73b893e8.tar.gz gcc-c3cb71ef35522f46afa6f11ee376cdcb73b893e8.tar.bz2 |
OpenMP] Fix use_device_… with absent optional arg
gcc/fortran/
* trans-openmp.c (gfc_omp_is_optional_argument,
gfc_omp_check_optional_argument): Handle type(c_ptr),value which uses a
hidden argument for the is-present check.
gcc/
* omp-low.c (lower_omp_target): For use_device_ptr/use_derice_addr
and Fortran's optional arguments, unconditionally add the is-present
condition before the libgomp call.
libgomp/
* testsuite/libgomp.fortran/use_device_ptr-optional-2.f90: Add
'type(c_ptr), value' test case. Conditionally map the per-value
passed arguments.
From-SVN: r279004
Diffstat (limited to 'gcc/omp-low.c')
-rw-r--r-- | gcc/omp-low.c | 15 |
1 files changed, 3 insertions, 12 deletions
diff --git a/gcc/omp-low.c b/gcc/omp-low.c index 19132f7..b0168d7 100644 --- a/gcc/omp-low.c +++ b/gcc/omp-low.c @@ -11981,8 +11981,6 @@ lower_omp_target (gimple_stmt_iterator *gsi_p, omp_context *ctx) case OMP_CLAUSE_USE_DEVICE_PTR: case OMP_CLAUSE_USE_DEVICE_ADDR: case OMP_CLAUSE_IS_DEVICE_PTR: - bool do_optional_check; - do_optional_check = false; ovar = OMP_CLAUSE_DECL (c); var = lookup_decl_in_outer_ctx (ovar, ctx); @@ -12004,10 +12002,7 @@ lower_omp_target (gimple_stmt_iterator *gsi_p, omp_context *ctx) } type = TREE_TYPE (ovar); if (lang_hooks.decls.omp_array_data (ovar, true)) - { - var = lang_hooks.decls.omp_array_data (ovar, false); - do_optional_check = true; - } + var = lang_hooks.decls.omp_array_data (ovar, false); else if ((OMP_CLAUSE_CODE (c) == OMP_CLAUSE_USE_DEVICE_ADDR && !omp_is_reference (ovar) && !omp_is_allocatable_or_ptr (ovar)) @@ -12025,16 +12020,12 @@ lower_omp_target (gimple_stmt_iterator *gsi_p, omp_context *ctx) && !omp_is_allocatable_or_ptr (ovar)) || (omp_is_reference (ovar) && omp_is_allocatable_or_ptr (ovar)))) - { - var = build_simple_mem_ref (var); - do_optional_check = true; - } + var = build_simple_mem_ref (var); var = fold_convert (TREE_TYPE (x), var); } } tree present; - present = (do_optional_check - ? omp_check_optional_argument (ovar, true) : NULL_TREE); + present = omp_check_optional_argument (ovar, true); if (present) { tree null_label = create_artificial_label (UNKNOWN_LOCATION); |