diff options
author | neil <neil@138bc75d-0d04-0410-961f-82ee72b054a4> | 2001-08-02 23:03:31 +0000 |
---|---|---|
committer | neil <neil@138bc75d-0d04-0410-961f-82ee72b054a4> | 2001-08-02 23:03:31 +0000 |
commit | 386924596ca616f5ccd2725191d07828c8c6652f (patch) | |
tree | aedb0e3e4381261de71d4d7cee777f2ccde7880d /gcc/cpplex.c | |
parent | 5aea2c55a9ec5db0a3159aa12ba14f0795b32bc1 (diff) | |
download | gcc-386924596ca616f5ccd2725191d07828c8c6652f.tar.gz |
* line-map.c: New.
* line-map.h: New.
* Makefile.in (line-map.o): New.
(LIBCPP_OBJS, LIBCPP_DEPS): Update.
* c-lex.c (cb_file_change): Update for new cpp_file_change structure.
* cpperror.c (print_containing_files): Similarly.
(print_location): Update. Don't output a space before _Pragma.
* cppfiles.c (stack_include_file): Set to line 1 immediately.
(stack_include_filee, cpp_make_system_header): Update.
(_cpp_execute_include): Get logical line number right for calling
as-yet-unterminated #include.
* cpphash.h (struct cpp_reader): Add line_maps.
(_cpp_do_file_change): Update.
* cppinit.c (cpp_create_reader): Initialize line maps.
(cpp_destroy): Destroy line maps.
(cpp_start_read): Get logical line number right.
* cpplex.c (parse_string): Only warn once for multi-line strings.
Use boolean variable for null warning.
* cpplib.c (_cpp_handle_directive): End the directive if it isn't
already.
(do_include_common): End the directive early.
(do_line): Don't warn about out-of-range lines in preprocessed
source. Update. Remove unused variables.
(_cpp_do_file_change): Update for new line mapping.
(pragma_cb): New typedef.
(cpp_register_pragma): Stop looking ahead before calling the
handler. Clean up.
(do_pragma_system_header): End directive early.
(cpp_get_line_maps): New.
(cpp_pop_buffer): Fudge logical line. Update.
* cpplib.h: Include line-map.h
(enum cpp_fc_reason): Remove.
(struct cpp_file_change): Update.
(cpp_get_line_maps): New.
* cppmain.c (struct_printer): New member map.
(cb_file_change): Update for new mappings.
* fix-header.c (cb_file_change): Similarly.
testsuite:
* gcc.dg/cpp/19951025-1.c: Update.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@44584 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/cpplex.c')
-rw-r--r-- | gcc/cpplex.c | 19 |
1 files changed, 12 insertions, 7 deletions
diff --git a/gcc/cpplex.c b/gcc/cpplex.c index af2b9e93006..fa32bd51561 100644 --- a/gcc/cpplex.c +++ b/gcc/cpplex.c @@ -657,7 +657,7 @@ parse_string (pfile, token, terminator) cpp_pool *pool = &pfile->ident_pool; unsigned char *dest, *limit; cppchar_t c; - unsigned int nulls = 0; + bool warned_nulls = false, warned_multi = false; dest = POOL_FRONT (pool); limit = POOL_LIMIT (pool); @@ -707,7 +707,12 @@ parse_string (pfile, token, terminator) break; } - cpp_pedwarn (pfile, "multi-line string literals are deprecated"); + if (!warned_multi) + { + warned_multi = true; + cpp_pedwarn (pfile, "multi-line string literals are deprecated"); + } + if (pfile->mlstring_pos.line == 0) pfile->mlstring_pos = pfile->lexer_pos; @@ -715,10 +720,10 @@ parse_string (pfile, token, terminator) *dest++ = '\n'; goto have_char; } - else if (c == '\0') + else if (c == '\0' && !warned_nulls) { - if (nulls++ == 0) - cpp_warning (pfile, "null character(s) preserved in literal"); + warned_nulls = true; + cpp_warning (pfile, "null character(s) preserved in literal"); } *dest++ = c; @@ -914,8 +919,8 @@ _cpp_lex_token (pfile, result) bol = 1; pfile->lexer_pos.output_line = buffer->lineno; /* This is a new line, so clear any white space flag. - Newlines in arguments are white space (6.10.3.10); - parse_arg takes care of that. */ + Newlines in arguments are white space (6.10.3.10); + parse_arg takes care of that. */ result->flags &= ~(PREV_WHITE | AVOID_LPASTE); goto next_char; } |