[1/3] testsuite: move handle-multiline-outputs to before check for blank lines

Message ID 20230531180630.3127108-2-dmalcolm@redhat.com
State Committed
Commit 985d6480fe52a5b109960117ba6a876dd875157e
Headers
Series Add diagram support to gcc diagnostics |

Commit Message

David Malcolm May 31, 2023, 6:06 p.m. UTC
  I have followup patches that require checking for multiline patterns
that have blank lines within them, so this moves the handling of
multiline patterns before the check for blank lines, allowing for such
multiline patterns.

Doing so uncovers some issues with existing multiline directives, which
the patch fixes.

gcc/testsuite/ChangeLog:
	* c-c++-common/Wlogical-not-parentheses-2.c: Split up the
	multiline directive.
	* gcc.dg/analyzer/malloc-macro-inline-events.c: Remove redundant
	dg-regexp directives.
	* gcc.dg/missing-header-fixit-5.c: Split up the multiline
	directives.
	* lib/gcc-dg.exp (gcc-dg-prune): Move call to
	handle-multiline-outputs from prune_gcc_output to here.
	* lib/multiline.exp (dg-end-multiline-output): Move call to
	maybe-handle-nn-line-numbers from prune_gcc_output to here.
	* lib/prune.exp (prune_gcc_output): Move calls to
	maybe-handle-nn-line-numbers and handle-multiline-outputs from
	here to the above.
---
 .../c-c++-common/Wlogical-not-parentheses-2.c          |  2 ++
 .../gcc.dg/analyzer/malloc-macro-inline-events.c       |  5 -----
 gcc/testsuite/gcc.dg/missing-header-fixit-5.c          | 10 ++++++++--
 gcc/testsuite/lib/gcc-dg.exp                           |  5 +++++
 gcc/testsuite/lib/multiline.exp                        |  7 ++++++-
 gcc/testsuite/lib/prune.exp                            |  7 -------
 6 files changed, 21 insertions(+), 15 deletions(-)
  

Comments

David Malcolm June 12, 2023, 11:11 p.m. UTC | #1
Please can someone review this testsuite patch:
  https://gcc.gnu.org/pipermail/gcc-patches/2023-May/620275.html

Thanks
Dave

