diff options
author | Ted Kremenek <kremenek@apple.com> | 2008-04-22 21:10:18 +0000 |
---|---|---|
committer | Ted Kremenek <kremenek@apple.com> | 2008-04-22 21:10:18 +0000 |
commit | 0fe33bc94a822e315585e5cde1964d3c3b9052f9 (patch) | |
tree | 37a7aaad6e07752e567ddef1b23ca47b3ec7bbcb /lib/Analysis/RValues.cpp | |
parent | 9fdf9c6d3530bb85f3166e6460d841e2ff8e1a2c (diff) |
Added "nonlval::LValAsInteger" to represent abstract LVals casted to integers, allowing us to track lvals when they are casted back to pointers.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@50108 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Analysis/RValues.cpp')
-rw-r--r-- | lib/Analysis/RValues.cpp | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/lib/Analysis/RValues.cpp b/lib/Analysis/RValues.cpp index 2e44e7086c..86f5ac96fd 100644 --- a/lib/Analysis/RValues.cpp +++ b/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."); |