]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
PR other/69006: fix extra newlines after diagnostics
authorDavid Malcolm <dmalcolm@redhat.com>
Tue, 26 Jan 2016 17:08:12 +0000 (17:08 +0000)
committerDavid Malcolm <dmalcolm@gcc.gnu.org>
Tue, 26 Jan 2016 17:08:12 +0000 (17:08 +0000)
gcc/c-family/ChangeLog:
PR other/69006
* c-opts.c (c_diagnostic_finalizer): Replace invocation of
pp_newline_and_flush with pp_flush.

gcc/cp/ChangeLog:
PR other/69006
* error.c (print_instantiation_partial_context_line): Add missing
newlines from output for the t == NULL case.
(print_instantiation_partial_context): Remove call to pp_newline.

gcc/ChangeLog:
PR other/69006
* diagnostic-show-locus.c (layout::print_source_line): Replace
call to pp_newline with call to layout::print_newline.
(layout::print_annotation_line): Likewise.
(layout::move_to_column): Likewise.
(layout::print_any_fixits): After printing any fixits, print a
trailing newline, if necessary.
(layout::print_newline): New method, resetting any colorization
before a newline.
(diagnostic_show_locus): Move the pp_newline to before the
early bailout.  Remove dummy block enclosing the layout instance.
* diagnostic.c (default_diagnostic_finalizer): Replace invocation
of pp_newline_and_flush with pp_flush.
(diagnostic_append_note): Delete use of pp_newline.
(diagnostic_append_note_at_rich_loc): Delete.
* diagnostic.h (diagnostic_append_note_at_rich_loc): Delete.
* pretty-print.h (output_buffer_append_r): Reset buff->line_length
when newline characters are added to the buffer.

gcc/fortran/ChangeLog:
PR other/69006
* error.c (gfc_diagnostic_starter): Delete use of pp_newline.

gcc/testsuite/ChangeLog:
PR other/69006
* g++.dg/ext/timevar1.C: Add dg-allow-blank-lines-in-output
directive.
* gcc.dg/plugin/diagnostic-test-show-locus-color.c: Update
expected multiline output to reflect the colorization being
disabled before newlines.
* gcc.dg/plugin/diagnostic_plugin_test_show_locus.c
(custom_diagnostic_finalizer): Replace call to
pp_newline_and_flush with call to pp_flush.
* gcc.dg/unroll-2.c: Add dg-allow-blank-lines-in-output directive.
* gfortran.dg/implicit_class_1.f90: Likewise.
* lib/gcc-dg.exp (allow_blank_lines): New global.
(dg-allow-blank-lines-in-output): New procedure.
(gcc-dg-prune): Complain about blank lines in the output, unless
dg-allow-blank-lines-in-output was called.
* lib/multiline.exp (_build_multiline_regex): Only support
arbitrary followup text for non-blank-lines, not for blank lines.

From-SVN: r232837

19 files changed:
gcc/ChangeLog
gcc/c-family/ChangeLog
gcc/c-family/c-opts.c
gcc/cp/ChangeLog
gcc/cp/error.c
gcc/diagnostic-show-locus.c
gcc/diagnostic.c
gcc/diagnostic.h
gcc/fortran/ChangeLog
gcc/fortran/error.c
gcc/pretty-print.h
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/ext/timevar1.C
gcc/testsuite/gcc.dg/plugin/diagnostic-test-show-locus-color.c
gcc/testsuite/gcc.dg/plugin/diagnostic_plugin_test_show_locus.c
gcc/testsuite/gcc.dg/unroll-2.c
gcc/testsuite/gfortran.dg/implicit_class_1.f90
gcc/testsuite/lib/gcc-dg.exp
gcc/testsuite/lib/multiline.exp

