https://gcc.gnu.org/bugzilla/show_bug.cgi?id=96073
--- Comment #6 from Thomas Koenig <tkoenig at gcc dot gnu.org> --- What we have here is, in gfc_check_externals0, (gdb) call debug(def_sym->formal) || symbol: '_formal_0' type spec : (INTEGER 4) attributes: (VARIABLE ARTIFICIAL DUMMY) || symbol: '_formal_1' type spec : (REAL 4) attributes: (VARIABLE ARTIFICIAL DUMMY) (gdb) call debug(sym->formal) || symbol: 'set' type spec : (INTEGER 4) attributes: (VARIABLE DUMMY(IN)) || symbol: 'xmin' type spec : (REAL 4) attributes: (VARIABLE DUMMY(OUT)) so the inferred argument list from the call does not match the interface. And, since the location is not set, we get an ICE on top of it. I think resolution should have found the interface in addition to the EXTERNAL statement.