[PATCH] libcpp: Fix ICE with -Wtraditional preprocessing [PR101638]

Jakub Jelinek jakub@redhat.com
Thu Aug 12 15:17:00 GMT 2021


On Thu, Aug 12, 2021 at 10:46:23AM -0400, Jason Merrill wrote:
> > --- libcpp/expr.c	2021-05-07 10:34:46.345122608 +0200
> > +++ libcpp/expr.c	2021-08-12 09:54:01.837556365 +0200
> > @@ -783,13 +783,13 @@ cpp_classify_number (cpp_reader *pfile,
> >         /* Traditional C only accepted the 'L' suffix.
> >            Suppress warning about 'LL' with -Wno-long-long.  */
> > -      if (CPP_WTRADITIONAL (pfile) && ! cpp_sys_macro_p (pfile))
> > +      if (CPP_WTRADITIONAL (pfile))
> >   	{
> >   	  int u_or_i = (result & (CPP_N_UNSIGNED|CPP_N_IMAGINARY));
> >   	  int large = (result & CPP_N_WIDTH) == CPP_N_LARGE
> >   		       && CPP_OPTION (pfile, cpp_warn_long_long);
> > -	  if (u_or_i || large)
> > +	  if ((u_or_i || large) && ! cpp_sys_macro_p (pfile))
> >   	    cpp_warning_with_line (pfile, large ? CPP_W_LONG_LONG : CPP_W_TRADITIONAL,
> >   				   virtual_location, 0,
> >   				   "traditional C rejects the \"%.*s\" suffix",
> > The builtin macros at least currently don't add any suffixes
> > or numbers -Wtraditional would like to warn about.
> 
> So whether cpp_sys_macro_p returns true or false has no practical effect.

Yes.

> > For floating
> > point suffixes, -Wtraditional calls cpp_sys_macro_p only right
> > away before emitting the warning, but in the above case the ICE
> > is because cpp_sys_macro_p is called even if the number doesn't
> > have any suffixes (that is I think always for builtin macros
> > right now).
> > 
> > Bootstrapped/regtested on x86_64-linux and i686-linux.
> > Ok for trunk, or do you prefer to return true for builtin
> > macros from cpp_sys_macro_p instead
> 
> I think I'd prefer to return true, since builtin macros are also in the
> broader category of macros provided by the implementation.  OK with that
> change.

Ok, will test that.  Thanks.

	Jakub



More information about the Gcc-patches mailing list