The INTRINSIC attribute identifies a name as an intrinsic procedure and allows you to use specific names of intrinsic procedures as actual arguments.
If you use a specific intrinsic procedure name as an actual argument in a scoping unit, it must have the INTRINSIC attribute. Generic names can have the INTRINSIC attribute, but you cannot pass them as arguments unless they are also specific names.
A generic or specific procedure that has the INTRINSIC attribute keeps its generic or specific properties.
A generic intrinsic procedure that has the INTRINSIC attribute can also be the name of a generic interface block. The generic interface block defines extensions to the generic intrinsic procedure.
PROGRAM MAIN INTRINSIC SIN, ABS INTERFACE ABS LOGICAL FUNCTION MYABS(ARG) LOGICAL ARG END FUNCTION END INTERFACE
LOGICAL LANS,LVAR REAL(8) DANS,DVAR DANS = ABS(DVAR) ! Calls the DABS intrinsic procedure LANS = ABS(LVAR) ! Calls the MYABS external procedure ! Pass intrinsic procedure name to subroutine CALL DOIT(0.5,SIN,X) ! Passes the SIN specific intrinsic END PROGRAM SUBROUTINE DOIT(RIN,OPER,RESULT) INTRINSIC :: MATMUL INTRINSIC COS RESULT = OPER(RIN) END SUBROUTINE