If a non-abstract extension of a abstract derived type fails to implement a deferred binding of the parent type, then ifort 16.0 (and earlier) issue a diagnostic without particularly useful source location information. If the parent type is in the same program unit as the extension with the missing binding, then the compiler will identify the binding in the parent, while if the parent type is in a different program unit, then no line location information is provided at all.
Could this be please changed so that the faulty non-abstract extensiontype is nominated by the error location.
For example:
MODULE p IMPLICIT NONE TYPE, ABSTRACT :: Parent CONTAINS PROCEDURE(intf), DEFERRED, NOPASS :: OOPSIMadeAMistake END TYPE Parent ABSTRACT INTERFACE SUBROUTINE intf END SUBROUTINE intf END INTERFACE END MODULE p MODULE m USE p IMPLICIT NONE TYPE, EXTENDS(Parent) :: A CONTAINS PROCEDURE, NOPASS :: OOPSIMadeAMistake => oops END TYPE A TYPE, EXTENDS(Parent) :: B CONTAINS PROCEDURE, NOPASS :: OOPSIMadeAMistake => oops END TYPE B TYPE, EXTENDS(Parent) :: C CONTAINS PROCEDURE, NOPASS :: OOPSIMadeAMistake => oops END TYPE C TYPE, EXTENDS(Parent) :: D CONTAINS PROCEDURE, NOPASS :: OOPSIMadeAMistake => oops END TYPE D TYPE, EXTENDS(Parent) :: E CONTAINS PROCEDURE, NOPASS :: OOPSIMadeAMistake => oops END TYPE E TYPE, EXTENDS(Parent) :: F CONTAINS PROCEDURE, NOPASS :: OOPSIMadeAMistake => oops END TYPE F TYPE, EXTENDS(Parent) :: G CONTAINS PROCEDURE, NOPASS :: OOPSIMadeAMistake => oops END TYPE G TYPE, EXTENDS(Parent) :: H CONTAINS PROCEDURE, NOPASS :: OOPSIMadeAMistake => oops END TYPE H TYPE, EXTENDS(Parent) :: I CONTAINS PROCEDURE, NOPASS :: O0PSIMadeAMistake => oops END TYPE I TYPE, EXTENDS(Parent) :: J CONTAINS PROCEDURE, NOPASS :: OOPSIMadeAMistake => oops END TYPE J TYPE, EXTENDS(Parent) :: K CONTAINS PROCEDURE, NOPASS :: OOPSIMadeAMistake => oops END TYPE K TYPE, EXTENDS(Parent) :: L CONTAINS PROCEDURE, NOPASS :: OOPSIMadeAMistake => oops END TYPE L CONTAINS SUBROUTINE oops END SUBROUTINE oops END MODULE m
>ifort /check:all /warn:all /standard-semantics "2015-09-02 oops.f90" Intel(R) Visual Fortran Intel(R) 64 Compiler for applications running on Intel(R) 64, Version 16.0 Build 20150815 Copyright (C) 1985-2015 Intel Corporation. All rights reserved. 2015-09-02 oops.f90: error #8322: A deferred binding is inherited by non-abstract type; It must be overridden. [OOPSIMADEAMISTAKE] compilation aborted for 2015-09-02 oops.f90 (code 1)
Ta.