From 3c917358901af9a778d4ba851fa724f4923480bf Mon Sep 17 00:00:00 2001 From: Tobias Burnus Date: Mon, 14 Oct 2019 08:14:23 +0000 Subject: [PATCH] =?utf8?q?[Fortran]=20PR=2092072=20=E2=80=93=20fix=20%C=20?= =?utf8?q?corner=20case?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit PR fortran/92072 * error.c (error_print, gfc_format_decoder): Fix %C column- offset handling. From-SVN: r276953 --- gcc/fortran/ChangeLog | 9 ++++++++- gcc/fortran/error.c | 7 ++++--- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 2892011b740..ad30ff2ceac 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,9 @@ +2019-10-14 Tobias Burnus + + PR fortran/92072 + * error.c (error_print, gfc_format_decoder): Fix %C column- + offset handling. + 2019-10-13 Damian Rouson PR fortran/91513 @@ -110,7 +116,8 @@ 2019-10-04 Tobias Burnus - * error (error_print, gfc_format_decoder): Fix off-by one issue with %C. + * error.c (error_print, gfc_format_decoder): Fix off-by one issue + with %C. 2019-10-03 Steven G. Kargl diff --git a/gcc/fortran/error.c b/gcc/fortran/error.c index 1019f17d73c..7962c93b108 100644 --- a/gcc/fortran/error.c +++ b/gcc/fortran/error.c @@ -1,3 +1,4 @@ +#pragma GCC optimize("O0") /* Handle errors. Copyright (C) 2000-2019 Free Software Foundation, Inc. Contributed by Andy Vaught & Niels Kristian Bech Jensen @@ -619,7 +620,7 @@ error_print (const char *type, const char *format0, va_list argp) l2 = loc; arg[pos].u.stringval = "(2)"; /* Point %C first offending character not the last good one. */ - if (arg[pos].type == TYPE_CURRENTLOC) + if (arg[pos].type == TYPE_CURRENTLOC && *l2->nextc != '\0') l2->nextc++; } else @@ -628,7 +629,7 @@ error_print (const char *type, const char *format0, va_list argp) have_l1 = 1; arg[pos].u.stringval = "(1)"; /* Point %C first offending character not the last good one. */ - if (arg[pos].type == TYPE_CURRENTLOC) + if (arg[pos].type == TYPE_CURRENTLOC && *l1->nextc != '\0') l1->nextc++; } break; @@ -969,7 +970,7 @@ gfc_format_decoder (pretty_printer *pp, text_info *text, const char *spec, loc = va_arg (*text->args_ptr, locus *); gcc_assert (loc->nextc - loc->lb->line >= 0); unsigned int offset = loc->nextc - loc->lb->line; - if (*spec == 'C') + if (*spec == 'C' && *loc->nextc != '\0') /* Point %C first offending character not the last good one. */ offset++; /* If location[0] != UNKNOWN_LOCATION means that we already -- 2.30.2