From 6829256fb438f4dccfdad5b4392e1f9ce94f1464 Mon Sep 17 00:00:00 2001 From: Craig Burley Date: Sat, 23 May 1998 05:45:45 -0400 Subject: [PATCH] com.c (ffecom_finish_symbol_transform_): Don't transform statement (nested) functions... Sat May 23 06:32:52 1998 Craig Burley * com.c (ffecom_finish_symbol_transform_): Don't transform statement (nested) functions, to avoid gcc compiling them and thus producing linker errors if they refer to undefined exteral functions. But warn if they're unused and -Wunused. From-SVN: r19970 --- gcc/f/ChangeLog | 7 +++++++ gcc/f/com.c | 45 ++++++++++++++++++++++++++++++++++++--------- 2 files changed, 43 insertions(+), 9 deletions(-) diff --git a/gcc/f/ChangeLog b/gcc/f/ChangeLog index b97655f761d..268028ecb57 100644 --- a/gcc/f/ChangeLog +++ b/gcc/f/ChangeLog @@ -1,3 +1,10 @@ +Sat May 23 06:32:52 1998 Craig Burley + + * com.c (ffecom_finish_symbol_transform_): Don't transform + statement (nested) functions, to avoid gcc compiling them + and thus producing linker errors if they refer to undefined + exteral functions. But warn if they're unused and -Wunused. + Tue May 19 14:52:41 1998 Craig Burley * bad.def (FFEBAD_OPEN_UNSUPPORTED, FFEBAD_INQUIRE_UNSUPPORTED, diff --git a/gcc/f/com.c b/gcc/f/com.c index a8a9e97d54c..9d4e9d6f5df 100644 --- a/gcc/f/com.c +++ b/gcc/f/com.c @@ -6678,15 +6678,42 @@ ffecom_finish_symbol_transform_ (ffesymbol s) VAR_DECLs for COMMON variables when we transform them for real use, and therefore we do all the VAR_DECL creating here. */ - if ((ffesymbol_hook (s).decl_tree == NULL_TREE) - && ((ffesymbol_kind (s) != FFEINFO_kindNONE) - || ((ffesymbol_where (s) != FFEINFO_whereNONE) - && (ffesymbol_where (s) != FFEINFO_whereINTRINSIC))) - && (ffesymbol_where (s) != FFEINFO_whereDUMMY)) - /* Not transformed, and not CHARACTER*(*), and not a dummy - argument, which can happen only if the entry point names - it "rides in on" are all invalidated for other reasons. */ - s = ffecom_sym_transform_ (s); + if (ffesymbol_hook (s).decl_tree == NULL_TREE) + { + if (ffesymbol_where (s) == FFEINFO_whereCONSTANT + && (ffesymbol_kind (s) == FFEINFO_kindFUNCTION + || ffesymbol_kind (s) == FFEINFO_kindSUBROUTINE)) + { + /* An unreferenced statement function. If this refers to + an undeclared array, it'll look like a reference to + an external function that might not exist. Even if it + does refer to an non-existent function, it seems silly + to force a linker error when the function won't actually + be called. But before the 1998-05-15 change to egcs/gcc + toplev.c by Mark Mitchell, to fix other problems, this + didn't actually happen, since gcc would defer nested + functions to be compiled later only if needed. With that + change, it makes sense to simply avoid telling the back + end about the statement (nested) function at all. But + if -Wunused is specified, might as well warn about it. */ + + if (warn_unused) + { + ffebad_start (FFEBAD_SFUNC_UNUSED); + ffebad_string (ffesymbol_text (s)); + ffebad_here (0, ffesymbol_where_line (s), ffesymbol_where_column (s)); + ffebad_finish (); + } + } + else if (ffesymbol_kind (s) != FFEINFO_kindNONE + || (ffesymbol_where (s) != FFEINFO_whereNONE + && ffesymbol_where (s) != FFEINFO_whereINTRINSIC + && ffesymbol_where (s) != FFEINFO_whereDUMMY)) + /* Not transformed, and not CHARACTER*(*), and not a dummy + argument, which can happen only if the entry point names + it "rides in on" are all invalidated for other reasons. */ + s = ffecom_sym_transform_ (s); + } if ((ffesymbol_where (s) == FFEINFO_whereCOMMON) && (ffesymbol_hook (s).decl_tree != error_mark_node)) -- 2.30.2