I noticed that our DejaGnu output seems to be dropping the final character
of names of test functions in pytest scripts.  For example, my gcc.sum has:

  PASS: gcc.dg/analyzer/state-diagram-1.c 
state-diagram-1-sarif.py::test_state_grap

where the test name "test_state_graph" has lost its final 'h' character.

run-gcov-pytest was added to gcov.exp by Martin Liska in
r11-6577-g4e275dccfc2467.  I copied the logic into scansarif.exp as
run-sarif-pytest in r15-2354-g4d1f71d49e396c and into scanhtml.exp as
run-html-pytest in r16-487-g1a2c62212bd912.

The code in question looks like e.g.:

  set prefix "\[^\r\n\]*"
  [...snip...]
  expect {
    -re "FAILED($prefix)\[^\r\n\]+\r\n" {
       set output [gcov-pytest-format-line $testcase $pytest_script 
$expect_out(1,string)]
  [...snip...]

so we capture everything that matched $prefix.  $prefix is greedy,
but has to omit at least one character for the trailing "\[^\r\n\]+"

In other words, we're matching on
  (a) "FAILED" followed by
  (b) $prefix (zero or more non-line-ending chars) followed by
  (c) \[^\r\n\]+ (one or more non-line-ending chars) followed by
  (d) \r\n (a line ending)

and capturing (b).

It's not clear to me what the intent of (c) is.  (b) is greedy, but
has to omit at least one character for the trailing "\[^\r\n\]+".
I believe it's a bug

This patch removes (c) from the various regexps.

With this patch, the above gcc.sum changes to:
  PASS: gcc.dg/analyzer/state-diagram-1.c 
state-diagram-1-sarif.py::test_state_graph
capturing the final 'h' of the test function name from the pytest
script.

Successfully bootstrapped & regrtested on aarch64-unknown-linux-gnu,
which showed 14 fixed test names in g++.sum, 75 in gcc.sum,
3 in gfortran.sum, 16 in libgdiagnostics.sum, and 17 in
sarif-replay.sum.

OK for trunk?  (and to backport to older branches as appropriate)

Thanks
Dave

gcc/testsuite/ChangeLog:
        * lib/gcov.exp (run-gcov-pytest): Drop excess non-newline pattern
        after parentheses in regexps.
        * lib/scanhtml.exp (run-html-pytest): Likewise.
        * lib/scansarif.exp (run-sarif-pytest): Likewise.

Signed-off-by: David Malcolm <[email protected]>
---
 gcc/testsuite/lib/gcov.exp      | 6 +++---
 gcc/testsuite/lib/scanhtml.exp  | 6 +++---
 gcc/testsuite/lib/scansarif.exp | 6 +++---
 3 files changed, 9 insertions(+), 9 deletions(-)

diff --git a/gcc/testsuite/lib/gcov.exp b/gcc/testsuite/lib/gcov.exp
index 6d6c6abb9b5..6bb977ea152 100644
--- a/gcc/testsuite/lib/gcov.exp
+++ b/gcc/testsuite/lib/gcov.exp
@@ -827,17 +827,17 @@ proc run-gcov-pytest { args } {
     set prefix "\[^\r\n\]*"
     set timeout 300
     expect {
-      -re "FAILED($prefix)\[^\r\n\]+\r\n" {
+      -re "FAILED($prefix)\r\n" {
        set output [gcov-pytest-format-line $testcase $pytest_script 
$expect_out(1,string)]
        fail $output
        exp_continue
       }
-      -re "ERROR($prefix)\[^\r\n\]+\r\n" {
+      -re "ERROR($prefix)\r\n" {
        set output [gcov-pytest-format-line $testcase $pytest_script 
$expect_out(1,string)]
        fail $output
        exp_continue
       }
-      -re "PASSED($prefix)\[^\r\n\]+\r\n" {
+      -re "PASSED($prefix)\r\n" {
        set output [gcov-pytest-format-line $testcase $pytest_script 
$expect_out(1,string)]
        pass $output
        exp_continue
diff --git a/gcc/testsuite/lib/scanhtml.exp b/gcc/testsuite/lib/scanhtml.exp
index d5aa20a2e1c..7f9035a195b 100644
--- a/gcc/testsuite/lib/scanhtml.exp
+++ b/gcc/testsuite/lib/scanhtml.exp
@@ -71,17 +71,17 @@ proc run-html-pytest { args } {
     set prefix "\[^\r\n\]*"
     set timeout 300
     expect {
-      -re "FAILED($prefix)\[^\r\n\]+\r\n" {
+      -re "FAILED($prefix)\r\n" {
        set output [html-pytest-format-line $testcase $pytest_script 
$expect_out(1,string)]
        fail $output
        exp_continue
       }
-      -re "ERROR($prefix)\[^\r\n\]+\r\n" {
+      -re "ERROR($prefix)\r\n" {
        set output [html-pytest-format-line $testcase $pytest_script 
$expect_out(1,string)]
        fail $output
        exp_continue
       }
-      -re "PASSED($prefix)\[^\r\n\]+\r\n" {
+      -re "PASSED($prefix)\r\n" {
        set output [html-pytest-format-line $testcase $pytest_script 
$expect_out(1,string)]
        pass $output
        exp_continue
diff --git a/gcc/testsuite/lib/scansarif.exp b/gcc/testsuite/lib/scansarif.exp
index b96458e398f..4dfdf393074 100644
--- a/gcc/testsuite/lib/scansarif.exp
+++ b/gcc/testsuite/lib/scansarif.exp
@@ -182,17 +182,17 @@ proc run-sarif-pytest { args } {
     set prefix "\[^\r\n\]*"
     set timeout 300
     expect {
-      -re "FAILED($prefix)\[^\r\n\]+\r\n" {
+      -re "FAILED($prefix)\r\n" {
        set output [sarif-pytest-format-line $testcase $pytest_script 
$expect_out(1,string)]
        fail $output
        exp_continue
       }
-      -re "ERROR($prefix)\[^\r\n\]+\r\n" {
+      -re "ERROR($prefix)\r\n" {
        set output [sarif-pytest-format-line $testcase $pytest_script 
$expect_out(1,string)]
        fail $output
        exp_continue
       }
-      -re "PASSED($prefix)\[^\r\n\]+\r\n" {
+      -re "PASSED($prefix)\r\n" {
        set output [sarif-pytest-format-line $testcase $pytest_script 
$expect_out(1,string)]
        pass $output
        exp_continue
-- 
2.55.0

Reply via email to