diff options
author | dodji <dodji@138bc75d-0d04-0410-961f-82ee72b054a4> | 2012-05-02 16:55:19 +0000 |
---|---|---|
committer | dodji <dodji@138bc75d-0d04-0410-961f-82ee72b054a4> | 2012-05-02 16:55:19 +0000 |
commit | 6cfa7465658b8383fe8b233b1f37647224aaa505 (patch) | |
tree | eca8487b03f6e48b0470d9df650fe3ac37959625 /libcpp/directives.c | |
parent | e3a19533c3ba16854e1dc1bb2ac7ce197883e38f (diff) |
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.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@187054 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libcpp/directives.c')
-rw-r--r-- | libcpp/directives.c | 5 |
1 files changed, 1 insertions, 4 deletions
diff --git a/libcpp/directives.c b/libcpp/directives.c index 0510c6e3a8e..e46280e46b0 100644 --- a/libcpp/directives.c +++ b/libcpp/directives.c @@ -1741,10 +1741,7 @@ destringize_and_run (cpp_reader *pfile, const cpp_string *in) saved_cur_token = pfile->cur_token; saved_cur_run = pfile->cur_run; - pfile->context = XNEW (cpp_context); - pfile->context->c.macro = 0; - pfile->context->prev = 0; - pfile->context->next = 0; + pfile->context = XCNEW (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. */ |