[PATCH] D33308: [analyzer]: Improve test handling with multiple constraint managers

Dominic Chen via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Wed May 17 22:27:15 PDT 2017


ddcc created this revision.

Modify the test infrastructure to properly handle tests that require z3, and merge together the output of all tests on success. This is required for https://reviews.llvm.org/D28954.


https://reviews.llvm.org/D33308

Files:
  test/Analysis/analyzer_test.py


Index: test/Analysis/analyzer_test.py
===================================================================
--- test/Analysis/analyzer_test.py
+++ test/Analysis/analyzer_test.py
@@ -5,24 +5,39 @@
 class AnalyzerTest(lit.formats.ShTest):
 
     def execute(self, test, litConfig):
-        result = self.executeWithAnalyzeSubstitution(
-            test, litConfig, '-analyzer-constraints=range')
+        results = []
 
-        if result.code == lit.Test.FAIL:
-            return result
+        # Parse any test requirements ('REQUIRES: ')
+        saved_test = test
+        lit.TestRunner.parseIntegratedTestScript(test)
+
+        if 'z3' not in test.requires:
+            results.append(self.executeWithAnalyzeSubstitution(
+                saved_test, litConfig, '-analyzer-constraints=range'))
+
+            if results[-1].code == lit.Test.FAIL:
+                return results[-1]
 
         # If z3 backend available, add an additional run line for it
         if test.config.clang_staticanalyzer_z3 == '1':
-            result = self.executeWithAnalyzeSubstitution(
-                test, litConfig, '-analyzer-constraints=z3 -DANALYZER_CM_Z3')
+            results.append(self.executeWithAnalyzeSubstitution(
+                saved_test, litConfig, '-analyzer-constraints=z3 -DANALYZER_CM_Z3'))
 
-        return result
+        # Combine all result outputs into the last element
+        for x in results:
+            if x != results[-1]:
+                results[-1].output = x.output + results[-1].output
+
+        if results:
+            return results[-1]
+        return lit.Test.Result(lit.Test.UNSUPPORTED,
+            "Test requires the following unavailable features: z3")
 
     def executeWithAnalyzeSubstitution(self, test, litConfig, substitution):
         saved_substitutions = list(test.config.substitutions)
         test.config.substitutions.append(('%analyze', substitution))
         result = lit.TestRunner.executeShTest(test, litConfig,
-                                              self.execute_external)
+            self.execute_external)
         test.config.substitutions = saved_substitutions
 
         return result


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D33308.99394.patch
Type: text/x-patch
Size: 2165 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20170518/817a86f7/attachment.bin>


More information about the cfe-commits mailing list