]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
Fortran] PR 92208 don't use function-result dummy variable as actual argument
authorTobias Burnus <tobias@codesourcery.com>
Mon, 4 Nov 2019 15:07:19 +0000 (15:07 +0000)
committerTobias Burnus <burnus@gcc.gnu.org>
Mon, 4 Nov 2019 15:07:19 +0000 (16:07 +0100)
        gcc/fortran/
        Backported from mainline
        2019-10-30  Tobias Burnus  <tobias@codesourcery.com>

        PR fortran/92208
        * trans-array.c (gfc_conv_array_parameter): Only copy
        string-length backend_decl if expression is not a function.

        gcc/testsuite/
        Backported from mainline
        2019-10-30  Tobias Burnus  <tobias@codesourcery.com>

        PR fortran/92208
        * gfortran.dg/pr92208.f90: New.

From-SVN: r277783

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

index c4c16d9a462118365537b3f8f7b9ab87c01c7887..e8ab85fc424805906bb24d9b986f2bcb2b922d69 100644 (file)
@@ -1,3 +1,12 @@
+2019-11-04  Tobias Burnus  <tobias@codesourcery.com>
+
+       Backport from mainline
+       2019-10-30  Tobias Burnus  <tobias@codesourcery.com>
+
+       PR fortran/92208
+       * trans-array.c (gfc_conv_array_parameter): Only copy
+       string-length backend_decl if expression is not a function.
+
 2019-11-04  Tobias Burnus  <tobias@codesourcery.com>
 
        Backport from mainline
index 9e1f159a69651c87717a7afd9113ec8639be8f43..3945d116180ccb3b08d0d31af9ca0855de608f91 100644 (file)
@@ -8027,7 +8027,7 @@ gfc_conv_array_parameter (gfc_se * se, gfc_expr * expr, bool g77,
          /* The components shall be deallocated before their containing entity.  */
          gfc_prepend_expr_to_block (&se->post, tmp);
        }
-      if (expr->ts.type == BT_CHARACTER)
+      if (expr->ts.type == BT_CHARACTER && expr->expr_type != EXPR_FUNCTION)
        se->string_length = expr->ts.u.cl->backend_decl;
       if (size)
        array_parameter_size (se->expr, expr, size);
index 4cf0555144c9265c99cfb453aebf3aecc9487804..9d908253f4b199479d3da6a0101425da64d0a3fd 100644 (file)
@@ -1,3 +1,11 @@
+2019-11-04  Tobias Burnus  <tobias@codesourcery.com>
+
+       Backport from mainline
+       2019-10-30  Tobias Burnus  <tobias@codesourcery.com>
+
+       PR fortran/92208
+       * gfortran.dg/pr92208.f90: New.
+
 2019-11-04  Tobias Burnus  <tobias@codesourcery.com>
 
        Backport from mainline
diff --git a/gcc/testsuite/gfortran.dg/pr92208.f90 b/gcc/testsuite/gfortran.dg/pr92208.f90
new file mode 100644 (file)
index 0000000..9de7f4b
--- /dev/null
@@ -0,0 +1,39 @@
+! { dg-do run }
+!
+! PR fortran/92208
+!
+! Contributed by Nils Reiche
+!
+program stringtest
+  implicit none
+  integer, parameter :: noVars = 2
+
+!  print*, "varNames: ", createVarnames("var",noVars)
+  call function1(noVars,createVarnames("var",noVars),"path")
+
+contains
+
+function createVarnames(string,noVars) result(stringArray)
+  implicit none
+  character(len=*),                        intent(in)  :: string
+  integer,                                 intent(in)  :: noVars
+  character(len=len_trim(string)+6), dimension(noVars) :: stringArray
+  integer :: i
+  do i=1,noVars
+    write(stringArray(i),'(a,i0)') string, i
+  enddo
+end function createVarnames
+
+subroutine function1(noVars,varNames,path)
+  implicit none
+  integer, intent(in)  :: noVars
+  character(len=*), intent(in)  :: path
+  character(len=*), dimension(noVars) :: varNames
+
+  if (path /= 'path') stop 1
+  if (any(varNames /= ['var1', 'var2'])) stop 2
+  !print*, "function1-path    : ", trim(path)
+  !print*, "function1-varNames: ", varNames
+end subroutine function1
+
+end program stringtest