index 71e96024dd4f3bb5df3f4b8da85822e699abd5b2..f030101656c25f2c9cf332d6dcfb61162a2bd97b 100644 (file)
@@ -1,3 +1,24 @@
+2016-01-26  David Malcolm  <dmalcolm@redhat.com>
+
+       PR other/69006
+       * diagnostic-show-locus.c (layout::print_source_line): Replace
+       call to pp_newline with call to layout::print_newline.
+       (layout::print_annotation_line): Likewise.
+       (layout::move_to_column): Likewise.
+       (layout::print_any_fixits): After printing any fixits, print a
+       trailing newline, if necessary.
+       (layout::print_newline): New method, resetting any colorization
+       before a newline.
+       (diagnostic_show_locus): Move the pp_newline to before the
+       early bailout.  Remove dummy block enclosing the layout instance.
+       * diagnostic.c (default_diagnostic_finalizer): Replace invocation
+       of pp_newline_and_flush with pp_flush.
+       (diagnostic_append_note): Delete use of pp_newline.
+       (diagnostic_append_note_at_rich_loc): Delete.
+       * diagnostic.h (diagnostic_append_note_at_rich_loc): Delete.
+       * pretty-print.h (output_buffer_append_r): Reset buff->line_length
+       when newline characters are added to the buffer.
+
 2016-01-26  Michael Matz  <matz@suse.de>
 
        * configure.ac (ac_cv_std_swap_in_utility): New test.
index 7bd1d5d8fe7b0d6e15360c2aed96c9f18368e38e..fdc96eabd7cf3ddcf78450e21fec26ddb6009abf 100644 (file)
@@ -1,3 +1,9 @@
+2016-01-26  David Malcolm  <dmalcolm@redhat.com>
+
+       PR other/69006
+       * c-opts.c (c_diagnostic_finalizer): Replace invocation of
+       pp_newline_and_flush with pp_flush.
+
 2016-01-20  Martin Sebor  <msebor@redhat.com>
 
        PR c/69405
index f2a3815f54500cae1ebb3b2c0ece6982a7c2f857..8cc28aff6000ce829e3e841cd6b06910005441ce 100644 (file)
@@ -169,7 +169,7 @@ c_diagnostic_finalizer (diagnostic_context *context,
      finalizer -- for tokens resulting from macro expansion.  */
   virt_loc_aware_diagnostic_finalizer (context, diagnostic);
   pp_destroy_prefix (context->printer);
-  pp_newline_and_flush (context->printer);
+  pp_flush (context->printer);
 }
 
 /* Common default settings for diagnostics.  */
index ee5d0c0748dd6d9258bf6c5c05fb44cefe49c4e4..b57030b67f730f898bb6932950bf567ceeb58945 100644 (file)
@@ -1,3 +1,10 @@
+2016-01-26  David Malcolm  <dmalcolm@redhat.com>
+
+       PR other/69006
+       * error.c (print_instantiation_partial_context_line): Add missing
+       newlines from output for the t == NULL case.
+       (print_instantiation_partial_context): Remove call to pp_newline.
+
 2016-01-24  Patrick Palka  <ppalka@gcc.gnu.org>
 
        Revert:
index 370816c64e43a367bb665ec8588785c6d5b1307f..89a00a02a3aa4a1e4d4f6151a81a5efafe4bd0fb 100644 (file)
@@ -3365,8 +3365,8 @@ print_instantiation_partial_context_line (diagnostic_context *context,
     {
       pp_verbatim (context->printer,
                   recursive_p
-                  ? _("recursively required from here")
-                  : _("required from here"));
+                  ? _("recursively required from here\n")
+                  : _("required from here\n"));
     }
 }
 
@@ -3450,7 +3450,6 @@ print_instantiation_partial_context (diagnostic_context *context,
     }
   print_instantiation_partial_context_line (context, NULL, loc,
                                            /*recursive_p=*/false);
-  pp_newline (context->printer);
 }
 
 /* Called from cp_thing to print the template context for an error.  */
index e32325486af96e137991a67d19e265424e015b54..d9b6750339b31a0d4c519af4a6a7564b267951e5 100644 (file)
@@ -159,6 +159,8 @@ class layout
   void print_any_fixits (int row, const rich_location *richloc);
 
  private:
+  void print_newline ();
+
   bool
   get_state_at_point (/* Inputs.  */
                      int row, int column,
@@ -574,7 +576,7 @@ layout::print_source_line (int row, line_bounds *lbounds_out)
       pp_character (m_pp, c);
       line++;
     }
-  pp_newline (m_pp);
+  print_newline ();
 
   lbounds_out->m_first_non_ws = first_non_ws;
   lbounds_out->m_last_non_ws = last_non_ws;
@@ -616,7 +618,7 @@ layout::print_annotation_line (int row, const line_bounds lbounds)
          pp_character (m_pp, ' ');
        }
     }
-  pp_newline (m_pp);
+  print_newline ();
 }
 
 /* If there are any fixit hints on source line ROW within RICHLOC, print them.
@@ -684,6 +686,18 @@ layout::print_any_fixits (int row, const rich_location *richloc)
            }
        }
     }
+
+  /* Add a trailing newline, if necessary.  */
+  move_to_column (&column, 0);
+}
+
+/* Disable any colorization and emit a newline.  */
+
+void
+layout::print_newline ()
+{
+  m_colorizer.set_normal_text ();
+  pp_newline (m_pp);
 }
 
 /* Return true if (ROW/COLUMN) is within a range of the layout.
@@ -778,7 +792,7 @@ layout::move_to_column (int *column, int dest_column)
   /* Start a new line if we need to.  */
   if (*column > dest_column)
     {
-      pp_newline (m_pp);
+      print_newline ();
       *column = 0;
     }
 
@@ -798,6 +812,8 @@ void
 diagnostic_show_locus (diagnostic_context * context,
                       const diagnostic_info *diagnostic)
 {
+  pp_newline (context->printer);
+
   if (!context->show_caret
       || diagnostic_location (diagnostic, 0) <= BUILTINS_LOCATION
       || diagnostic_location (diagnostic, 0) == context->last_location)
@@ -805,34 +821,23 @@ diagnostic_show_locus (diagnostic_context * context,
 
   context->last_location = diagnostic_location (diagnostic, 0);
 
-  pp_newline (context->printer);
-
   const char *saved_prefix = pp_get_prefix (context->printer);
   pp_set_prefix (context->printer, NULL);
 
-  {
-    layout layout (context, diagnostic);
-    int last_line = layout.get_last_line ();
-    for (int row = layout.get_first_line ();
-        row <= last_line;
-        row++)
-      {
-       /* Print the source line, followed by an annotation line
-          consisting of any caret/underlines, then any fixits.
-          If the source line can't be read, print nothing.  */
-       line_bounds lbounds;
-       if (layout.print_source_line (row, &lbounds))
-         {
-           layout.print_annotation_line (row, lbounds);
-           layout.print_any_fixits (row, diagnostic->richloc);
-         }
-      }
-
-    /* The closing scope here leads to the dtor for layout and thus
-       colorizer being called here, which affects the precise
-       place where colorization is turned off in the unittest
-       for colorized output.  */
-  }
+  layout layout (context, diagnostic);
+  int last_line = layout.get_last_line ();
+  for (int row = layout.get_first_line (); row <= last_line; row++)
+    {
+      /* Print the source line, followed by an annotation line
+        consisting of any caret/underlines, then any fixits.
+        If the source line can't be read, print nothing.  */
+      line_bounds lbounds;
+      if (layout.print_source_line (row, &lbounds))
+       {
+         layout.print_annotation_line (row, lbounds);
+         layout.print_any_fixits (row, diagnostic->richloc);
+       }
+    }
 
   pp_set_prefix (context->printer, saved_prefix);
 }
index effb8f2a9be804beca1c3315f4df7dd9c83ba9e7..f661b57db5adc8e02a2acb024bfaa5637ef668a7 100644 (file)
@@ -546,7 +546,7 @@ default_diagnostic_finalizer (diagnostic_context *context,
 {
   diagnostic_show_locus (context, diagnostic);
   pp_destroy_prefix (context->printer);
-  pp_newline_and_flush (context->printer);
+  pp_flush (context->printer);
 }
 
 /* Interface to specify diagnostic kind overrides.  Returns the
@@ -879,37 +879,6 @@ diagnostic_append_note (diagnostic_context *context,
   saved_prefix = pp_get_prefix (context->printer);
   pp_set_prefix (context->printer,
                  diagnostic_build_prefix (context, &diagnostic));
-  pp_newline (context->printer);
-  pp_format (context->printer, &diagnostic.message);
-  pp_output_formatted_text (context->printer);
-  pp_destroy_prefix (context->printer);
-  pp_set_prefix (context->printer, saved_prefix);
-  diagnostic_show_locus (context, &diagnostic);
-  va_end (ap);
-}
-
-/* Same as diagnostic_append_note, but at RICHLOC. */
-
-void
-diagnostic_append_note_at_rich_loc (diagnostic_context *context,
-                                   rich_location *richloc,
-                                   const char * gmsgid, ...)
-{
-  diagnostic_info diagnostic;
-  va_list ap;
-  const char *saved_prefix;
-
-  va_start (ap, gmsgid);
-  diagnostic_set_info (&diagnostic, gmsgid, &ap, richloc, DK_NOTE);
-  if (context->inhibit_notes_p)
-    {
-      va_end (ap);
-      return;
-    }
-  saved_prefix = pp_get_prefix (context->printer);
-  pp_set_prefix (context->printer,
-                 diagnostic_build_prefix (context, &diagnostic));
-  pp_newline (context->printer);
   pp_format (context->printer, &diagnostic.message);
   pp_output_formatted_text (context->printer);
   pp_destroy_prefix (context->printer);
index 2cb6270ef2146eda4c188e86e1230030353d61c1..7cc5cff185ba198a28a7fc4a094824df6b6e31af 100644 (file)
@@ -293,10 +293,6 @@ extern void diagnostic_set_info_translated (diagnostic_info *, const char *,
      ATTRIBUTE_GCC_DIAG(2,0);
 extern void diagnostic_append_note (diagnostic_context *, location_t,
                                     const char *, ...) ATTRIBUTE_GCC_DIAG(3,4);
-extern void diagnostic_append_note_at_rich_loc (diagnostic_context *,
-                                               rich_location *,
-                                               const char *, ...)
-  ATTRIBUTE_GCC_DIAG(3,4);
 #endif
 extern char *diagnostic_build_prefix (diagnostic_context *, const diagnostic_info *);
 void default_diagnostic_starter (diagnostic_context *, diagnostic_info *);
index 5853ddf374c42e1dfff6b2d155e1ed7499909aaf..a137e919fe48826446d28dc917f0b6848456473f 100644 (file)
@@ -1,3 +1,8 @@
+2016-01-26  David Malcolm  <dmalcolm@redhat.com>
+
+       PR other/69006
+       * error.c (gfc_diagnostic_starter): Delete use of pp_newline.
+
 2016-01-23  Jerry DeLisle  <jvdelisle@gcc.gnu.org>
 
        PR fortran/69397
index 7388706d583827d591963e0218493f47e4567a56..e7f4ba7dac055442acb5dc2e4ac51c2b5857ff0a 100644 (file)
@@ -1096,7 +1096,6 @@ gfc_diagnostic_starter (diagnostic_context *context,
       /* Fortran uses an empty line between locus and caret line.  */
       pp_newline (context->printer);
       diagnostic_show_locus (context, diagnostic);
-      pp_newline (context->printer);
       /* If the caret line was shown, the prefix does not contain the
         locus.  */
       pp_set_prefix (context->printer, kind_prefix);
index 6a44fbc5b7eeaf327faf68a69c360f5380d7d30a..f49f35ac610b5f797df9e6a554a65d12908a83b5 100644 (file)
@@ -125,7 +125,11 @@ output_buffer_append_r (output_buffer *buff, const char *start, int length)
 {
   gcc_checking_assert (start);
   obstack_grow (buff->obstack, start, length);
-  buff->line_length += length;
+  for (int i = 0; i < length; i++)
+    if (start[i] == '\n')
+      buff->line_length = 0;
+    else
+      buff->line_length++;
 }
 
 /*  Return a pointer to the last character emitted in the
index 3d0cc309eefc8648471dfea8662afef8fb0ad72a..18aa8af737fee224558a504720f07bd39b47c6e7 100644 (file)
@@ -1,3 +1,23 @@
+2016-01-26  David Malcolm  <dmalcolm@redhat.com>
+
+       PR other/69006
+       * g++.dg/ext/timevar1.C: Add dg-allow-blank-lines-in-output
+       directive.
+       * gcc.dg/plugin/diagnostic-test-show-locus-color.c: Update
+       expected multiline output to reflect the colorization being
+       disabled before newlines.
+       * gcc.dg/plugin/diagnostic_plugin_test_show_locus.c
+       (custom_diagnostic_finalizer): Replace call to
+       pp_newline_and_flush with call to pp_flush.
+       * gcc.dg/unroll-2.c: Add dg-allow-blank-lines-in-output directive.
+       * gfortran.dg/implicit_class_1.f90: Likewise.
+       * lib/gcc-dg.exp (allow_blank_lines): New global.
+       (dg-allow-blank-lines-in-output): New procedure.
+       (gcc-dg-prune): Complain about blank lines in the output, unless
+       dg-allow-blank-lines-in-output was called.
+       * lib/multiline.exp (_build_multiline_regex): Only support
+       arbitrary followup text for non-blank-lines, not for blank lines.
+
 2016-01-26  Jakub Jelinek  <jakub@redhat.com>
 
        PR tree-optimization/69483
index 0d2d3f5f31dad69509ea62f7e3b68ab4bfd7b3cf..a48f8ba3705a4bff34460f31c8a8c9d6936c3c24 100644 (file)
@@ -1,5 +1,6 @@
 // PR c++/52248
 // { dg-options "-ftime-report" }
+// { dg-allow-blank-lines-in-output 1 }
 // { dg-prune-output "wall" }
 // { dg-prune-output "times" }
 // { dg-prune-output "TOTAL" }
index 199e0b20d6198ec76c5f655457c7609b95fe405e..a59025870a6da38bed450df95656c0d3647f2ea7 100644 (file)
@@ -15,8 +15,7 @@ void test_simple (void)
 
 /* { dg-begin-multiline-output "" }
    myvar = \e[32m\e[Kmyvar\e[m\e[K\e[01;35m\e[K.\e[m\e[K\e[34m\e[Kx\e[m\e[K;
-           \e[32m\e[K~~~~~\e[m\e[K\e[01;35m\e[K^\e[m\e[K\e[34m\e[K~
-\e[m\e[K
+           \e[32m\e[K~~~~~\e[m\e[K\e[01;35m\e[K^\e[m\e[K\e[34m\e[K~\e[m\e[K
    { dg-end-multiline-output "" } */
 #endif
 }
@@ -28,8 +27,7 @@ void test_simple_2 (void)
 
 /* { dg-begin-multiline-output "" }
    x = \e[32m\e[Kfirst_function ()\e[m\e[K \e[01;35m\e[K+\e[m\e[K \e[34m\e[Ksecond_function ()\e[m\e[K;
-       \e[32m\e[K~~~~~~~~~~~~~~~~~\e[m\e[K \e[01;35m\e[K^\e[m\e[K \e[34m\e[K~~~~~~~~~~~~~~~~~~
-\e[m\e[K
+       \e[32m\e[K~~~~~~~~~~~~~~~~~\e[m\e[K \e[01;35m\e[K^\e[m\e[K \e[34m\e[K~~~~~~~~~~~~~~~~~~\e[m\e[K
    { dg-end-multiline-output "" } */
 #endif
 }
@@ -42,11 +40,10 @@ void test_multiline (void)
        + second_function ()); /* { dg-warning "test" } */
 
 /* { dg-begin-multiline-output "" }
-   x = (\e[32m\e[Kfirst_function ()
\e[m\e[K       \e[32m\e[K~~~~~~~~~~~~~~~~~
-\e[m\e[K        \e[01;35m\e[K+\e[m\e[K \e[34m\e[Ksecond_function ()\e[m\e[K);
-        \e[01;35m\e[K^\e[m\e[K \e[34m\e[K~~~~~~~~~~~~~~~~~~
-\e[m\e[K
+   x = (\e[32m\e[Kfirst_function ()\e[m\e[K
+        \e[32m\e[K~~~~~~~~~~~~~~~~~\e[m\e[K
+        \e[01;35m\e[K+\e[m\e[K \e[34m\e[Ksecond_function ()\e[m\e[K);
+        \e[01;35m\e[K^\e[m\e[K \e[34m\e[K~~~~~~~~~~~~~~~~~~\e[m\e[K
    { dg-end-multiline-output "" } */
 #endif
 }
@@ -67,29 +64,28 @@ void test_many_lines (void)
                                                 magna, aliqua));
 
 /* { dg-begin-multiline-output "" }
-   x = (\e[32m\e[Kfirst_function_with_a_very_long_name (lorem, ipsum, dolor, sit, amet,
\e[m\e[K       \e[32m\e[K~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-\e[m\e[K \e[32m\e[K                                            consectetur, adipiscing, elit,
\e[m\e[K                                            \e[32m\e[K~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-\e[m\e[K \e[32m\e[K                                            sed, eiusmod, tempor,
\e[m\e[K                                            \e[32m\e[K~~~~~~~~~~~~~~~~~~~~~
-\e[m\e[K \e[32m\e[K                                            incididunt, ut, labore, et,
\e[m\e[K                                            \e[32m\e[K~~~~~~~~~~~~~~~~~~~~~~~~~~~
-\e[m\e[K \e[32m\e[K                                            dolore, magna, aliqua)
\e[m\e[K                                            \e[32m\e[K~~~~~~~~~~~~~~~~~~~~~~
-\e[m\e[K        \e[01;35m\e[K+\e[m\e[K \e[34m\e[Ksecond_function_with_a_very_long_name (lorem, ipsum, dolor, sit,
\e[m\e[K       \e[01;35m\e[K^\e[m\e[K \e[34m\e[K~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-\e[m\e[K \e[34m\e[K                                                amet, consectetur,
\e[m\e[K                                                \e[34m\e[K~~~~~~~~~~~~~~~~~~
-\e[m\e[K \e[34m\e[K                                                adipiscing, elit, sed,
\e[m\e[K                                                \e[34m\e[K~~~~~~~~~~~~~~~~~~~~~~
-\e[m\e[K \e[34m\e[K                                                eiusmod, tempor, incididunt,
\e[m\e[K                                                \e[34m\e[K~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-\e[m\e[K \e[34m\e[K                                                ut, labore, et, dolore,
\e[m\e[K                                                \e[34m\e[K~~~~~~~~~~~~~~~~~~~~~~~
-\e[m\e[K \e[34m\e[K                                                magna, aliqua)\e[m\e[K);
-                                                 \e[34m\e[K~~~~~~~~~~~~~~
-\e[m\e[K
+   x = (\e[32m\e[Kfirst_function_with_a_very_long_name (lorem, ipsum, dolor, sit, amet,\e[m\e[K
+        \e[32m\e[K~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\e[m\e[K
\e[32m\e[K                                            consectetur, adipiscing, elit,\e[m\e[K
+                                             \e[32m\e[K~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\e[m\e[K
\e[32m\e[K                                            sed, eiusmod, tempor,\e[m\e[K
+                                             \e[32m\e[K~~~~~~~~~~~~~~~~~~~~~\e[m\e[K
\e[32m\e[K                                            incididunt, ut, labore, et,\e[m\e[K
+                                             \e[32m\e[K~~~~~~~~~~~~~~~~~~~~~~~~~~~\e[m\e[K
\e[32m\e[K                                            dolore, magna, aliqua)\e[m\e[K
+                                             \e[32m\e[K~~~~~~~~~~~~~~~~~~~~~~\e[m\e[K
+        \e[01;35m\e[K+\e[m\e[K \e[34m\e[Ksecond_function_with_a_very_long_name (lorem, ipsum, dolor, sit,
+        \e[01;35m\e[K^\e[m\e[K \e[34m\e[K~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\e[m\e[K
\e[34m\e[K                                                amet, consectetur,\e[m\e[K
+                                                 \e[34m\e[K~~~~~~~~~~~~~~~~~~\e[m\e[K
\e[34m\e[K                                                adipiscing, elit, sed,\e[m\e[K
+                                                 \e[34m\e[K~~~~~~~~~~~~~~~~~~~~~~\e[m\e[K
\e[34m\e[K                                                eiusmod, tempor, incididunt,\e[m\e[K
+                                                 \e[34m\e[K~~~~~~~~~~~~~~~~~~~~~~~~~~~~\e[m\e[K
\e[34m\e[K                                                ut, labore, et, dolore,\e[m\e[K
+                                                 \e[34m\e[K~~~~~~~~~~~~~~~~~~~~~~~\e[m\e[K
\e[34m\e[K                                                magna, aliqua)\e[m\e[K);
+                                                 \e[34m\e[K~~~~~~~~~~~~~~\e[m\e[K
    { dg-end-multiline-output "" } */
 #endif
 }
