! { dg-do compile } ! { dg-options "-std=f2008" } ! ! PR fortran/45170 ! ! Character deferred type parameter ! subroutine one(x, y) ! { dg-error "Entity .y. at .1. has a deferred type parameter" } implicit none character(len=:), pointer :: x character(len=:) :: y character(len=:), allocatable, target :: str2 character(len=:), target :: str ! { dg-error "deferred type parameter" } end subroutine one subroutine two() implicit none character(len=:), allocatable, target :: str1(:) character(len=5), save, target :: str2 character(len=:), pointer :: pstr => str2 character(len=:), pointer :: pstr2(:) end subroutine two subroutine three() ! implicit none ! Disabled because of PR 46152 character(len=:), allocatable, target :: str1(:) character(len=5), save, target :: str2 character(len=:), pointer :: pstr character(len=:), pointer :: pstr2(:) pstr => str2 pstr2 => str1 str1 = ["abc"] pstr2 => str1 allocate (character(len=77) :: str1(1)) allocate (pstr, source=str2) allocate (pstr, mold=str2) allocate (pstr) ! { dg-error "requires either a type-spec or SOURCE tag" } allocate (character(len=:) :: str1(1)) ! { dg-error "cannot contain a deferred type parameter" } str1 = [ character(len=2) :: "abc" ] str1 = [ character(len=:) :: "abc" ] ! { dg-error "cannot contain a deferred type parameter" } end subroutine three subroutine four() implicit none character(len=:), allocatable, target :: str character(len=:), pointer :: pstr pstr => str str = "abc" if(len(pstr) /= len(str) .or. len(str)/= 3) call abort() str = "abcd" if(len(pstr) /= len(str) .or. len(str)/= 4) call abort() end subroutine four subroutine five() character(len=4) :: str*(:) allocatable :: str end subroutine five