contrib: Update dg-extract-results.* from gcc
authorAndrew Burgess <andrew.burgess@embecosm.com>
Fri, 15 May 2020 10:23:59 +0000 (11:23 +0100)
committerAndrew Burgess <andrew.burgess@embecosm.com>
Fri, 15 May 2020 10:41:22 +0000 (11:41 +0100)
Pull the latest version of the dg-extract-results.* scripts from the
gcc repository.  This picks up this commit from gcc:

  commit c9a41202b272b0b3a3c64a96ef4a5a97579eb017
  Date:   Mon May 11 22:32:35 2020 +0100

  contrib: Handle GDB specific test result types

  This commit is for the benefit of GDB, but as the binutils-gdb
  repository shares the contrib/ directory with gcc, this commit must
  first be applied to gcc then copied back to binutils-gdb.

  This commit extends the two scripts contrib/dg-extract-results.{py,sh}
  to handle some new, GDB specific test result types.  These test
  results types should never appear in GCC, or any other tool that
  shares the contrib/ directly, so this change should be harmless.

  In this patch series:
    https://sourceware.org/pipermail/gdb-patches/2020-April/167847.html
  changes were made in GDB's use of Dejagnu so that two additional
  conditions could be detected, these are:

    1. Test names that contain either the build or source paths.  Such
    test names make it difficult to compare the results of two test runs
    of GDB from two different directories, and

    2. Duplicate test names.  Duplicates make it difficult to track down
    exactly which test has failed.

  When running Dejagnu on GDB we can now (sometimes) see two additional
  test result types matching the above conditions, these are '# of paths
  in test names' and '# of duplicate test names'.

  If the test is run in parallel mode (make -j...) then these extra test
  results will appear in the individual test summary files, but are not
  merged into the final summary file.

  Additionally, within the summary file there are now two new types of
  test summary line, these are 'PATH: ...' and 'DUPLICATE: ...', these
  allow users to quickly search the test summary to track down where the
  offending test names are.  These lines are similarly not merged into
  the unified gdb.sum file after a parallel test run.

  This commit extends the dg-extract-results.* scripts to calculate the
  totals for the two new result types, and to copy the new test summary
  lines into the unified summary file.

contrib/ChangeLog:

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

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

index 489af77445f6ebe1517172f2cfff0f935913d932..b2867e67b4bb64f1956fd2c1c06d9ca6595a86f1 100644 (file)
@@ -1,3 +1,8 @@
+2020-05-15  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+       * dg-extract-results.py: Update from gcc repo.
+       * dg-extract-results.sh: Likewise.
+
 2019-10-21  Andrew Burgess  <andrew.burgess@embecosm.com>
 
        * dg-extract-results.py: Update from gcc repo.
index 7100794d42ae4de75d0f0ac854de6b7b21309137..30aa68771d491451f72d6dbd18f6d5ac339451b5 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|KPASS):\s*(.+)')
+                                     r'|KFAIL|KPASS|PATH|DUPLICATE):\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
@@ -143,7 +143,9 @@ class Prog:
             '# of known failures\t\t',
             '# of untested testcases\t\t',
             '# of unresolved testcases\t',
-            '# of unsupported tests\t\t'
+            '# of unsupported tests\t\t',
+            '# of paths in test names\t',
+            '# of duplicate test names\t'
         ]
         self.runs = dict()
 
index f948088370e15de73181ca33950ef18c12356aa0..ff6c50d029c8453b0a2337581a15013214d14be1 100755 (executable)
@@ -326,7 +326,7 @@ BEGIN {
   }
 }
 /^\t\t=== .* ===$/ { curvar = ""; next }
-/^(PASS|XPASS|FAIL|XFAIL|UNRESOLVED|WARNING|ERROR|UNSUPPORTED|UNTESTED|KFAIL|KPASS):/ {
+/^(PASS|XPASS|FAIL|XFAIL|UNRESOLVED|WARNING|ERROR|UNSUPPORTED|UNTESTED|KFAIL|KPASS|PATH|DUPLICATE):/ {
   testname=\$2
   # Ugly hack for gfortran.dg/dg.exp
   if ("$TOOL" == "gfortran" && testname ~ /^gfortran.dg\/g77\//)
@@ -400,6 +400,7 @@ BEGIN {
   variant="$VAR"
   tool="$TOOL"
   passcnt=0; failcnt=0; untstcnt=0; xpasscnt=0; xfailcnt=0; kpasscnt=0; kfailcnt=0; unsupcnt=0; unrescnt=0; dgerrorcnt=0;
+  pathcnt=0; dupcnt=0
   curvar=""; insummary=0
 }
 /^Running target /             { curvar = \$3; next }
@@ -414,6 +415,8 @@ BEGIN {
 /^# of untested testcases/     { if (insummary == 1) untstcnt += \$5; next; }
 /^# of unresolved testcases/   { if (insummary == 1) unrescnt += \$5; next; }
 /^# of unsupported tests/      { if (insummary == 1) unsupcnt += \$5; next; }
+/^# of paths in test names/    { if (insummary == 1) pathcnt += \$7; next; }
+/^# of duplicate test names/   { if (insummary == 1) dupcnt += \$6; next; }
 /^$/                           { if (insummary == 1)
                                    { insummary = 0; curvar = "" }
                                  next
@@ -431,6 +434,8 @@ END {
   if (untstcnt != 0) printf ("# of untested testcases\t\t%d\n", untstcnt)
   if (unrescnt != 0) printf ("# of unresolved testcases\t%d\n", unrescnt)
   if (unsupcnt != 0) printf ("# of unsupported tests\t\t%d\n", unsupcnt)
+  if (pathcnt != 0) printf ("# of paths in test names\t%d\n", pathcnt)
+  if (dupcnt != 0) printf ("# of duplicate test names\t%d\n", dupcnt)
 }
 EOF
 
@@ -452,6 +457,7 @@ cat << EOF > $TOTAL_AWK
 BEGIN {
   tool="$TOOL"
   passcnt=0; failcnt=0; untstcnt=0; xpasscnt=0; xfailcnt=0; kfailcnt=0; unsupcnt=0; unrescnt=0; dgerrorcnt=0
+  pathcnt=0; dupcnt=0
 }
 /^# of DejaGnu errors/         { dgerrorcnt += \$5 }
 /^# of expected passes/                { passcnt += \$5 }
@@ -463,6 +469,8 @@ BEGIN {
 /^# of untested testcases/     { untstcnt += \$5 }
 /^# of unresolved testcases/   { unrescnt += \$5 }
 /^# of unsupported tests/      { unsupcnt += \$5 }
+/^# of paths in test names/    { pathcnt += \$7 }
+/^# of duplicate test names/   { dupcnt += \$6 }
 END {
   printf ("\n\t\t=== %s Summary ===\n\n", tool)
   if (dgerrorcnt != 0) printf ("# of DejaGnu errors\t\t%d\n", dgerrorcnt)
@@ -475,6 +483,8 @@ END {
   if (untstcnt != 0) printf ("# of untested testcases\t\t%d\n", untstcnt)
   if (unrescnt != 0) printf ("# of unresolved testcases\t%d\n", unrescnt)
   if (unsupcnt != 0) printf ("# of unsupported tests\t\t%d\n", unsupcnt)
+  if (pathcnt != 0) printf ("# of paths in test names\t%d\n", pathcnt)
+  if (dupcnt != 0) printf ("# of duplicate test names\t%d\n", dupcnt)
 }
 EOF