diff options
author | Ted Kremenek <kremenek@apple.com> | 2007-09-25 18:37:20 +0000 |
---|---|---|
committer | Ted Kremenek <kremenek@apple.com> | 2007-09-25 18:37:20 +0000 |
commit | 445797873fcd5810e48e4c8937c33959a647bbf7 (patch) | |
tree | d8db3fddf34cf9797ceadda76c334e108efbeb0b | |
parent | 786d337d4d9d01169cd970948949f549a5095782 (diff) |
Added "CheckASTConsumer", a function that generalizes
"CheckDiagnostics" (used for -parse-ast-check) to check the
diagnostics of any ASTConsumer.
Reimplemented CheckDiagnostics to use CheckASTConsumer instead.
Added driver option -warn-dead-stores-check, which checks the
diagnostics generated by the DeadStores checker. This is implemented
using CheckASTConsumer.111
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@42310 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | Driver/DiagChecker.cpp | 17 | ||||
-rw-r--r-- | Driver/clang.cpp | 9 | ||||
-rw-r--r-- | Driver/clang.h | 7 |
3 files changed, 27 insertions, 6 deletions
diff --git a/Driver/DiagChecker.cpp b/Driver/DiagChecker.cpp index 48d8049780..21c3454bfd 100644 --- a/Driver/DiagChecker.cpp +++ b/Driver/DiagChecker.cpp @@ -227,17 +227,22 @@ static bool CheckResults(Preprocessor &PP, bool clang::CheckDiagnostics(Preprocessor &PP, unsigned MainFileID) { // Parse the specified input file, building ASTs and performing sema, but // doing nothing else. -{ - ASTConsumer NullConsumer; - ParseAST(PP, MainFileID, NullConsumer); + return CheckASTConsumer(PP,MainFileID, + std::auto_ptr<ASTConsumer>(new ASTConsumer())); } +/// CheckASTConsumer - Implement diagnostic checking for AST consumers. +bool clang::CheckASTConsumer(Preprocessor &PP, unsigned MainFileID, + std::auto_ptr<ASTConsumer> C) { + + // Local scope for ASTConsumer to auto release the consumer ... + { std::auto_ptr<ASTConsumer> Consumer(C); + ParseAST(PP, MainFileID, *Consumer.get()); } + // Gather the set of expected diagnostics. DiagList ExpectedErrors, ExpectedWarnings; FindExpectedDiags(PP, MainFileID, ExpectedErrors, ExpectedWarnings); - + // Check that the expected diagnostics occurred. return CheckResults(PP, ExpectedErrors, ExpectedWarnings); } - - diff --git a/Driver/clang.cpp b/Driver/clang.cpp index 77a568adac..6ff5580f2c 100644 --- a/Driver/clang.cpp +++ b/Driver/clang.cpp @@ -59,6 +59,7 @@ enum ProgActions { ParseCFGView, // Parse ASTS. Build CFGs. View CFGs. AnalysisLiveVariables, // Print results of live-variable analysis. WarnDeadStores, // Run DeadStores checker on parsed ASTs. + WarnDeadStoresCheck, // Check diagnostics for "DeadStores". WarnUninitVals, // Run UnitializedVariables checker. ParsePrintCallbacks, // Parse and print each callback. ParseSyntaxOnly, // Parse and perform semantic analysis. @@ -102,6 +103,8 @@ ProgAction(llvm::cl::desc("Choose output type:"), llvm::cl::ZeroOrMore, "Print results of live variable analysis."), clEnumValN(WarnDeadStores, "warn-dead-stores", "Flag warnings of stores to dead variables."), + clEnumValN(WarnDeadStoresCheck, "warn-dead-stores-check", + "Check diagnostics emitted by --warn-dead-stores."), clEnumValN(WarnUninitVals, "warn-uninit-values", "Flag warnings of uses of unitialized variables."), clEnumValN(EmitLLVM, "emit-llvm", @@ -881,6 +884,12 @@ static void ProcessInputFile(Preprocessor &PP, unsigned MainFileID, ParseAST(PP, MainFileID, *C.get(), Stats); break; } + case WarnDeadStoresCheck: { + std::auto_ptr<ASTConsumer> C(CreateDeadStoreChecker(PP.getDiagnostics())); + exit (CheckASTConsumer(PP, MainFileID, C)); + break; + } + case WarnUninitVals: { std::auto_ptr<ASTConsumer> C(CreateUnitValsChecker(PP.getDiagnostics())); ParseAST(PP, MainFileID, *C.get(), Stats); diff --git a/Driver/clang.h b/Driver/clang.h index 06d49639e0..69b84431f4 100644 --- a/Driver/clang.h +++ b/Driver/clang.h @@ -14,12 +14,15 @@ #ifndef LLVM_CLANG_CLANG_H #define LLVM_CLANG_CLANG_H +#include <memory> + namespace clang { class Preprocessor; struct LangOptions; class MinimalAction; class TargetInfo; class Diagnostic; +class ASTConsumer; /// DoPrintPreprocessedInput - Implement -E mode. void DoPrintPreprocessedInput(unsigned MainFileID, Preprocessor &PP, @@ -39,6 +42,10 @@ void EmitLLVMFromASTs(Preprocessor &PP, unsigned MainFileID, /// CheckDiagnostics - Implement the -parse-ast-check diagnostic verifier. bool CheckDiagnostics(Preprocessor &PP, unsigned MainFileID); + +/// CheckASTConsumer - Implement diagnostic checking for AST consumers. +bool CheckASTConsumer(Preprocessor &PP, unsigned MainFileID, + std::auto_ptr<ASTConsumer> C); } // end namespace clang |