2
0
mirror of git://gcc.gnu.org/git/gcc.git synced 2025-03-24 12:31:25 +08:00

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:
Jakub Jelinek 2005-04-05 22:07:06 +02:00 committed by Jakub Jelinek
parent 87ac6a500a
commit cae064e798
5 changed files with 169 additions and 2 deletions

@ -1,3 +1,9 @@
2005-04-05 Jakub Jelinek <jakub@redhat.com>
PR preprocessor/19475
* gcc.dg/cpp/macspace1.c: New test.
* gcc.dg/cpp/macspace2.c: New test.
2005-04-05 Francois-Xavier Coudert <coudert@clipper.ens.fr>
* gfortran.dg/pr20755.f: Fixed bad format.

@ -0,0 +1,61 @@
/* PR preprocessor/19475 */
/* { dg-do preprocess } */
/* { dg-options "-std=iso9899:1990 -pedantic-errors -fno-show-column" } */
#define a! /* { dg-warning "missing whitespace" } */
#define b" /* { dg-warning "missing whitespace" } */
#define c# /* { dg-warning "missing whitespace" } */
#define d% /* { dg-warning "missing whitespace" } */
#define e& /* { dg-warning "missing whitespace" } */
#define f' /* { dg-warning "missing whitespace" } */
#define g) /* { dg-warning "missing whitespace" } */
#define h* /* { dg-warning "missing whitespace" } */
#define i+ /* { dg-warning "missing whitespace" } */
#define j, /* { dg-warning "missing whitespace" } */
#define k- /* { dg-warning "missing whitespace" } */
#define l. /* { dg-warning "missing whitespace" } */
#define m/ /* { dg-warning "missing whitespace" } */
#define n: /* { dg-warning "missing whitespace" } */
#define o; /* { dg-warning "missing whitespace" } */
#define p< /* { dg-warning "missing whitespace" } */
#define q= /* { dg-warning "missing whitespace" } */
#define r> /* { dg-warning "missing whitespace" } */
#define s? /* { dg-warning "missing whitespace" } */
#define t[ /* { dg-warning "missing whitespace" } */
#define u] /* { dg-warning "missing whitespace" } */
#define v^ /* { dg-warning "missing whitespace" } */
#define w{ /* { dg-warning "missing whitespace" } */
#define x| /* { dg-warning "missing whitespace" } */
#define y} /* { dg-warning "missing whitespace" } */
#define z~ /* { dg-warning "missing whitespace" } */
#define A>> /* { dg-warning "missing whitespace" } */
#define B<< /* { dg-warning "missing whitespace" } */
#define E&& /* { dg-warning "missing whitespace" } */
#define F|| /* { dg-warning "missing whitespace" } */
#define G== /* { dg-warning "missing whitespace" } */
#define H!= /* { dg-warning "missing whitespace" } */
#define I>= /* { dg-warning "missing whitespace" } */
#define J<= /* { dg-warning "missing whitespace" } */
#define K+= /* { dg-warning "missing whitespace" } */
#define L-= /* { dg-warning "missing whitespace" } */
#define M*= /* { dg-warning "missing whitespace" } */
#define N/= /* { dg-warning "missing whitespace" } */
#define O%= /* { dg-warning "missing whitespace" } */
#define P&= /* { dg-warning "missing whitespace" } */
#define Q|= /* { dg-warning "missing whitespace" } */
#define R^= /* { dg-warning "missing whitespace" } */
#define S>>= /* { dg-warning "missing whitespace" } */
#define T<<= /* { dg-warning "missing whitespace" } */
#define W... /* { dg-warning "missing whitespace" } */
#define X++ /* { dg-warning "missing whitespace" } */
#define Y-- /* { dg-warning "missing whitespace" } */
#define Z-> /* { dg-warning "missing whitespace" } */
#define aa:: /* { dg-warning "missing whitespace" } */
#define ab->* /* { dg-warning "missing whitespace" } */
#define ac.* /* { dg-warning "missing whitespace" } */
#define ad\x /* { dg-warning "missing whitespace" } */
#define ae\\x /* { dg-warning "missing whitespace" } */
#define af'1' /* { dg-warning "missing whitespace" } */
#define ag"abc" /* { dg-warning "missing whitespace" } */
int dummy;

