This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[pph] Add a GC root for the lexer (issue5822055)


Add a GC root for the lexer.

This GC root is required to support running the garbage collector
during lexing.  This happens when the lexer loads pre-parsed headers.
Loading these headers calls into the middle-end, which may run the
garbage collector.

This was triggering in some of the bigger translation units that cause
a lot of GC activity.

2012-03-14   Diego Novillo  <dnovillo@google.com>

	* parser.c (the_lexer): Declare.
	(cp_lexer_new_main): Initialize.
	(c_parse_file): Set to NULL.

diff --git a/gcc/cp/parser.c b/gcc/cp/parser.c
index 8c231c02..0d87b0f 100644
--- a/gcc/cp/parser.c
+++ b/gcc/cp/parser.c
@@ -613,6 +613,14 @@ cp_lexer_alloc (void)
 }
 
 
+/* The lexer.   This GC root is required to support running the
+   garbage collector during lexing.  This happens when the lexer loads
+   pre-parsed headers.  Loading these headers calls into the
+   middle-end, which may run the garbage collector.  */
+
+static GTY (()) cp_lexer *the_lexer;
+
+
 /* Create a new main C++ lexer, the lexer that gets tokens from the
    preprocessor.  */
 
@@ -627,7 +635,7 @@ cp_lexer_new_main (void)
      allocating any memory.  */
   cp_parser_initial_pragma (&token);
 
-  lexer = cp_lexer_alloc ();
+  the_lexer = lexer = cp_lexer_alloc ();
 
   /* Put the first token in the buffer.  */
   VEC_quick_push (cp_token, lexer->buffer, &token);
@@ -27497,6 +27505,7 @@ c_parse_file (void)
 				? dk_no_deferred : dk_no_check);
   cp_parser_translation_unit (the_parser);
   the_parser = NULL;
+  the_lexer = NULL;
 
   if (pph_enabled_p ())
     pph_finish ();

--
This patch is available for review at http://codereview.appspot.com/5822055


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]