diff options
author | Manuel López-Ibáñez <manu@gcc.gnu.org> | 2009-05-13 23:17:55 +0000 |
---|---|---|
committer | Manuel López-Ibáñez <manu@gcc.gnu.org> | 2009-05-13 23:17:55 +0000 |
commit | 00b0c19b4bbfa483925a177ed3e6ce2e1f42444b (patch) | |
tree | 148f0c276cd055d9c2b057991dccf87084ea5216 | |
parent | f06257d36aac7da75b3eaf7d06cf138a303977cb (diff) | |
download | gcc-00b0c19b4bbfa483925a177ed3e6ce2e1f42444b.zip gcc-00b0c19b4bbfa483925a177ed3e6ce2e1f42444b.tar.gz gcc-00b0c19b4bbfa483925a177ed3e6ce2e1f42444b.tar.bz2 |
re PR preprocessor/36674 (#include location is offset by one row in errors from preprocessed files)
2009-05-14 Manuel Lopez-Ibanez <manu@gcc.gnu.org>
PR cpp/36674
libcpp/
* directives (do_linemarker): Compensate for the increment in
location that occurs when we reach the end of line.
* files (_cpp_stack_include): Mention _cpp_find_file in the
comment.
testsuite/
* gcc.dg/cpp/pr36674.i: New.
From-SVN: r147504
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/cpp/pr36674.i | 12 | ||||
-rw-r--r-- | libcpp/ChangeLog | 8 | ||||
-rw-r--r-- | libcpp/directives.c | 8 | ||||
-rw-r--r-- | libcpp/files.c | 15 |
5 files changed, 41 insertions, 7 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 928c7f6..f9580aa 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2009-05-14 Manuel Lopez-Ibanez <manu@gcc.gnu.org> + + PR cpp/36674 + * gcc.dg/cpp/pr36674.i: New. + 2009-05-14 Ben Elliston <bje@au.ibm.com> PR middle-end/40035 diff --git a/gcc/testsuite/gcc.dg/cpp/pr36674.i b/gcc/testsuite/gcc.dg/cpp/pr36674.i new file mode 100644 index 0000000..9362d5a --- /dev/null +++ b/gcc/testsuite/gcc.dg/cpp/pr36674.i @@ -0,0 +1,12 @@ +/* PR cpp/36674 #include location is offset by one row in errors from preprocessed files */ +/* { dg-do compile } */ +/* { dg-options "-fshow-column" } */ +# 1 "gcc/testsuite/gcc.dg/pr36674.c" +# 1 "<built-in>" +# 1 "<command-line>" +# 1 "gcc/testsuite/gcc.dg/pr36674.c" +# 1 "gcc/testsuite/gcc.dg/pr36674.h" 1 +not_declared_yet(); +# 1 "gcc/testsuite/gcc.dg/pr36674.c" 2 +/* { dg-message "file included from \[^\n\]*pr36674.c:1:" "correct include line" { target *-*-* } 0 } */ +/* { dg-message "pr36674.h:1:1: warning: data definition has no type or storage class" "correct warning" { target *-*-* } 0 } */ diff --git a/libcpp/ChangeLog b/libcpp/ChangeLog index 4e21b58..36a2fbc 100644 --- a/libcpp/ChangeLog +++ b/libcpp/ChangeLog @@ -1,3 +1,11 @@ +2009-05-14 Manuel Lopez-Ibanez <manu@gcc.gnu.org> + + PR cpp/36674 + * directives (do_linemarker): Compensate for the increment in + location that occurs when we reach the end of line. + * files (_cpp_stack_include): Mention _cpp_find_file in the + comment. + 2009-05-10 Joseph Myers <joseph@codesourcery.com> * include/cpplib.h (enum cpp_token_fld_kind): Add diff --git a/libcpp/directives.c b/libcpp/directives.c index e71efb2..74644ff 100644 --- a/libcpp/directives.c +++ b/libcpp/directives.c @@ -1004,6 +1004,14 @@ do_linemarker (cpp_reader *pfile) } skip_rest_of_line (pfile); + + /* Compensate for the increment in linemap_add that occurs in + _cpp_do_file_change. We're currently at the start of the line + *following* the #line directive. A separate source_location for this + location makes no sense (until we do the LC_LEAVE), and + complicates LAST_SOURCE_LINE_LOCATION. */ + pfile->line_table->highest_location--; + _cpp_do_file_change (pfile, reason, new_file, new_lineno, new_sysp); } diff --git a/libcpp/files.c b/libcpp/files.c index 06ccd0f..c8c1902 100644 --- a/libcpp/files.c +++ b/libcpp/files.c @@ -912,13 +912,14 @@ _cpp_stack_include (cpp_reader *pfile, const char *fname, int angle_brackets, file = _cpp_find_file (pfile, fname, dir, false, angle_brackets); - /* Compensate for the increment in linemap_add. In the case of a - normal #include, we're currently at the start of the line - *following* the #include. A separate source_location for this - location makes no sense (until we do the LC_LEAVE), and - complicates LAST_SOURCE_LINE_LOCATION. This does not apply if we - found a PCH file (in which case linemap_add is not called) or we - were included from the command-line. */ + /* Compensate for the increment in linemap_add that occurs in + _cpp_stack_file. In the case of a normal #include, we're + currently at the start of the line *following* the #include. A + separate source_location for this location makes no sense (until + we do the LC_LEAVE), and complicates LAST_SOURCE_LINE_LOCATION. + This does not apply if we found a PCH file (in which case + linemap_add is not called) or we were included from the + command-line. */ if (file->pchname == NULL && file->err_no == 0 && type != IT_CMDLINE) pfile->line_table->highest_location--; |