com.c (ffecom_finish_symbol_transform_): Don't transform statement (nested) functions...

Sat May 23 06:32:52 1998  Craig Burley  <burley@gnu.org>
	* 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
This commit is contained in:
Craig Burley 1998-05-23 05:45:45 -04:00 committed by Dave Love
parent e125ac2661
commit 6829256fb4
2 changed files with 43 additions and 9 deletions

View File

@ -1,3 +1,10 @@
Sat May 23 06:32:52 1998 Craig Burley <burley@gnu.org>
* 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 <burley@gnu.org>
* bad.def (FFEBAD_OPEN_UNSUPPORTED, FFEBAD_INQUIRE_UNSUPPORTED,

View File

@ -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))