| ! { dg-do compile } |
| ! PR fortran/25071 |
| ! Check if actual argument is too short |
| ! |
| program test |
| implicit none |
| character(len=10) :: v |
| character(len=10), target :: x |
| character(len=20), target :: y |
| character(len=30), target :: z |
| character(len=10), pointer :: ptr1 |
| character(len=20), pointer :: ptr2 |
| character(len=30), pointer :: ptr3 |
| character(len=10), allocatable :: alloc1(:) |
| character(len=20), allocatable :: alloc2(:) |
| character(len=30), allocatable :: alloc3(:) |
| call foo(v) ! { dg-warning "actual argument shorter than of dummy" } |
| call foo(x) ! { dg-warning "actual argument shorter than of dummy" } |
| call foo(y) |
| call foo(z) |
| ptr1 => x |
| call foo(ptr1) ! { dg-warning "actual argument shorter than of dummy" } |
| call bar(ptr1) ! { dg-warning "Character length mismatch" } |
| ptr2 => y |
| call foo(ptr2) |
| call bar(ptr2) |
| ptr3 => z |
| call foo(ptr3) |
| call bar(ptr3) ! { dg-warning "Character length mismatch" } |
| allocate(alloc1(1)) |
| allocate(alloc2(1)) |
| allocate(alloc3(1)) |
| call arr(alloc1) ! { dg-warning "Character length mismatch" } |
| call arr(alloc2) |
| call arr(alloc3) ! { dg-warning "Character length mismatch" } |
| contains |
| subroutine foo(y) |
| character(len=20) :: y |
| y = 'hello world' |
| end subroutine |
| subroutine bar(y) |
| character(len=20),pointer :: y |
| y = 'hello world' |
| end subroutine |
| subroutine arr(y) |
| character(len=20),allocatable :: y(:) |
| y(1) = 'hello world' |
| end subroutine |
| end |
| |
| ! Remove -Wstringop-overflow warnings. |
| ! { dg-prune-output "overflows the destination" } |