1! RUN: %S/test_errors.sh %s %t %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    function null() result(p)
41      integer, pointer :: p
42    end function
43  end interface
44  !ERROR: Pointer initializer must be intrinsic NULL()
45  integer, pointer :: p => null()
46end module
47
48module m8
49  integer, pointer :: p => null()
50  interface
51    !ERROR: 'null' is already declared in this scoping unit
52    function null() result(p)
53      integer, pointer :: p
54    end function
55  end interface
56end module
57
58module m9a
59  intrinsic :: null
60 contains
61  function foo()
62    integer, pointer :: foo
63    foo => null()
64  end function
65end module
66module m9b
67  use m9a, renamed => null, null => foo
68  integer, pointer :: p => renamed()
69  !ERROR: Pointer initializer must be intrinsic NULL()
70  integer, pointer :: q => null()
71  integer, pointer :: d1, d2
72  data d1/renamed()/
73  !ERROR: An initial data target must be a designator with constant subscripts
74  data d2/null()/
75end module
76