On Tue, Aug 12, 2014 at 05:25:25PM +0800, Thomas Preud'homme wrote: > --- a/gcc/c/c-parser.c > +++ b/gcc/c/c-parser.c > @@ -486,6 +486,15 @@ c_token_starts_typename (c_token *token) > case CPP_KEYWORD: > switch (token->keyword) > { > + case RID_FLOAT: > + case RID_DOUBLE: > + case RID_DFLOAT32: > + case RID_DFLOAT64: > + case RID_DFLOAT128: > + if (flag_no_float) > + error_at (token->location, "use of floating points forbidden in " > + "this translation unit (-fno-float)"); > + /* Fall through. */ > case RID_UNSIGNED: > case RID_LONG: > case RID_INT128:
This looks wrong. c_token_starts_typename is just a function which tells you if certain token can start a typename, issuing diagnostics there doesn't make sense, that routine doesn't actually parse the token. You should diagnose it where you actually parse it. Jakub