Hi,

[I've CC'd the gcc ML.]

When a test fails with 'excess errors', there's often only one actual
error (an excess "(error|warning|note):") and it'd be nice to not have
to dig in the .log files to fish that out.

Trying the naive...

--- a/gcc/testsuite/lib/gcc-dg.exp
+++ b/gcc/testsuite/lib/gcc-dg.exp
@@ -330,6 +330,14 @@ proc gcc-dg-test-1 { target_compile prog do_what 
extra_tool_flags } {
        xpass "$name (internal compiler error)"
     }
 
+    # If we have just one '(error|warning|sorry):' line, inline it rather
+    # than showing 'excess errors'.
+    set inline_output_r [regexp -all -line -- "(error|warning|sorry):.*" 
$comp_output inline_output]
+    if { $inline_output_r == 1 } then {
+       upvar 2 name name
+       fail "$name ($inline_output)"
+    }

... unfortunately isn't enough for many cases (for the same reason),
because on the GCC side, we have many testcases with e.g.
 /* { dg-warning "foo" "" { *-*-* } */
to XFAIL on various targets, and gcc-dg-test-1 is run AFAICT before all
such XFAIL markers and so on are processed.

As far as I can see, there's no appropriate hook or place where we can
do something like the above where XFAILs are taken into account.

Do we need a new hook on the DejaGnu side in dg-test which gets called
around:

    # Don't do this if we're testing an interpreter.
    # FIXME: why?
    if { ${dg-interpreter-batch-mode} == 0 } {
        # Catch excess errors (new bugs or incomplete testcases).
        if {${dg-excess-errors-flag}} {
            setup_xfail "*-*-*"
        }
        if {$comp_output ne ""} {
            fail "$name (test for excess errors)"
            send_log "Excess errors:\n$comp_output\n"
        } else {
            pass "$name (test for excess errors)"
        }
    }

or is there a way of achieving this that I'm missing?

On the GCC side, I've filed https://gcc.gnu.org/PR121701 for this.

thanks,
sam

Reply via email to