forked from OSchip/llvm-project
parent
d1dee7e71a
commit
f5448561ed
|
|
@ -1576,47 +1576,6 @@ static bool EvalOSAtomic(ExplodedNodeSet& Dst,
|
|||
// Transfer function: Function calls.
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
bool GRExprEngine::EvalBuiltinFunction(const FunctionDecl *FD, CallExpr *CE,
|
||||
ExplodedNode *Pred,
|
||||
ExplodedNodeSet &Dst) {
|
||||
if (!FD)
|
||||
return false;
|
||||
|
||||
unsigned id = FD->getBuiltinID();
|
||||
if (!id)
|
||||
return false;
|
||||
|
||||
const GRState *state = Pred->getState();
|
||||
|
||||
switch (id) {
|
||||
case Builtin::BI__builtin_expect: {
|
||||
// For __builtin_expect, just return the value of the subexpression.
|
||||
assert (CE->arg_begin() != CE->arg_end());
|
||||
SVal X = state->getSVal(*(CE->arg_begin()));
|
||||
MakeNode(Dst, CE, Pred, state->BindExpr(CE, X));
|
||||
return true;
|
||||
}
|
||||
|
||||
case Builtin::BI__builtin_alloca: {
|
||||
// FIXME: Refactor into StoreManager itself?
|
||||
MemRegionManager& RM = getStateManager().getRegionManager();
|
||||
const MemRegion* R =
|
||||
RM.getAllocaRegion(CE, Builder->getCurrentBlockCount(),
|
||||
Pred->getLocationContext());
|
||||
|
||||
// Set the extent of the region in bytes. This enables us to use the
|
||||
// SVal of the argument directly. If we save the extent in bits, we
|
||||
// cannot represent values like symbol*8.
|
||||
SVal Extent = state->getSVal(*(CE->arg_begin()));
|
||||
state = getStoreManager().setExtent(state, R, Extent);
|
||||
MakeNode(Dst, CE, Pred, state->BindExpr(CE, loc::MemRegionVal(R)));
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
void GRExprEngine::VisitCall(CallExpr* CE, ExplodedNode* Pred,
|
||||
CallExpr::arg_iterator AI,
|
||||
CallExpr::arg_iterator AE,
|
||||
|
|
|
|||
Loading…
Reference in New Issue