On Wed, 2023-05-31 at 14:06 -0400, David Malcolm wrote:
> I have followup patches that require checking for multiline patterns
> that have blank lines within them, so this moves the handling of
> multiline patterns before the check for blank lines, allowing for
> such
> multiline patterns.
> 
> Doing so uncovers some issues with existing multiline directives,
> which
> the patch fixes.
> 
> gcc/testsuite/ChangeLog:
>         * c-c++-common/Wlogical-not-parentheses-2.c: Split up the
>         multiline directive.
>         * gcc.dg/analyzer/malloc-macro-inline-events.c: Remove
> redundant
>         dg-regexp directives.
>         * gcc.dg/missing-header-fixit-5.c: Split up the multiline
>         directives.
>         * lib/gcc-dg.exp (gcc-dg-prune): Move call to
>         handle-multiline-outputs from prune_gcc_output to here.
>         * lib/multiline.exp (dg-end-multiline-output): Move call to
>         maybe-handle-nn-line-numbers from prune_gcc_output to here.
>         * lib/prune.exp (prune_gcc_output): Move calls to
>         maybe-handle-nn-line-numbers and handle-multiline-outputs
> from
>         here to the above.
> ---
>  .../c-c++-common/Wlogical-not-parentheses-2.c          |  2 ++
>  .../gcc.dg/analyzer/malloc-macro-inline-events.c       |  5 -----
>  gcc/testsuite/gcc.dg/missing-header-fixit-5.c          | 10
> ++++++++--
>  gcc/testsuite/lib/gcc-dg.exp                           |  5 +++++
>  gcc/testsuite/lib/multiline.exp                        |  7 ++++++-
>  gcc/testsuite/lib/prune.exp                            |  7 -------
>  6 files changed, 21 insertions(+), 15 deletions(-)
> 
> diff --git a/gcc/testsuite/c-c++-common/Wlogical-not-parentheses-2.c
> b/gcc/testsuite/c-c++-common/Wlogical-not-parentheses-2.c
> index ba8dce84f5d..2d9382014c4 100644
> --- a/gcc/testsuite/c-c++-common/Wlogical-not-parentheses-2.c
> +++ b/gcc/testsuite/c-c++-common/Wlogical-not-parentheses-2.c
> @@ -12,6 +12,8 @@ foo (int aaa, int bbb)
>  /* { dg-begin-multiline-output "" }
>     r += !aaa == bbb;
>               ^~
> +   { dg-end-multiline-output "" } */
> +/* { dg-begin-multiline-output "" }
>     r += !aaa == bbb;
>          ^~~~
>          (   )
> diff --git a/gcc/testsuite/gcc.dg/analyzer/malloc-macro-inline-
> events.c b/gcc/testsuite/gcc.dg/analyzer/malloc-macro-inline-events.c
> index f08aee626a5..9134bb4781e 100644
> --- a/gcc/testsuite/gcc.dg/analyzer/malloc-macro-inline-events.c
> +++ b/gcc/testsuite/gcc.dg/analyzer/malloc-macro-inline-events.c
> @@ -12,11 +12,6 @@ int test (void *ptr)
>    WRAPPED_FREE (ptr); /* { dg-message "in expansion of macro
> 'WRAPPED_FREE'" } */
>    WRAPPED_FREE (ptr); /* { dg-message "in expansion of macro
> 'WRAPPED_FREE'" } */
>  
> -  /* Erase the spans indicating the header file
> -     (to avoid embedding path assumptions).  */
> -  /* { dg-regexp "\[^|\]+/malloc-macro.h:\[0-9\]+:\[0-9\]+:" } */
> -  /* { dg-regexp "\[^|\]+/malloc-macro.h:\[0-9\]+:\[0-9\]+:" } */
> -
>    /* { dg-begin-multiline-output "" }
>     NN | #define WRAPPED_FREE(PTR) free(PTR)
>        |                           ^~~~~~~~~
> diff --git a/gcc/testsuite/gcc.dg/missing-header-fixit-5.c
> b/gcc/testsuite/gcc.dg/missing-header-fixit-5.c
> index 916033c689c..bf44feb24a9 100644
> --- a/gcc/testsuite/gcc.dg/missing-header-fixit-5.c
> +++ b/gcc/testsuite/gcc.dg/missing-header-fixit-5.c
> @@ -12,14 +12,18 @@ foo (char *m, int i)
>    /* { dg-begin-multiline-output "" }
>     11 |   if (isdigit (m[0]))
>        |       ^~~~~~~
> +     { dg-end-multiline-output "" } */
> +  /* { dg-begin-multiline-output "" }
>    +++ |+#include <ctype.h>
>      1 | 
>       { dg-end-multiline-output "" } */
>      {
>        return abs (i); /* { dg-warning "implicit declaration of
> function" } */
>    /* { dg-begin-multiline-output "" }
> -   19 |       return abs (i);
> +   21 |       return abs (i);
>        |              ^~~
> +     { dg-end-multiline-output "" } */
> +  /* { dg-begin-multiline-output "" }
>    +++ |+#include <stdlib.h>
>      1 | 
>       { dg-end-multiline-output "" } */
> @@ -27,8 +31,10 @@ foo (char *m, int i)
>    else
>      putchar (m[0]); /* { dg-warning "implicit declaration of
> function" } */
>    /* { dg-begin-multiline-output "" }
> -   28 |     putchar (m[0]);
> +   32 |     putchar (m[0]);
>        |     ^~~~~~~
> +     { dg-end-multiline-output "" } */
> +  /* { dg-begin-multiline-output "" }
>    +++ |+#include <stdio.h>
>      1 | 
>       { dg-end-multiline-output "" } */
> diff --git a/gcc/testsuite/lib/gcc-dg.exp b/gcc/testsuite/lib/gcc-
> dg.exp
> index 4ed4233efff..6475cab46de 100644
> --- a/gcc/testsuite/lib/gcc-dg.exp
> +++ b/gcc/testsuite/lib/gcc-dg.exp
> @@ -364,6 +364,11 @@ proc gcc-dg-prune { system text } {
>      # Always remember to clear it in .exp file after executed all
> tests.
>      global dg_runtest_extra_prunes
>  
> +    # Call into multiline.exp to handle any multiline output
> directives.
> +    # This is done before the check for blank lines so that
> multiline
> +    # output directives can have blank lines within them.
> +    set text [handle-multiline-outputs $text]
> +
>      # Complain about blank lines in the output (PR other/69006)
>      global allow_blank_lines
>      if { !$allow_blank_lines } {
> diff --git a/gcc/testsuite/lib/multiline.exp
> b/gcc/testsuite/lib/multiline.exp
> index 73621a0bdbd..4c25bb76f43 100644
> --- a/gcc/testsuite/lib/multiline.exp
> +++ b/gcc/testsuite/lib/multiline.exp
> @@ -139,7 +139,7 @@ proc dg-end-multiline-output { args } {
>      verbose "within dg-end-multiline-output:
> multiline_expected_outputs: $multiline_expected_outputs" 3
>  }
>  
> -# Hook to be called by prune.exp's prune_gcc_output to
> +# Hook to be called by gcc-dg.exp's gcc-dg-prune to
>  # look for the expected multiline outputs, pruning them,
>  # reporting PASS for those that are found, and FAIL for
>  # those that weren't found.
> @@ -149,6 +149,11 @@ proc dg-end-multiline-output { args } {
>  proc handle-multiline-outputs { text } {
>      global multiline_expected_outputs
>      global testname_with_flags
> +
> +    # If dg-enable-nn-line-numbers was provided, then obscure
> source-margin
> +    # line numbers by converting them to "NN" form.
> +    set text [maybe-handle-nn-line-numbers $text]
> +    
>      set index 0
>      foreach entry $multiline_expected_outputs {
>         verbose "  entry: $entry" 3
> diff --git a/gcc/testsuite/lib/prune.exp
> b/gcc/testsuite/lib/prune.exp
> index cfe427c99ac..8d37b24e59b 100644
> --- a/gcc/testsuite/lib/prune.exp
> +++ b/gcc/testsuite/lib/prune.exp
> @@ -108,13 +108,6 @@ proc prune_gcc_output { text } {
>      # Many tests that use visibility will still pass on platforms
> that don't support it.
>      regsub -all "(^|\n)\[^\n\]*lto1: warning: visibility attribute
> not supported in this configuration; ignored\[^\n\]*" $text "" text
>  
> -    # If dg-enable-nn-line-numbers was provided, then obscure
> source-margin
> -    # line numbers by converting them to "NN" form.
> -    set text [maybe-handle-nn-line-numbers $text]
> -    
> -    # Call into multiline.exp to handle any multiline output
> directives.
> -    set text [handle-multiline-outputs $text]
> -
>      #send_user "After:$text\n"
>  
>      return $text
  
David Malcolm June 20, 2023, 5:21 p.m. UTC | #2
Does this testsuite patch look OK?

  https://gcc.gnu.org/pipermail/gcc-patches/2023-May/620275.html

Thanks
David

On Mon, 2023-06-12 at 19:11 -0400, David Malcolm wrote:
> Please can someone review this testsuite patch:
>   https://gcc.gnu.org/pipermail/gcc-patches/2023-May/620275.html
> 
> Thanks
> Dave
> 
> On Wed, 2023-05-31 at 14:06 -0400, David Malcolm wrote:
> > I have followup patches that require checking for multiline
> > patterns
> > that have blank lines within them, so this moves the handling of
> > multiline patterns before the check for blank lines, allowing for
> > such
> > multiline patterns.
> > 
> > Doing so uncovers some issues with existing multiline directives,
> > which
> > the patch fixes.
> > 
> > gcc/testsuite/ChangeLog:
> >         * c-c++-common/Wlogical-not-parentheses-2.c: Split up the
> >         multiline directive.
> >         * gcc.dg/analyzer/malloc-macro-inline-events.c: Remove
> > redundant
> >         dg-regexp directives.
> >         * gcc.dg/missing-header-fixit-5.c: Split up the multiline
> >         directives.
> >         * lib/gcc-dg.exp (gcc-dg-prune): Move call to
> >         handle-multiline-outputs from prune_gcc_output to here.
> >         * lib/multiline.exp (dg-end-multiline-output): Move call to
> >         maybe-handle-nn-line-numbers from prune_gcc_output to here.
> >         * lib/prune.exp (prune_gcc_output): Move calls to
> >         maybe-handle-nn-line-numbers and handle-multiline-outputs
> > from
> >         here to the above.
> > ---
> >  .../c-c++-common/Wlogical-not-parentheses-2.c          |  2 ++
> >  .../gcc.dg/analyzer/malloc-macro-inline-events.c       |  5 -----
> >  gcc/testsuite/gcc.dg/missing-header-fixit-5.c          | 10
> > ++++++++--
> >  gcc/testsuite/lib/gcc-dg.exp                           |  5 +++++
> >  gcc/testsuite/lib/multiline.exp                        |  7
> > ++++++-
> >  gcc/testsuite/lib/prune.exp                            |  7 ------
> > -
> >  6 files changed, 21 insertions(+), 15 deletions(-)
> > 
> > diff --git a/gcc/testsuite/c-c++-common/Wlogical-not-parentheses-
> > 2.c
> > b/gcc/testsuite/c-c++-common/Wlogical-not-parentheses-2.c
> > index ba8dce84f5d..2d9382014c4 100644
> > --- a/gcc/testsuite/c-c++-common/Wlogical-not-parentheses-2.c
> > +++ b/gcc/testsuite/c-c++-common/Wlogical-not-parentheses-2.c
> > @@ -12,6 +12,8 @@ foo (int aaa, int bbb)
> >  /* { dg-begin-multiline-output "" }
> >     r += !aaa == bbb;
> >               ^~
> > +   { dg-end-multiline-output "" } */
> > +/* { dg-begin-multiline-output "" }
> >     r += !aaa == bbb;
> >          ^~~~
> >          (   )
> > diff --git a/gcc/testsuite/gcc.dg/analyzer/malloc-macro-inline-
> > events.c b/gcc/testsuite/gcc.dg/analyzer/malloc-macro-inline-
> > events.c
> > index f08aee626a5..9134bb4781e 100644
> > --- a/gcc/testsuite/gcc.dg/analyzer/malloc-macro-inline-events.c
> > +++ b/gcc/testsuite/gcc.dg/analyzer/malloc-macro-inline-events.c
> > @@ -12,11 +12,6 @@ int test (void *ptr)
> >    WRAPPED_FREE (ptr); /* { dg-message "in expansion of macro
> > 'WRAPPED_FREE'" } */
> >    WRAPPED_FREE (ptr); /* { dg-message "in expansion of macro
> > 'WRAPPED_FREE'" } */
> >  
> > -  /* Erase the spans indicating the header file
> > -     (to avoid embedding path assumptions).  */
> > -  /* { dg-regexp "\[^|\]+/malloc-macro.h:\[0-9\]+:\[0-9\]+:" } */
> > -  /* { dg-regexp "\[^|\]+/malloc-macro.h:\[0-9\]+:\[0-9\]+:" } */
> > -
> >    /* { dg-begin-multiline-output "" }
> >     NN | #define WRAPPED_FREE(PTR) free(PTR)
> >        |                           ^~~~~~~~~
> > diff --git a/gcc/testsuite/gcc.dg/missing-header-fixit-5.c
> > b/gcc/testsuite/gcc.dg/missing-header-fixit-5.c
> > index 916033c689c..bf44feb24a9 100644
> > --- a/gcc/testsuite/gcc.dg/missing-header-fixit-5.c
> > +++ b/gcc/testsuite/gcc.dg/missing-header-fixit-5.c
> > @@ -12,14 +12,18 @@ foo (char *m, int i)
> >    /* { dg-begin-multiline-output "" }
> >     11 |   if (isdigit (m[0]))
> >        |       ^~~~~~~
> > +     { dg-end-multiline-output "" } */
> > +  /* { dg-begin-multiline-output "" }
> >    +++ |+#include <ctype.h>
> >      1 | 
> >       { dg-end-multiline-output "" } */
> >      {
> >        return abs (i); /* { dg-warning "implicit declaration of
> > function" } */
> >    /* { dg-begin-multiline-output "" }
> > -   19 |       return abs (i);
> > +   21 |       return abs (i);
> >        |              ^~~
> > +     { dg-end-multiline-output "" } */
> > +  /* { dg-begin-multiline-output "" }
> >    +++ |+#include <stdlib.h>
> >      1 | 
> >       { dg-end-multiline-output "" } */
> > @@ -27,8 +31,10 @@ foo (char *m, int i)
> >    else
> >      putchar (m[0]); /* { dg-warning "implicit declaration of
> > function" } */
> >    /* { dg-begin-multiline-output "" }
> > -   28 |     putchar (m[0]);
> > +   32 |     putchar (m[0]);
> >        |     ^~~~~~~
> > +     { dg-end-multiline-output "" } */
> > +  /* { dg-begin-multiline-output "" }
> >    +++ |+#include <stdio.h>
> >      1 | 
> >       { dg-end-multiline-output "" } */
> > diff --git a/gcc/testsuite/lib/gcc-dg.exp b/gcc/testsuite/lib/gcc-
> > dg.exp
> > index 4ed4233efff..6475cab46de 100644
> > --- a/gcc/testsuite/lib/gcc-dg.exp
> > +++ b/gcc/testsuite/lib/gcc-dg.exp
> > @@ -364,6 +364,11 @@ proc gcc-dg-prune { system text } {
> >      # Always remember to clear it in .exp file after executed all
> > tests.
> >      global dg_runtest_extra_prunes
> >  
> > +    # Call into multiline.exp to handle any multiline output
> > directives.
> > +    # This is done before the check for blank lines so that
> > multiline
> > +    # output directives can have blank lines within them.
> > +    set text [handle-multiline-outputs $text]
> > +
> >      # Complain about blank lines in the output (PR other/69006)
> >      global allow_blank_lines
> >      if { !$allow_blank_lines } {
> > diff --git a/gcc/testsuite/lib/multiline.exp
> > b/gcc/testsuite/lib/multiline.exp
> > index 73621a0bdbd..4c25bb76f43 100644
> > --- a/gcc/testsuite/lib/multiline.exp
> > +++ b/gcc/testsuite/lib/multiline.exp
> > @@ -139,7 +139,7 @@ proc dg-end-multiline-output { args } {
> >      verbose "within dg-end-multiline-output:
> > multiline_expected_outputs: $multiline_expected_outputs" 3
> >  }
> >  
> > -# Hook to be called by prune.exp's prune_gcc_output to
> > +# Hook to be called by gcc-dg.exp's gcc-dg-prune to
> >  # look for the expected multiline outputs, pruning them,
> >  # reporting PASS for those that are found, and FAIL for
> >  # those that weren't found.
> > @@ -149,6 +149,11 @@ proc dg-end-multiline-output { args } {
> >  proc handle-multiline-outputs { text } {
> >      global multiline_expected_outputs
> >      global testname_with_flags
> > +
> > +    # If dg-enable-nn-line-numbers was provided, then obscure
> > source-margin
> > +    # line numbers by converting them to "NN" form.
> > +    set text [maybe-handle-nn-line-numbers $text]
> > +    
> >      set index 0
> >      foreach entry $multiline_expected_outputs {
> >         verbose "  entry: $entry" 3
> > diff --git a/gcc/testsuite/lib/prune.exp
> > b/gcc/testsuite/lib/prune.exp
> > index cfe427c99ac..8d37b24e59b 100644
> > --- a/gcc/testsuite/lib/prune.exp
> > +++ b/gcc/testsuite/lib/prune.exp
> > @@ -108,13 +108,6 @@ proc prune_gcc_output { text } {
> >      # Many tests that use visibility will still pass on platforms
> > that don't support it.
> >      regsub -all "(^|\n)\[^\n\]*lto1: warning: visibility attribute
> > not supported in this configuration; ignored\[^\n\]*" $text "" text
> >  
> > -    # If dg-enable-nn-line-numbers was provided, then obscure
> > source-margin
> > -    # line numbers by converting them to "NN" form.
> > -    set text [maybe-handle-nn-line-numbers $text]
> > -    
> > -    # Call into multiline.exp to handle any multiline output
> > directives.
> > -    set text [handle-multiline-outputs $text]
> > -
> >      #send_user "After:$text\n"
> >  
> >      return $text
>
  
Mike Stump June 21, 2023, 4:24 p.m. UTC | #3
On Jun 20, 2023, at 10:21 AM, David Malcolm <dmalcolm@redhat.com> wrote:
> Does this testsuite patch look OK?
> 
>  https://gcc.gnu.org/pipermail/gcc-patches/2023-May/620275.html
> 
> Thanks
> David
> 
> On Mon, 2023-06-12 at 19:11 -0400, David Malcolm wrote:
>> Please can someone review this testsuite patch:
>>   https://gcc.gnu.org/pipermail/gcc-patches/2023-May/620275.html
>> 
>> Thanks
>> Dave
>> 
>> On Wed, 2023-05-31 at 14:06 -0400, David Malcolm wrote:
>>> I have followup patches that require checking for multiline
>>> patterns
>>> that have blank lines within them, so this moves the handling of
>>> multiline patterns before the check for blank lines, allowing for
>>> such
>>> multiline patterns.
>>> 
>>> Doing so uncovers some issues with existing multiline directives,
>>> which
>>> the patch fixes.

Ok.
  

Patch

diff --git a/gcc/testsuite/c-c++-common/Wlogical-not-parentheses-2.c b/gcc/testsuite/c-c++-common/Wlogical-not-parentheses-2.c
index ba8dce84f5d..2d9382014c4 100644
--- a/gcc/testsuite/c-c++-common/Wlogical-not-parentheses-2.c
+++ b/gcc/testsuite/c-c++-common/Wlogical-not-parentheses-2.c
@@ -12,6 +12,8 @@  foo (int aaa, int bbb)
 /* { dg-begin-multiline-output "" }
    r += !aaa == bbb;
              ^~
+   { dg-end-multiline-output "" } */
+/* { dg-begin-multiline-output "" }
    r += !aaa == bbb;
         ^~~~
         (   )
diff --git a/gcc/testsuite/gcc.dg/analyzer/malloc-macro-inline-events.c b/gcc/testsuite/gcc.dg/analyzer/malloc-macro-inline-events.c
index f08aee626a5..9134bb4781e 100644
--- a/gcc/testsuite/gcc.dg/analyzer/malloc-macro-inline-events.c
+++ b/gcc/testsuite/gcc.dg/analyzer/malloc-macro-inline-events.c
@@ -12,11 +12,6 @@  int test (void *ptr)
   WRAPPED_FREE (ptr); /* { dg-message "in expansion of macro 'WRAPPED_FREE'" } */
   WRAPPED_FREE (ptr); /* { dg-message "in expansion of macro 'WRAPPED_FREE'" } */
 
-  /* Erase the spans indicating the header file
-     (to avoid embedding path assumptions).  */
-  /* { dg-regexp "\[^|\]+/malloc-macro.h:\[0-9\]+:\[0-9\]+:" } */
-  /* { dg-regexp "\[^|\]+/malloc-macro.h:\[0-9\]+:\[0-9\]+:" } */
-
   /* { dg-begin-multiline-output "" }
    NN | #define WRAPPED_FREE(PTR) free(PTR)
       |                           ^~~~~~~~~
diff --git a/gcc/testsuite/gcc.dg/missing-header-fixit-5.c b/gcc/testsuite/gcc.dg/missing-header-fixit-5.c
index 916033c689c..bf44feb24a9 100644
--- a/gcc/testsuite/gcc.dg/missing-header-fixit-5.c
+++ b/gcc/testsuite/gcc.dg/missing-header-fixit-5.c
@@ -12,14 +12,18 @@  foo (char *m, int i)
   /* { dg-begin-multiline-output "" }
    11 |   if (isdigit (m[0]))
       |       ^~~~~~~
+     { dg-end-multiline-output "" } */
+  /* { dg-begin-multiline-output "" }
   +++ |+#include <ctype.h>
     1 | 
      { dg-end-multiline-output "" } */
     {
       return abs (i); /* { dg-warning "implicit declaration of function" } */
   /* { dg-begin-multiline-output "" }
-   19 |       return abs (i);
+   21 |       return abs (i);
       |              ^~~
+     { dg-end-multiline-output "" } */
+  /* { dg-begin-multiline-output "" }
   +++ |+#include <stdlib.h>
     1 | 
      { dg-end-multiline-output "" } */
@@ -27,8 +31,10 @@  foo (char *m, int i)
   else
     putchar (m[0]); /* { dg-warning "implicit declaration of function" } */
   /* { dg-begin-multiline-output "" }
-   28 |     putchar (m[0]);
+   32 |     putchar (m[0]);
       |     ^~~~~~~
+     { dg-end-multiline-output "" } */
+  /* { dg-begin-multiline-output "" }
   +++ |+#include <stdio.h>
     1 | 
      { dg-end-multiline-output "" } */
diff --git a/gcc/testsuite/lib/gcc-dg.exp b/gcc/testsuite/lib/gcc-dg.exp
index 4ed4233efff..6475cab46de 100644
--- a/gcc/testsuite/lib/gcc-dg.exp
+++ b/gcc/testsuite/lib/gcc-dg.exp
@@ -364,6 +364,11 @@  proc gcc-dg-prune { system text } {
     # Always remember to clear it in .exp file after executed all tests.
     global dg_runtest_extra_prunes
 
+    # Call into multiline.exp to handle any multiline output directives.
+    # This is done before the check for blank lines so that multiline
+    # output directives can have blank lines within them.
+    set text [handle-multiline-outputs $text]
+
     # Complain about blank lines in the output (PR other/69006)
     global allow_blank_lines
     if { !$allow_blank_lines } {
diff --git a/gcc/testsuite/lib/multiline.exp b/gcc/testsuite/lib/multiline.exp
index 73621a0bdbd..4c25bb76f43 100644
--- a/gcc/testsuite/lib/multiline.exp
+++ b/gcc/testsuite/lib/multiline.exp
@@ -139,7 +139,7 @@  proc dg-end-multiline-output { args } {
     verbose "within dg-end-multiline-output: multiline_expected_outputs: $multiline_expected_outputs" 3
 }
 
-# Hook to be called by prune.exp's prune_gcc_output to
+# Hook to be called by gcc-dg.exp's gcc-dg-prune to
 # look for the expected multiline outputs, pruning them,
 # reporting PASS for those that are found, and FAIL for
 # those that weren't found.
@@ -149,6 +149,11 @@  proc dg-end-multiline-output { args } {
 proc handle-multiline-outputs { text } {
     global multiline_expected_outputs
     global testname_with_flags
+
+    # If dg-enable-nn-line-numbers was provided, then obscure source-margin
+    # line numbers by converting them to "NN" form.
+    set text [maybe-handle-nn-line-numbers $text]
+    
     set index 0
     foreach entry $multiline_expected_outputs {
 	verbose "  entry: $entry" 3
diff --git a/gcc/testsuite/lib/prune.exp b/gcc/testsuite/lib/prune.exp
index cfe427c99ac..8d37b24e59b 100644
--- a/gcc/testsuite/lib/prune.exp
+++ b/gcc/testsuite/lib/prune.exp
@@ -108,13 +108,6 @@  proc prune_gcc_output { text } {
     # Many tests that use visibility will still pass on platforms that don't support it.
     regsub -all "(^|\n)\[^\n\]*lto1: warning: visibility attribute not supported in this configuration; ignored\[^\n\]*" $text "" text
 
-    # If dg-enable-nn-line-numbers was provided, then obscure source-margin
-    # line numbers by converting them to "NN" form.
-    set text [maybe-handle-nn-line-numbers $text]
-    
-    # Call into multiline.exp to handle any multiline output directives.
-    set text [handle-multiline-outputs $text]
-
     #send_user "After:$text\n"
 
     return $text