1! RUN: %python %S/test_errors.py %s %flang_fc1 2! Tests valid and invalid NULL initializers 3 4module m1 5 implicit none 6 !ERROR: No explicit type declared for 'null' 7 private :: null 8end module 9 10module m2 11 implicit none 12 private :: null 13 integer, pointer :: p => null() 14end module 15 16module m3 17 private :: null 18 integer, pointer :: p => null() 19end module 20 21module m4 22 intrinsic :: null 23 integer, pointer :: p => null() 24end module 25 26module m5 27 external :: null 28 !ERROR: Pointer initializer must be intrinsic NULL() 29 integer, pointer :: p => null() 30end module 31 32module m6 33 !ERROR: Symbol 'null' cannot have both INTRINSIC and EXTERNAL attributes 34 integer, pointer :: p => null() 35 external :: null 36end module 37 38module m7 39 interface 40 !WARNING: The external interface 'null' is not compatible with an earlier definition (incompatible procedure attributes: ImplicitInterface) 41 function null() result(p) 42 integer, pointer :: p 43 end function 44 end interface 45 !ERROR: Pointer initializer must be intrinsic NULL() 46 integer, pointer :: p => null() 47end module 48 49module m8 50 integer, pointer :: p => null() 51 interface 52 !ERROR: 'null' is already declared in this scoping unit 53 function null() result(p) 54 integer, pointer :: p 55 end function 56 end interface 57end module 58 59module m9a 60 intrinsic :: null 61 contains 62 function foo() 63 integer, pointer :: foo 64 foo => null() 65 end function 66end module 67module m9b 68 use m9a, renamed => null, null => foo 69 integer, pointer :: p => renamed() 70 !ERROR: Pointer initializer must be intrinsic NULL() 71 integer, pointer :: q => null() 72 integer, pointer :: d1, d2 73 data d1/renamed()/ 74 !ERROR: An initial data target must be a designator with constant subscripts 75 data d2/null()/ 76end module 77 78subroutine m10 79 real, pointer :: x, y 80 !ERROR: 'null' must be an array or structure constructor if used with non-empty parentheses as a DATA statement constant 81 data x/null(y)/ 82end 83 84subroutine m11 85 type :: null 86 integer :: mold 87 end type 88 type(null) :: obj(2) 89 integer, parameter :: j = 0 90 data obj/null(mold=j), null(j)/ ! both fine 91end subroutine 92 93subroutine m12 94 integer, parameter :: j = 1 95 integer, target, save :: null(1) 96 integer, pointer :: p 97 data p/null(j)/ ! ok 98end subroutine 99 100subroutine s13 101 integer, external, pointer :: p1 => null() 102 procedure(), pointer :: p2 => null() 103end subroutine 104