summaryrefslogtreecommitdiffstats
path: root/clang/lib
diff options
context:
space:
mode:
Diffstat (limited to 'clang/lib')
-rw-r--r--clang/lib/Analysis/CFRefCount.cpp4
-rw-r--r--clang/lib/Analysis/GRExprEngine.cpp2
-rw-r--r--clang/lib/Analysis/SymbolManager.cpp8
3 files changed, 9 insertions, 5 deletions
diff --git a/clang/lib/Analysis/CFRefCount.cpp b/clang/lib/Analysis/CFRefCount.cpp
index adbeff99158..733cad18acf 100644
--- a/clang/lib/Analysis/CFRefCount.cpp
+++ b/clang/lib/Analysis/CFRefCount.cpp
@@ -1515,7 +1515,9 @@ void CFRefCount::EvalSummary(ExplodedNodeSet<GRState>& Dst,
// Set the value of the variable to be a conjured symbol.
unsigned Count = Builder.getCurrentBlockCount();
- SymbolID NewSym = Eng.getSymbolManager().getConjuredSymbol(*I, Count);
+ SymbolID NewSym =
+ Eng.getSymbolManager().getConjuredSymbol(*I, DV->getDecl()->getType(),
+ Count);
state = state.SetRVal(*DV,
LVal::IsLValType(DV->getDecl()->getType())
diff --git a/clang/lib/Analysis/GRExprEngine.cpp b/clang/lib/Analysis/GRExprEngine.cpp
index 40c2b6507b9..41bf98933ef 100644
--- a/clang/lib/Analysis/GRExprEngine.cpp
+++ b/clang/lib/Analysis/GRExprEngine.cpp
@@ -1702,10 +1702,12 @@ void GRExprEngine::VisitUnaryOperator(UnaryOperator* U, NodeTy* Pred,
break;
case UnaryOperator::Not:
+ // FIXME: Do we need to handle promotions?
St = SetRVal(St, U, EvalComplement(cast<NonLVal>(V)));
break;
case UnaryOperator::Minus:
+ // FIXME: Do we need to handle promotions?
St = SetRVal(St, U, EvalMinus(U, cast<NonLVal>(V)));
break;
diff --git a/clang/lib/Analysis/SymbolManager.cpp b/clang/lib/Analysis/SymbolManager.cpp
index beb4379f99a..24d2ed72530 100644
--- a/clang/lib/Analysis/SymbolManager.cpp
+++ b/clang/lib/Analysis/SymbolManager.cpp
@@ -73,10 +73,10 @@ SymbolID SymbolManager::getContentsOfSymbol(SymbolID sym) {
return SymbolCounter++;
}
-SymbolID SymbolManager::getConjuredSymbol(Expr* E, unsigned Count) {
+SymbolID SymbolManager::getConjuredSymbol(Expr* E, QualType T, unsigned Count) {
llvm::FoldingSetNodeID profile;
- SymbolConjured::Profile(profile, E, Count);
+ SymbolConjured::Profile(profile, E, T, Count);
void* InsertPos;
SymbolData* SD = DataSet.FindNodeOrInsertPos(profile, InsertPos);
@@ -85,7 +85,7 @@ SymbolID SymbolManager::getConjuredSymbol(Expr* E, unsigned Count) {
return SD->getSymbol();
SD = (SymbolData*) BPAlloc.Allocate<SymbolConjured>();
- new (SD) SymbolConjured(SymbolCounter, E, Count);
+ new (SD) SymbolConjured(SymbolCounter, E, T, Count);
DataSet.InsertNode(SD, InsertPos);
DataMap[SymbolCounter] = SD;
@@ -118,7 +118,7 @@ QualType SymbolData::getType(const SymbolManager& SymMgr) const {
}
case ConjuredKind:
- return cast<SymbolConjured>(this)->getExpr()->getType();
+ return cast<SymbolConjured>(this)->getType();
}
}
OpenPOWER on IntegriCloud