From: Paul Thomas Date: Wed, 31 Jan 2018 20:28:35 +0000 (+0000) Subject: re PR fortran/84088 ([nvptx] libgomp.oacc-fortran/declare-*.f90 execution fails) X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=1af734911a08c4cb41046cb0e0ffe2206dcdf142;p=gcc.git re PR fortran/84088 ([nvptx] libgomp.oacc-fortran/declare-*.f90 execution fails) 2018-01-31 Paul Thomas 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 PR fortran/84088 * gfortran.dg/pr84088.f90 : New test. From-SVN: r257262 --- diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 028f4be6e0f..70e1494b75a 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,10 @@ +2018-01-31 Paul Thomas + + 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 * 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 eb359768c69..7f790e76a85 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, diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 57fbb47f732..70cba83b6e2 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2018-01-31 Paul Thomas + + PR fortran/84088 + * gfortran.dg/pr84088.f90 : New test. + 2018-01-31 Vladimir Makarov PR target/82444 diff --git a/gcc/testsuite/gfortran.dg/pr84088.f90 b/gcc/testsuite/gfortran.dg/pr84088.f90 new file mode 100644 index 00000000000..36704afa151 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/pr84088.f90 @@ -0,0 +1,19 @@ +! { dg-do run } +! +! Test of fix for case in comment #7 of PR84088. +! +! Contributed by Tom de Vries +! +implicit none + integer(kind=4) z + + call foo (z) + +contains + subroutine foo (a) + type (*), dimension (..), contiguous :: a + integer(kind = 4) :: i + if(sizeof (a) .ne. sizeof (i)) call abort + end subroutine foo + +end program