1! RUN: %python %S/test_errors.py %s %flang_fc1 2! 15.4.2.2. Test that errors are reported when an explicit interface 3! is not provided for an external procedure that requires an explicit 4! interface (the definition needs to be visible so that the compiler 5! can detect the violation). 6 7subroutine foo(a_pointer) 8 real, pointer :: a_pointer(:) 9end subroutine 10 11subroutine bar(a_pointer) 12 procedure(real), pointer :: a_pointer 13end subroutine 14 15subroutine baz(proc) 16 external :: proc 17 real, optional :: proc 18end subroutine 19 20subroutine test() 21 real, pointer :: a_pointer(:) 22 real, pointer :: an_array(:) 23 intrinsic :: sin 24 25 ! This call would be allowed if the interface was explicit here, 26 ! but its handling with an implicit interface is different (no 27 ! descriptor involved, copy-in/copy-out...) 28 29 !ERROR: References to the procedure 'foo' require an explicit interface 30 !BECAUSE: a dummy argument has the allocatable, asynchronous, optional, pointer, target, value, or volatile attribute 31 call foo(a_pointer) 32 33 ! This call would be error if the interface was explicit here. 34 35 !ERROR: References to the procedure 'foo' require an explicit interface 36 !BECAUSE: a dummy argument has the allocatable, asynchronous, optional, pointer, target, value, or volatile attribute 37 call foo(an_array) 38 39 !ERROR: References to the procedure 'bar' require an explicit interface 40 !BECAUSE: a dummy procedure is optional or a pointer 41 !WARNING: If the procedure's interface were explicit, this reference would be in error 42 !BECAUSE: Actual argument associated with procedure pointer dummy argument 'a_pointer=' must be a pointer unless INTENT(IN) 43 call bar(sin) 44 45 !ERROR: References to the procedure 'baz' require an explicit interface 46 !BECAUSE: a dummy procedure is optional or a pointer 47 call baz(sin) 48end subroutine 49