Added driver option "-checker-opt-analyze-headers" to force the static
analyzer to analyze functions declared in header files. llvm-svn: 49675
This commit is contained in:
parent
2cd8e38ab9
commit
751d4d2d60
|
@ -643,12 +643,13 @@ protected:
|
|||
bool Visualize;
|
||||
bool TrimGraph;
|
||||
llvm::OwningPtr<PathDiagnosticClient> PD;
|
||||
bool AnalyzeAll;
|
||||
public:
|
||||
CheckerConsumer(Diagnostic &diags, const std::string& fname,
|
||||
const std::string& htmldir,
|
||||
bool visualize, bool trim)
|
||||
bool visualize, bool trim, bool analyzeAll)
|
||||
: CFGVisitor(fname), Diags(diags), HTMLDir(htmldir),
|
||||
Visualize(visualize), TrimGraph(trim) {}
|
||||
Visualize(visualize), TrimGraph(trim), AnalyzeAll(analyzeAll) {}
|
||||
|
||||
virtual void Initialize(ASTContext &Context) { Ctx = &Context; }
|
||||
virtual void VisitCFG(CFG& C, Decl&);
|
||||
|
@ -666,8 +667,10 @@ void CheckerConsumer::VisitCFG(CFG& C, Decl& CD) {
|
|||
|
||||
SourceLocation Loc = CD.getLocation();
|
||||
|
||||
if (!Loc.isFileID() ||
|
||||
Loc.getFileID() != Ctx->getSourceManager().getMainFileID())
|
||||
if (!Loc.isFileID())
|
||||
return;
|
||||
|
||||
if (!AnalyzeAll && Loc.getFileID() != Ctx->getSourceManager().getMainFileID())
|
||||
return;
|
||||
|
||||
// Lazily create the diagnostic client.
|
||||
|
@ -721,8 +724,8 @@ class GRSimpleValsVisitor : public CheckerConsumer {
|
|||
public:
|
||||
GRSimpleValsVisitor(Diagnostic &diags, const std::string& fname,
|
||||
const std::string& htmldir,
|
||||
bool visualize, bool trim)
|
||||
: CheckerConsumer(diags, fname, htmldir, visualize, trim) {}
|
||||
bool visualize, bool trim, bool analyzeAll)
|
||||
: CheckerConsumer(diags, fname, htmldir, visualize, trim, analyzeAll) {}
|
||||
|
||||
virtual const char* getCheckerName() { return "GRSimpleVals"; }
|
||||
|
||||
|
@ -735,10 +738,11 @@ public:
|
|||
ASTConsumer* clang::CreateGRSimpleVals(Diagnostic &Diags,
|
||||
const std::string& FunctionName,
|
||||
const std::string& HTMLDir,
|
||||
bool Visualize, bool TrimGraph) {
|
||||
bool Visualize, bool TrimGraph,
|
||||
bool AnalyzeAll) {
|
||||
|
||||
return new GRSimpleValsVisitor(Diags, FunctionName, HTMLDir,
|
||||
Visualize, TrimGraph);
|
||||
Visualize, TrimGraph, AnalyzeAll);
|
||||
}
|
||||
|
||||
|
||||
|
@ -750,8 +754,8 @@ class CFRefCountCheckerVisitor : public CheckerConsumer {
|
|||
public:
|
||||
CFRefCountCheckerVisitor(Diagnostic &diags, const std::string& fname,
|
||||
const std::string& htmldir,
|
||||
bool visualize, bool trim)
|
||||
: CheckerConsumer(diags, fname, htmldir, visualize, trim) {}
|
||||
bool visualize, bool trim, bool analyzeAll)
|
||||
: CheckerConsumer(diags, fname, htmldir, visualize, trim, analyzeAll) {}
|
||||
|
||||
virtual const char* getCheckerName() { return "CFRefCountChecker"; }
|
||||
|
||||
|
@ -764,10 +768,11 @@ public:
|
|||
ASTConsumer* clang::CreateCFRefChecker(Diagnostic &Diags,
|
||||
const std::string& FunctionName,
|
||||
const std::string& HTMLDir,
|
||||
bool Visualize, bool TrimGraph) {
|
||||
bool Visualize, bool TrimGraph,
|
||||
bool AnalyzeAll) {
|
||||
|
||||
return new CFRefCountCheckerVisitor(Diags, FunctionName, HTMLDir,
|
||||
Visualize, TrimGraph);
|
||||
Visualize, TrimGraph, AnalyzeAll);
|
||||
}
|
||||
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
|
|
@ -44,13 +44,13 @@ ASTConsumer *CreateUnitValsChecker(Diagnostic &Diags);
|
|||
|
||||
ASTConsumer *CreateGRSimpleVals(Diagnostic &Diags,
|
||||
const std::string& Function,
|
||||
const std::string& HTMLDir,
|
||||
bool Visualize = false, bool TrimGraph = false);
|
||||
const std::string& HTMLDir, bool Visualize,
|
||||
bool TrimGraph, bool AnalyzeAll);
|
||||
|
||||
ASTConsumer *CreateCFRefChecker(Diagnostic &Diags,
|
||||
const std::string& Function,
|
||||
const std::string& HTMLDir,
|
||||
bool Visualize = false, bool TrimGraph = false);
|
||||
const std::string& HTMLDir, bool Visualize,
|
||||
bool TrimGraph, bool AnalyzeAll);
|
||||
|
||||
ASTConsumer *CreateCodeRewriterTest(const std::string& InFile,
|
||||
const std::string& OutFile,
|
||||
|
|
|
@ -146,20 +146,33 @@ static llvm::cl::opt<std::string>
|
|||
OutputFile("o",
|
||||
llvm::cl::value_desc("path"),
|
||||
llvm::cl::desc("Specify output file (for --serialize, this is a directory)"));
|
||||
|
||||
|
||||
//===----------------------------------------------------------------------===//
|
||||
// Diagnostic Options
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
static llvm::cl::opt<bool>
|
||||
VerifyDiagnostics("verify",
|
||||
llvm::cl::desc("Verify emitted diagnostics and warnings."));
|
||||
|
||||
static llvm::cl::opt<bool>
|
||||
VisualizeEG("visualize-egraph",
|
||||
llvm::cl::desc("Display static analysis Exploded Graph."));
|
||||
|
||||
static llvm::cl::opt<std::string>
|
||||
HTMLDiag("html-diags",
|
||||
llvm::cl::desc("Generate HTML to report diagnostics"),
|
||||
llvm::cl::value_desc("HTML directory"));
|
||||
|
||||
//===----------------------------------------------------------------------===//
|
||||
// Analyzer Options
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
static llvm::cl::opt<bool>
|
||||
VisualizeEG("visualize-egraph",
|
||||
llvm::cl::desc("Display static analysis Exploded Graph."));
|
||||
|
||||
static llvm::cl::opt<bool>
|
||||
AnalyzeAll("checker-opt-analyze-headers",
|
||||
llvm::cl::desc("Force the static analyzer to analyze "
|
||||
"functions defined in header files."));
|
||||
|
||||
//===----------------------------------------------------------------------===//
|
||||
// Language Options
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
@ -1057,11 +1070,11 @@ static ASTConsumer* CreateASTConsumer(const std::string& InFile,
|
|||
|
||||
case AnalysisGRSimpleVals:
|
||||
return CreateGRSimpleVals(Diag, AnalyzeSpecificFunction, OutputFile,
|
||||
VisualizeEG, TrimGraph);
|
||||
VisualizeEG, TrimGraph, AnalyzeAll);
|
||||
|
||||
case CheckerCFRef:
|
||||
return CreateCFRefChecker(Diag, AnalyzeSpecificFunction, OutputFile,
|
||||
VisualizeEG, TrimGraph);
|
||||
VisualizeEG, TrimGraph, AnalyzeAll);
|
||||
|
||||
case TestSerialization:
|
||||
return CreateSerializationTest(Diag, FileMgr, LangOpts);
|
||||
|
|
Loading…
Reference in New Issue