diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index c645b6fd401..95605b7089d 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,10 @@ +2014-12-05 Manuel López-Ibáñez + + * scanner.c (gfc_next_char_literal): Use gfc_warning_now. + (load_file): Use the line length as the column hint for + linemap_line_start. Reserve a location for the highest column of + the line. + 2014-12-03 Manuel López-Ibáñez PR fortran/44054 diff --git a/gcc/fortran/scanner.c b/gcc/fortran/scanner.c index 0de09983c23..718c323a5cc 100644 --- a/gcc/fortran/scanner.c +++ b/gcc/fortran/scanner.c @@ -1056,7 +1056,8 @@ restart: gfc_current_locus.lb->truncated = 0; gfc_current_locus.nextc = gfc_current_locus.lb->line + maxlen; - gfc_warning_now_1 ("Line truncated at %L", &gfc_current_locus); + gfc_warning_now (OPT_Wline_truncation, + "Line truncated at %L", &gfc_current_locus); gfc_current_locus.nextc = current_nextc; } @@ -1195,7 +1196,8 @@ restart: && gfc_current_locus.lb->truncated) { gfc_current_locus.lb->truncated = 0; - gfc_warning_now_1 ("Line truncated at %L", &gfc_current_locus); + gfc_warning_now (OPT_Wline_truncation, + "Line truncated at %L", &gfc_current_locus); } prev_openmp_flag = openmp_flag; @@ -2044,7 +2046,13 @@ load_file (const char *realfilename, const char *displayedname, bool initial) + (len + 1) * sizeof (gfc_char_t)); b->location - = linemap_line_start (line_table, current_file->line++, 120); + = linemap_line_start (line_table, current_file->line++, len); + /* ??? We add the location for the maximum column possible here, + because otherwise if the next call creates a new line-map, it + will not reserve space for any offset. */ + if (len > 0) + linemap_position_for_column (line_table, len); + b->file = current_file; b->truncated = trunc; wide_strcpy (b->line, line); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 295a8103acc..29802cd7c94 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2014-12-05 Manuel López-Ibáñez + + * gfortran.dg/line_length_5.f90: New test. + 2014-12-04 Sriraman Tallam H.J. Lu diff --git a/libcpp/ChangeLog b/libcpp/ChangeLog index afb0f791f2c..e26c8c9b599 100644 --- a/libcpp/ChangeLog +++ b/libcpp/ChangeLog @@ -1,3 +1,8 @@ +2014-12-05 Manuel López-Ibáñez + + * line-map.c (linemap_position_for_loc_and_offset): Add new + linemap_assert_fails. + 2014-12-02 Manuel López-Ibáñez * include/line-map.h (linemap_assert_fails): Declare. diff --git a/libcpp/line-map.c b/libcpp/line-map.c index 6a695ab0f1b..6675634fa97 100644 --- a/libcpp/line-map.c +++ b/libcpp/line-map.c @@ -678,7 +678,8 @@ linemap_position_for_loc_and_offset (struct line_maps *set, linemap_position_for_line_and_column (map, SOURCE_LINE (map, loc), offset); - if (linemap_assert_fails (map == linemap_lookup (set, r))) + if (linemap_assert_fails (r <= set->highest_location) + || linemap_assert_fails (map == linemap_lookup (set, r))) return loc; return r;