xref: /llvm-project/flang/test/Semantics/null-init.f90 (revision 982614fa47e87ba6760907588f5021e1b6d5911c)
16c1ac141SIvan Zhechev! RUN: %python %S/test_errors.py %s %flang_fc1
25349f991Speter klausler! Tests valid and invalid NULL initializers
35349f991Speter klausler
45349f991Speter klauslermodule m1
55349f991Speter klausler  implicit none
65349f991Speter klausler  !ERROR: No explicit type declared for 'null'
75349f991Speter klausler  private :: null
85349f991Speter klauslerend module
95349f991Speter klausler
105349f991Speter klauslermodule m2
115349f991Speter klausler  implicit none
125349f991Speter klausler  private :: null
135349f991Speter klausler  integer, pointer :: p => null()
145349f991Speter klauslerend module
155349f991Speter klausler
165349f991Speter klauslermodule m3
175349f991Speter klausler  private :: null
185349f991Speter klausler  integer, pointer :: p => null()
195349f991Speter klauslerend module
205349f991Speter klausler
215349f991Speter klauslermodule m4
225349f991Speter klausler  intrinsic :: null
235349f991Speter klausler  integer, pointer :: p => null()
245349f991Speter klauslerend module
255349f991Speter klausler
265349f991Speter klauslermodule m5
275349f991Speter klausler  external :: null
285349f991Speter klausler  !ERROR: Pointer initializer must be intrinsic NULL()
295349f991Speter klausler  integer, pointer :: p => null()
305349f991Speter klauslerend module
315349f991Speter klausler
325349f991Speter klauslermodule m6
335349f991Speter klausler  !ERROR: Symbol 'null' cannot have both INTRINSIC and EXTERNAL attributes
345349f991Speter klausler  integer, pointer :: p => null()
355349f991Speter klausler  external :: null
365349f991Speter klauslerend module
375349f991Speter klausler
385349f991Speter klauslermodule m7
395349f991Speter klausler  interface
40*982614faSPeter Klausler    !WARNING: The external interface 'null' is not compatible with an earlier definition (incompatible procedure attributes: ImplicitInterface)
415349f991Speter klausler    function null() result(p)
425349f991Speter klausler      integer, pointer :: p
435349f991Speter klausler    end function
445349f991Speter klausler  end interface
455349f991Speter klausler  !ERROR: Pointer initializer must be intrinsic NULL()
465349f991Speter klausler  integer, pointer :: p => null()
475349f991Speter klauslerend module
485349f991Speter klausler
495349f991Speter klauslermodule m8
505349f991Speter klausler  integer, pointer :: p => null()
515349f991Speter klausler  interface
525349f991Speter klausler    !ERROR: 'null' is already declared in this scoping unit
535349f991Speter klausler    function null() result(p)
545349f991Speter klausler      integer, pointer :: p
555349f991Speter klausler    end function
565349f991Speter klausler  end interface
575349f991Speter klauslerend module
585349f991Speter klausler
595349f991Speter klauslermodule m9a
605349f991Speter klausler  intrinsic :: null
615349f991Speter klausler contains
625349f991Speter klausler  function foo()
635349f991Speter klausler    integer, pointer :: foo
645349f991Speter klausler    foo => null()
655349f991Speter klausler  end function
665349f991Speter klauslerend module
675349f991Speter klauslermodule m9b
685349f991Speter klausler  use m9a, renamed => null, null => foo
695349f991Speter klausler  integer, pointer :: p => renamed()
705349f991Speter klausler  !ERROR: Pointer initializer must be intrinsic NULL()
715349f991Speter klausler  integer, pointer :: q => null()
725349f991Speter klausler  integer, pointer :: d1, d2
735349f991Speter klausler  data d1/renamed()/
745349f991Speter klausler  !ERROR: An initial data target must be a designator with constant subscripts
755349f991Speter klausler  data d2/null()/
765349f991Speter klauslerend module
77a94b721dSpeter klausler
78a94b721dSpeter klauslersubroutine m10
79a94b721dSpeter klausler  real, pointer :: x, y
80a94b721dSpeter klausler  !ERROR: 'null' must be an array or structure constructor if used with non-empty parentheses as a DATA statement constant
81a94b721dSpeter klausler  data x/null(y)/
82a94b721dSpeter klauslerend
83a94b721dSpeter klausler
84a94b721dSpeter klauslersubroutine m11
85a94b721dSpeter klausler  type :: null
86a94b721dSpeter klausler    integer :: mold
87a94b721dSpeter klausler  end type
88a94b721dSpeter klausler  type(null) :: obj(2)
89a94b721dSpeter klausler  integer, parameter :: j = 0
90a94b721dSpeter klausler  data obj/null(mold=j), null(j)/ ! both fine
91a94b721dSpeter klauslerend subroutine
92a94b721dSpeter klausler
93a94b721dSpeter klauslersubroutine m12
94a94b721dSpeter klausler  integer, parameter :: j = 1
95a94b721dSpeter klausler  integer, target, save :: null(1)
96a94b721dSpeter klausler  integer, pointer :: p
97a94b721dSpeter klausler  data p/null(j)/ ! ok
98a94b721dSpeter klauslerend subroutine
990406c0cdSPeter Klausler
1000406c0cdSPeter Klauslersubroutine s13
1010406c0cdSPeter Klausler  integer, external, pointer :: p1 => null()
1020406c0cdSPeter Klausler  procedure(), pointer :: p2 => null()
1030406c0cdSPeter Klauslerend subroutine
104