@@ -100,8 +96,7 @@ void test_richloc_from_proper_range (void)
   float f = 98.6f; /* { dg-warning "test" } */
 /* { dg-begin-multiline-output "" }
    float f = \e[01;35m\e[K98.6f\e[m\e[K;
-             \e[01;35m\e[K^~~~~
-\e[m\e[K
+             \e[01;35m\e[K^~~~~\e[m\e[K
    { dg-end-multiline-output "" } */
 #endif
 }
@@ -112,8 +107,7 @@ void test_caret_within_proper_range (void)
   float f = foo * bar; /* { dg-warning "17: test" } */
 /* { dg-begin-multiline-output "" }
    float f = \e[01;35m\e[Kfoo * bar\e[m\e[K;
-             \e[01;35m\e[K~~~~^~~~~
-\e[m\e[K
+             \e[01;35m\e[K~~~~^~~~~\e[m\e[K
    { dg-end-multiline-output "" } */
 #endif
 }
@@ -124,8 +118,7 @@ void test_very_wide_line (void)
                                                                                 float f = foo * bar; /* { dg-warning "95: test" } */
 /* { dg-begin-multiline-output "" }
                                               float f = \e[01;35m\e[Kfoo * bar\e[m\e[K;
-                                                        \e[01;35m\e[K~~~~^~~~~
-\e[m\e[K
+                                                        \e[01;35m\e[K~~~~^~~~~\e[m\e[K
    { dg-end-multiline-output "" } */
 #endif
 }
