aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
Diffstat (limited to 'gcc')
-rw-r--r--gcc/fortran/ChangeLog9
-rw-r--r--gcc/fortran/error.c7
2 files changed, 12 insertions, 4 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index 2892011..ad30ff2 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -1,3 +1,9 @@
+2019-10-14 Tobias Burnus <tobias@codesourcery.com>
+
+ PR fortran/92072
+ * error.c (error_print, gfc_format_decoder): Fix %C column-
+ offset handling.
+
2019-10-13 Damian Rouson <damain@sourceryinstitue.org>
PR fortran/91513
@@ -110,7 +116,8 @@
2019-10-04 Tobias Burnus <tobias@codesourcery.com>
- * 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 <kargl@gcc.gnu.org>
diff --git a/gcc/fortran/error.c b/gcc/fortran/error.c
index 1019f17..7962c93 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