aboutsummaryrefslogtreecommitdiffstats
path: root/gcc-4.9/gcc/testsuite/gfortran.dg/deferred_type_param_2.f90
blob: 8ac48c3f1532a6919cafabc3f934924c792fd11b (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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
! { 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