@@ -136,8 +129,7 @@ void test_multiple_carets (void)
    x = x + y /* { dg-warning "8: test" } */
 /* { dg-begin-multiline-output "" }
     x = \e[01;35m\e[Kx\e[m\e[K + \e[32m\e[Ky\e[m\e[K
-        \e[01;35m\e[KA\e[m\e[K   \e[32m\e[KB
-\e[m\e[K
+        \e[01;35m\e[KA\e[m\e[K   \e[32m\e[KB\e[m\e[K
    { dg-end-multiline-output "" } */
 #endif
 }
@@ -149,10 +141,9 @@ void test_caret_on_leading_whitespace (void)
       y = 5 /* { dg-warning "6: test" } */
 /* { dg-begin-multiline-output "" }
      ASSOCIATE (y =>\e[32m\e[K \e[m\e[Kx)
-                    \e[32m\e[K2
-\e[m\e[K      \e[01;35m\e[K \e[m\e[Ky = 5
-      \e[01;35m\e[K1
-\e[m\e[K
+                    \e[32m\e[K2\e[m\e[K
+      \e[01;35m\e[K \e[m\e[Ky = 5
+      \e[01;35m\e[K1\e[m\e[K
    { dg-end-multiline-output "" } */
 #endif
 }
@@ -166,8 +157,8 @@ void test_fixit_insert (void)
    int a[2][2] = { 0, 1 , 2, 3 }; /* { dg-warning "insertion hints" } */
 /* { dg-begin-multiline-output "" }
     int a[2][2] = { \e[01;35m\e[K0, 1\e[m\e[K , 2, 3 };
-                    \e[01;35m\e[K^~~~
-                    {\e[m\e[K   \e[01;35m\e[K}\e[m\e[K
+                    \e[01;35m\e[K^~~~\e[m\e[K
+                    \e[01;35m\e[K{\e[m\e[K   \e[01;35m\e[K}\e[m\e[K
    { dg-end-multiline-output "" } */
 #endif
 }
