1! { dg-do compile }
2! PR fortran/25071
3! Check if actual argument is too short
4!
5        program test
6           implicit none
7           character(len=10) :: v
8           character(len=10), target :: x
9           character(len=20), target :: y
10           character(len=30), target :: z
11           character(len=10), pointer :: ptr1
12           character(len=20), pointer :: ptr2
13           character(len=30), pointer :: ptr3
14           character(len=10), allocatable :: alloc1(:)
15           character(len=20), allocatable :: alloc2(:)
16           character(len=30), allocatable :: alloc3(:)
17           call foo(v) ! { dg-warning "actual argument shorter than of dummy" }
18           call foo(x) ! { dg-warning "actual argument shorter than of dummy" }
19           call foo(y)
20           call foo(z)
21           ptr1 => x
22           call foo(ptr1) ! { dg-warning "actual argument shorter than of dummy" }
23           call bar(ptr1) ! { dg-warning "Character length mismatch" }
24           ptr2 => y
25           call foo(ptr2)
26           call bar(ptr2)
27           ptr3 => z
28           call foo(ptr3)
29           call bar(ptr3) ! { dg-warning "Character length mismatch" }
30           allocate(alloc1(1))
31           allocate(alloc2(1))
32           allocate(alloc3(1))
33           call arr(alloc1) ! { dg-warning "Character length mismatch" }
34           call arr(alloc2)
35           call arr(alloc3) ! { dg-warning "Character length mismatch" }
36        contains
37        subroutine foo(y)
38           character(len=20) :: y
39           y = 'hello world'
40        end subroutine
41        subroutine bar(y)
42           character(len=20),pointer :: y
43           y = 'hello world'
44        end subroutine
45        subroutine arr(y)
46           character(len=20),allocatable :: y(:)
47           y(1) = 'hello world'
48        end subroutine
49       end
50