This reverts a s/column_offset/column/ change in the fix for PR99446. This time with testcase included in the patch and the necessary reversion of the testsuite change of the offending rev.
Bootstrapped and tested on x86_64-unknown-linux-gnu, OK? Thanks, Richard. 2021-04-19 Richard Biener <rguent...@suse.de> PR preprocessor/100142 libcpp/ * line-map.c (linemap_position_for_loc_and_offset): Revert unintended s/column_offset/column/ change. * gcc.dg/pr100142.c: New testcase. * g++.dg/diagnostic/pr72803.C: Revert last change. --- gcc/testsuite/g++.dg/diagnostic/pr72803.C | 5 ++--- gcc/testsuite/gcc.dg/pr100142.c | 8 ++++++++ libcpp/line-map.c | 2 +- 3 files changed, 11 insertions(+), 4 deletions(-) create mode 100644 gcc/testsuite/gcc.dg/pr100142.c diff --git a/gcc/testsuite/g++.dg/diagnostic/pr72803.C b/gcc/testsuite/g++.dg/diagnostic/pr72803.C index ca522b74bad..0a9a390b9c3 100644 --- a/gcc/testsuite/g++.dg/diagnostic/pr72803.C +++ b/gcc/testsuite/g++.dg/diagnostic/pr72803.C @@ -5,6 +5,5 @@ class test { // The line directive appears to be necessary to trigger the ICE // { dg-error "style of line directive is a GCC extension" "" { target *-*-* } .-2 } -/* Verify that we get the best line and column for the diagnostic. - 512 is not representable in the line-maps created for this test. */ -// { dg-error "511: expected .;. after class definition" "" { target *-*-* } 3 } +/* Verify that we get the correct line and column for the diagnostic. */ +// { dg-error "512: expected .;. after class definition" "" { target *-*-* } 3 } diff --git a/gcc/testsuite/gcc.dg/pr100142.c b/gcc/testsuite/gcc.dg/pr100142.c new file mode 100644 index 00000000000..aec146cb0a9 --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr100142.c @@ -0,0 +1,8 @@ +/* { dg-do compile } */ +/* { dg-options "-fpreprocessed" } */ + +void +foo (void) +{ + assert (1); /* { dg-warning "implicit" } */ +} diff --git a/libcpp/line-map.c b/libcpp/line-map.c index 2f5e44447d2..a03d6760a8e 100644 --- a/libcpp/line-map.c +++ b/libcpp/line-map.c @@ -982,7 +982,7 @@ linemap_position_for_loc_and_offset (line_maps *set, the next line map of the set. Otherwise, we try to encode the location in the next map. */ for (; map != LINEMAPS_LAST_ORDINARY_MAP (set) - && (loc + (column << map->m_range_bits) + && (loc + (column_offset << map->m_range_bits) >= MAP_START_LOCATION (map + 1)); map++) /* If the next map is a different file, or starts in a higher line, we cannot encode the location there. */ -- 2.26.2