diff options
author | Per Bothner <per@bothner.com> | 2005-04-21 10:08:27 -0700 |
---|---|---|
committer | Per Bothner <bothner@gcc.gnu.org> | 2005-04-21 10:08:27 -0700 |
commit | c1fc50476ce2f2cf7f376a7824e0e25a803837f6 (patch) | |
tree | b15d8e7557f1913eb0160b3519aa2094cc02bc47 | |
parent | 1c280337076ea8ca822821ea96469fee81dd5f97 (diff) | |
download | gcc-c1fc50476ce2f2cf7f376a7824e0e25a803837f6.zip gcc-c1fc50476ce2f2cf7f376a7824e0e25a803837f6.tar.gz gcc-c1fc50476ce2f2cf7f376a7824e0e25a803837f6.tar.bz2 |
re PR preprocessor/20907 (long comments throw off line numbers)
PR preprocessor/20907
* line-map.c (linemap_line_start): Fix bug when we need to increse
column_bits but can re-use the current line_map.
From-SVN: r98515
-rw-r--r-- | libcpp/ChangeLog | 6 | ||||
-rw-r--r-- | libcpp/line-map.c | 6 |
2 files changed, 11 insertions, 1 deletions
diff --git a/libcpp/ChangeLog b/libcpp/ChangeLog index 7050d65..1a8fccf 100644 --- a/libcpp/ChangeLog +++ b/libcpp/ChangeLog @@ -1,3 +1,9 @@ +2005-04-19 Per Bothner <per@bothner.com> + + PR preprocessor/20907 + * line-map.c (linemap_line_start): Fix bug when we need to increse + column_bits but can re-use the current line_map. + 2005-04-19 Kaveh R. Ghazi <ghazi@caip.rutgers.edu> * system.h (fopen, fdopen, freopen): Define these to the unlocked diff --git a/libcpp/line-map.c b/libcpp/line-map.c index e6dd48d..1ace4c9 100644 --- a/libcpp/line-map.c +++ b/libcpp/line-map.c @@ -199,6 +199,8 @@ linemap_line_start (struct line_maps *set, unsigned int to_line, int column_bits; if (max_column_hint > 100000 || highest > 0xC0000000) { + /* If the column number is ridiculous or we've allocated a huge + number of source_locations, give up on column numbers. */ max_column_hint = 0; if (highest >0xF0000000) return 0; @@ -211,13 +213,15 @@ linemap_line_start (struct line_maps *set, unsigned int to_line, column_bits++; max_column_hint = 1U << column_bits; } + /* Allocate the new line_map. However, if the current map only has a + single line we can sometimes just increase its column_bits instead. */ if (line_delta < 0 || last_line != map->to_line || SOURCE_COLUMN (map, highest) >= (1U << column_bits)) map = (struct line_map*) linemap_add (set, LC_RENAME, map->sysp, map->to_file, to_line); map->column_bits = column_bits; - r = map->start_location; + r = map->start_location + ((to_line - map->to_line) << column_bits); } else r = highest - SOURCE_COLUMN (map, highest) |