Message ID | m3397k450e.fsf@redhat.com |
---|---|
State | New |
Headers | show |
Dodji Seketeli <dodji@redhat.com> writes: > Tested on x86_64-unknown-linux-gnu against trunk by running the > test gcc.dg/gomp/macro-4.c under Valgrind. Bootstrap is still > underway. For what it's worth, the patch passes bootstrap on x86_64-unknown-linux-gnu. > 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.
On 05/01/2012 05:36 AM, Dodji Seketeli wrote: > pfile->context = XNEW (cpp_context); > + memset (pfile->context, 0, sizeof (cpp_context)); You can use XCNEW instead of XNEW + memset. OK with that change. Jason
diff --git a/libcpp/directives.c b/libcpp/directives.c index 0510c6e..c1c2415 100644 --- a/libcpp/directives.c +++ b/libcpp/directives.c @@ -1742,9 +1742,7 @@ destringize_and_run (cpp_reader *pfile, const cpp_string *in) saved_cur_run = pfile->cur_run; pfile->context = XNEW (cpp_context); - pfile->context->c.macro = 0; - pfile->context->prev = 0; - pfile->context->next = 0; + memset (pfile->context, 0, sizeof (cpp_context)); /* Inline run_directive, since we need to delay the _cpp_pop_buffer until we've read all of the tokens that we want. */ diff --git a/libcpp/macro.c b/libcpp/macro.c index ab3e8f6..c4e2a23 100644 --- a/libcpp/macro.c +++ b/libcpp/macro.c @@ -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;