https://gcc.gnu.org/bugzilla/show_bug.cgi?id=83909

            Bug ID: 83909
           Summary: Make doesn't report TCL errors in summary
           Product: gcc
           Version: 8.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: testsuite
          Assignee: unassigned at gcc dot gnu.org
          Reporter: lkrupp at gcc dot gnu.org
  Target Milestone: ---

This test case in gfortran.dg:

! { dg-do compile }
xxx { dg-error "\\(CLASS)" }

triggers these messages when I run make -j 8 check-fortran:

ERROR: tcl error sourcing
/home/louis/gcc_trunk/gcc/testsuite/gfortran.dg/dg.exp.
ERROR: couldn't compile regular expression pattern: parentheses () not balanced
    while executing
"regsub -all "(^|\n)(\[^\n\]+$line\[^\n\]*($pattern)\[^\n\]*\n?)+" $comp_output
"\n" comp_output"
    (procedure "saved-dg-test" line 125)
    invoked from within
"saved-dg-test /home/louis/gcc_trunk/gcc/testsuite/gfortran.dg/000bad.f90 {  -O
} { -pedantic-errors}"
    ("eval" body line 1)
...

but the messages are buried in the output from Make, and there's no indication
in the test summary (# of passes, failures, etc) that there's been a problem.

The issue seems to be that runtest exits with an error but it runs in a
subprocess, it's followed by successful commands, and the error is never
propagated back to Make.

This patch terminates the action process tree with extreme prejudice and makes
it much more obvious that something has gone wrong:

Index: gcc/Makefile.in
===================================================================
--- gcc/Makefile.in     (revision 256719)
+++ gcc/Makefile.in     (working copy)
@@ -4078,7 +4078,7 @@ check-parallel-% : site.exp
            TCL_LIBRARY=`cd .. ; cd $${srcdir}/../tcl/library ; ${PWD_COMMAND}`
; \
            export TCL_LIBRARY ; \
          fi ; \
-         $(RUNTEST) --tool $(check_p_tool) $(RUNTESTFLAGS); \
+         $(RUNTEST) --tool $(check_p_tool) $(RUNTESTFLAGS) || kill 0; \
          if [ -n "$$GCC_RUNTEST_PARALLELIZE_DIR" ] ; then \
            touch $${rootme}/$(TESTSUITEDIR)/$(check_p_tool)-parallel/finished;
\
          fi ; \

Make's final words look something like this:

make[2]: [Makefile:4083: check-parallel-gfortran] Terminated (ignored)
make[2]: [Makefile:4083: check-parallel-gfortran_6] Terminated (ignored)
got a TERM signal, terminated

I would not be surprised if there were a kinder, gentler way of dealing with
this.

Reply via email to