| ! { dg-do compile } |
| ! PR fortran/55978 |
| ! |
| ! Passing of NULL() with and without MOLD as actual argument |
| ! |
| ! Testcase derived from pr55978 comment#16 |
| |
| program pr55978_c16 |
| implicit none |
| |
| integer, pointer :: p(:) |
| integer, allocatable :: a(:) |
| character(10), pointer :: c |
| character(10), pointer :: cp(:) |
| |
| type t |
| integer, pointer :: p(:) |
| integer, allocatable :: a(:) |
| end type |
| |
| type(t) :: d |
| |
| ! (1) pointer |
| p => null() |
| call sub (p) |
| |
| ! (2) allocatable |
| call sub (a) |
| call sub (d%a) |
| |
| ! (3) pointer component |
| d%p => null () |
| call sub (d%p) |
| |
| ! (4) NULL |
| call sub (null (a)) ! OK |
| call sub (null (p)) ! OK |
| call sub (null (d%a)) ! OK |
| call sub (null (d%p)) ! OK |
| call sub (null ()) ! was erroneously rejected with: |
| ! Actual argument contains too few elements for dummy argument 'x' (1/4) |
| |
| call bla (null(c)) |
| call bla (null()) ! was erroneously rejected with: |
| ! Actual argument contains too few elements for dummy argument 'x' (1/10) |
| |
| call foo (null(cp)) |
| call foo (null()) |
| |
| call bar (null(cp)) |
| call bar (null()) ! was erroneously rejected with: |
| ! Actual argument contains too few elements for dummy argument 'x' (1/70) |
| |
| contains |
| |
| subroutine sub(x) |
| integer, intent(in), optional :: x(4) |
| if (present (x)) stop 1 |
| end |
| |
| subroutine bla(x) |
| character(len=10), intent(in), optional :: x |
| if (present (x)) stop 2 |
| end |
| |
| subroutine foo(x) |
| character(len=10), intent(in), optional :: x(:) |
| if (present (x)) stop 3 |
| end |
| |
| subroutine bar(x) |
| character(len=10), intent(in), optional :: x(7) |
| if (present (x)) stop 4 |
| end |
| |
| end |