forked from OSchip/llvm-project
[analyzer] Add CTUImportCppThreshold for C++ files
Summary: The default CTUImportThreshold (8) seems to be too conservative with C projects. We increase this value to 24 and we introduce another threshold for C++ source files (defaulted to 8) because their AST is way more compilcated than C source files. Differential Revision: https://reviews.llvm.org/D83475
This commit is contained in:
parent
31b05692cd
commit
d12d0b73f1
|
@ -321,9 +321,16 @@ ANALYZER_OPTION(bool, ShouldDisplayCheckerNameForText, "display-checker-name",
|
|||
ANALYZER_OPTION(unsigned, CTUImportThreshold, "ctu-import-threshold",
|
||||
"The maximal amount of translation units that is considered "
|
||||
"for import when inlining functions during CTU analysis. "
|
||||
"Lowering this threshold can alleviate the memory burder of "
|
||||
"Lowering this threshold can alleviate the memory burden of "
|
||||
"analysis with many interdependent definitions located in "
|
||||
"various translation units.",
|
||||
"various translation units. This is valid only for non C++ "
|
||||
"source files.",
|
||||
24u)
|
||||
|
||||
ANALYZER_OPTION(unsigned, CTUImportCppThreshold, "ctu-import-cpp-threshold",
|
||||
"The maximal amount of translation units that is considered "
|
||||
"for import when inlining functions during CTU analysis of C++ "
|
||||
"source files.",
|
||||
8u)
|
||||
|
||||
ANALYZER_OPTION(
|
||||
|
|
|
@ -367,7 +367,9 @@ CrossTranslationUnitContext::ASTUnitStorage::ASTUnitStorage(
|
|||
CompilerInstance &CI)
|
||||
: Loader(CI, CI.getAnalyzerOpts()->CTUDir,
|
||||
CI.getAnalyzerOpts()->CTUInvocationList),
|
||||
LoadGuard(CI.getAnalyzerOpts()->CTUImportThreshold) {}
|
||||
LoadGuard(CI.getASTContext().getLangOpts().CPlusPlus
|
||||
? CI.getAnalyzerOpts()->CTUImportCppThreshold
|
||||
: CI.getAnalyzerOpts()->CTUImportThreshold) {}
|
||||
|
||||
llvm::Expected<ASTUnit *>
|
||||
CrossTranslationUnitContext::ASTUnitStorage::getASTUnitForFile(
|
||||
|
|
|
@ -43,7 +43,8 @@
|
|||
// CHECK-NEXT: cplusplus.SmartPtrModeling:ModelSmartPtrDereference = false
|
||||
// CHECK-NEXT: crosscheck-with-z3 = false
|
||||
// CHECK-NEXT: ctu-dir = ""
|
||||
// CHECK-NEXT: ctu-import-threshold = 8
|
||||
// CHECK-NEXT: ctu-import-cpp-threshold = 8
|
||||
// CHECK-NEXT: ctu-import-threshold = 24
|
||||
// CHECK-NEXT: ctu-index-name = externalDefMap.txt
|
||||
// CHECK-NEXT: ctu-invocation-list = invocations.yaml
|
||||
// CHECK-NEXT: deadcode.DeadStores:ShowFixIts = false
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
// Ensure analyzer option 'ctu-import-threshold' is a recognized option.
|
||||
//
|
||||
// RUN: %clang_cc1 -analyze -analyzer-config ctu-import-threshold=30 -verify %s
|
||||
// RUN: %clang_cc1 -analyze -analyzer-config ctu-import-cpp-threshold=30 -verify %s
|
||||
//
|
||||
// expected-no-diagnostics
|
||||
|
|
|
@ -147,6 +147,7 @@ protected:
|
|||
std::unique_ptr<clang::ASTConsumer>
|
||||
CreateASTConsumer(clang::CompilerInstance &CI, StringRef) override {
|
||||
CI.getAnalyzerOpts()->CTUImportThreshold = OverrideLimit;
|
||||
CI.getAnalyzerOpts()->CTUImportCppThreshold = OverrideLimit;
|
||||
return std::make_unique<CTUASTConsumer>(CI, Success);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue