Fortran] PR 92208 don't use function-result dummy variable as actual argument
PR fortran/92208 * trans-array.c (gfc_conv_array_parameter): Only copy string-length backend_decl if expression is not a function. PR fortran/92208 * gfortran.dg/pr92208.f90: New. From-SVN: r277639
This commit is contained in:
parent
c766762429
commit
6b7a9826d7
@ -1,3 +1,9 @@
|
||||
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-10-30 Mark Eggleston <mark.eggleston@codethink.com>
|
||||
|
||||
* invoke.texi: Add -Wno-overwrite-recursive to list of options. Add
|
||||
|
@ -8049,7 +8049,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);
|
||||
|
@ -1,3 +1,8 @@
|
||||
2019-10-30 Tobias Burnus <tobias@codesourcery.com>
|
||||
|
||||
PR fortran/92208
|
||||
* gfortran.dg/pr92208.f90: New.
|
||||
|
||||
2019-10-30 Marek Polacek <polacek@redhat.com>
|
||||
|
||||
PR c++/92134 - constinit malfunction in static data member.
|
||||
|
39
gcc/testsuite/gfortran.dg/pr92208.f90
Normal file
39
gcc/testsuite/gfortran.dg/pr92208.f90
Normal file
@ -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
|
Loading…
Reference in New Issue
Block a user