This patch changes the output on the simple test I tried from:
$ ./gcobol -B. hello.cob -S
hello.cob:2:8: error: syntax error, unexpected NAME, expecting FUNCTION or
PROGRAM-ID
2 | porgram-id. hello.
| ^
cobol1: error: failed compiling hello.cob
to:
$ ./gcobol -B. hello.cob -S
hello.cob:2:8: error: syntax error, unexpected NAME, expecting FUNCTION or
PROGRAM-ID
2 | porgram-id. hello.
| ^~~~~~~~~~~
cobol1: error: failed compiling hello.cob
I haven't tested this patch properly yet.
gcc/cobol/ChangeLog:
* util.cc (gcc_location_set_impl): Capture the start and end of "loc"
as a range, rather than just the (last_line, first_column).
---
gcc/cobol/util.cc | 16 ++++++++++++++--
1 file changed, 14 insertions(+), 2 deletions(-)
diff --git a/gcc/cobol/util.cc b/gcc/cobol/util.cc
index 6ade146b5dda..aba4a1003554 100644
--- a/gcc/cobol/util.cc
+++ b/gcc/cobol/util.cc
@@ -1857,11 +1857,23 @@ cobol_filename_restore() {
static location_t token_location;
+/* Update global token_location with a location_t expressing a source
+ range with start and caret at the first line/column of LOC, and
+ finishing at the last line/column of LOC. */
+
template <typename LOC>
static void
gcc_location_set_impl( const LOC& loc ) {
- token_location = linemap_line_start( line_table, loc.last_line, 80 );
- token_location = linemap_position_for_column( line_table, loc.first_column);
+ const location_t start_line
+ = linemap_line_start( line_table, loc.first_line, 80 );
+ const location_t token_start
+ = linemap_position_for_column( line_table, loc.first_column);
+ const location_t finish_line
+ = linemap_line_start( line_table, loc.last_line, 80 );
+ const location_t token_finish
+ = linemap_position_for_column( line_table, loc.last_column);
+ token_location
+ = make_location (token_start, token_start, token_finish);
location_dump(__func__, __LINE__, "parser", loc);
}
--
2.26.3