http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59720
--- Comment #6 from janus at gcc dot gnu.org ---
To add to this discussion, here are two examples from the F08 standard (section
C.9.6):
module fruits
type :: fruit
end type
type, extends(fruit) :: apple
end type
type, extends(fruit) :: pear
end type
type, extends(pear) :: bosc
end type
INTERFACE BAD6 ! this interface is invalid !
SUBROUTINE S6A(X,Y)
import :: pear
CLASS(PEAR) :: X,Y
END SUBROUTINE S6A
SUBROUTINE S6B(X,Y)
import :: fruit, bosc
CLASS(FRUIT) :: X
CLASS(BOSC) :: Y
END SUBROUTINE S6B
END INTERFACE BAD6
INTERFACE GOOD7
SUBROUTINE S7A(X,Y,Z)
import :: pear
CLASS(PEAR) :: X,Y,Z
END SUBROUTINE S7A
SUBROUTINE S7B(X,Z,W)
import :: fruit, bosc, apple
CLASS(FRUIT) :: X
CLASS(BOSC) :: Z
CLASS(APPLE),OPTIONAL :: W
END SUBROUTINE S7B
END INTERFACE GOOD7
end
gfortran correctly rejects the first one and allows the second (both with and
without the patch in comment 2).
However, ifort 12.1 seems to accept both, which clearly violates the F08
standard. I also tried flags like -std03 and -std08, without any effect. Are
there other flags to force a more strict adherence to the standard?
Is anyone able to check other compilers?