re PR fortran/41772 (Wrong code due to TRANSFER of EMPTY array section)
2009-10-24 Paul Thomas <pault@gcc.gnu.org> PR fortran/41772 * trans-intrinsic.c (gfc_conv_intrinsic_transfer): Stop'extent' from going negative. 2009-10-24 Paul Thomas <pault@gcc.gnu.org> PR fortran/41772 * gfortran.dg/transfer_intrinsic_3.f90. From-SVN: r153524
This commit is contained in:
parent
72580319c2
commit
c0f81f78ae
4 changed files with 51 additions and 0 deletions
|
@ -1,3 +1,9 @@
|
|||
2009-10-24 Paul Thomas <pault@gcc.gnu.org>
|
||||
|
||||
PR fortran/41772
|
||||
* trans-intrinsic.c (gfc_conv_intrinsic_transfer): Stop'extent'
|
||||
from going negative.
|
||||
|
||||
2009-10-23 Janus Weil <janus@gcc.gnu.org>
|
||||
|
||||
PR fortran/41800
|
||||
|
|
|
@ -4490,6 +4490,8 @@ gfc_conv_intrinsic_transfer (gfc_se * se, gfc_expr * expr)
|
|||
scalar_transfer:
|
||||
extent = fold_build2 (MIN_EXPR, gfc_array_index_type,
|
||||
dest_word_len, source_bytes);
|
||||
extent = fold_build2 (MAX_EXPR, gfc_array_index_type,
|
||||
extent, gfc_index_zero_node);
|
||||
|
||||
if (expr->ts.type == BT_CHARACTER)
|
||||
{
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
2009-10-24 Paul Thomas <pault@gcc.gnu.org>
|
||||
|
||||
PR fortran/41772
|
||||
* gfortran.dg/transfer_intrinsic_3.f90.
|
||||
|
||||
2009-10-24 Eric Botcazou <ebotcazou@adacore.com>
|
||||
|
||||
* gnat.dg/opt4.adb: New test.
|
||||
|
|
38
gcc/testsuite/gfortran.dg/transfer_intrinsic_3.f90
Normal file
38
gcc/testsuite/gfortran.dg/transfer_intrinsic_3.f90
Normal file
|
@ -0,0 +1,38 @@
|
|||
! { dg-do run }
|
||||
! Tests the fix for PR41772 in which the empty array reference
|
||||
! 'qname(1:n-1)' was not handled correctly in TRANSFER.
|
||||
!
|
||||
! Contributed by Tobias Burnus <burnus@gcc.gnu.org>
|
||||
!
|
||||
module m
|
||||
implicit none
|
||||
contains
|
||||
pure function str_vs(vs) result(s)
|
||||
character, dimension(:), intent(in) :: vs
|
||||
character(len=size(vs)) :: s
|
||||
s = transfer(vs, s)
|
||||
end function str_vs
|
||||
subroutine has_key_ns(uri, localname, n)
|
||||
character(len=*), intent(in) :: uri, localname
|
||||
integer, intent(in) :: n
|
||||
if ((n .lt. 2) .and. (len (uri) .ne. 0)) then
|
||||
call abort
|
||||
else IF ((n .ge. 2) .and. (len (uri) .ne. n - 1)) then
|
||||
call abort
|
||||
end if
|
||||
end subroutine
|
||||
end module m
|
||||
|
||||
use m
|
||||
implicit none
|
||||
character, dimension(:), pointer :: QName
|
||||
integer :: n
|
||||
allocate(qname(6))
|
||||
qname = (/ 'a','b','c','d','e','f' /)
|
||||
|
||||
do n = 0, 3
|
||||
call has_key_ns(str_vs(qname(1:n-1)),"", n)
|
||||
end do
|
||||
deallocate(qname)
|
||||
end
|
||||
! { dg-final { cleanup-modules "m" } }
|
Loading…
Add table
Reference in a new issue