This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: New bug in cpp, bogus macro redefinition warnings
- To: Zack Weinberg <zack at wolery dot cumb dot org>
- Subject: Re: New bug in cpp, bogus macro redefinition warnings
- From: grahams <grahams at rcp dot co dot uk>
- Date: Wed, 01 Mar 2000 22:49:34 +0000
- CC: "Kaveh R. Ghazi" <ghazi at caip dot rutgers dot edu>, egcs-bugs at egcs dot cygnus dot com, egcs-patches at egcs dot cygnus dot com
- References: <200003011624.LAA09971@caip.rutgers.edu> <20000301093734.S32089@wolery.cumb.org> <20000301111212.U32089@wolery.cumb.org>
Zack
With this patch applied I get a SIGSEG in cpp when
compile libgcc.
The problem was the call to memcpy(&exp[2], .., len-1)
which is a few lines after your patch was being
called with -1 a negative count! (i.e. len was 0)
I think you probably need a "&& here > start"
as well as the "here > last".
I'll try and dig up a test case which triggers the
problem.
Graham
Zack Weinberg wrote:
>
> On Wed, Mar 01, 2000 at 09:37:34AM -0800, Zack Weinberg wrote:
> > On Wed, Mar 01, 2000 at 11:24:37AM -0500, Kaveh R. Ghazi wrote:
> > > Bootstrapping last night's snapshot on sparc-sun-solaris2.7 exposed a
> > > new bug in cpp. I get large amounts of macro redefinition warnings
> > > (~1200) from the system headers.
> > >
> > > They come from macros defined to the same value more than once, but
> > > one instance is followed by a comment. E.g. you can see what I mean
> > > in the following two line file.
> > >
> > > > #define FOO 10 /* sdf */
> > > > #define FOO 10
> > >
> > > (Perhaps you want to install this as a test case.)
> > >
> > > With last night's "gcc version 2.96 20000229 (experimental)", it gives:
> > >
> > > > foo.c:2:14: warning: `FOO' redefined
> > > > foo.c:1:11: warning: this is the location of the previous definition
> >
> > Aaargh. Yes, I see the problem. Please try this patch - will commit,
> > with test case, once it completes bootstrap.
>
> That wasn't quite the right patch.
>
> I have committed this, which should fix the bug.
>
> zw
>
> * cpphash.c (collect_expansion): Trim trailing white space
> from macro definitions, but don't go past the last insertion
> point.
> * gcc.dg/cpp-redef.c: New test.
> ===================================================================
> Index: cpphash.c
> --- cpphash.c 2000/03/01 00:57:08 1.42
> +++ cpphash.c 2000/03/01 19:10:01
> @@ -487,6 +487,12 @@ collect_expansion (pfile, arglist)
> else if (last_token == PASTE)
> cpp_error (pfile, "`##' at end of macro definition");
>
> + /* Trim trailing white space from definition. */
> + here = CPP_WRITTEN (pfile);
> + while (here > last && is_hspace (pfile->token_buffer [here-1]))
> + here--;
> + CPP_SET_WRITTEN (pfile, here);
> +
> CPP_NUL_TERMINATE (pfile);
> len = CPP_WRITTEN (pfile) - start + 1;
> exp = xmalloc (len + 4); /* space for no-concat markers at either end */
> ===================================================================