|
@@ -80,43 +80,17 @@ SVal Environment::getSVal(const EnvironmentEntry &Entry,
|
|
llvm_unreachable("Should have been handled by ignoreTransparentExprs");
|
|
llvm_unreachable("Should have been handled by ignoreTransparentExprs");
|
|
|
|
|
|
case Stmt::AddrLabelExprClass:
|
|
case Stmt::AddrLabelExprClass:
|
|
- return svalBuilder.makeLoc(cast<AddrLabelExpr>(S));
|
|
|
|
-
|
|
|
|
- case Stmt::CharacterLiteralClass: {
|
|
|
|
- const CharacterLiteral *C = cast<CharacterLiteral>(S);
|
|
|
|
- return svalBuilder.makeIntVal(C->getValue(), C->getType());
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
|
|
+ case Stmt::CharacterLiteralClass:
|
|
case Stmt::CXXBoolLiteralExprClass:
|
|
case Stmt::CXXBoolLiteralExprClass:
|
|
- return svalBuilder.makeBoolVal(cast<CXXBoolLiteralExpr>(S));
|
|
|
|
-
|
|
|
|
case Stmt::CXXScalarValueInitExprClass:
|
|
case Stmt::CXXScalarValueInitExprClass:
|
|
- case Stmt::ImplicitValueInitExprClass: {
|
|
|
|
- QualType Ty = cast<Expr>(S)->getType();
|
|
|
|
- return svalBuilder.makeZeroVal(Ty);
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
|
|
+ case Stmt::ImplicitValueInitExprClass:
|
|
case Stmt::IntegerLiteralClass:
|
|
case Stmt::IntegerLiteralClass:
|
|
- return svalBuilder.makeIntVal(cast<IntegerLiteral>(S));
|
|
|
|
-
|
|
|
|
case Stmt::ObjCBoolLiteralExprClass:
|
|
case Stmt::ObjCBoolLiteralExprClass:
|
|
- return svalBuilder.makeBoolVal(cast<ObjCBoolLiteralExpr>(S));
|
|
|
|
-
|
|
|
|
- // For special C0xx nullptr case, make a null pointer SVal.
|
|
|
|
case Stmt::CXXNullPtrLiteralExprClass:
|
|
case Stmt::CXXNullPtrLiteralExprClass:
|
|
- return svalBuilder.makeNull();
|
|
|
|
-
|
|
|
|
- case Stmt::ObjCStringLiteralClass: {
|
|
|
|
- MemRegionManager &MRMgr = svalBuilder.getRegionManager();
|
|
|
|
- const ObjCStringLiteral *SL = cast<ObjCStringLiteral>(S);
|
|
|
|
- return svalBuilder.makeLoc(MRMgr.getObjCStringRegion(SL));
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- case Stmt::StringLiteralClass: {
|
|
|
|
- MemRegionManager &MRMgr = svalBuilder.getRegionManager();
|
|
|
|
- const StringLiteral *SL = cast<StringLiteral>(S);
|
|
|
|
- return svalBuilder.makeLoc(MRMgr.getStringRegion(SL));
|
|
|
|
- }
|
|
|
|
|
|
+ case Stmt::ObjCStringLiteralClass:
|
|
|
|
+ case Stmt::StringLiteralClass:
|
|
|
|
+ // Known constants; defer to SValBuilder.
|
|
|
|
+ return svalBuilder.getConstantVal(cast<Expr>(S)).getValue();
|
|
|
|
|
|
case Stmt::ReturnStmtClass: {
|
|
case Stmt::ReturnStmtClass: {
|
|
const ReturnStmt *RS = cast<ReturnStmt>(S);
|
|
const ReturnStmt *RS = cast<ReturnStmt>(S);
|
|
@@ -127,10 +101,8 @@ SVal Environment::getSVal(const EnvironmentEntry &Entry,
|
|
|
|
|
|
// Handle all other Stmt* using a lookup.
|
|
// Handle all other Stmt* using a lookup.
|
|
default:
|
|
default:
|
|
- break;
|
|
|
|
|
|
+ return lookupExpr(EnvironmentEntry(S, LCtx));
|
|
}
|
|
}
|
|
-
|
|
|
|
- return lookupExpr(EnvironmentEntry(S, LCtx));
|
|
|
|
}
|
|
}
|
|
|
|
|
|
Environment EnvironmentManager::bindExpr(Environment Env,
|
|
Environment EnvironmentManager::bindExpr(Environment Env,
|