aboutsummaryrefslogtreecommitdiff
path: root/libcpp/pch.c
diff options
context:
space:
mode:
authorGeoffrey Keating <geoffk@apple.com>2004-06-22 06:51:56 +0000
committerGeoffrey Keating <geoffk@gcc.gnu.org>2004-06-22 06:51:56 +0000
commitc0d578e68f92d8add050826588146be0a6fd1ee0 (patch)
tree33b0e3a2356eea4890c97f802528ed3f9e8ceebd /libcpp/pch.c
parentf6144c34c82da903797566d44901dad231a7e4a9 (diff)
downloadgcc-c0d578e68f92d8add050826588146be0a6fd1ee0.zip
gcc-c0d578e68f92d8add050826588146be0a6fd1ee0.tar.gz
gcc-c0d578e68f92d8add050826588146be0a6fd1ee0.tar.bz2
c-opts.c (c_common_handle_option): Handle -fpch-preprocess.
2004-06-21 Geoffrey Keating <geoffk@apple.com> * c-opts.c (c_common_handle_option): Handle -fpch-preprocess. * c-common.h (flag_pch_preprocess): Declare. (c_common_pch_pragma): Likewise. * c-common.c (flag_pch_preprocess): New. * c-pch.c (c_common_read_pch): Support -fpreprocess-only. (c_common_pch_pragma): New. * c-ppoutput.c (cb_read_pch): New. (init_pp_output): Support -fpch-preprocess. * c-pragma.c (init_pragma): Support #pragma GNUC pch_preprocess. * c.opt (fpch-preprocess): New. * gcc.c (cpp_options): When save-temps, pass -fpch-preprocess. * doc/cppopts.texi: Document -fpch-preprocess. * doc/invoke.texi (Precompiled Headers): Mention that -fpreprocessed is safe for PCH. Mention that if an option is listed as safe that doesn't mean it does what you expect. Index: gcc/testsuite/ChangeLog 2004-06-21 Geoffrey Keating <geoffk@apple.com> * gcc.dg/pch/save-temps-1.c: New file. * gcc.dg/pch/save-temps-1.hs: New file. Index: libcpp/ChangeLog 2004-06-21 Geoffrey Keating <geoffk@apple.com> * files.c (should_stack_file): Correct swapped parameters to call to cb.read_pch. * pch.c (cpp_valid_state): Handle -fpreprocessed. From-SVN: r83478
Diffstat (limited to 'libcpp/pch.c')
-rw-r--r--libcpp/pch.c11
1 files changed, 10 insertions, 1 deletions
diff --git a/libcpp/pch.c b/libcpp/pch.c
index a9d139a..a343cd8 100644
--- a/libcpp/pch.c
+++ b/libcpp/pch.c
@@ -438,13 +438,22 @@ cpp_valid_state (cpp_reader *r, const char *name, int fd)
if (m.name_length == 0)
break;
+ /* If this file is already preprocessed, there won't be any
+ macros defined, and that's OK. */
+ if (CPP_OPTION (r, preprocessed))
+ {
+ if (lseek (fd, m.definition_length, SEEK_CUR) == -1)
+ goto error;
+ continue;
+ }
+
if (m.definition_length > namebufsz)
{
free (namebuf);
namebufsz = m.definition_length + 256;
namebuf = xmalloc (namebufsz);
}
-
+
if ((size_t)read (fd, namebuf, m.definition_length)
!= m.definition_length)
goto error;