1! { dg-do run } 2! { dg-options "-std=f2008 " } 3! 4! Passing a null pointer or deallocated variable to an 5! optional, non-pointer, non-allocatable dummy. 6! 7program test 8 implicit none 9 integer, pointer :: ps => NULL(), pa(:) => NULL() 10 integer, allocatable :: as, aa(:) 11 12 call scalar(ps) 13 call scalar(as) 14 call scalar() 15 call scalar(NULL()) 16 17 call assumed_size(pa) 18 call assumed_size(aa) 19 call assumed_size() 20 call assumed_size(NULL(pa)) 21 22 call assumed_shape(pa) 23 call assumed_shape(aa) 24 call assumed_shape() 25 call assumed_shape(NULL()) 26 27 call ptr_func(.true., ps) 28 call ptr_func(.true., null()) 29 call ptr_func(.false.) 30contains 31 subroutine scalar(a) 32 integer, optional :: a 33 if (present(a)) STOP 1 34 end subroutine scalar 35 subroutine assumed_size(a) 36 integer, optional :: a(*) 37 if (present(a)) STOP 2 38 end subroutine assumed_size 39 subroutine assumed_shape(a) 40 integer, optional :: a(:) 41 if (present(a)) STOP 3 42 end subroutine assumed_shape 43 subroutine ptr_func(is_psnt, a) 44 integer, optional, pointer :: a 45 logical :: is_psnt 46 if (is_psnt .neqv. present(a)) STOP 4 47 end subroutine ptr_func 48end program test 49