The generic capabilities of Fortran 90 are very advanced, however, polymorphism is not inherent in the language and must be programmed by the user. Specific procedures must always be user-written and added to the generic interface. In addition Fortran 90 does not support dynamic binding, an example of this is the inability to resolve generic procedure calls at run-time. (The standard forbids generic procedure names to be used as actual procedure arguments, the specific name must be used instead.) Dynamic binding is generally thought to be an expensive feature to have in the language and is not included due to efficiency concerns.
Many instances of polymorphism are ruled out due to the lack of subtypes.