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