| ! 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 |
| !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 |