From 3d67ba1e3b11f434e159e45682579cef695466eb Mon Sep 17 00:00:00 2001 From: Geoffrey Keating Date: Sat, 8 Nov 2003 02:17:51 +0000 Subject: [PATCH] cppfiles.c (pch_open_file): New parameter 'invalid_pch', set it. 2003-11-07 Geoffrey Keating * 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 * gcc.dg/pch/warn-1.c: Allow for more helpful error message. From-SVN: r73353 --- gcc/ChangeLog | 7 +++++++ gcc/cppfiles.c | 34 +++++++++++++++++++++++-------- gcc/testsuite/ChangeLog | 4 ++++ gcc/testsuite/gcc.dg/pch/warn-1.c | 2 +- 4 files changed, 38 insertions(+), 9 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index af24a904bf4..8dfa0a82a61 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2003-11-07 Geoffrey Keating + + * 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 * c-typeck.c (pedantic_lvalue_warning): Deprecate compound diff --git a/gcc/cppfiles.c b/gcc/cppfiles.c index 9db981c099a..f455162be51 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 9cf4afd7b8b..c19b30ad54a 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2003-11-07 Geoffrey Keating + + * gcc.dg/pch/warn-1.c: Allow for more helpful error message. + 2003-11-08 Joseph S. Myers * 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 779577dd8ae..6e895818c63 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) { -- 2.30.2