aboutsummaryrefslogtreecommitdiff
path: root/gcc/omp-low.c
diff options
context:
space:
mode:
authorTobias Burnus <tobias@codesourcery.com>2019-12-05 15:18:39 +0000
committerTobias Burnus <burnus@gcc.gnu.org>2019-12-05 16:18:39 +0100
commitc3cb71ef35522f46afa6f11ee376cdcb73b893e8 (patch)
tree00586bccd3b51836b13802be9977e0024a9a7476 /gcc/omp-low.c
parent705f02b0ca8e625c4f513a66efe28b403c796c22 (diff)
downloadgcc-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.c15
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);