re PR middle-end/84034 (incomplete warning message with dos line endings)
authorBernd Edlinger <bernd.edlinger@hotmail.de>
Sat, 27 Jan 2018 06:44:25 +0000 (06:44 +0000)
committerBernd Edlinger <edlinger@gcc.gnu.org>
Sat, 27 Jan 2018 06:44:25 +0000 (06:44 +0000)
2018-01-27  Bernd Edlinger  <bernd.edlinger@hotmail.de>

        PR diagnostic/84034
        * diagnostic-show-locus.c (get_line_width_without_trailing_whitespace):
        Handle CR like TAB.
        (layout::print_source_line): Likewise.
        (test_get_line_width_without_trailing_whitespace): Add test cases.

From-SVN: r257120

gcc/ChangeLog
gcc/diagnostic-show-locus.c

index f2699e0c0d09b5b9a281aea337569b59f0a93d32..981ae018cd6ebb7e36d3fc2c8c19416cab24eafd 100644 (file)
@@ -1,3 +1,11 @@
+2018-01-27  Bernd Edlinger  <bernd.edlinger@hotmail.de>
+
+       PR diagnostic/84034
+       * diagnostic-show-locus.c (get_line_width_without_trailing_whitespace):
+       Handle CR like TAB.
+       (layout::print_source_line): Likewise.
+       (test_get_line_width_without_trailing_whitespace): Add test cases.
+
 2018-01-27  Jakub Jelinek  <jakub@redhat.com>
 
        PR middle-end/84040
index cce3ef30cb7bd01bfd33c185cadb04b044999bf1..5eee3cc144991339db35a0670f4ab4b3808936eb 100644 (file)
@@ -639,7 +639,7 @@ get_line_width_without_trailing_whitespace (const char *line, int line_width)
   while (result > 0)
     {
       char ch = line[result - 1];
-      if (ch == ' ' || ch == '\t')
+      if (ch == ' ' || ch == '\t' || ch == '\r')
        result--;
       else
        break;
@@ -648,7 +648,8 @@ get_line_width_without_trailing_whitespace (const char *line, int line_width)
   gcc_assert (result <= line_width);
   gcc_assert (result == 0 ||
              (line[result - 1] != ' '
-              && line[result -1] != '\t'));
+              && line[result -1] != '\t'
+              && line[result -1] != '\r'));
   return result;
 }
 
@@ -673,9 +674,11 @@ test_get_line_width_without_trailing_whitespace ()
   assert_eq ("", 0);
   assert_eq (" ", 0);
   assert_eq ("\t", 0);
+  assert_eq ("\r", 0);
   assert_eq ("hello world", 11);
   assert_eq ("hello world     ", 11);
   assert_eq ("hello world     \t\t  ", 11);
+  assert_eq ("hello world\r", 11);
 }
 
 #endif /* #if CHECKING_P */
@@ -1176,8 +1179,8 @@ layout::print_source_line (int row, const char *line, int line_width,
          else
            m_colorizer.set_normal_text ();
        }
-      char c = *line == '\t' ? ' ' : *line;
-      if (c == '\0')
+      char c = *line;
+      if (c == '\0' || c == '\t' || c == '\r')
        c = ' ';
       if (c != ' ')
        {