@ -0,0 +1,61 @@
/* PR preprocessor/19475 */
/* { dg-do preprocess } */
/* { dg-options "-std=iso9899:1999 -pedantic-errors -fno-show-column" } */
#define a! /* { dg-error "requires whitespace" } */
#define b" /* { dg-error "requires whitespace" } */
#define c# /* { dg-error "requires whitespace" } */
#define d% /* { dg-error "requires whitespace" } */
#define e& /* { dg-error "requires whitespace" } */
#define f' /* { dg-error "requires whitespace" } */
#define g) /* { dg-error "requires whitespace" } */
#define h* /* { dg-error "requires whitespace" } */
#define i+ /* { dg-error "requires whitespace" } */
#define j, /* { dg-error "requires whitespace" } */
#define k- /* { dg-error "requires whitespace" } */
#define l. /* { dg-error "requires whitespace" } */
#define m/ /* { dg-error "requires whitespace" } */
#define n: /* { dg-error "requires whitespace" } */
#define o; /* { dg-error "requires whitespace" } */
#define p< /* { dg-error "requires whitespace" } */
#define q= /* { dg-error "requires whitespace" } */
#define r> /* { dg-error "requires whitespace" } */
#define s? /* { dg-error "requires whitespace" } */
#define t[ /* { dg-error "requires whitespace" } */
#define u] /* { dg-error "requires whitespace" } */
#define v^ /* { dg-error "requires whitespace" } */
#define w{ /* { dg-error "requires whitespace" } */
#define x| /* { dg-error "requires whitespace" } */
#define y} /* { dg-error "requires whitespace" } */
#define z~ /* { dg-error "requires whitespace" } */
#define A>> /* { dg-error "requires whitespace" } */
#define B<< /* { dg-error "requires whitespace" } */
#define E&& /* { dg-error "requires whitespace" } */
#define F|| /* { dg-error "requires whitespace" } */
#define G== /* { dg-error "requires whitespace" } */
#define H!= /* { dg-error "requires whitespace" } */
#define I>= /* { dg-error "requires whitespace" } */
#define J<= /* { dg-error "requires whitespace" } */
#define K+= /* { dg-error "requires whitespace" } */
#define L-= /* { dg-error "requires whitespace" } */
#define M*= /* { dg-error "requires whitespace" } */
#define N/= /* { dg-error "requires whitespace" } */
#define O%= /* { dg-error "requires whitespace" } */
#define P&= /* { dg-error "requires whitespace" } */
#define Q|= /* { dg-error "requires whitespace" } */
#define R^= /* { dg-error "requires whitespace" } */
#define S>>= /* { dg-error "requires whitespace" } */
#define T<<= /* { dg-error "requires whitespace" } */
#define W... /* { dg-error "requires whitespace" } */
#define X++ /* { dg-error "requires whitespace" } */
#define Y-- /* { dg-error "requires whitespace" } */
#define Z-> /* { dg-error "requires whitespace" } */
#define aa:: /* { dg-error "requires whitespace" } */
#define ab->* /* { dg-error "requires whitespace" } */
#define ac.* /* { dg-error "requires whitespace" } */
#define ad\x /* { dg-error "requires whitespace" } */
#define ae\\x /* { dg-error "requires whitespace" } */
#define af'1' /* { dg-error "requires whitespace" } */
#define ag"abc" /* { dg-error "requires whitespace" } */
int dummy;

@ -1,3 +1,11 @@
2005-04-05 Jakub Jelinek <jakub@redhat.com>
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.
2005-03-28 Andreas Jaeger <aj@suse.de>
* lex.c (warn_about_normalization): Cast field width to int to

@ -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);