aboutsummaryrefslogtreecommitdiff
path: root/gcc/c-family/c-pch.c
diff options
context:
space:
mode:
authorJoseph Myers <joseph@codesourcery.com>2012-10-23 15:55:55 +0100
committerJoseph Myers <jsm28@gcc.gnu.org>2012-10-23 15:55:55 +0100
commit1efcb8c6f6c9a8f70c90159c363f30657710e941 (patch)
tree61e5b420fe39332b5b0cad26106b740dd349a4fa /gcc/c-family/c-pch.c
parent3b601ca3eb1cb588cc0383c9480eb6fcb986ea2d (diff)
downloadgcc-1efcb8c6f6c9a8f70c90159c363f30657710e941.zip
gcc-1efcb8c6f6c9a8f70c90159c363f30657710e941.tar.gz
gcc-1efcb8c6f6c9a8f70c90159c363f30657710e941.tar.bz2
gcc:
* config.gcc (*-*-linux* | frv-*-*linux* | *-*-kfreebsd*-gnu | *-*-knetbsd*-gnu | *-*-gnu* | *-*-kopensolaris*-gnu): Use glibc-c.o in c_target_objs and cxx_target_objs. Use t-glibc in tmake_file. Set target_has_targetcm. (tilegx-*-linux*, tilepro-*-linux*): Append to c_target_objs and cxx_target_objs rather than overriding previous value. * config/glibc-c.c, config/t-glibc: New. * doc/tm.texi.in (TARGET_C_PREINCLUDE): New @hook. * doc/tm.texi: Regenerate. * hooks.c (hook_constcharptr_void_null): New. * hooks.h (hook_constcharptr_void_null): Declare. gcc/c-family: * c-common.h (pch_cpp_save_state): Declare. * c-target.def (c_preinclude): New hook. * c-opts.c (done_preinclude): New. (push_command_line_include): Handle default preincluded header. (cb_file_change): Call pch_cpp_save_state when calling push_command_line_include. * c-pch.c (pch_ready_to_save_cpp_state, pch_cpp_state_saved) (pch_cpp_save_state): New. (pch_init): Call pch_cpp_save_state conditionally, instead of calling cpp_save_state. gcc/testsuite: * gcc.dg/c99-predef-1.c: New test. * gcc.dg/cpp/cmdlne-dU-1.c, gcc.dg/cpp/cmdlne-dU-2.c, gcc.dg/cpp/cmdlne-dU-3.c, gcc.dg/cpp/cmdlne-dU-4.c, gcc.dg/cpp/cmdlne-dU-5.c, gcc.dg/cpp/cmdlne-dU-6.c, gcc.dg/cpp/cmdlne-dU-7.c, gcc.dg/cpp/cmdlne-dU-8.c, gcc.dg/cpp/cmdlne-dU-9.c, gcc.dg/cpp/cmdlne-dU-10.c, gcc.dg/cpp/cmdlne-dU-11.c, gcc.dg/cpp/cmdlne-dU-12.c, gcc.dg/cpp/cmdlne-dU-13.c, gcc.dg/cpp/cmdlne-dU-14.c, gcc.dg/cpp/cmdlne-dU-15.c, gcc.dg/cpp/cmdlne-dU-16.c, gcc.dg/cpp/cmdlne-dU-17.c, gcc.dg/cpp/cmdlne-dU-18.c, gcc.dg/cpp/cmdlne-dU-19.c, gcc.dg/cpp/cmdlne-dU-20.c, gcc.dg/cpp/cmdlne-dU-21.c, gcc.dg/cpp/cmdlne-dU-22.c, gcc.dg/cpp/mi5.c, gcc.dg/cpp/multiline.c: Add -nostdinc to dg-options. libcpp: * files.c (struct _cpp_file): Add implicit_preinclude. (pch_open_file): Allow a previously opened implicitly included file. (_cpp_find_file): Add implicit_preinclude argument. Free file and do not call open_file_failed if implicit_preinclude. Store implicit_preinclude value. (_cpp_stack_include, _cpp_fake_include, _cpp_compare_file_date): Update calls to _cpp_find_file. (_cpp_stack_include): Handle IT_DEFAULT. (cpp_push_default_include): New. * include/cpplib.h (cpp_push_default_include): Declare. * init.c (cpp_read_main_file): Update call to _cpp_find_file. * internal.h (enum include_type): Add IT_DEFAULT. (_cpp_find_file): Update prototype. From-SVN: r192715
Diffstat (limited to 'gcc/c-family/c-pch.c')
-rw-r--r--gcc/c-family/c-pch.c30
1 files changed, 29 insertions, 1 deletions
diff --git a/gcc/c-family/c-pch.c b/gcc/c-family/c-pch.c
index b239ed4..f945f05 100644
--- a/gcc/c-family/c-pch.c
+++ b/gcc/c-family/c-pch.c
@@ -93,6 +93,10 @@ get_ident (void)
return result;
}
+/* Whether preprocessor state should be saved by pch_init. */
+
+static bool pch_ready_to_save_cpp_state = false;
+
/* Prepare to write a PCH file, if one is being written. This is
called at the start of compilation. */
@@ -136,7 +140,31 @@ pch_init (void)
/* Let the debugging format deal with the PCHness. */
(*debug_hooks->handle_pch) (0);
- cpp_save_state (parse_in, f);
+ if (pch_ready_to_save_cpp_state)
+ pch_cpp_save_state ();
+}
+
+/* Whether preprocessor state has been saved in a PCH file. */
+
+static bool pch_cpp_state_saved = false;
+
+/* Save preprocessor state in a PCH file, after implicitly included
+ headers have been read. If the PCH file has not yet been opened,
+ record that state should be saved when it is opened. */
+
+void
+pch_cpp_save_state (void)
+{
+ if (!pch_cpp_state_saved)
+ {
+ if (pch_outfile)
+ {
+ cpp_save_state (parse_in, pch_outfile);
+ pch_cpp_state_saved = true;
+ }
+ else
+ pch_ready_to_save_cpp_state = true;
+ }
}
/* Write the PCH file. This is called at the end of a compilation which