OSDN Git Service

Sat May 23 06:32:52 1998 Craig Burley <burley@gnu.org>
authorfx <fx@138bc75d-0d04-0410-961f-82ee72b054a4>
Sat, 23 May 1998 09:45:45 +0000 (09:45 +0000)
committerfx <fx@138bc75d-0d04-0410-961f-82ee72b054a4>
Sat, 23 May 1998 09:45:45 +0000 (09:45 +0000)
* 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.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@19970 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/f/ChangeLog
gcc/f/com.c

index b97655f..268028e 100644 (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,
index a8a9e97..9d4e9d6 100644 (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))