aboutsummaryrefslogtreecommitdiff
path: root/gcc/fortran
diff options
context:
space:
mode:
authorPaul Thomas <pault@gcc.gnu.org>2018-01-31 20:28:35 +0000
committerPaul Thomas <pault@gcc.gnu.org>2018-01-31 20:28:35 +0000
commit1af734911a08c4cb41046cb0e0ffe2206dcdf142 (patch)
tree1bdc5df27465d49a78f5c1d424cf2a3e9ea112db /gcc/fortran
parent125a677d029d94dfda7e0205ded2ffdcee595321 (diff)
downloadgcc-1af734911a08c4cb41046cb0e0ffe2206dcdf142.zip
gcc-1af734911a08c4cb41046cb0e0ffe2206dcdf142.tar.gz
gcc-1af734911a08c4cb41046cb0e0ffe2206dcdf142.tar.bz2
re PR fortran/84088 ([nvptx] libgomp.oacc-fortran/declare-*.f90 execution fails)
2018-01-31 Paul Thomas <pault@gcc.gnu.org> PR fortran/84088 * trans-expr.c (gfc_conv_procedure_call): If the parm expr is an address expression passed to an assumed rank dummy, convert to an indirect reference. 2018-01-31 Paul Thomas <pault@gcc.gnu.org> PR fortran/84088 * gfortran.dg/pr84088.f90 : New test. From-SVN: r257262
Diffstat (limited to 'gcc/fortran')
-rw-r--r--gcc/fortran/ChangeLog7
-rw-r--r--gcc/fortran/trans-expr.c6
2 files changed, 9 insertions, 4 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index 028f4be..70e1494 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -1,3 +1,10 @@
+2018-01-31 Paul Thomas <pault@gcc.gnu.org>
+
+ PR fortran/84088
+ * trans-expr.c (gfc_conv_procedure_call): If the parm expr is
+ an address expression passed to an assumed rank dummy, convert
+ to an indirect reference.
+
2018-01-31 Thomas Koenig <tkoenig@gcc.gnu.org>
* dump-parse-tree.c (write_proc): Use sym_name (which may
diff --git a/gcc/fortran/trans-expr.c b/gcc/fortran/trans-expr.c
index eb35976..7f790e7 100644
--- a/gcc/fortran/trans-expr.c
+++ b/gcc/fortran/trans-expr.c
@@ -5325,10 +5325,8 @@ gfc_conv_procedure_call (gfc_se * se, gfc_symbol * sym,
&& fsym->ts.type != BT_CLASS && e->expr_type != EXPR_NULL)
{
tmp = parmse.expr;
- if (TREE_CODE (tmp) == ADDR_EXPR
- && (POINTER_TYPE_P (TREE_TYPE (TREE_OPERAND (tmp, 0)))
- || e->expr_type == EXPR_CONSTANT))
- tmp = TREE_OPERAND (tmp, 0);
+ if (TREE_CODE (tmp) == ADDR_EXPR)
+ tmp = build_fold_indirect_ref_loc (input_location, tmp);
parmse.expr = gfc_conv_scalar_to_descriptor (&parmse, tmp,
fsym->attr);
parmse.expr = gfc_build_addr_expr (NULL_TREE,