diff options
author | Ted Kremenek <kremenek@apple.com> | 2009-04-08 18:51:08 +0000 |
---|---|---|
committer | Ted Kremenek <kremenek@apple.com> | 2009-04-08 18:51:08 +0000 |
commit | 5451c60f5a0d663ada3f4e75564a5c5eec50cfd9 (patch) | |
tree | e07748e09ed69c93419c58e330bd12a512043081 /clang/lib/Analysis/SVals.cpp | |
parent | d43aaad1b1347ce7fdc2b728f735fb482bd50bdf (diff) | |
download | bcm5719-llvm-5451c60f5a0d663ada3f4e75564a5c5eec50cfd9.tar.gz bcm5719-llvm-5451c60f5a0d663ada3f4e75564a5c5eec50cfd9.zip |
Enhance analyzer reasoning about sending messages to nil. A nil receiver returns 0 for scalars of size <= sizeof(void*).
llvm-svn: 68629
Diffstat (limited to 'clang/lib/Analysis/SVals.cpp')
-rw-r--r-- | clang/lib/Analysis/SVals.cpp | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/clang/lib/Analysis/SVals.cpp b/clang/lib/Analysis/SVals.cpp index b642857c502..c5900b30cd8 100644 --- a/clang/lib/Analysis/SVals.cpp +++ b/clang/lib/Analysis/SVals.cpp @@ -202,6 +202,22 @@ SVal loc::ConcreteInt::EvalBinOp(BasicValueFactory& BasicVals, } //===----------------------------------------------------------------------===// +// Utility methods for constructing SVals. +//===----------------------------------------------------------------------===// + +SVal SVal::MakeZero(BasicValueFactory &BasicVals, QualType T) { + if (Loc::IsLocType(T)) + return Loc::MakeNull(BasicVals); + + if (T->isIntegerType()) + return NonLoc::MakeVal(BasicVals, 0, T); + + // FIXME: Handle floats. + // FIXME: Handle structs. + return UnknownVal(); +} + +//===----------------------------------------------------------------------===// // Utility methods for constructing Non-Locs. //===----------------------------------------------------------------------===// @@ -314,6 +330,10 @@ Loc Loc::MakeVal(AddrLabelExpr* E) { return loc::GotoLabel(E->getLabel()); } Loc Loc::MakeVal(SymbolRef sym) { return loc::SymbolVal(sym); } +Loc Loc::MakeNull(BasicValueFactory &BasicVals) { + return loc::ConcreteInt(BasicVals.getZeroWithPtrWidth()); +} + //===----------------------------------------------------------------------===// // Pretty-Printing. //===----------------------------------------------------------------------===// |