aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorNeil Booth <neil@daikokuya.demon.co.uk>2002-05-18 08:23:20 +0000
committerNeil Booth <neil@gcc.gnu.org>2002-05-18 08:23:20 +0000
commit43612ffb67c38d7ff20507f62ae7f86b23f03ca4 (patch)
tree8d676f8eb309246fd73a05fd979264ce2b405f0e /gcc
parentc810846eb0ab7c2a6d614b0ec8b2a0905c3fd0ad (diff)
downloadgcc-43612ffb67c38d7ff20507f62ae7f86b23f03ca4.zip
gcc-43612ffb67c38d7ff20507f62ae7f86b23f03ca4.tar.gz
gcc-43612ffb67c38d7ff20507f62ae7f86b23f03ca4.tar.bz2
cppinit.c (cpp_post_options): If preprocessed, turn off traditional.
* cppinit.c (cpp_post_options): If preprocessed, turn off traditional. If traditional, turn off column numbers. * cpplib.c (cpp_push_buffer): Lex from stage 3 if traditional. * cpptrad.c (handle_newline): Update line_base. (skip_comment): Handle -Wcomment. From-SVN: r53582
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog8
-rw-r--r--gcc/cppinit.c11
-rw-r--r--gcc/cpplib.c2
-rw-r--r--gcc/cpptrad.c40
4 files changed, 39 insertions, 22 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 590cf75..cc5d35c 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,11 @@
+2002-05-18 Neil Booth <neil@daikokuya.demon.co.uk>
+
+ * cppinit.c (cpp_post_options): If preprocessed, turn off
+ traditional. If traditional, turn off column numbers.
+ * cpplib.c (cpp_push_buffer): Lex from stage 3 if traditional.
+ * cpptrad.c (handle_newline): Update line_base.
+ (skip_comment): Handle -Wcomment.
+
2002-05-17 Zack Weinberg <zack@codesourcery.com>
* cppinit.c (struct builtin): Remove unused fields.
diff --git a/gcc/cppinit.c b/gcc/cppinit.c
index 5d91005..dad255a 100644
--- a/gcc/cppinit.c
+++ b/gcc/cppinit.c
@@ -1774,9 +1774,16 @@ cpp_post_options (pfile)
CPP_OPTION (pfile, warn_traditional) = 0;
/* Permanently disable macro expansion if we are rescanning
- preprocessed text. */
+ preprocessed text. Read preprocesed source in ISO mode. */
if (CPP_OPTION (pfile, preprocessed))
- pfile->state.prevent_expansion = 1;
+ {
+ pfile->state.prevent_expansion = 1;
+ CPP_OPTION (pfile, traditional) = 0;
+ }
+
+ /* Traditional CPP does not accurately track column information. */
+ if (CPP_OPTION (pfile, traditional))
+ CPP_OPTION (pfile, show_column) = 0;
/* -dM makes no normal output. This is set here so that -dM -dD
works as expected. */
diff --git a/gcc/cpplib.c b/gcc/cpplib.c
index 2773ed9..f19d34e 100644
--- a/gcc/cpplib.c
+++ b/gcc/cpplib.c
@@ -1881,7 +1881,7 @@ cpp_push_buffer (pfile, buffer, len, from_stage3, return_at_eof)
new->line_base = new->buf = new->cur = buffer;
new->rlimit = buffer + len;
- new->from_stage3 = from_stage3;
+ new->from_stage3 = from_stage3 || CPP_OPTION (pfile, traditional);
new->prev = pfile->buffer;
new->return_at_eof = return_at_eof;
new->saved_flags = BOL;
diff --git a/gcc/cpptrad.c b/gcc/cpptrad.c
index a6178e3..d5c2126 100644
--- a/gcc/cpptrad.c
+++ b/gcc/cpptrad.c
@@ -21,9 +21,9 @@ Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
#include "cpplib.h"
#include "cpphash.h"
-/* Lexing TODO: Handle -Wcomment, -C, maybe -CC, and space in escaped
- newlines. Stop cpplex.c from recognizing comments, trigraphs and
- directives during its lexing pass. */
+/* Lexing TODO: Handle -C, maybe -CC, and space in escaped newlines.
+ Stop cpplex.c from recognizing comments and directives during its
+ lexing pass. */
static const uchar *handle_newline PARAMS ((cpp_reader *, const uchar *));
static const uchar *skip_escaped_newlines PARAMS ((cpp_reader *,
@@ -64,6 +64,7 @@ handle_newline (pfile, cur)
pfile->line++;
if (cur[0] + cur[1] == '\r' + '\n')
cur++;
+ pfile->buffer->line_base = cur + 1;
return cur + 1;
}
@@ -89,30 +90,31 @@ skip_comment (pfile, cur)
const uchar *cur;
{
unsigned int from_line = pfile->line;
+ unsigned int c = 0, prevc;
+ const uchar *limit = pfile->buffer->rlimit;
- for (;;)
+ while (cur < limit)
{
- unsigned int c = *cur++;
- if (c == '*')
+ prevc = c;
+ c = *cur++;
+
+ if (c == '/')
{
- cur = skip_escaped_newlines (pfile, cur);
- if (*cur == '/')
- {
- cur++;
- break;
- }
+ if (prevc == '*')
+ break;
+ if (*cur == '*' && cur[1] != '/'
+ && CPP_OPTION (pfile, warn_comments))
+ cpp_error_with_line (pfile, DL_WARNING, pfile->line, 0,
+ "\"/*\" within comment");
}
else if (is_vspace (c))
cur = handle_newline (pfile, cur - 1);
- else if (c == '\0' && cur - 1 == pfile->buffer->rlimit)
- {
- cur--;
- cpp_error_with_line (pfile, DL_ERROR, from_line, 0,
- "unterminated comment");
- break;
- }
}
+ if (c != '/' || prevc != '*')
+ cpp_error_with_line (pfile, DL_ERROR, from_line, 0,
+ "unterminated comment");
+
return cur;
}