! { dg-do run } ! ! Tests the fix for PR68216 ! ! Reported on clf: https://groups.google.com/forum/#!topic/comp.lang.fortran/eWQTKfqKLZc ! PROGRAM hello ! ! This is based on the first testcase, from Francisco (Ayyy LMAO). Original ! lines are commented out. The second testcase from this thread is acalled ! at the end of the program. ! IMPLICIT NONE CHARACTER(LEN=:),DIMENSION(:),ALLOCATABLE :: array_lineas CHARACTER(LEN=:),DIMENSION(:),ALLOCATABLE :: array_copia character (3), dimension (2) :: array_fijo = ["abc","def"] character (100) :: buffer INTEGER :: largo , cant_lineas , i write (buffer, "(2a3)") array_fijo ! WRITE(*,*) ' Escriba un numero para el largo de cada linea' ! READ(*,*) largo largo = LEN (array_fijo) ! WRITE(*,*) ' Escriba la cantidad de lineas' ! READ(*,*) cant_lineas cant_lineas = size (array_fijo, 1) ALLOCATE(CHARACTER(LEN=largo) :: array_lineas(cant_lineas)) ! WRITE(*,*) 'Escriba el array', len(array_lineas), size(array_lineas) READ(buffer,"(2a3)") (array_lineas(i),i=1,cant_lineas) ! WRITE(*,*) 'Array guardado: ' ! DO i=1,cant_lineas ! WRITE(*,*) array_lineas(i) ! ENDDO if (any (array_lineas .ne. array_fijo)) STOP 1 ! The following are additional tests beyond that of the original. ! ! Check that allocation with source = another deferred length is OK allocate (array_copia, source = array_lineas) if (any (array_copia .ne. array_fijo)) STOP 2 deallocate (array_lineas, array_copia) ! Check that allocation with source = a non-deferred length is OK allocate (array_lineas, source = array_fijo) if (any (array_lineas .ne. array_fijo)) STOP 3 deallocate (array_lineas) ! Check that allocation with MOLD = a non-deferred length is OK allocate (array_copia, mold = [array_fijo(:)(1:2), array_fijo(:)(1:2)]) if (size (array_copia, 1) .ne. 4) STOP 4 if (LEN (array_copia, 1) .ne. 2) STOP 5 ! Check that allocation with MOLD = another deferred length is OK allocate (array_lineas, mold = array_copia) if (size (array_copia, 1) .ne. 4) STOP 6 if (LEN (array_copia, 1) .ne. 2) STOP 7 deallocate (array_lineas, array_copia) ! READ(*,*) call testdefchar contains subroutine testdefchar ! ! This is the testcase in the above thread from Blokbuster ! implicit none character(:), allocatable :: test(:) allocate(character(3) :: test(2)) test(1) = 'abc' test(2) = 'def' if (any (test .ne. ['abc', 'def'])) STOP 8 test = ['aa','bb','cc'] if (any (test .ne. ['aa', 'bb', 'cc'])) STOP 9 end subroutine testdefchar END PROGRAM