[Flang][RISCV] Set vscale_range based off zvl*b (#77277)
[llvm-project.git] / flang / test / Semantics / null-init.f90
blobad3f91679a4272c436884aef8ffa0ad2ac2aabe3
1 ! RUN: %python %S/test_errors.py %s %flang_fc1
2 ! Tests valid and invalid NULL initializers
4 module m1
5 implicit none
6 !ERROR: No explicit type declared for 'null'
7 private :: null
8 end module
10 module m2
11 implicit none
12 private :: null
13 integer, pointer :: p => null()
14 end module
16 module m3
17 private :: null
18 integer, pointer :: p => null()
19 end module
21 module m4
22 intrinsic :: null
23 integer, pointer :: p => null()
24 end module
26 module m5
27 external :: null
28 !ERROR: Pointer initializer must be intrinsic NULL()
29 integer, pointer :: p => null()
30 end module
32 module m6
33 !ERROR: Symbol 'null' cannot have both INTRINSIC and EXTERNAL attributes
34 integer, pointer :: p => null()
35 external :: null
36 end module
38 module 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()
47 end module
49 module 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
57 end module
59 module m9a
60 intrinsic :: null
61 contains
62 function foo()
63 integer, pointer :: foo
64 foo => null()
65 end function
66 end module
67 module 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()/
76 end module
78 subroutine 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)/
82 end
84 subroutine 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
91 end subroutine
93 subroutine m12
94 integer, parameter :: j = 1
95 integer, target, save :: null(1)
96 integer, pointer :: p
97 data p/null(j)/ ! ok
98 end subroutine
100 subroutine s13
101 integer, external, pointer :: p1 => null()
102 procedure(), pointer :: p2 => null()
103 end subroutine