mirror of
https://github.com/capstone-engine/llvm-capstone.git
synced 2025-01-15 20:51:35 +00:00
26a92d5852
Summary: Clang performs various recursive operations (such as template instantiation), and may use non-trivial amounts of stack space in each recursive step (for instance, due to recursive AST walks). While we try to keep the stack space used by such steps to a minimum and we have explicit limits on the number of such steps we perform, it's impractical to guarantee that we won't blow out the stack on deeply recursive template instantiations on complex ASTs, even with only a moderately high instantiation depth limit. The user experience in these cases is generally terrible: we crash with no hint of what went wrong. Under this patch, we attempt to do better: * Detect when the stack is nearly exhausted, and produce a warning with a nice template instantiation backtrace, telling the user that we might run slowly or crash. * For cases where we're forced to trigger recursive template instantiation in arbitrarily-deeply-nested contexts, check whether we're nearly out of stack space and allocate a new stack (by spawning a new thread) after producing the warning. Reviewers: rnk, aaron.ballman Subscribers: mgorny, cfe-commits Tags: #clang Differential Revision: https://reviews.llvm.org/D66361 llvm-svn: 369940
51 lines
2.1 KiB
Python
51 lines
2.1 KiB
Python
@LIT_SITE_CFG_IN_HEADER@
|
|
|
|
import sys
|
|
|
|
config.llvm_src_root = "@LLVM_SOURCE_DIR@"
|
|
config.llvm_obj_root = "@LLVM_BINARY_DIR@"
|
|
config.llvm_tools_dir = "@LLVM_TOOLS_DIR@"
|
|
config.llvm_libs_dir = "@LLVM_LIBS_DIR@"
|
|
config.llvm_shlib_dir = "@SHLIBDIR@"
|
|
config.llvm_plugin_ext = "@LLVM_PLUGIN_EXT@"
|
|
config.lit_tools_dir = "@LLVM_LIT_TOOLS_DIR@"
|
|
config.clang_obj_root = "@CLANG_BINARY_DIR@"
|
|
config.clang_src_dir = "@CLANG_SOURCE_DIR@"
|
|
config.clang_tools_dir = "@CLANG_TOOLS_DIR@"
|
|
config.host_triple = "@LLVM_HOST_TRIPLE@"
|
|
config.target_triple = "@TARGET_TRIPLE@"
|
|
config.host_cxx = "@CMAKE_CXX_COMPILER@"
|
|
config.llvm_use_sanitizer = "@LLVM_USE_SANITIZER@"
|
|
config.have_zlib = @HAVE_LIBZ@
|
|
config.clang_arcmt = @CLANG_ENABLE_ARCMT@
|
|
config.clang_default_cxx_stdlib = "@CLANG_DEFAULT_CXX_STDLIB@"
|
|
config.clang_staticanalyzer = @CLANG_ENABLE_STATIC_ANALYZER@
|
|
config.clang_staticanalyzer_z3 = "@LLVM_WITH_Z3@"
|
|
config.clang_examples = @CLANG_BUILD_EXAMPLES@
|
|
config.enable_shared = @ENABLE_SHARED@
|
|
config.enable_backtrace = @ENABLE_BACKTRACES@
|
|
config.enable_experimental_new_pass_manager = @ENABLE_EXPERIMENTAL_NEW_PASS_MANAGER@
|
|
config.enable_threads = @LLVM_ENABLE_THREADS@
|
|
config.host_arch = "@HOST_ARCH@"
|
|
config.python_executable = "@PYTHON_EXECUTABLE@"
|
|
config.use_z3_solver = lit_config.params.get('USE_Z3_SOLVER', "@USE_Z3_SOLVER@")
|
|
config.has_plugins = @LLVM_ENABLE_PLUGINS@
|
|
|
|
# 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.
|
|
try:
|
|
config.clang_tools_dir = config.clang_tools_dir % lit_config.params
|
|
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
|
|
except KeyError:
|
|
e = sys.exc_info()[1]
|
|
key, = e.args
|
|
lit_config.fatal("unable to find %r parameter, use '--param=%s=VALUE'" % (key,key))
|
|
|
|
import lit.llvm
|
|
lit.llvm.initialize(lit_config, config)
|
|
|
|
# Let the main config do the real work.
|
|
lit_config.load_config(config, "@CLANG_SOURCE_DIR@/test/lit.cfg.py")
|