aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTed Kremenek <kremenek@apple.com>2007-09-25 18:37:20 +0000
committerTed Kremenek <kremenek@apple.com>2007-09-25 18:37:20 +0000
commit445797873fcd5810e48e4c8937c33959a647bbf7 (patch)
treed8db3fddf34cf9797ceadda76c334e108efbeb0b
parent786d337d4d9d01169cd970948949f549a5095782 (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.cpp17
-rw-r--r--Driver/clang.cpp9
-rw-r--r--Driver/clang.h7
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