contrib: Update dg-extract-results.* from gcc
authorAndrew Burgess <andrew.burgess@embecosm.com>
Mon, 21 Oct 2019 13:52:37 +0000 (14:52 +0100)
committerAndrew Burgess <andrew.burgess@embecosm.com>
Mon, 21 Oct 2019 14:26:48 +0000 (15:26 +0100)
The dg-extract-results scripts have been updated in the gcc
repository.  This commit copies the updated versions of the scripts in
to the binutils-gdb repository.

There are two changes, these are:

  1. Improved detection of timeout lines, though I suspect this only
  applies to gcc results, and

  2. Detection of KPASS results, this is of interest to gdb, where
  these results would not be included in the final .sum file.

A grep over binutils-gdb shows the dg-extract-results is not used by
ld, gas, or binutils, however I tested these anyway and saw no changes
in the final .sum files (tested on x86-64 GNU/Linux).

On gdb when running tests in parallel dg-extract-results is used, and
the final .sum file now includes the KPASS results.

contrib/ChangeLog:

* dg-extract-results.py: Update from gcc repo.
* dg-extract-results.sh: Likewise.

Change-Id: I54abd07f4e8f5cf88a6db74519674f6939860157

contrib/ChangeLog
contrib/dg-extract-results.py
contrib/dg-extract-results.sh

index 8ce67659c05d453ac22583a9598dab0fc53e7d9e..489af77445f6ebe1517172f2cfff0f935913d932 100644 (file)
@@ -1,3 +1,8 @@
+2019-10-21  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+       * dg-extract-results.py: Update from gcc repo.
+       * dg-extract-results.sh: Likewise.
+
 2018-08-06  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
 
        * dg-extract-results.sh: Move from gdb/testsuite.
index 4b02a5bea92c19c13114337a8fc6535dcc9ee7d1..7100794d42ae4de75d0f0ac854de6b7b21309137 100644 (file)
@@ -117,7 +117,7 @@ class Prog:
         self.tool_re = re.compile (r'^\t\t=== (.*) tests ===$')
         self.result_re = re.compile (r'^(PASS|XPASS|FAIL|XFAIL|UNRESOLVED'
                                      r'|WARNING|ERROR|UNSUPPORTED|UNTESTED'
-                                     r'|KFAIL):\s*(.+)')
+                                     r'|KFAIL|KPASS):\s*(.+)')
         self.completed_re = re.compile (r'.* completed at (.*)')
         # Pieces of text to write at the head of the output.
         # start_line is a pair in which the first element is a datetime
@@ -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,10 +293,22 @@ 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 not first_key and sort_logs:
-                    first_key = key
+                # 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 testnames.
+                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)'):
                     for i in range (len (self.count_names)):
                         if 'DejaGnu errors' in self.count_names[i]:
index 6ee3d26de31620c33cccb5b4159016507cdf6855..f948088370e15de73181ca33950ef18c12356aa0 100755 (executable)
@@ -298,6 +298,8 @@ BEGIN {
   cnt=0
   print_using=0
   need_close=0
+  has_timeout=0
+  timeout_cnt=0
 }
 /^EXPFILE: / {
   expfiles[expfileno] = \$2
@@ -324,23 +326,51 @@ BEGIN {
   }
 }
 /^\t\t=== .* ===$/ { curvar = ""; next }
-/^(PASS|XPASS|FAIL|XFAIL|UNRESOLVED|WARNING|ERROR|UNSUPPORTED|UNTESTED|KFAIL):/ {
+/^(PASS|XPASS|FAIL|XFAIL|UNRESOLVED|WARNING|ERROR|UNSUPPORTED|UNTESTED|KFAIL|KPASS):/ {
   testname=\$2
   # Ugly hack for gfortran.dg/dg.exp
   if ("$TOOL" == "gfortran" && testname ~ /^gfortran.dg\/g77\//)
     testname="h"testname
+  if ("$MODE" == "sum") {
+    if (\$0 ~ /^WARNING: program timed out/) {
+      has_timeout=1
+      timeout_cnt=cnt+1
+    } 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-1, timeout_msg >> curfile
+         timeout_cnt = 0
+         cnt = cnt + 1
+       }
+       printf "%s %08d|", testname, cnt >> curfile
+       cnt = cnt + 1
+       filewritten[curfile]=1
+       need_close=1
+       print >> curfile
+      }
+      has_timeout=0
+    } else {
+      filewritten[curfile]=1
+      need_close=1
+      print >> curfile
     }
-    filewritten[curfile]=1
-    need_close=1
-    print >> curfile
-  } else
+  } else {
+    has_timeout=0
+    timeout_cnt=0
     next
+  }
 }
 END {
   n=1