re PR fortran/84088 ([nvptx] libgomp.oacc-fortran/declare-*.f90 execution fails)
authorPaul Thomas <pault@gcc.gnu.org>
Wed, 31 Jan 2018 20:28:35 +0000 (20:28 +0000)
committerPaul Thomas <pault@gcc.gnu.org>
Wed, 31 Jan 2018 20:28:35 +0000 (20:28 +0000)
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

gcc/fortran/ChangeLog
gcc/fortran/trans-expr.c
gcc/testsuite/ChangeLog
gcc/testsuite/gfortran.dg/pr84088.f90 [new file with mode: 0644]

index 028f4be6e0fa8eecdb73fb7fb49671a4973a3378..70e1494b75a2270d72d1b866cafdd70bb9bf5cf6 100644 (file)
@@ -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
index eb359768c69faeb2da83a96a27b8169dccb2a000..7f790e76a85bed1544e649d6bad2927b2456b30c 100644 (file)
@@ -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,
index 57fbb47f7321f8383f9b3fa29b60e62318a314ae..70cba83b6e2a94a6defdacf4851f2b4b8060364c 100644 (file)
@@ -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 (file)
index 0000000..36704af
--- /dev/null
@@ -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