#include "clang/Basic/OperatorKinds.h"
#include "clang/Basic/SourceLocation.h"
#include "llvm/ADT/DenseMap.h"
+#include "llvm/ADT/OwningPtr.h"
#include "llvm/ADT/SmallVector.h"
#include "llvm/Support/Compiler.h"
#include "llvm/Support/raw_ostream.h"
bool ConsumedAnalyzer::splitState(const CFGBlock *CurrBlock,
const ConsumedStmtVisitor &Visitor) {
- ConsumedStateMap *FalseStates = new ConsumedStateMap(*CurrStates);
+ OwningPtr<ConsumedStateMap> FalseStates(new ConsumedStateMap(*CurrStates));
PropagationInfo PInfo;
if (const IfStmt *IfNode =
if (PInfo.isTest()) {
CurrStates->setSource(Cond);
FalseStates->setSource(Cond);
- splitVarStateForIf(IfNode, PInfo.getTest(), CurrStates, FalseStates);
+ splitVarStateForIf(IfNode, PInfo.getTest(), CurrStates,
+ FalseStates.get());
} else if (PInfo.isBinTest()) {
CurrStates->setSource(PInfo.testSourceNode());
FalseStates->setSource(PInfo.testSourceNode());
- splitVarStateForIfBinOp(PInfo, CurrStates, FalseStates);
+ splitVarStateForIfBinOp(PInfo, CurrStates, FalseStates.get());
} else {
- delete FalseStates;
return false;
}
if ((BinOp = dyn_cast_or_null<BinaryOperator>(BinOp->getLHS()))) {
PInfo = Visitor.getInfo(BinOp->getRHS());
- if (!PInfo.isTest()) {
- delete FalseStates;
+ if (!PInfo.isTest())
return false;
- }
} else {
- delete FalseStates;
return false;
}
}
}
} else {
- delete FalseStates;
return false;
}
delete CurrStates;
if (*++SI)
- BlockInfo.addInfo(*SI, FalseStates);
- else
- delete FalseStates;
+ BlockInfo.addInfo(*SI, FalseStates.take());
CurrStates = NULL;
return true;