http://gcc.gnu.org/bugzilla/show_bug.cgi?id=51995
--- Comment #13 from Dominique d'Humieres <dominiq at lps dot ens.fr> 2012-01-25 20:23:02 UTC --- Reduced test case exhibiting the ICE: MODULE factory_pattern TYPE CFactory PRIVATE CHARACTER(len=20) :: factory_type !! Descriptive name for database CLASS(Connection), POINTER :: connection_type !! Which type of database ? CONTAINS !! Note 'class' not 'type' ! PROCEDURE :: create_connection !! Connect to database END TYPE CFactory TYPE, ABSTRACT :: Connection CONTAINS PROCEDURE(generic_desc), DEFERRED, PASS(self) :: description END TYPE Connection ABSTRACT INTERFACE SUBROUTINE generic_desc(self) IMPORT :: Connection CLASS(Connection), INTENT(in) :: self END SUBROUTINE generic_desc END INTERFACE !! An Oracle connection TYPE, EXTENDS(Connection) :: OracleConnection CONTAINS PROCEDURE, PASS(self) :: description => oracle_desc END TYPE OracleConnection CONTAINS FUNCTION create_connection(self) RESULT(ptr) CLASS(CFactory) :: self CLASS(Connection), POINTER :: ptr END FUNCTION create_connection SUBROUTINE oracle_desc(self) CLASS(OracleConnection), INTENT(in) :: self END SUBROUTINE oracle_desc END MODULE factory_pattern