summaryrefslogtreecommitdiffstats
path: root/clang/lib/Analysis/RValues.cpp
diff options
context:
space:
mode:
authorTed Kremenek <kremenek@apple.com>2008-04-22 21:10:18 +0000
committerTed Kremenek <kremenek@apple.com>2008-04-22 21:10:18 +0000
commiteccf3e582114611d2b6c1915f709ddc6f6b7943e (patch)
treed7248cd192d9a8281effbf8912a71dfb840784f6 /clang/lib/Analysis/RValues.cpp
parentd5425e8f8db5d3ea7bdc949d6333ca5c2d91751d (diff)
downloadbcm5719-llvm-eccf3e582114611d2b6c1915f709ddc6f6b7943e.tar.gz
bcm5719-llvm-eccf3e582114611d2b6c1915f709ddc6f6b7943e.zip
Added "nonlval::LValAsInteger" to represent abstract LVals casted to integers, allowing us to track lvals when they are casted back to pointers.
llvm-svn: 50108
Diffstat (limited to 'clang/lib/Analysis/RValues.cpp')
-rw-r--r--clang/lib/Analysis/RValues.cpp13
1 files changed, 12 insertions, 1 deletions
diff --git a/clang/lib/Analysis/RValues.cpp b/clang/lib/Analysis/RValues.cpp
index 2e44e7086ca..86f5ac96fd8 100644
--- a/clang/lib/Analysis/RValues.cpp
+++ b/clang/lib/Analysis/RValues.cpp
@@ -35,6 +35,10 @@ RVal::symbol_iterator RVal::symbol_begin() const {
return (symbol_iterator) &C.getSymbol();
}
+ else if (isa<nonlval::LValAsInteger>(this)) {
+ const nonlval::LValAsInteger& V = cast<nonlval::LValAsInteger>(*this);
+ return V.getPersistentLVal().symbol_begin();
+ }
return NULL;
}
@@ -345,7 +349,14 @@ void NonLVal::print(std::ostream& Out) const {
Out << 'U';
break;
- }
+ }
+
+ case nonlval::LValAsIntegerKind: {
+ const nonlval::LValAsInteger& C = *cast<nonlval::LValAsInteger>(this);
+ C.getLVal().print(Out);
+ Out << " [as " << C.getNumBits() << " bit integer]";
+ break;
+ }
default:
assert (false && "Pretty-printed not implemented for this NonLVal.");
OpenPOWER on IntegriCloud