OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [tags/] [gnu-src/] [gcc-4.5.1/] [gcc-4.5.1-or32-1.0rc2/] [gcc/] [testsuite/] [gfortran.dg/] [actual_array_substr_2.f90] - Diff between revs 302 and 384

Only display areas with differences | Details | Blame | View Log

Rev 302 Rev 384
! { dg-do run }
! { dg-do run }
! Tests the fix for pr28174, in which the fix for pr28118 was
! Tests the fix for pr28174, in which the fix for pr28118 was
! corrupting the character lengths of arrays that shared a
! corrupting the character lengths of arrays that shared a
! character length structure.  In addition, in developing the
! character length structure.  In addition, in developing the
! fix, it was noted that intent(out/inout) arguments were not
! fix, it was noted that intent(out/inout) arguments were not
! getting written back to the calling scope.
! getting written back to the calling scope.
!
!
! Based on the testscase by Harald Anlauf  
! Based on the testscase by Harald Anlauf  
!
!
program pr28174
program pr28174
  implicit none
  implicit none
  character(len=12) :: teststring(2) = (/ "abc def ghij", &
  character(len=12) :: teststring(2) = (/ "abc def ghij", &
                                          "klm nop qrst" /)
                                          "klm nop qrst" /)
  character(len=12) :: a(2), b(2), c(2), d(2)
  character(len=12) :: a(2), b(2), c(2), d(2)
  integer :: m = 7, n
  integer :: m = 7, n
  a = teststring
  a = teststring
  b = a
  b = a
  c = a
  c = a
  d = a
  d = a
  n = m - 4
  n = m - 4
! Make sure that variable substring references work.
! Make sure that variable substring references work.
  call foo (a(:)(m:m+5), c(:)(n:m+2), d(:)(5:9))
  call foo (a(:)(m:m+5), c(:)(n:m+2), d(:)(5:9))
  if (any (a .ne. teststring)) call abort ()
  if (any (a .ne. teststring)) call abort ()
  if (any (b .ne. teststring)) call abort ()
  if (any (b .ne. teststring)) call abort ()
  if (any (c .ne. (/"ab456789#hij", &
  if (any (c .ne. (/"ab456789#hij", &
                    "kl7654321rst"/))) call abort ()
                    "kl7654321rst"/))) call abort ()
  if (any (d .ne. (/"abc 23456hij", &
  if (any (d .ne. (/"abc 23456hij", &
                    "klm 98765rst"/))) call abort ()
                    "klm 98765rst"/))) call abort ()
contains
contains
  subroutine foo (w, x, y)
  subroutine foo (w, x, y)
    character(len=*), intent(in) :: w(:)
    character(len=*), intent(in) :: w(:)
    character(len=*), intent(inOUT) :: x(:)
    character(len=*), intent(inOUT) :: x(:)
    character(len=*), intent(OUT) :: y(:)
    character(len=*), intent(OUT) :: y(:)
    character(len=12) :: foostring(2) = (/"0123456789#$" , &
    character(len=12) :: foostring(2) = (/"0123456789#$" , &
                                          "$#9876543210"/)
                                          "$#9876543210"/)
! This next is not required by the standard but tests the
! This next is not required by the standard but tests the
! functioning of the gfortran implementation.
! functioning of the gfortran implementation.
!   if (all (x(:)(3:7) .eq. y)) call abort ()
!   if (all (x(:)(3:7) .eq. y)) call abort ()
    x = foostring (:)(5 : 4 + len (x))
    x = foostring (:)(5 : 4 + len (x))
    y = foostring (:)(3 : 2 + len (y))
    y = foostring (:)(3 : 2 + len (y))
  end subroutine foo
  end subroutine foo
end program pr28174
end program pr28174
 
 

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.