diff options
Diffstat (limited to 'clang/lib')
-rw-r--r-- | clang/lib/Analysis/CFRefCount.cpp | 4 | ||||
-rw-r--r-- | clang/lib/Analysis/GRExprEngine.cpp | 2 | ||||
-rw-r--r-- | clang/lib/Analysis/SymbolManager.cpp | 8 |
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(); } } |