summaryrefslogtreecommitdiffstats
path: root/clang/lib/Analysis/Consumed.cpp
diff options
context:
space:
mode:
authorDeLesley Hutchins <delesley@google.com>2013-10-18 23:11:49 +0000
committerDeLesley Hutchins <delesley@google.com>2013-10-18 23:11:49 +0000
commit8121866bdbffff68763bcff3adb79e2425dc9ae2 (patch)
treedec402a625d6b1f2fa95f68f0a3db242b632d8e1 /clang/lib/Analysis/Consumed.cpp
parent0b55b4a20893fe0e9aa0881d70db0cf07052d20c (diff)
downloadbcm5719-llvm-8121866bdbffff68763bcff3adb79e2425dc9ae2.tar.gz
bcm5719-llvm-8121866bdbffff68763bcff3adb79e2425dc9ae2.zip
Consumed analysis: fix assert failure.
llvm-svn: 193010
Diffstat (limited to 'clang/lib/Analysis/Consumed.cpp')
-rw-r--r--clang/lib/Analysis/Consumed.cpp28
1 files changed, 20 insertions, 8 deletions
diff --git a/clang/lib/Analysis/Consumed.cpp b/clang/lib/Analysis/Consumed.cpp
index 8358b6b4e1c..ed806ce6711 100644
--- a/clang/lib/Analysis/Consumed.cpp
+++ b/clang/lib/Analysis/Consumed.cpp
@@ -414,6 +414,15 @@ class ConsumedStmtVisitor : public ConstStmtVisitor<ConsumedStmtVisitor> {
void propagateReturnType(const Stmt *Call, const FunctionDecl *Fun,
QualType ReturnType);
+ inline ConsumedState getPInfoState(const PropagationInfo& PInfo) {
+ if (PInfo.isVar())
+ return StateMap->getState(PInfo.getVar());
+ else if (PInfo.isState())
+ return PInfo.getState();
+ else
+ return CS_None;
+ }
+
public:
void checkCallability(const PropagationInfo &PInfo,
const FunctionDecl *FunDecl,
@@ -927,15 +936,18 @@ void ConsumedStmtVisitor::VisitUnaryOperator(const UnaryOperator *UOp) {
void ConsumedStmtVisitor::VisitVarDecl(const VarDecl *Var) {
if (isConsumableType(Var->getType())) {
if (Var->hasInit()) {
- PropagationInfo PInfo =
- PropagationMap.find(Var->getInit())->second;
-
- StateMap->setState(Var, PInfo.isVar() ?
- StateMap->getState(PInfo.getVar()) : PInfo.getState());
-
- } else {
- StateMap->setState(Var, consumed::CS_Unknown);
+ MapType::iterator VIT = PropagationMap.find(Var->getInit());
+ if (VIT != PropagationMap.end()) {
+ PropagationInfo PInfo = VIT->second;
+ ConsumedState St = getPInfoState(PInfo);
+ if (St != consumed::CS_None) {
+ StateMap->setState(Var, St);
+ return;
+ }
+ }
}
+ // Otherwise
+ StateMap->setState(Var, consumed::CS_Unknown);
}
}
}} // end clang::consumed::ConsumedStmtVisitor
OpenPOWER on IntegriCloud