diff options
| author | Reid Kleckner <reid@kleckner.net> | 2013-08-12 23:49:39 +0000 |
|---|---|---|
| committer | Reid Kleckner <reid@kleckner.net> | 2013-08-12 23:49:39 +0000 |
| commit | e846deae3c40a1b17a3f1584153a7001f352338f (patch) | |
| tree | f7764e0df9f554c23a7775a5c36002248a09f981 /clang/lib | |
| parent | 21b2929aca242663d27db325070f72b622f97556 (diff) | |
| download | bcm5719-llvm-e846deae3c40a1b17a3f1584153a7001f352338f.tar.gz bcm5719-llvm-e846deae3c40a1b17a3f1584153a7001f352338f.zip | |
Remove Sema includes from Analysis code to fix layering
This moves a header-only class from Sema to Analysis and puts the option
check in Sema.
Patch by Chris Wailes!
llvm-svn: 188230
Diffstat (limited to 'clang/lib')
| -rw-r--r-- | clang/lib/Analysis/Consumed.cpp | 34 | ||||
| -rw-r--r-- | clang/lib/Sema/AnalysisBasedWarnings.cpp | 8 |
2 files changed, 17 insertions, 25 deletions
diff --git a/clang/lib/Analysis/Consumed.cpp b/clang/lib/Analysis/Consumed.cpp index 5995544be6b..e556a8cef5c 100644 --- a/clang/lib/Analysis/Consumed.cpp +++ b/clang/lib/Analysis/Consumed.cpp @@ -26,8 +26,6 @@ #include "clang/Analysis/Analyses/Consumed.h" #include "clang/Basic/OperatorKinds.h" #include "clang/Basic/SourceLocation.h" -#include "clang/Sema/ConsumedWarningsHandler.h" -#include "clang/Sema/SemaDiagnostic.h" #include "llvm/ADT/DenseMap.h" #include "llvm/ADT/SmallVector.h" #include "llvm/Support/raw_ostream.h" @@ -100,7 +98,8 @@ class ConsumedStmtVisitor : public ConstStmtVisitor<ConsumedStmtVisitor> { typedef llvm::DenseMap<const Stmt *, PropagationInfo> MapType; typedef std::pair<const Stmt *, PropagationInfo> PairType; typedef MapType::iterator InfoEntry; - + + AnalysisDeclContext &AC; ConsumedAnalyzer &Analyzer; ConsumedStateMap *StateMap; MapType PropagationMap; @@ -124,10 +123,11 @@ public: void VisitMemberExpr(const MemberExpr *MExpr); void VisitUnaryOperator(const UnaryOperator *UOp); void VisitVarDecl(const VarDecl *Var); - - ConsumedStmtVisitor(ConsumedAnalyzer &Analyzer, ConsumedStateMap *StateMap) : - Analyzer(Analyzer), StateMap(StateMap) {} - + + ConsumedStmtVisitor(AnalysisDeclContext &AC, ConsumedAnalyzer &Analyzer, + ConsumedStateMap *StateMap) + : AC(AC), Analyzer(Analyzer), StateMap(StateMap) {} + void reset() { PropagationMap.clear(); } @@ -227,8 +227,8 @@ void ConsumedStmtVisitor::VisitCastExpr(const CastExpr *Cast) { void ConsumedStmtVisitor::VisitCXXConstructExpr(const CXXConstructExpr *Call) { CXXConstructorDecl *Constructor = Call->getConstructor(); - - ASTContext &CurrContext = Analyzer.getSema().getASTContext(); + + ASTContext &CurrContext = AC.getASTContext(); QualType ThisType = Constructor->getThisType(CurrContext)->getPointeeType(); if (Analyzer.isConsumableType(ThisType)) { @@ -636,10 +636,6 @@ void ConsumedStateMap::setState(const VarDecl *Var, ConsumedState State) { Map[Var] = State; } -const Sema & ConsumedAnalyzer::getSema() { - return S; -} - bool ConsumedAnalyzer::isConsumableType(QualType Type) { const CXXRecordDecl *RD = @@ -737,9 +733,9 @@ void ConsumedAnalyzer::run(AnalysisDeclContext &AC) { if (CurrStates == NULL) CurrStates = BlockInfo.getInfo(CurrBlock); - - ConsumedStmtVisitor Visitor(*this, CurrStates); - + + ConsumedStmtVisitor Visitor(AC, *this, CurrStates); + // Visit all of the basic block's statements. for (CFGBlock::const_iterator BI = CurrBlock->begin(), BE = CurrBlock->end(); BI != BE; ++BI) { @@ -789,12 +785,6 @@ void ConsumedAnalyzer::run(AnalysisDeclContext &AC) { WarningsHandler.emitDiagnostics(); } -unsigned checkEnabled(DiagnosticsEngine &D) { - return (unsigned) - (D.getDiagnosticLevel(diag::warn_use_while_consumed, SourceLocation()) != - DiagnosticsEngine::Ignored); -} - bool isTestingFunction(const CXXMethodDecl *Method) { return Method->hasAttr<TestsUnconsumedAttr>(); } diff --git a/clang/lib/Sema/AnalysisBasedWarnings.cpp b/clang/lib/Sema/AnalysisBasedWarnings.cpp index 19fc29b9071..54b791e6f62 100644 --- a/clang/lib/Sema/AnalysisBasedWarnings.cpp +++ b/clang/lib/Sema/AnalysisBasedWarnings.cpp @@ -1557,8 +1557,10 @@ clang::sema::AnalysisBasedWarnings::AnalysisBasedWarnings(Sema &s) DefaultPolicy.enableThreadSafetyAnalysis = (unsigned) (D.getDiagnosticLevel(diag::warn_double_lock, SourceLocation()) != DiagnosticsEngine::Ignored); - DefaultPolicy.enableConsumedAnalysis = consumed::checkEnabled(D); - + DefaultPolicy.enableConsumedAnalysis = + (unsigned)(D.getDiagnosticLevel(diag::warn_use_while_consumed, + SourceLocation()) != + DiagnosticsEngine::Ignored); } static void flushDiagnostics(Sema &S, sema::FunctionScopeInfo *fscope) { @@ -1727,7 +1729,7 @@ AnalysisBasedWarnings::IssueWarnings(sema::AnalysisBasedWarnings::Policy P, // Check for violations of consumed properties. if (P.enableConsumedAnalysis) { consumed::ConsumedWarningsHandler WarningHandler(S); - consumed::ConsumedAnalyzer Analyzer(S, WarningHandler); + consumed::ConsumedAnalyzer Analyzer(WarningHandler); Analyzer.run(AC); } |

