Resolution of procedure references
The subprogram name in a procedure reference is either established to be generic, established to be only specific, or not established.
A subprogram name is established to be generic in a scoping unit
if one or more of the following cases is true:
- The scoping unit has an interface block with that name.
- The name of the subprogram is the same as the name of a generic intrinsic procedure that is specified in the scoping unit with the INTRINSIC attribute.
- The scoping unit accesses the generic name from a module through use association.
- There are no declarations of the subprogram name in the scoping unit, but the name is established to be generic in the host scoping unit.
A subprogram name is established to be only specific in a scoping
unit when it has not been established to be generic and one of the
following cases is true:
- An interface body in the scoping unit has the same name.
- There is a statement function, module procedure, or an internal subprogram in the scoping unit that has the same name.
- The name of the subprogram is the same as the name of a specific intrinsic procedure that is specified with the INTRINSIC attribute in the scoping unit.
- The scoping unit contains an EXTERNAL statement with the subprogram name.
- The scoping unit accesses the specific name from a module through use association.
- There are no declarations of the subprogram name in the scoping unit, but the name is established to be specific in the host scoping unit.
If a subprogram name is not established to be either generic nor specific, it is not established.