Hi, dg-extract-results currently moves lines like WARNING: program timed out at the end of each .exp section when it generates .sum files.
This is because it sorts its output based on the 2nd field, which is normally the testname as in: FAIL: gcc.c-torture/execute/20020129-1.c -O2 -flto -fno-use-linker-plugin -flto-partition=none execution test As you can notice 'program' comes after gcc.c-torture/execute/20020129-1.c alphabetically, and generally after most (all?) GCC testnames. This is a bit of a pain when trying to handle transient test failures because you can no longer match such a WARNING line to its FAIL counterpart. The attached patch changes this behavior by replacing the line WARNING: program timed out with WARNING: gcc.c-torture/execute/20020129-1.c -O2 -flto -fno-use-linker-plugin -flto-partition=none execution test program timed out The effect is that this line will now appear immediately above the FAIL: gcc.c-torture/execute/20020129-1.c -O2 -flto -fno-use-linker-plugin -flto-partition=none execution test so that it's easier to match them. I'm not sure how much people depend on the .sum format, I also considered emitting WARNING: program timed out gcc.c-torture/execute/20020129-1.c -O2 -flto -fno-use-linker-plugin -flto-partition=none execution test I also restricted the patch to handling only 'program timed out' cases, to avoid breaking other things. I considered fixing this in Dejagnu, but it seemed more complicated, and would delay adoption in GCC anyway. What do people think about this? Thanks, Christophe
2019-01-23 Christophe Lyon <christophe.l...@linaro.org> contrib/ * dg-extract-results.py: Keep timeout warnings next to their matching test. * dg-extract-results.sh: Likewise.
diff --git a/contrib/dg-extract-results.py b/contrib/dg-extract-results.py index 4b02a5b..ed62f73 100644 --- a/contrib/dg-extract-results.py +++ b/contrib/dg-extract-results.py @@ -239,6 +239,7 @@ class Prog: harness = None segment = None final_using = 0 + has_warning = 0 # If this is the first run for this variation, add any text before # the first harness to the header. @@ -292,8 +293,20 @@ class Prog: # Ugly hack to get the right order for gfortran. if name.startswith ('gfortran.dg/g77/'): name = 'h' + name - key = (name, len (harness.results)) - harness.results.append ((key, line)) + # If we have a time out warning, make sure it appears + # before the following testcase diagnostic: we insert + # the testname before 'program' so that sort faces a + # list of testhanes. + if line.startswith ('WARNING: program timed out'): + has_warning = 1 + else: + if has_warning == 1: + key = (name, len (harness.results)) + myline = 'WARNING: %s program timed out.\n' % name + harness.results.append ((key, myline)) + has_warning = 0 + key = (name, len (harness.results)) + harness.results.append ((key, line)) if not first_key and sort_logs: first_key = key if line.startswith ('ERROR: (DejaGnu)'): diff --git a/contrib/dg-extract-results.sh b/contrib/dg-extract-results.sh index 6ee3d26..e9833c1 100755 --- a/contrib/dg-extract-results.sh +++ b/contrib/dg-extract-results.sh @@ -298,6 +298,8 @@ BEGIN { cnt=0 print_using=0 need_close=0 + has_timeout=0 + timeout_cnt=0 } /^EXPFILE: / { expfiles[expfileno] = \$2 @@ -329,16 +331,36 @@ BEGIN { # Ugly hack for gfortran.dg/dg.exp if ("$TOOL" == "gfortran" && testname ~ /^gfortran.dg\/g77\//) testname="h"testname + if (\$1 == "WARNING:" && \$2 == "program" && \$3 == "timed" && (\$4 == "out" || \$4 == "out.")) { + has_timeout=1 + timeout_cnt=cnt + } else { + # Prepare timeout replacement message in case it's needed + timeout_msg=\$0 + sub(\$1, "WARNING:", timeout_msg) + } } /^$/ { if ("$MODE" == "sum") next } { if (variant == curvar && curfile) { if ("$MODE" == "sum") { - printf "%s %08d|", testname, cnt >> curfile - cnt = cnt + 1 + # Do not print anything if the current line is a timeout + if (has_timeout == 0) { + # If the previous line was a timeout, + # insert the full current message without keyword + if (timeout_cnt != 0) { + printf "%s %08d|%s program timed out.\n", testname, timeout_cnt, timeout_msg >> curfile + timeout_cnt = 0 + } + printf "%s %08d|", testname, cnt >> curfile + cnt = cnt + 1 + filewritten[curfile]=1 + need_close=1 + if (timeout_cnt == 0) + print >> curfile + } + + has_timeout=0 } - filewritten[curfile]=1 - need_close=1 - print >> curfile } else next }