Ifort complains that the name `node` inside the interface body for `two` isn't a type. I think it is getting confused by the use of `node` as a dummy argument in the previous interface body.
MODULE m IMPLICIT NONE TYPE :: Node END TYPE Node INTERFACE MODULE SUBROUTINE one(node) INTEGER :: node END SUBROUTINE one MODULE SUBROUTINE two(arg) TYPE(Node) :: arg END SUBROUTINE two END INTERFACE END MODULE m
>ifort /check:all /warn:all /standard-semantics "2016-01-25 node.f90" Intel(R) Visual Fortran Intel(R) 64 Compiler for applications running on Intel(R) 64, Version 16.0 Build 20151021 Copyright (C) 1985-2015 Intel Corporation. All rights reserved. 2016-01-25 node.f90(13): error #6463: This is not a derived type name. [NODE] TYPE(Node) :: arg -----------^ 2016-01-25 node.f90(12): warning #6717: This name has not been given an explicit type. [ARG] MODULE SUBROUTINE two(arg) --------------------------^ compilation aborted for 2016-01-25 node.f90 (code 1)