http://gcc.gnu.org/bugzilla/show_bug.cgi?id=48112
--- Comment #5 from Tobias Burnus <burnus at gcc dot gnu.org> 2011-04-26 13:50:53 UTC --- (In reply to comment #4) > The crucial part of the patch is: > + /* Avoid double resolution of function result symbols. */ > + if ((sym->result || sym->attr.result) && (sym->ns != gfc_current_ns)) > + return; If one backs out that part, one gets the diagnostic messages twice for class_20.f03 - which was a general issue, unrelated to BT_CLASS. * * * A variant combining both issues (this PR and class_20.f03) is: module module_m type t end type t interface test function test1( ) result( test ) import class(t) :: test end function test1 end interface test end module module_m For that program, only one error should be printed - and no ICE in module writing ... * * * Draft patch; note that resolve_fl_var_and_proc is *only* about diagnostics: --- a/gcc/fortran/resolve.c +++ b/gcc/fortran/resolve.c @@ -9888,0 +9889,5 @@ resolve_fl_var_and_proc (gfc_symbol *sym, int mp_flag) + /* Avoid double diagnostics of function result symbols. */ + if ((sym->result || sym->attr.result) && !sym->attr.dummy + && (sym->ns != gfc_current_ns)) + return SUCCESS; + @@ -11977,5 +11981,0 @@ resolve_symbol (gfc_symbol *sym) - /* Avoid double resolution of function result symbols. */ - if ((sym->result || sym->attr.result) && !sym->attr.dummy - && (sym->ns != gfc_current_ns)) - return;