Skip to content

Commit

Permalink
[analyzer] [NFC] Introduce separate targets for testing the analyzer:…
Browse files Browse the repository at this point in the history
… check-clang-analyzer and check-clang-analyzer-z3

Current testing setup for analyzer tests with Z3 is rather inconvenient:

There's no way to run the analyzer tests separately (I use
LIT_FILTER=Analysis ninja check-clang, but a direct target is nicer).

When Clang is built with Z3 support, there's no way to *not* run tests
with Z3 solver, and this is often desired, as tests with Z3 solver take
a very long time.

This patch introduces two extra targets:

 - check-clang-analyzer
 - check-clang-analyzer-z3

which solve those problems.

Differential Revision: https://reviews.llvm.org/D50594

llvm-svn: 339629
  • Loading branch information
George Karpenkov committed Aug 13, 2018
1 parent 97ea485 commit 2997a30
Show file tree
Hide file tree
Showing 4 changed files with 34 additions and 2 deletions.
7 changes: 6 additions & 1 deletion clang/test/Analysis/analyzer_test.py
Expand Up @@ -4,6 +4,10 @@
# Custom format class for static analyzer tests
class AnalyzerTest(lit.formats.ShTest):

def __init__(self, execute_external, use_z3_solver=False):
super(AnalyzerTest, self).__init__(execute_external)
self.use_z3_solver = use_z3_solver

def execute(self, test, litConfig):
results = []

Expand All @@ -19,7 +23,8 @@ def execute(self, test, litConfig):
return results[-1]

# If z3 backend available, add an additional run line for it
if test.config.clang_staticanalyzer_z3 == '1':
if self.use_z3_solver == '1':
assert(test.config.clang_staticanalyzer_z3 == '1')
results.append(self.executeWithAnalyzeSubstitution(
saved_test, litConfig, '-analyzer-constraints=z3 -DANALYZER_CM_Z3'))

Expand Down
2 changes: 1 addition & 1 deletion clang/test/Analysis/lit.local.cfg
Expand Up @@ -7,7 +7,7 @@ import site
site.addsitedir(os.path.dirname(__file__))
import analyzer_test
config.test_format = analyzer_test.AnalyzerTest(
config.test_format.execute_external)
config.test_format.execute_external, config.use_z3_solver)

if not config.root.clang_staticanalyzer:
config.unsupported = True
25 changes: 25 additions & 0 deletions clang/test/CMakeLists.txt
Expand Up @@ -88,8 +88,15 @@ endif ()

set(CLANG_TEST_PARAMS
clang_site_config=${CMAKE_CURRENT_BINARY_DIR}/lit.site.cfg
USE_Z3_SOLVER=0
)

set(ANALYZER_TEST_PARAMS
USE_Z3_SOLVER=0)

set(ANALYZER_TEST_PARAMS_Z3
USE_Z3_SOLVER=1)

if( NOT CLANG_BUILT_STANDALONE )
list(APPEND CLANG_TEST_DEPS
llvm-config
Expand Down Expand Up @@ -126,6 +133,24 @@ add_lit_testsuite(check-clang "Running the Clang regression tests"
)
set_target_properties(check-clang PROPERTIES FOLDER "Clang tests")

if (CLANG_ENABLE_STATIC_ANALYZER)
add_lit_testsuite(check-clang-analyzer "Running the Clang analyzer tests"
${CMAKE_CURRENT_BINARY_DIR}/Analysis
PARAMS ${ANALYZER_TEST_PARAMS}
DEPENDS ${CLANG_TEST_DEPS})
set_target_properties(check-clang-analyzer PROPERTIES FOLDER "Clang tests")


if (CLANG_ANALYZER_WITH_Z3)
add_lit_testsuite(check-clang-analyzer-z3 "Running the Clang analyzer tests, using Z3 as a solver"
${CMAKE_CURRENT_BINARY_DIR}/Analysis
PARAMS ${ANALYZER_TEST_PARAMS_Z3}
DEPENDS ${CLANG_TEST_DEPS})
set_target_properties(check-clang-analyzer-z3 PROPERTIES FOLDER "Clang tests")
endif()

endif()

add_lit_testsuites(CLANG ${CMAKE_CURRENT_SOURCE_DIR}
PARAMS ${CLANG_TEST_PARAMS}
DEPENDS ${CLANG_TEST_DEPS}
Expand Down
2 changes: 2 additions & 0 deletions clang/test/lit.site.cfg.py.in
Expand Up @@ -26,6 +26,7 @@ config.enable_shared = @ENABLE_SHARED@
config.enable_backtrace = @ENABLE_BACKTRACES@
config.host_arch = "@HOST_ARCH@"
config.python_executable = "@PYTHON_EXECUTABLE@"
config.use_z3_solver = "@USE_Z3_SOLVER@"

# Support substitution of the tools and libs dirs with user parameters. This is
# used when we can't determine the tool dir at configuration time.
Expand All @@ -34,6 +35,7 @@ try:
config.llvm_tools_dir = config.llvm_tools_dir % lit_config.params
config.llvm_shlib_dir = config.llvm_shlib_dir % lit_config.params
config.llvm_libs_dir = config.llvm_libs_dir % lit_config.params
config.use_z3_solver = lit_config.params['USE_Z3_SOLVER']
except KeyError:
e = sys.exc_info()[1]
key, = e.args
Expand Down

0 comments on commit 2997a30

Please sign in to comment.