diff options
Diffstat (limited to 'clang/Driver/AnalysisConsumer.cpp')
| -rw-r--r-- | clang/Driver/AnalysisConsumer.cpp | 40 |
1 files changed, 27 insertions, 13 deletions
diff --git a/clang/Driver/AnalysisConsumer.cpp b/clang/Driver/AnalysisConsumer.cpp index 57be0ff55d6..ea2418610ec 100644 --- a/clang/Driver/AnalysisConsumer.cpp +++ b/clang/Driver/AnalysisConsumer.cpp @@ -227,24 +227,30 @@ static void ActionUninitVals(AnalysisManager& mgr) { } -static void ActionRefLeakCheckerAux(AnalysisManager& mgr, bool GCEnabled, - bool StandardWarnings) { - +static void ActionGRExprEngine(AnalysisManager& mgr, GRTransferFuncs* tf) { + + llvm::OwningPtr<GRTransferFuncs> TF(tf); + // Construct the analysis engine. - GRExprEngine Eng(*mgr.getCFG(), *mgr.getCodeDecl(), mgr.getContext()); + GRExprEngine Eng(*mgr.getCFG(), *mgr.getCodeDecl(), mgr.getContext()); + Eng.setTransferFunctions(tf); - // Construct the transfer function object. - llvm::OwningPtr<GRTransferFuncs> - TF(MakeCFRefCountTF(mgr.getContext(), GCEnabled, StandardWarnings, - mgr.getLangOptions())); - - Eng.setTransferFunctions(TF.get()); - // Execute the worklist algorithm. Eng.ExecuteWorkList(); - + // Display warnings. - Eng.EmitWarnings(mgr.getDiagnostic(), mgr.getPathDiagnosticClient()); + Eng.EmitWarnings(mgr.getDiagnostic(), mgr.getPathDiagnosticClient()); +} + +static void ActionRefLeakCheckerAux(AnalysisManager& mgr, bool GCEnabled, + bool StandardWarnings) { + + GRTransferFuncs* TF = MakeCFRefCountTF(mgr.getContext(), + GCEnabled, + StandardWarnings, + mgr.getLangOptions()); + + ActionGRExprEngine(mgr, TF); } static void ActionRefLeakChecker(AnalysisManager& mgr) { @@ -267,6 +273,10 @@ static void ActionRefLeakChecker(AnalysisManager& mgr) { } } +static void ActionSimpleChecks(AnalysisManager& mgr) { + ActionGRExprEngine(mgr, MakeGRSimpleValsTF()); +} + //===----------------------------------------------------------------------===// // AnalysisConsumer creation. //===----------------------------------------------------------------------===// @@ -298,6 +308,10 @@ ASTConsumer* clang::CreateAnalysisConsumer(Analyses* Beg, Analyses* End, C->addCodeAction(&ActionRefLeakChecker); break; + case CheckerSimple: + C->addCodeAction(&ActionSimpleChecks); + break; + default: break; } |

