https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66605
Manuel López-Ibáñez <manu at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|UNCONFIRMED |NEW Last reconfirmed| |2015-06-20 CC| |manu at gcc dot gnu.org Ever confirmed|0 |1 --- Comment #2 from Manuel López-Ibáñez <manu at gcc dot gnu.org> --- The problem is that 0x6b9191 gfc_generate_function_code(gfc_namespace*) /home/manuel/test1/pristine/gcc/fortran/trans-decl.c:6021 invokes code that may generate warnings from the middle-end (like -Wunused-parameter), however, gfc_diagnostics_finish has not been called yet. I don't know the Fortran FE well enough to decide whether gfc_diagnostics_finish should be called earlier (or are fortran diagnostics expected after this point?), or we should special case this call by using something like: Index: error.c =================================================================== --- error.c (revision 224467) +++ error.c (working copy) @@ -1461,21 +1461,27 @@ gfc_errors_to_warnings (bool f) { warnings_not_errors = f; } void -gfc_diagnostics_init (void) +gfc_diagnostics_defaults (void) { diagnostic_starter (global_dc) = gfc_diagnostic_starter; diagnostic_finalizer (global_dc) = gfc_diagnostic_finalizer; diagnostic_format_decoder (global_dc) = gfc_format_decoder; global_dc->caret_chars[0] = '1'; global_dc->caret_chars[1] = '2'; +} + +void +gfc_diagnostics_init (void) +{ pp_warning_buffer = new (XNEW (output_buffer)) output_buffer (); pp_warning_buffer->flush_p = false; pp_error_buffer = &(error_buffer.buffer); pp_error_buffer->flush_p = false; + gfc_diagnostics_defaults (); } void gfc_diagnostics_finish (void) { Index: trans-decl.c =================================================================== --- trans-decl.c (revision 224467) +++ trans-decl.c (working copy) @@ -6016,11 +6016,15 @@ gfc_generate_function_code (gfc_namespac the cgraph node for this function. */ if (!has_coarray_vars || flag_coarray != GFC_FCOARRAY_LIB) (void) cgraph_node::create (fndecl); } else - cgraph_node::finalize_function (fndecl, true); + { + gfc_diagnostics_finish (); + cgraph_node::finalize_function (fndecl, true); + gfc_diagnostics_defaults (); + } gfc_trans_use_stmts (ns); gfc_traverse_ns (ns, gfc_emit_parameter_debug_info); if (sym->attr.is_main_program)