aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog7
-rw-r--r--gcc/cppfiles.c34
-rw-r--r--gcc/testsuite/ChangeLog4
-rw-r--r--gcc/testsuite/gcc.dg/pch/warn-1.c2
4 files changed, 38 insertions, 9 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index af24a90..8dfa0a8 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -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
diff --git a/gcc/cppfiles.c b/gcc/cppfiles.c
index 9db981c..f455162 100644
--- a/gcc/cppfiles.c
+++ b/gcc/cppfiles.c
@@ -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;
}
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 9cf4afd..c19b30a 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -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.
diff --git a/gcc/testsuite/gcc.dg/pch/warn-1.c b/gcc/testsuite/gcc.dg/pch/warn-1.c
index 779577d..6e89581 100644
--- a/gcc/testsuite/gcc.dg/pch/warn-1.c
+++ b/gcc/testsuite/gcc.dg/pch/warn-1.c
@@ -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)
{