summaryrefslogtreecommitdiff
path: root/gcc/testsuite/gfortran.dg/pr17612.f90
blob: 1b6853269ab297c7d8c8cd52bf9acde74a54f950 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
! { dg-do run }
! PR 17612
! We used to not determine the length of character-valued expressions
! correctly, leading to a segfault.
program prog
  character(len=2), target :: c(4)
  type pseudo_upf 
     character(len=2), pointer :: els(:)
  end type pseudo_upf
  type (pseudo_upf) :: p
  type t
    character(5) :: s(2)
  end type
  type (t) v
  ! A full arrays.
  c = (/"ab","cd","ef","gh"/)
  call n(p)
  if (any (c /= p%els)) call abort
  ! An array section that needs a new array descriptor.
  v%s(1) = "hello"
  v%s(2) = "world"
  call test (v%s)
contains 

  subroutine n (upf) 
    type (pseudo_upf), intent(inout) :: upf 
    upf%els => c
    return 
  end subroutine n

  subroutine test(s)
    character(len=*) :: s(:)
    if ((len (s) .ne. 5) .or. (any (s .ne. (/"hello", "world"/)))) call abort
  end subroutine
end program