re PR preprocessor/19475 (missing whitespace after macro name in C90 or C++)
PR preprocessor/19475 * macro.c (create_iso_definition): For < ISO C99, don't pedwarn if there is no whitespace between macro name and its replacement, but the replacement starts with a basic character set character. * gcc.dg/cpp/macspace1.c: New test. * gcc.dg/cpp/macspace2.c: New test. From-SVN: r97652
This commit is contained in:
parent
87ac6a500a
commit
cae064e798
5 changed files with 169 additions and 2 deletions
|
@ -1430,8 +1430,39 @@ create_iso_definition (cpp_reader *pfile, cpp_macro *macro)
|
|||
macro->fun_like = 1;
|
||||
}
|
||||
else if (ctoken->type != CPP_EOF && !(ctoken->flags & PREV_WHITE))
|
||||
cpp_error (pfile, CPP_DL_PEDWARN,
|
||||
"ISO C requires whitespace after the macro name");
|
||||
{
|
||||
/* While ISO C99 requires whitespace before replacement text
|
||||
in a macro definition, ISO C90 with TC1 allows there characters
|
||||
from the basic source character set. */
|
||||
if (CPP_OPTION (pfile, c99))
|
||||
cpp_error (pfile, CPP_DL_PEDWARN,
|
||||
"ISO C99 requires whitespace after the macro name");
|
||||
else
|
||||
{
|
||||
int warntype = CPP_DL_WARNING;
|
||||
switch (ctoken->type)
|
||||
{
|
||||
case CPP_ATSIGN:
|
||||
case CPP_AT_NAME:
|
||||
case CPP_OBJC_STRING:
|
||||
/* '@' is not in basic character set. */
|
||||
warntype = CPP_DL_PEDWARN;
|
||||
break;
|
||||
case CPP_OTHER:
|
||||
/* Basic character set sans letters, digits and _. */
|
||||
if (strchr ("!\"#%&'()*+,-./:;<=>?[\\]^{|}~",
|
||||
ctoken->val.str.text[0]) == NULL)
|
||||
warntype = CPP_DL_PEDWARN;
|
||||
break;
|
||||
default:
|
||||
/* All other tokens start with a character from basic
|
||||
character set. */
|
||||
break;
|
||||
}
|
||||
cpp_error (pfile, warntype,
|
||||
"missing whitespace after the macro name");
|
||||
}
|
||||
}
|
||||
|
||||
if (macro->fun_like)
|
||||
token = lex_expansion_token (pfile, macro);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue