Propagate error to AnalyzeOutput

The error returned by deqp-vk when running the shell.Exec()
command is used to find the proper case in the switch
statement in the AnalyzeOutput function, so it has to be
passed in as an argument.

Bug: b/253530501
Change-Id: I835cbcceacd06aded27f0fcb341d9a9a20c5ce83
Reviewed-on: https://swiftshader-review.googlesource.com/c/SwiftShader/+/69269
Reviewed-by: Ben Clayton <bclayton@google.com>
Commit-Queue: Alexis Hétu <sugoi@google.com>
Tested-by: Alexis Hétu <sugoi@google.com>
Reviewed-by: Nicolas Capens <nicolascapens@google.com>
diff --git a/tests/regres/deqp/deqp.go b/tests/regres/deqp/deqp.go
index 2946706..ebd65ee 100644
--- a/tests/regres/deqp/deqp.go
+++ b/tests/regres/deqp/deqp.go
@@ -344,7 +344,7 @@
 
 	numTests := len(testNames)
 	timeout := c.TestTimeout * time.Duration(numTests)
-	outRaw, err := shell.Exec(timeout, exe, filepath.Dir(exe), env, stdin,
+	outRaw, deqpErr := shell.Exec(timeout, exe, filepath.Dir(exe), env, stdin,
 		"--deqp-validation="+validation,
 		"--deqp-surface-type=pbuffer",
 		"--deqp-shadercache=disable",
@@ -364,9 +364,10 @@
 
 	var coverage *cov.Coverage
 	if c.CoverageEnv != nil && supportsCoverage {
-		coverage, err = c.CoverageEnv.Import(coverageFile)
-		if err != nil {
-			log.Printf("Warning: Failed to process test coverage for test '%v'. %v", testNames, err)
+		var covErr error
+		coverage, covErr = c.CoverageEnv.Import(coverageFile)
+		if covErr != nil {
+			log.Printf("Warning: Failed to process test coverage for test '%v'. %v", testNames, covErr)
 		}
 		os.Remove(coverageFile)
 	}
@@ -392,15 +393,15 @@
 
 			averageDuration := duration / time.Duration(numTests)
 			for i, caseOutput := range caseOutputs {
-				results <- c.AnalyzeOutput(caseNames[i], caseOutput, averageDuration, coverage)
+				results <- c.AnalyzeOutput(caseNames[i], caseOutput, averageDuration, coverage, deqpErr)
 			}
 		}
 	} else {
-		results <- c.AnalyzeOutput(testNames[0], out, duration, coverage)
+		results <- c.AnalyzeOutput(testNames[0], out, duration, coverage, deqpErr)
 	}
 }
 
-func (c *Config) AnalyzeOutput(name string, out string, duration time.Duration, coverage *cov.Coverage) TestResult {
+func (c *Config) AnalyzeOutput(name string, out string, duration time.Duration, coverage *cov.Coverage, err error) TestResult {
 	for _, test := range []struct {
 		re *regexp.Regexp
 		s  testlist.Status
@@ -423,7 +424,6 @@
 	}
 
 	// Don't treat non-zero error codes as crashes.
-	var err error
 	var exitErr *exec.ExitError
 	if errors.As(err, &exitErr) {
 		if exitErr.ExitCode() != 255 {