[analyzer] Address Jordan's nitpicks as per code review of r170625.

llvm-svn: 170832
This commit is contained in:
Anna Zaks 2012-12-21 01:50:14 +00:00
parent 99cafb1db2
commit 9747febba9
9 changed files with 38 additions and 36 deletions

View File

@ -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);

View File

@ -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,

View File

@ -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;

View File

@ -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.

View File

@ -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.
///

View File

@ -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)

View File

@ -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);
}

View File

@ -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,

View File

@ -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);