| ! RUN: %python %S/test_errors.py %s %flang_fc1 | |
| ! Check for semantic errors in NULLIFY statements | |
| INTEGER, PARAMETER :: maxvalue=1024 | |
| Type dt | |
| Integer :: l = 3 | |
| End Type | |
| Type t | |
| Type(dt) :: p | |
| End Type | |
| Type(t),Allocatable :: x(:) | |
| Integer :: pi | |
| Procedure(Real) :: prp | |
| Allocate(x(3)) | |
| !ERROR: 'p' may not appear in NULLIFY | |
| !BECAUSE: 'p' is not a pointer | |
| Nullify(x(2)%p) | |
| !ERROR: 'pi' may not appear in NULLIFY | |
| !BECAUSE: 'pi' is not a pointer | |
| Nullify(pi) | |
| !ERROR: 'prp' may not appear in NULLIFY | |
| !BECAUSE: 'prp' is not a pointer | |
| Nullify(prp) | |
| !ERROR: 'maxvalue' may not appear in NULLIFY | |
| !BECAUSE: 'maxvalue' is not a pointer | |
| Nullify(maxvalue) | |
| End Program | |
| ! Make sure that the compiler doesn't crash when NULLIFY is used in a context | |
| ! that has reported errors | |
| module badNullify | |
| interface | |
| function ptrFun() | |
| integer, pointer :: ptrFun | |
| end function | |
| end interface | |
| contains | |
| !ERROR: 'ptrfun' was not declared a separate module procedure | |
| !ERROR: 'ptrfun' is already declared in this scoping unit | |
| module function ptrFun() | |
| integer, pointer :: ptrFun | |
| real :: realVar | |
| nullify(ptrFun) | |
| !ERROR: 'realvar' may not appear in NULLIFY | |
| !BECAUSE: 'realvar' is not a pointer | |
| nullify(realVar) | |
| end function | |
| end module |