| ! { dg-do compile } |
| ! |
| ! Test the fix for PR87239 in which the call to the elemental function |
| ! 'gettwo' was being added before the scalarization loop in the assignment. |
| ! Since the result temporary was being declared in the loop body, this |
| ! drove the gimplifier crazy. It is sufficient to compile this testcase |
| ! since it used to ICE. |
| ! |
| ! Contributed by Juergen Reuter <juergen.reuter@desy.de> |
| ! |
| module test |
| implicit none |
| contains |
| |
| elemental function gettwo( s ) result( res ) |
| character(*), intent(in) :: s |
| character(len(s)) :: res |
| |
| res = s( 1 : 2 ) |
| endfunction gettwo |
| |
| endmodule test |
| |
| program main |
| use test |
| implicit none |
| character(10) :: inp( 5 ) |
| integer :: i |
| |
| ! character(10), allocatable :: out(:) ! this works |
| character(:), allocatable :: out(:) ! this was stuffed |
| |
| inp = [ 'aaa', 'bbb', 'ccc', 'ddd', 'eee' ] |
| |
| out = gettwo( inp ) |
| |
| do i = 1, size (out, 1) |
| if (trim (out(i)) .ne. inp(i)(1:2)) stop 1 |
| end do |
| endprogram main |