@@ -180,8 +171,8 @@ void test_fixit_remove (void)
   int a;; /* { dg-warning "example of a removal hint" } */
 /* { dg-begin-multiline-output "" }
    int a;\e[01;35m\e[K;\e[m\e[K
-         \e[01;35m\e[K^
-         -\e[m\e[K
+         \e[01;35m\e[K^\e[m\e[K
+         \e[01;35m\e[K-\e[m\e[K
    { dg-end-multiline-output "" } */
 #endif
 }
@@ -194,8 +185,8 @@ void test_fixit_replace (void)
   gtk_widget_showall (dlg); /* { dg-warning "example of a replacement hint" } */
 /* { dg-begin-multiline-output "" }
    \e[01;35m\e[Kgtk_widget_showall\e[m\e[K (dlg);
-   \e[01;35m\e[K^~~~~~~~~~~~~~~~~~
-   gtk_widget_show_all\e[m\e[K
+   \e[01;35m\e[K^~~~~~~~~~~~~~~~~~\e[m\e[K
+   \e[01;35m\e[Kgtk_widget_show_all\e[m\e[K
    { dg-end-multiline-output "" } */
 #endif
 }
index 02a2aef3d4ce1aeedb67c07d5976b967e4b3b329..b4f12ba68c16d3fb5d2d5b5ee3d723827f8321a7 100644 (file)
@@ -137,7 +137,7 @@ custom_diagnostic_finalizer (diagnostic_context *context,
   pp_show_color (context->printer) = old_show_color;
 
   pp_destroy_prefix (context->printer);
-  pp_newline_and_flush (context->printer);
+  pp_flush (context->printer);
 }
 
 /* Exercise the diagnostic machinery to emit various warnings,
index 7c9495d0261e0a9df430697696d7664e923e94ac..05a141056d720e98624c6774be72837bfd3cd9b7 100644 (file)
@@ -1,6 +1,10 @@
 /* { dg-do compile } */
 /* { dg-options "-O2 -fdump-tree-cunrolli-details=stderr -fno-peel-loops -fno-tree-vrp  -fdisable-tree-cunroll -fenable-tree-cunrolli" } */
 
