[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:
Gabor Marton 2020-07-09 14:26:23 +02:00
parent 31b05692cd
commit d12d0b73f1
5 changed files with 16 additions and 4 deletions

View File

@ -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(

View File

@ -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(

View File

@ -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

View File

@ -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

View File

@ -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);
}