diff options
author | Paul Thomas <pault@gcc.gnu.org> | 2018-01-31 20:28:35 +0000 |
---|---|---|
committer | Paul Thomas <pault@gcc.gnu.org> | 2018-01-31 20:28:35 +0000 |
commit | 1af734911a08c4cb41046cb0e0ffe2206dcdf142 (patch) | |
tree | 1bdc5df27465d49a78f5c1d424cf2a3e9ea112db /gcc | |
parent | 125a677d029d94dfda7e0205ded2ffdcee595321 (diff) | |
download | gcc-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')
-rw-r--r-- | gcc/fortran/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/fortran/trans-expr.c | 6 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gfortran.dg/pr84088.f90 | 19 |
4 files changed, 33 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, diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 57fbb47f..70cba83 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2018-01-31 Paul Thomas <pault@gcc.gnu.org> + + PR fortran/84088 + * gfortran.dg/pr84088.f90 : New test. + 2018-01-31 Vladimir Makarov <vmakarov@redhat.com> PR target/82444 diff --git a/gcc/testsuite/gfortran.dg/pr84088.f90 b/gcc/testsuite/gfortran.dg/pr84088.f90 new file mode 100644 index 0000000..36704af --- /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 <vries@gcc.gnu.org> +! +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 |