diff options
author | Ted Kremenek <kremenek@apple.com> | 2008-10-01 00:21:14 +0000 |
---|---|---|
committer | Ted Kremenek <kremenek@apple.com> | 2008-10-01 00:21:14 +0000 |
commit | d331d09e2f65d269b38171e4e8567264dfb47d3e (patch) | |
tree | 6dc91d7716e4c024082f4aa228365c4c8d39f865 /clang/lib | |
parent | 15e6be8cc514c0b79ffe4ddfe18c33a5ac31f68e (diff) | |
download | bcm5719-llvm-d331d09e2f65d269b38171e4e8567264dfb47d3e.tar.gz bcm5719-llvm-d331d09e2f65d269b38171e4e8567264dfb47d3e.zip |
Add a QualType to ConjuredSymbol to represent the type and size of the symbol.
Use this updated interface when invalidating arguments passed by reference; the type of symbol is of the object passed by reference, not the reference itself.
llvm-svn: 56894
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(); } } |