| ! { 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)) STOP 1 |
| ! 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"/)))) STOP 2 |
| end subroutine |
| end program |
| |
| |