tradcpp.c (rescan): Do not recognize directives when the # is indented.

* tradcpp.c (rescan): Do not recognize directives when the #
	is indented.

	* gcc.dg/cpp/tr-direct.c: New test.

From-SVN: r35139
This commit is contained in:
Zack Weinberg 2000-07-19 20:37:26 +00:00 committed by Zack Weinberg
parent 0fab9d0a5d
commit 53fdf0be63
4 changed files with 21 additions and 24 deletions

View File

@ -1,3 +1,8 @@
2000-07-19 Zack Weinberg <zack@wolery.cumb.org>
* tradcpp.c (rescan): Do not recognize directives when the #
is indented.
2000-07-19 Zack Weinberg <zack@wolery.cumb.org>
Implement C++ named operators.

View File

@ -1,5 +1,7 @@
2000-07-19 Zack Weinberg <zack@wolery.cumb.org>
* gcc.dg/cpp/tr-direct.c: New test.
* gcc.dg/cpp/directiv.c, gcc.dg/cpp/macsyntx.c,
gcc.dg/cpp/undef1.c: Tweak error regexps.

View File

@ -0,0 +1,11 @@
/* Test for some basic aspects of -traditional directive processing. */
/* { dg-do preprocess } */
/* { dg-options -traditional } */
/* There is no #error directive. */
#error bad /* { dg-bogus "bad" } */
/* Directives with their #s indented are not recognized. */
#if 0 /* { dg-bogus "unterminated" } */

View File

@ -1187,32 +1187,11 @@ do { ip = &instack[indepth]; \
if (ident_length)
goto specialchar;
/* # keyword: a # must be first nonblank char on the line */
/* # keyword: a # must be the first char on the line */
if (beg_of_line == 0)
goto randomchar;
{
U_CHAR *bp;
/* Scan from start of line, skipping whitespace, comments
and backslash-newlines, and see if we reach this #.
If not, this # is not special. */
bp = beg_of_line;
while (1) {
if (is_hor_space[*bp])
bp++;
else if (*bp == '\\' && bp[1] == '\n')
bp += 2;
else if (*bp == '/' && (newline_fix (bp + 1), bp[1]) == '*') {
bp += 2;
while (!(*bp == '*' && (newline_fix (bp + 1), bp[1]) == '/'))
bp++;
bp += 1;
}
else break;
}
if (bp + 1 != ibp)
goto randomchar;
}
if (beg_of_line + 1 != ibp)
goto randomchar;
/* This # can start a directive. */