aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZack Weinberg <zack@wolery.cumb.org>2000-07-19 20:37:26 +0000
committerZack Weinberg <zack@gcc.gnu.org>2000-07-19 20:37:26 +0000
commit53fdf0be639dbf77f048327f84f3eb1e17972d50 (patch)
tree04680f86f8f4f50dd092058debe0d45d07bd72f9
parent0fab9d0a5db8322d0a2711fb2228a99f6e317df3 (diff)
downloadgcc-53fdf0be639dbf77f048327f84f3eb1e17972d50.zip
gcc-53fdf0be639dbf77f048327f84f3eb1e17972d50.tar.gz
gcc-53fdf0be639dbf77f048327f84f3eb1e17972d50.tar.bz2
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
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/testsuite/ChangeLog2
-rw-r--r--gcc/testsuite/gcc.dg/cpp/tr-direct.c11
-rw-r--r--gcc/tradcpp.c27
4 files changed, 21 insertions, 24 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 54c2514..fb8c21b 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,10 @@
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.
* cpplib.h (TTYPE_TABLE): Move CPP_MIN and CPP_MAX into block
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index d6b01a6..c9d7cf3 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -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.
diff --git a/gcc/testsuite/gcc.dg/cpp/tr-direct.c b/gcc/testsuite/gcc.dg/cpp/tr-direct.c
new file mode 100644
index 0000000..309ec49
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/cpp/tr-direct.c
@@ -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" } */
diff --git a/gcc/tradcpp.c b/gcc/tradcpp.c
index 971dfef..d48510c 100644
--- a/gcc/tradcpp.c
+++ b/gcc/tradcpp.c
@@ -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. */