re PR fortran/82923 (Automatic allocation of deferred length character using function result)
2018-05-19 Paul Thomas <pault@gcc.gnu.org> PR fortran/82923 PR fortran/66694 PR fortran/82617 * trans-array.c (gfc_alloc_allocatable_for_assignment): Set the charlen backend_decl of the rhs expr to ss->info->string_length so that the value in the current scope is used. 2018-05-19 Paul Thomas <pault@gcc.gnu.org> PR fortran/82923 * gfortran.dg/allocate_assumed_charlen_4.f90: New test. Note that the patch fixes PR66694 & PR82617, although the testcases are not explicitly included. From-SVN: r260399
This commit is contained in:
parent
8c55577cec
commit
34aac30d2d
|
@ -1,3 +1,13 @@
|
|||
2018-05-19 Paul Thomas <pault@gcc.gnu.org>
|
||||
|
||||
PR fortran/82923
|
||||
PR fortran/66694
|
||||
PR fortran/82617
|
||||
Backport from trunk
|
||||
* trans-array.c (gfc_alloc_allocatable_for_assignment): Set the
|
||||
charlen backend_decl of the rhs expr to ss->info->string_length
|
||||
so that the value in the current scope is used.
|
||||
|
||||
2018-05-16 Paul Thomas <pault@gcc.gnu.org>
|
||||
|
||||
PR fortran/83149
|
||||
|
|
|
@ -9132,6 +9132,12 @@ gfc_alloc_allocatable_for_assignment (gfc_loopinfo *loop,
|
|||
if (expr2 && rss == gfc_ss_terminator)
|
||||
return NULL_TREE;
|
||||
|
||||
/* Ensure that the string length from the current scope is used. */
|
||||
if (expr2->ts.type == BT_CHARACTER
|
||||
&& expr2->expr_type == EXPR_FUNCTION
|
||||
&& !expr2->value.function.isym)
|
||||
expr2->ts.u.cl->backend_decl = rss->info->string_length;
|
||||
|
||||
gfc_start_block (&fblock);
|
||||
|
||||
/* Since the lhs is allocatable, this must be a descriptor type.
|
||||
|
|
|
@ -1,3 +1,11 @@
|
|||
2018-05-19 Paul Thomas <pault@gcc.gnu.org>
|
||||
|
||||
PR fortran/82923
|
||||
Backport from trunk
|
||||
* gfortran.dg/allocate_assumed_charlen_4.f90: New test. Note
|
||||
that the patch fixes PR66694 & PR82617, although the testcases
|
||||
are not explicitly included.
|
||||
|
||||
2017-05-17 Paul Thomas <pault@gcc.gnu.org>
|
||||
|
||||
PR fortran/82814
|
||||
|
|
|
@ -0,0 +1,39 @@
|
|||
! { dg-do run }
|
||||
!
|
||||
! Test the fix for PR82923, in which an ICE occurred because the
|
||||
! character length from 'getchars' scope was being used in the
|
||||
! automatic allocation of 'mine'.
|
||||
!
|
||||
! Contributed by "Werner Blokbuster" <werner.blokbuster@gmail.com>
|
||||
!
|
||||
module m
|
||||
implicit none
|
||||
contains
|
||||
function getchars(my_len,my_size)
|
||||
integer, intent(in) :: my_len, my_size
|
||||
character(my_len) :: getchars(my_size)
|
||||
getchars = 'A-'
|
||||
end function getchars
|
||||
|
||||
function getchars2(my_len)
|
||||
integer, intent(in) :: my_len
|
||||
character(my_len) :: getchars2
|
||||
getchars2 = 'B--'
|
||||
end function getchars2
|
||||
end module m
|
||||
|
||||
program testca
|
||||
use m, only: getchars, getchars2
|
||||
implicit none
|
||||
character(:), allocatable :: mine(:)
|
||||
character(:), allocatable :: mine2
|
||||
integer :: i
|
||||
|
||||
! ICE occured at this line:
|
||||
mine = getchars(2,4)
|
||||
if (any (mine .ne. [('A-', i = 1, 4)])) stop 1
|
||||
|
||||
! The scalar version was fine and this will keep it so:
|
||||
mine2 = getchars2(3)
|
||||
if (mine2 .ne. 'B--') stop 2
|
||||
end program testca
|
Loading…
Reference in New Issue