cpplib.c (do_include): Treat #include_next in the primary source file as #include...
authorZack Weinberg <zack@rabi.phys.columbia.edu>
Wed, 16 Dec 1998 13:23:47 +0000 (13:23 +0000)
committerDave Brolley <brolley@gcc.gnu.org>
Wed, 16 Dec 1998 13:23:47 +0000 (08:23 -0500)
1998-12-16  Zack Weinberg  <zack@rabi.phys.columbia.edu>
* cpplib.c (do_include): Treat #include_next in the
primary source file as #include plus warning.  Treat
#include_next in a file included by absolute path as an
error.  fp == CPP_NULL_BUFFER is a fatal inconsistency.

From-SVN: r24340

gcc/ChangeLog
gcc/cpplib.c

index 800d6ba4ffd5bc7758c2bf2f15faa12950d7fe12..f1e873ab67a0c786c353e9440f80a490b7dc79a8 100644 (file)
@@ -1,3 +1,10 @@
+1998-12-16  Zack Weinberg  <zack@rabi.phys.columbia.edu>
+
+       * cpplib.c (do_include): Treat #include_next in the
+       primary source file as #include plus warning.  Treat
+       #include_next in a file included by absolute path as an
+       error.  fp == CPP_NULL_BUFFER is a fatal inconsistency.
+
 Wed Dec 16 12:28:54 1998  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
 
        * cccp.c: Don't define MIN/MAX anymore.
index 63c9ff15b320eeb4953989aa36dac8143533cdc4..932f222d8bb84053c4af0cc38224ea5e78471954 100644 (file)
@@ -2969,17 +2969,25 @@ do_include (pfile, keyword)
       break;
 
   if (fp == CPP_NULL_BUFFER (pfile))
-    fp = NULL;
+    {
+      cpp_fatal (pfile, "cpp internal error: fp == NULL_BUFFER in do_include");
+      return 1;
+    }
   
-  /* For #include_next, skip in the search path
-     past the dir in which the containing file was found.  */
-  if (skip_dirs)
+  /* For #include_next, skip in the search path past the dir in which the
+     containing file was found.  Treat files specified using an absolute path
+     as if there are no more directories to search.  Treat the primary source
+     file like any other included source, but generate a warning.  */
+  if (skip_dirs && CPP_PREV_BUFFER(fp) != CPP_NULL_BUFFER (pfile))
     {
-      if (fp)
+      if (fp->ihash->foundhere != ABSOLUTE_PATH)
        search_start = fp->ihash->foundhere->next;
     }
   else
     {
+      if (skip_dirs)
+       cpp_warning (pfile, "#include_next in primary source file");
+      
       if (angle_brackets)
        search_start = CPP_OPTIONS (pfile)->bracket_include;
       else
@@ -4730,8 +4738,12 @@ cpp_start_read (pfile, fname)
   fp = cpp_push_buffer (pfile, NULL, 0);
   if (!fp)
     return 0;
-  if (opts->in_fname == NULL)
-    opts->in_fname = "";
+  if (opts->in_fname == NULL || *opts->in_fname == 0)
+    {
+      opts->in_fname = fname;
+      if (opts->in_fname == NULL)
+       opts->in_fname = "";
+    }
   fp->nominal_fname = fp->fname = opts->in_fname;
   fp->lineno = 0;