Cpp memory corruption in gcc 3.3
H. J. Lu
hjl@lucon.org
Fri Oct 24 08:20:00 GMT 2003
On Thu, Oct 23, 2003 at 02:05:41PM -0700, Zack Weinberg wrote:
> "H. J. Lu" <hjl@lucon.org> writes:
>
> > I have a very strange cpp memory corruption in gcc 3.3 on Linux/ia64
> > running RHEL 3. I got
> >
> > Old value = 42983
> > New value = 30064814055
> > _cpp_lex_direct (pfile=0x60000000000fdcc0)
> > at /net/gnu/export/gnu/src/gcc-3.3/gcc/gcc/cpplex.c:972
> > 972 result->col = CPP_BUF_COLUMN (buffer, buffer->cur);
> > (gdb)
> >
> > It overrides some memory in malloc. Any ideas?
>
> Provide a test case.
>
There are so many files involved. However this patch seems to work
for me on my testcase. The problem is pfile->cur_token was advanced
beyond what was returned by alloc_expansion_token. Does that make any
senses?
H.J.
----
2003-10-23 H.J. Lu <hongjiu.lu@intel.com>
* cppmacro.c (lex_expansion_token): Save and restore cur_token.
--- gcc/cppmacro.c.memory 2003-07-07 14:44:29.000000000 -0700
+++ gcc/cppmacro.c 2003-10-23 16:29:16.000000000 -0700
@@ -1426,7 +1426,7 @@ lex_expansion_token (pfile, macro)
cpp_reader *pfile;
cpp_macro *macro;
{
- cpp_token *token;
+ cpp_token *token, *saved_cur_token = pfile->cur_token;
pfile->cur_token = alloc_expansion_token (pfile, macro);
token = _cpp_lex_direct (pfile);
@@ -1441,6 +1441,7 @@ lex_expansion_token (pfile, macro)
&& (token->type == CPP_STRING || token->type == CPP_CHAR))
check_trad_stringification (pfile, macro, &token->val.str);
+ pfile->cur_token = saved_cur_token;
return token;
}
More information about the Gcc
mailing list