Quantcast
Channel: Intel® Fortran Compiler
Viewing all articles
Browse latest Browse all 3270

Identifying location in source with error 8322 (missing deferred binding)

$
0
0

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.


Viewing all articles
Browse latest Browse all 3270

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>