cppfiles.c (pch_open_file): New parameter 'invalid_pch', set it.
authorGeoffrey Keating <geoffk@apple.com>
Sat, 8 Nov 2003 02:17:51 +0000 (02:17 +0000)
committerGeoffrey Keating <geoffk@gcc.gnu.org>
Sat, 8 Nov 2003 02:17:51 +0000 (02:17 +0000)
2003-11-07  Geoffrey Keating  <geoffk@apple.com>

* cppfiles.c (pch_open_file): New parameter 'invalid_pch', set it.
(find_file_in_dir): Likewise.
(_cpp_find_file): Print message if no header file is found
but an invalid PCH file was.

2003-11-07  Geoffrey Keating  <geoffk@apple.com>

* gcc.dg/pch/warn-1.c: Allow for more helpful error message.

From-SVN: r73353

gcc/ChangeLog
gcc/cppfiles.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/pch/warn-1.c

index af24a904bf458cc210dfe9749f369f124015ce8a..8dfa0a82a6133d88e37cb583cdd653efdda229a1 100644 (file)
@@ -1,3 +1,10 @@
+2003-11-07  Geoffrey Keating  <geoffk@apple.com>
+
+       * cppfiles.c (pch_open_file): New parameter 'invalid_pch', set it.
+       (find_file_in_dir): Likewise.
+       (_cpp_find_file): Print message if no header file is found
+       but an invalid PCH file was.
+
 2003-11-08  Joseph S. Myers  <jsm@polyomino.org.uk>
 
        * c-typeck.c (pedantic_lvalue_warning): Deprecate compound
index 9db981c099ad28ff4bf9555e3ef89bf5e04de586..f455162be5193dde75d942363b1909c08ea17e39 100644 (file)
@@ -154,8 +154,10 @@ struct file_hash_entry
 };
 
 static bool open_file (_cpp_file *file);
-static bool pch_open_file (cpp_reader *pfile, _cpp_file *file);
-static bool find_file_in_dir (cpp_reader *pfile, _cpp_file *file);
+static bool pch_open_file (cpp_reader *pfile, _cpp_file *file,
+                          bool *invalid_pch);
+static bool find_file_in_dir (cpp_reader *pfile, _cpp_file *file,
+                             bool *invalid_pch);
 static bool read_file_guts (cpp_reader *pfile, _cpp_file *file);
 static bool read_file (cpp_reader *pfile, _cpp_file *file);
 static bool should_stack_file (cpp_reader *, _cpp_file *file, bool import);
@@ -234,9 +236,13 @@ open_file (_cpp_file *file)
   return false;
 }
 
-/* Temporary PCH intercept of opening a file.  */
+/* Temporary PCH intercept of opening a file.  Try to find a PCH file
+   based on FILE->name and FILE->dir, and test those found for
+   validity using PFILE->cb.valid_pch.  Return true iff a valid file is
+   found.  Set *INVALID_PCH if a PCH file is found but wasn't valid.  */
+
 static bool
-pch_open_file (cpp_reader *pfile, _cpp_file *file)
+pch_open_file (cpp_reader *pfile, _cpp_file *file, bool *invalid_pch)
 {
   static const char extension[] = ".gch";
   const char *path = file->path;
@@ -285,6 +291,7 @@ pch_open_file (cpp_reader *pfile, _cpp_file *file)
          closedir (pchdir);
        }
       file->pch |= valid;
+      *invalid_pch |= ! valid;
     }
 
   if (valid)
@@ -297,9 +304,11 @@ pch_open_file (cpp_reader *pfile, _cpp_file *file)
 
 /* Try to open the path FILE->name appended to FILE->dir.  This is
    where remap and PCH intercept the file lookup process.  Return true
-   if the file was found, whether or not the open was successful.  */
+   if the file was found, whether or not the open was successful.  
+   Set *INVALID_PCH to true if a PCH file is found but wasn't valid.  */
+
 static bool
-find_file_in_dir (cpp_reader *pfile, _cpp_file *file)
+find_file_in_dir (cpp_reader *pfile, _cpp_file *file, bool *invalid_pch)
 {
   char *path;
 
@@ -309,7 +318,7 @@ find_file_in_dir (cpp_reader *pfile, _cpp_file *file)
     path = append_file_to_dir (file->name, file->dir);
 
   file->path = path;
-  if (pch_open_file (pfile, file))
+  if (pch_open_file (pfile, file, invalid_pch))
     return true;
 
   if (open_file (file))
@@ -351,6 +360,7 @@ _cpp_find_file (cpp_reader *pfile, const char *fname, cpp_dir *start_dir, bool f
 {
   struct file_hash_entry *entry, **hash_slot;
   _cpp_file *file;
+  bool invalid_pch = false;
 
   /* Ensure we get no confusion between cached files and directories.  */
   if (start_dir == NULL)
@@ -369,13 +379,21 @@ _cpp_find_file (cpp_reader *pfile, const char *fname, cpp_dir *start_dir, bool f
   /* Try each path in the include chain.  */
   for (; !fake ;)
     {
-      if (find_file_in_dir (pfile, file))
+      if (find_file_in_dir (pfile, file, &invalid_pch))
        break;
 
       file->dir = file->dir->next;
       if (file->dir == NULL)
        {
          open_file_failed (pfile, file);
+         if (invalid_pch)
+           {
+             cpp_error (pfile, CPP_DL_ERROR, 
+              "One or more PCH files were found, but they were invalid.");
+             if (! cpp_get_options (pfile)->warn_invalid_pch)
+               cpp_error (pfile, CPP_DL_ERROR, 
+                          "Use -Winvalid-pch for more information.");
+           }
          break;
        }
 
index 9cf4afd7b8baba70e36f1efb53f157bff6e15326..c19b30ad54a7fc6dbbc093da8c2f4122043927eb 100644 (file)
@@ -1,3 +1,7 @@
+2003-11-07  Geoffrey Keating  <geoffk@apple.com>
+
+       * gcc.dg/pch/warn-1.c: Allow for more helpful error message.
+
 2003-11-08  Joseph S. Myers  <jsm@polyomino.org.uk>
 
        * gcc.dg/compound-lvalue-1.c: New test.
index 779577dd8aec18223c7d129f4cb394bb3cfe69f4..6e895818c63b222dab76b334996e12f598465437 100644 (file)
@@ -2,7 +2,7 @@
 
 #define DEFINED_VALUE 3
 
-#include "warn-1.h"/* { dg-error "not used because `DEFINED_VALUE' is defined|No such file" } */
+#include "warn-1.h"/* { dg-error "not used because `DEFINED_VALUE' is defined|No such file|they were invalid" } */
 
 int main(void) 
 {