From: Tobias Burnus Date: Mon, 4 Nov 2019 15:07:19 +0000 (+0000) Subject: Fortran] PR 92208 don't use function-result dummy variable as actual argument X-Git-Tag: releases/gcc-9.3.0~433 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=f52b17ba5d04136268b61685b45cd68eb0cf709c;p=thirdparty%2Fgcc.git Fortran] PR 92208 don't use function-result dummy variable as actual argument gcc/fortran/ Backported from mainline 2019-10-30 Tobias Burnus 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 PR fortran/92208 * gfortran.dg/pr92208.f90: New. From-SVN: r277783 --- diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index c4c16d9a4621..e8ab85fc4248 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,12 @@ +2019-11-04 Tobias Burnus + + Backport from mainline + 2019-10-30 Tobias Burnus + + 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 Backport from mainline diff --git a/gcc/fortran/trans-array.c b/gcc/fortran/trans-array.c index 9e1f159a6965..3945d116180c 100644 --- a/gcc/fortran/trans-array.c +++ b/gcc/fortran/trans-array.c @@ -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); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 4cf0555144c9..9d908253f4b1 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,11 @@ +2019-11-04 Tobias Burnus + + Backport from mainline + 2019-10-30 Tobias Burnus + + PR fortran/92208 + * gfortran.dg/pr92208.f90: New. + 2019-11-04 Tobias Burnus Backport from mainline diff --git a/gcc/testsuite/gfortran.dg/pr92208.f90 b/gcc/testsuite/gfortran.dg/pr92208.f90 new file mode 100644 index 000000000000..9de7f4b24b5e --- /dev/null +++ b/gcc/testsuite/gfortran.dg/pr92208.f90 @@ -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