+/* Blank lines can occur in the output of
+   -fdump-tree-cunrolli-details=stderr.  */
+/* { dg-allow-blank-lines-in-output 1 } */
+
 unsigned a[100], b[100];
 inline void bar()
 {
index 64193daa16145121670e35942fbb9b909eb3260f..2ab90405eb0095325384bbbaec58ae6c20ba3ccd 100644 (file)
@@ -8,6 +8,7 @@
 ! segfault is working correctly.  No cleanup needed, because the dump
 ! goes to stdout.
 ! { dg-options "-fdump-fortran-original" }
+! { dg-allow-blank-lines-in-output 1 }
 ! { dg-prune-output "Namespace:.*-{42}" }
 
 program upimp
index c00332833136d42823b40c4d3be807922b1f6f4a..3dd85645395c21c59cf4874a994f6692168e669c 100644 (file)
@@ -310,6 +310,19 @@ proc gcc-dg-test { prog do_what extra_tool_flags } {
     return [gcc-dg-test-1 gcc_target_compile $prog $do_what $extra_tool_flags]
 }
 
+# Global: should blank lines be allowed in the output?
+# By default, they should not be.  (PR other/69006)
+# However, there are some ways for them to validly occur.
+set allow_blank_lines 0
+
+# A command for use by testcases to mark themselves as expecting
+# blank lines in the output.
+
+proc dg-allow-blank-lines-in-output { args } {
+    global allow_blank_lines
+    set allow_blank_lines 1
+}
+
 proc gcc-dg-prune { system text } {
     global additional_prunes
 
@@ -317,6 +330,17 @@ proc gcc-dg-prune { system text } {
     # Always remember to clear it in .exp file after executed all tests.
     global dg_runtest_extra_prunes
 
+    # Complain about blank lines in the output (PR other/69006)
+    global allow_blank_lines
+    if { !$allow_blank_lines } {
+       set num_blank_lines [llength [regexp -all -inline "\n\n" $text]]
+       if { $num_blank_lines } {
+           global testname_with_flags
+           fail "$testname_with_flags $num_blank_lines blank line(s) in output"
+       }
+       set allow_blank_lines 0
+    }
+
     set text [prune_gcc_output $text]
 
     foreach p "$additional_prunes $dg_runtest_extra_prunes" {
index fd7affcfafdf5b1d0dc1c0fb6965d841d71652cb..a2e963e555f1a3c910e632df99531431e18c9f9d 100644 (file)
@@ -224,10 +224,12 @@ proc _build_multiline_regex { multiline index } {
            set rexp "${rexp}\\|"
        } else {
            # Assume that we have a quoted source line.
-           # Support arbitrary followup text on each line,
-           # to deal with comments containing containing DejaGnu
-           # directives.
-           append rexp ".*"
+           if {![string equal "" $line] }  {
+               # Support arbitrary followup text on each non-empty line,
+               # to deal with comments containing containing DejaGnu
+               # directives.
+               append rexp ".*"
+           }
        }
        append rexp "\n"
     }