1! { dg-do run } 2! { dg-options "-std=legacy" } 3! 4! Tests the fix for PR31209, in which an ICE would result because 5! the reference to the pointer function f would be indirected, as 6! if it were the result that is being passed. 7! 8! COntributed by Joost VandeVondele <jv244@cam.ac.uk> 9! 10FUNCTION F() RESULT(RES) 11 INTEGER, POINTER :: RES 12 ALLOCATE(RES) 13 RES=2 14END FUNCTION F 15 16SUBROUTINE S1(f,*,*) 17 INTERFACE 18 FUNCTION F() RESULT(RES) 19 INTEGER, POINTER :: RES 20 END FUNCTION F 21 END INTERFACE 22 RETURN F() 23END SUBROUTINE 24 25PROGRAM TEST 26 INTERFACE 27 FUNCTION F() RESULT(RES) 28 INTEGER, POINTER :: RES 29 END FUNCTION F 30 END INTERFACE 31 32 33 INTERFACE 34 SUBROUTINE S1(f,*,*) 35 INTERFACE 36 FUNCTION F() RESULT(RES) 37 INTEGER, POINTER :: RES 38 END FUNCTION F 39 END INTERFACE 40 END SUBROUTINE 41 END INTERFACE 42 43 CALL S1(F,*1,*2) 44 45 1 CONTINUE 46 CALL ABORT() 47 48 GOTO 3 49 2 CONTINUE 50 51 3 CONTINUE 52END 53 54