[analyzer] Address Jordan's nitpicks as per code review of r170625.
llvm-svn: 170832
This commit is contained in:
parent
99cafb1db2
commit
9747febba9
|
@ -318,7 +318,7 @@ public:
|
|||
/// \brief Run checkers when pointers escape.
|
||||
///
|
||||
/// This notifies the checkers about pointer escape, which occurs whenever
|
||||
/// the analzyer cannot track the symbol any more. For example, as a
|
||||
/// the analyzer cannot track the symbol any more. For example, as a
|
||||
/// result of assigning a pointer into a global or when it's passed to a
|
||||
/// function call the analyzer cannot model.
|
||||
///
|
||||
|
@ -327,7 +327,8 @@ public:
|
|||
/// \param Call The corresponding CallEvent, if the symbols escape as
|
||||
/// parameters to the given call.
|
||||
/// \returns Checkers can modify the state by returning a new one.
|
||||
ProgramStateRef runCheckersForPointerEscape(ProgramStateRef State,
|
||||
ProgramStateRef
|
||||
runCheckersForPointerEscape(ProgramStateRef State,
|
||||
const InvalidatedSymbols &Escaped,
|
||||
const CallEvent *Call);
|
||||
|
||||
|
|
|
@ -459,9 +459,11 @@ protected:
|
|||
SVal location, SVal Val, bool atDeclInit = false,
|
||||
const ProgramPoint *PP = 0);
|
||||
|
||||
/// Call PointerEscape callback when a value escapes as a result of bind.
|
||||
ProgramStateRef processPointerEscapedOnBind(ProgramStateRef State,
|
||||
SVal Loc, SVal Val);
|
||||
|
||||
/// Call PointerEscape callback when a value escapes as a result of
|
||||
/// region invalidation.
|
||||
ProgramStateRef processPointerEscapedOnInvalidateRegions(
|
||||
ProgramStateRef State,
|
||||
const InvalidatedSymbols *Invalidated,
|
||||
|
|
|
@ -220,17 +220,19 @@ public:
|
|||
///
|
||||
/// \param Regions the set of regions to be invalidated.
|
||||
/// \param E the expression that caused the invalidation.
|
||||
/// \param BlockCount the current basic block count.
|
||||
/// \param ResultsInPointerEscape the flag is set to true when
|
||||
/// the invalidation is due to escape of a symbol (representing a pointer).
|
||||
/// For example, due to it being passed as an argument in a call.
|
||||
/// \param BlockCount The number of times the current basic block has been
|
||||
// visited.
|
||||
/// \param CausedByPointerEscape the flag is set to true when
|
||||
/// the invalidation is due to escape of a symbol (representing a
|
||||
/// pointer). For example, due to it being passed as an argument in a
|
||||
/// call.
|
||||
/// \param IS the set of invalidated symbols.
|
||||
/// \param If Call is non-null, the invalidated regions were directly
|
||||
/// invalidated by the call - as parameters.
|
||||
/// \param Call if non-null, the invalidated regions represent parameters to
|
||||
/// the call and should be considered directly invalidated.
|
||||
ProgramStateRef invalidateRegions(ArrayRef<const MemRegion *> Regions,
|
||||
const Expr *E, unsigned BlockCount,
|
||||
const LocationContext *LCtx,
|
||||
bool ResultsInPointerEscape,
|
||||
bool CausedByPointerEscape,
|
||||
InvalidatedSymbols *IS = 0,
|
||||
const CallEvent *Call = 0) const;
|
||||
|
||||
|
|
|
@ -817,7 +817,7 @@ ProgramStateRef CStringChecker::InvalidateBuffer(CheckerContext &C,
|
|||
// Invalidate this region.
|
||||
const LocationContext *LCtx = C.getPredecessor()->getLocationContext();
|
||||
return state->invalidateRegions(R, E, C.blockCount(), LCtx,
|
||||
/*ResultsInPointerEscape*/ false);
|
||||
/*CausedByPointerEscape*/ false);
|
||||
}
|
||||
|
||||
// If we have a non-region value by chance, just remove the binding.
|
||||
|
|
|
@ -257,7 +257,7 @@ public:
|
|||
/// \brief Called when pointers escape.
|
||||
///
|
||||
/// This notifies the checkers about pointer escape, which occurs whenever
|
||||
/// the analzyer cannot track the symbol any more. For example, as a
|
||||
/// the analyzer cannot track the symbol any more. For example, as a
|
||||
/// result of assigning a pointer into a global or when it's passed to a
|
||||
/// function call the analyzer cannot model.
|
||||
///
|
||||
|
|
|
@ -3179,7 +3179,7 @@ bool RetainCountChecker::evalCall(const CallExpr *CE, CheckerContext &C) const {
|
|||
|
||||
// Invalidate the argument region.
|
||||
state = state->invalidateRegions(ArgRegion, CE, C.blockCount(), LCtx,
|
||||
/*ResultsInPointerEscape*/ false);
|
||||
/*CausedByPointerEscape*/ false);
|
||||
|
||||
// Restore the refcount status of the argument.
|
||||
if (Binding)
|
||||
|
|
|
@ -199,7 +199,7 @@ ProgramStateRef CallEvent::invalidateRegions(unsigned BlockCount,
|
|||
// global variables.
|
||||
return Result->invalidateRegions(RegionsToInvalidate, getOriginExpr(),
|
||||
BlockCount, getLocationContext(),
|
||||
/*ResultsInPointerEscape*/ true,
|
||||
/*CausedByPointerEscape*/ true,
|
||||
/*Symbols=*/0, this);
|
||||
}
|
||||
|
||||
|
|
|
@ -1602,12 +1602,11 @@ public:
|
|||
};
|
||||
} // end anonymous namespace
|
||||
|
||||
/// Call PointerEscape callback when a value escapes as a result of bind.
|
||||
/// A value escapes in three possible cases:
|
||||
/// (1) we are binding to something that is not a memory region.
|
||||
/// (2) we are binding to a memregion that does not have stack storage
|
||||
/// (3) we are binding to a memregion with stack storage that the store
|
||||
/// does not understand.
|
||||
// A value escapes in three possible cases:
|
||||
// (1) We are binding to something that is not a memory region.
|
||||
// (2) We are binding to a MemrRegion that does not have stack storage.
|
||||
// (3) We are binding to a MemRegion with stack storage that the store
|
||||
// does not understand.
|
||||
ProgramStateRef ExprEngine::processPointerEscapedOnBind(ProgramStateRef State,
|
||||
SVal Loc, SVal Val) {
|
||||
// Are we storing to something that causes the value to "escape"?
|
||||
|
@ -1647,8 +1646,6 @@ ProgramStateRef ExprEngine::processPointerEscapedOnBind(ProgramStateRef State,
|
|||
return State;
|
||||
}
|
||||
|
||||
/// Call PointerEscape callback when a value escapes as a result of
|
||||
/// region invalidation.
|
||||
ProgramStateRef
|
||||
ExprEngine::processPointerEscapedOnInvalidateRegions(ProgramStateRef State,
|
||||
const InvalidatedSymbols *Invalidated,
|
||||
|
|
|
@ -144,16 +144,16 @@ ProgramStateRef
|
|||
ProgramState::invalidateRegions(ArrayRef<const MemRegion *> Regions,
|
||||
const Expr *E, unsigned Count,
|
||||
const LocationContext *LCtx,
|
||||
bool ResultsInPointerEscape,
|
||||
bool CausedByPointerEscape,
|
||||
InvalidatedSymbols *IS,
|
||||
const CallEvent *Call) const {
|
||||
if (!IS) {
|
||||
InvalidatedSymbols invalidated;
|
||||
return invalidateRegionsImpl(Regions, E, Count, LCtx,
|
||||
ResultsInPointerEscape,
|
||||
CausedByPointerEscape,
|
||||
invalidated, Call);
|
||||
}
|
||||
return invalidateRegionsImpl(Regions, E, Count, LCtx, ResultsInPointerEscape,
|
||||
return invalidateRegionsImpl(Regions, E, Count, LCtx, CausedByPointerEscape,
|
||||
*IS, Call);
|
||||
}
|
||||
|
||||
|
@ -161,7 +161,7 @@ ProgramStateRef
|
|||
ProgramState::invalidateRegionsImpl(ArrayRef<const MemRegion *> Regions,
|
||||
const Expr *E, unsigned Count,
|
||||
const LocationContext *LCtx,
|
||||
bool ResultsInPointerEscape,
|
||||
bool CausedByPointerEscape,
|
||||
InvalidatedSymbols &IS,
|
||||
const CallEvent *Call) const {
|
||||
ProgramStateManager &Mgr = getStateManager();
|
||||
|
@ -175,7 +175,7 @@ ProgramState::invalidateRegionsImpl(ArrayRef<const MemRegion *> Regions,
|
|||
|
||||
ProgramStateRef newState = makeWithStore(newStore);
|
||||
|
||||
if (ResultsInPointerEscape)
|
||||
if (CausedByPointerEscape)
|
||||
newState = Eng->processPointerEscapedOnInvalidateRegions(newState,
|
||||
&IS, Regions, Invalidated, Call);
|
||||
|
||||
|
|
Loading…
Reference in New Issue