OSDN Git Service

*** empty log message ***
authorrms <rms@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 23 Mar 1992 03:45:33 +0000 (03:45 +0000)
committerrms <rms@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 23 Mar 1992 03:45:33 +0000 (03:45 +0000)
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@574 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/cccp.c

index 9147e47..54a95d2 100644 (file)
@@ -201,6 +201,7 @@ static void pfatal_with_name ();
 static void perror_with_name ();
 static void print_containing_files ();
 static int lookup_import ();
+static int lookup_include ();
 static int check_preconditions ();
 static void pcfinclude ();
 static void pcstring_used ();
@@ -3730,25 +3731,13 @@ get_filename:
   fname = (char *) xmalloc (max_include_len + flen + 2);
   /* + 2 above for slash and terminating null.  */
 
-  /* See if we already included this file and we can tell in advance
-     (from a #ifndef around its contents last time)
-     that there is no need to include it again.  */
-  {
-    struct file_name_list *l = all_include_files;
-    strncpy (fname, fbeg, flen);
-    fname[flen] = 0;
-    for (; l; l = l->next)
-      if (! strcmp (fname, l->fname)
-         && l->control_macro
-         && lookup (l->control_macro, -1, -1))
-       return 0;
-  }
-
   /* If specified file name is absolute, just open it.  */
 
   if (*fbeg == '/') {
     strncpy (fname, fbeg, flen);
     fname[flen] = 0;
+    if (lookup_include (fname))
+      return 0;
     if (importing)
       f = lookup_import (fname);
     else
@@ -3791,6 +3780,10 @@ get_filename:
        f = open (fname, O_RDONLY, 0666);
       if (f == -2)
        return 0;                       /* Already included this file */
+      if (lookup_include (fname)) {
+       close (f);
+       return 0;
+      }
       if (f >= 0)
        break;
     }
@@ -3921,6 +3914,23 @@ get_filename:
   return 0;
 }
 
+/* Return nonzero if there is no need to include file NAME
+   because it has already been included and it contains a conditional
+   to make a repeated include do nothing.  */
+
+static int
+lookup_include (name)
+     char *name;
+{
+  struct file_name_list *l = all_include_files;
+  for (; l; l = l->next)
+    if (! strcmp (name, l->fname)
+       && l->control_macro
+       && lookup (l->control_macro, -1, -1))
+      return 1;
+  return 0;
+}
+
 /* Process the contents of include file FNAME, already open on descriptor F,
    with output to OP.
    SYSTEM_HEADER_P is 1 if this file was specified using <...>.