| ! RUN: %python %S/test_errors.py %s %flang_fc1 -pedantic | |
| ! Tests of selectors whose defining expressions are pointer-valued functions; | |
| ! they must be valid targets, but not pointers. | |
| ! (F'2018 11.1.3.3 p1) "The associating entity does not have the ALLOCATABLE or | |
| ! POINTER attributes; it has the TARGET attribute if and only if the selector | |
| ! is a variable and has either the TARGET or POINTER attribute." | |
| module m1 | |
| type t | |
| contains | |
| procedure, nopass :: iptr | |
| end type | |
| contains | |
| function iptr(n) | |
| integer, intent(in), target :: n | |
| integer, pointer :: iptr | |
| !WARNING: Pointer target is not a definable variable [-Wpointer-to-undefinable] | |
| !BECAUSE: 'n' is an INTENT(IN) dummy argument | |
| iptr => n | |
| end function | |
| subroutine test | |
| type(t) tv | |
| integer, target :: itarget | |
| integer, pointer :: ip | |
| associate (sel => iptr(itarget)) | |
| ip => sel | |
| !ERROR: POINTER= argument of ASSOCIATED() must be a pointer | |
| if (.not. associated(sel)) stop | |
| end associate | |
| associate (sel => tv%iptr(itarget)) | |
| ip => sel | |
| !ERROR: POINTER= argument of ASSOCIATED() must be a pointer | |
| if (.not. associated(sel)) stop | |
| end associate | |
| associate (sel => (iptr(itarget))) | |
| !ERROR: In assignment to object pointer 'ip', the target 'sel' is not an object with POINTER or TARGET attributes | |
| ip => sel | |
| !ERROR: POINTER= argument of ASSOCIATED() must be a pointer | |
| if (.not. associated(sel)) stop | |
| end associate | |
| associate (sel => 0 + iptr(itarget)) | |
| !ERROR: In assignment to object pointer 'ip', the target 'sel' is not an object with POINTER or TARGET attributes | |
| ip => sel | |
| !ERROR: POINTER= argument of ASSOCIATED() must be a pointer | |
| if (.not. associated(sel)) stop | |
| end associate | |
| end subroutine | |
| end module |