https://gcc.gnu.org/bugzilla/show_bug.cgi?id=103366
--- Comment #6 from Paul Thomas <pault at gcc dot gnu.org> --- > From F2017: 15.5.2.5 > The actual argument shall be polymorphic if and only if the associated dummy > argument is polymorphic, and either both the actual and dummy arguments > shall be unlimited polymorphic, or the declared type of the actual argument > shall be the same as the declared type of the dummy argument. > > As yet, I have not found the constraints leading to the second error. > > Cheers > > Paul Sorry, cancel that. >From 7.3.2.2: ..... 3 An entity that is declared using the TYPE(*) type specifier is assumed-type and is an unlimited polymorphic entity..... This fixes the problem (my trans-expr.c has a rather substantial patch applied at the moment): case BT_CLASS: if (UNLIMITED_POLY (e)) // Compatible with TYPE(*) { itype = CFI_type_other; // FIXME: Or CFI_type_cptr ? break; } else gcc_unreachable (); case BT_PROCEDURE: case BT_HOLLERITH: case BT_UNION: case BT_BOZ: case BT_UNKNOWN: // FIXME: Really unreachable? Or reachable for type(*) ? If so, CFI_type_other? gcc_unreachable (); // This is where the ICE occurred.