1*1c530b3dSPeter Klausler! RUN: %python %S/test_errors.py %s %flang_fc1 2*1c530b3dSPeter Klauslermodule m 3*1c530b3dSPeter Klausler type dt 4*1c530b3dSPeter Klausler procedure(explicit), pointer, nopass :: p 5*1c530b3dSPeter Klausler end type 6*1c530b3dSPeter Klausler contains 7*1c530b3dSPeter Klausler integer function one() 8*1c530b3dSPeter Klausler one = 1 9*1c530b3dSPeter Klausler end 10*1c530b3dSPeter Klausler function onePtr() 11*1c530b3dSPeter Klausler procedure(one), pointer :: onePtr 12*1c530b3dSPeter Klausler onePtr => one 13*1c530b3dSPeter Klausler end 14*1c530b3dSPeter Klausler function explicit 15*1c530b3dSPeter Klausler character(:), allocatable :: explicit 16*1c530b3dSPeter Klausler explicit = "abc" 17*1c530b3dSPeter Klausler end 18*1c530b3dSPeter Klauslerend 19*1c530b3dSPeter Klausler 20*1c530b3dSPeter Klauslerprogram test 21*1c530b3dSPeter Klausler use m 22*1c530b3dSPeter Klausler procedure(), pointer :: p0 23*1c530b3dSPeter Klausler procedure(one), pointer :: p1 24*1c530b3dSPeter Klausler procedure(integer), pointer :: p2 25*1c530b3dSPeter Klausler procedure(explicit), pointer :: p3 26*1c530b3dSPeter Klausler external implicit 27*1c530b3dSPeter Klausler type(dt) x 28*1c530b3dSPeter Klausler p0 => one ! ok 29*1c530b3dSPeter Klausler p0 => onePtr() ! ok 30*1c530b3dSPeter Klausler p0 => implicit ! ok 31*1c530b3dSPeter Klausler !ERROR: Procedure pointer 'p0' with implicit interface may not be associated with procedure designator 'explicit' with explicit interface that cannot be called via an implicit interface 32*1c530b3dSPeter Klausler p0 => explicit 33*1c530b3dSPeter Klausler p1 => one ! ok 34*1c530b3dSPeter Klausler p1 => onePtr() ! ok 35*1c530b3dSPeter Klausler p1 => implicit ! ok 36*1c530b3dSPeter Klausler !ERROR: Function pointer 'p1' associated with incompatible function designator 'explicit': function results have incompatible attributes 37*1c530b3dSPeter Klausler p1 => explicit 38*1c530b3dSPeter Klausler p2 => one ! ok 39*1c530b3dSPeter Klausler p2 => onePtr() ! ok 40*1c530b3dSPeter Klausler p2 => implicit ! ok 41*1c530b3dSPeter Klausler !ERROR: Function pointer 'p2' associated with incompatible function designator 'explicit': function results have incompatible attributes 42*1c530b3dSPeter Klausler p2 => explicit 43*1c530b3dSPeter Klausler !ERROR: Function pointer 'p3' associated with incompatible function designator 'one': function results have incompatible attributes 44*1c530b3dSPeter Klausler p3 => one 45*1c530b3dSPeter Klausler !ERROR: Procedure pointer 'p3' associated with result of reference to function 'oneptr' that is an incompatible procedure pointer: function results have incompatible attributes 46*1c530b3dSPeter Klausler p3 => onePtr() 47*1c530b3dSPeter Klausler p3 => explicit ! ok 48*1c530b3dSPeter Klausler !ERROR: Procedure pointer 'p3' with explicit interface that cannot be called via an implicit interface cannot be associated with procedure designator with an implicit interface 49*1c530b3dSPeter Klausler p3 => implicit 50*1c530b3dSPeter Klausler !ERROR: Procedure pointer 'p' with explicit interface that cannot be called via an implicit interface cannot be associated with procedure designator with an implicit interface 51*1c530b3dSPeter Klausler x = dt(implicit) 52*1c530b3dSPeter Klausler !ERROR: Procedure pointer 'p' with explicit interface that cannot be called via an implicit interface cannot be associated with procedure designator with an implicit interface 53*1c530b3dSPeter Klausler x%p => implicit 54*1c530b3dSPeter Klauslerend 55