Properly initialize cpp_context in destringize_and_run

destringize_and_run forgets to initialize all the fields of the
cpp_context that it pushes.  Later _cpp_pop_context then gets confused
when it accesses context->tokens_kind via the call to macro_of_context
on context->prev.

The first hunk of this patch is the real obvious fix.  The second hunk
is just an assert that I am adding to err on the safe side.

Tested by on x86_64-unknown-linux-gnu against trunk by running the
test gcc.dg/gomp/macro-4.c under Valgrind, and bootstrapped.

libcpp/

	* directives.c (destringize_and_run): Properly initialize the new
	context.
	* macro.c (_cpp_pop_context): Assert that we shouldn't try to pop
	the initial base context, which has the same life time as the
	current instance of cpp_file.

From-SVN: r187054
This commit is contained in:
Dodji Seketeli 2012-05-02 16:55:19 +00:00 committed by Dodji Seketeli
parent 355a767352
commit 3ad64f53da
3 changed files with 14 additions and 4 deletions

View file

@ -2152,6 +2152,10 @@ _cpp_pop_context (cpp_reader *pfile)
{
cpp_context *context = pfile->context;
/* We should not be popping the base context. */
if (context == &pfile->base_context)
abort ();
if (context->c.macro)
{
cpp_hashnode *macro;