summaryrefslogtreecommitdiffstats
path: root/clang/lib/Analysis/RValues.cpp
diff options
context:
space:
mode:
authorTed Kremenek <kremenek@apple.com>2008-04-29 22:17:41 +0000
committerTed Kremenek <kremenek@apple.com>2008-04-29 22:17:41 +0000
commit0d2ccffa83b60d6745d1390127373a394321e28a (patch)
tree6073c0e9876629c9365cb37a67f2c03b0937a458 /clang/lib/Analysis/RValues.cpp
parent663f5fccd4332b14c853f8b5d7cd16c60623a012 (diff)
downloadbcm5719-llvm-0d2ccffa83b60d6745d1390127373a394321e28a.tar.gz
bcm5719-llvm-0d2ccffa83b60d6745d1390127373a394321e28a.zip
Added lval::FieldOffset, which represents symbolic lvalues for field offsets from other Lvalues.
This removes the failure in null-deref-ps.c (test suite). llvm-svn: 50449
Diffstat (limited to 'clang/lib/Analysis/RValues.cpp')
-rw-r--r--clang/lib/Analysis/RValues.cpp15
1 files changed, 14 insertions, 1 deletions
diff --git a/clang/lib/Analysis/RValues.cpp b/clang/lib/Analysis/RValues.cpp
index 5e161f34a5c..ab1cf6a4207 100644
--- a/clang/lib/Analysis/RValues.cpp
+++ b/clang/lib/Analysis/RValues.cpp
@@ -25,6 +25,9 @@ using llvm::APSInt;
//===----------------------------------------------------------------------===//
RVal::symbol_iterator RVal::symbol_begin() const {
+
+ // FIXME: This is a rat's nest. Cleanup.
+
if (isa<lval::SymbolVal>(this))
return (symbol_iterator) (&Data);
else if (isa<nonlval::SymbolVal>(this))
@@ -39,7 +42,10 @@ RVal::symbol_iterator RVal::symbol_begin() const {
const nonlval::LValAsInteger& V = cast<nonlval::LValAsInteger>(*this);
return V.getPersistentLVal().symbol_begin();
}
-
+ else if (isa<lval::FieldOffset>(this)) {
+ const lval::FieldOffset& V = cast<lval::FieldOffset>(*this);
+ return V.getPersistentBase().symbol_begin();
+ }
return NULL;
}
@@ -402,6 +408,13 @@ void LVal::print(std::ostream& Out) const {
<< "\"";
break;
+ case lval::FieldOffsetKind: {
+ const lval::FieldOffset& C = *cast<lval::FieldOffset>(this);
+ C.getBase().print(Out);
+ Out << "." << C.getFieldDecl()->getName() << " (field LVal)";
+ break;
+ }
+
default:
assert (false && "Pretty-printing not implemented for this LVal.");
break;
OpenPOWER on IntegriCloud