| ! { dg-do run } |
| ! Test the fix by HJ Lu for PR23634 and friends. All involve the ICE |
| ! that arose from a character array constructor usedas an actual |
| ! argument. |
| ! |
| ! The various parts of this test are taken from the PRs. |
| ! |
| ! Test PR26491 |
| module global |
| public p, line |
| interface p |
| module procedure p |
| end interface |
| character(128) :: line = 'abcdefghijklmnopqrstuvwxyz' |
| contains |
| subroutine p() |
| character(128) :: word |
| word = line |
| call redirect_((/word/)) |
| end subroutine |
| subroutine redirect_ (ch) |
| character(*) :: ch(:) |
| if (ch(1) /= line) STOP 1 |
| end subroutine redirect_ |
| end module global |
| |
| ! Test PR26550 |
| module my_module |
| implicit none |
| type point |
| real :: x |
| end type point |
| type(point), pointer, public :: stdin => NULL() |
| contains |
| subroutine my_p(w) |
| character(128) :: w |
| call r(stdin,(/w/)) |
| end subroutine my_p |
| subroutine r(ptr, io) |
| use global |
| type(point), pointer :: ptr |
| character(128) :: io(:) |
| if (associated (ptr)) STOP 2 |
| if (io(1) .ne. line) STOP 3 |
| end subroutine r |
| end module my_module |
| |
| program main |
| use global |
| use my_module |
| |
| integer :: i(6) = (/1,6,3,4,5,2/) |
| character (6) :: a = 'hello ', t |
| character(len=1) :: s(6) = (/'g','g','d','d','a','o'/) |
| equivalence (s, t) |
| |
| call option_stopwatch_s (a) ! Call test of PR25619 |
| call p () ! Call test of PR26491 |
| call my_p (line) ! Call test of PR26550 |
| |
| ! Test Vivek Rao's bug, as reported in PR25619. |
| s = s(i) |
| call option_stopwatch_a ((/a,'hola! ', t/)) |
| |
| contains |
| |
| ! Test PR23634 |
| subroutine option_stopwatch_s(a) |
| character (*), intent(in) :: a |
| character (len=len(a)) :: b |
| |
| b = 'hola! ' |
| call option_stopwatch_a((/a, b, 'goddag'/)) |
| end subroutine option_stopwatch_s |
| subroutine option_stopwatch_a (a) |
| character (*) :: a(:) |
| if (any (a .ne. (/'hello ','hola! ','goddag'/))) STOP 4 |
| end subroutine option_stopwatch_a |
| |
| end program main |