Skip to content

Commit

Permalink
[analyzer][NFC] Uplift checkers after D126801
Browse files Browse the repository at this point in the history
Reviewed By: martong

Differential Revision: https://reviews.llvm.org/D126802
  • Loading branch information
Balazs Benics committed Jun 2, 2022
1 parent 33ca5a4 commit cf1f1b7
Show file tree
Hide file tree
Showing 2 changed files with 10 additions and 15 deletions.
18 changes: 6 additions & 12 deletions clang/lib/StaticAnalyzer/Checkers/ErrnoModeling.cpp
Expand Up @@ -68,13 +68,7 @@ class ErrnoModeling

/// Store a MemRegion that contains the 'errno' integer value.
/// The value is null if the 'errno' value was not recognized in the AST.
REGISTER_TRAIT_WITH_PROGRAMSTATE(ErrnoRegion, const void *)

/// An internal function accessing the errno region.
/// Returns null if there isn't any associated memory region.
static const MemRegion *getErrnoRegion(ProgramStateRef State) {
return reinterpret_cast<const MemRegion *>(State->get<ErrnoRegion>());
}
REGISTER_TRAIT_WITH_PROGRAMSTATE(ErrnoRegion, const MemRegion *)

/// Search for a variable called "errno" in the AST.
/// Return nullptr if not found.
Expand Down Expand Up @@ -185,7 +179,7 @@ bool ErrnoModeling::evalCall(const CallEvent &Call, CheckerContext &C) const {
if (ErrnoLocationCalls.contains(Call)) {
ProgramStateRef State = C.getState();

const MemRegion *ErrnoR = getErrnoRegion(State);
const MemRegion *ErrnoR = State->get<ErrnoRegion>();
if (!ErrnoR)
return false;

Expand All @@ -201,7 +195,7 @@ bool ErrnoModeling::evalCall(const CallEvent &Call, CheckerContext &C) const {
void ErrnoModeling::checkLiveSymbols(ProgramStateRef State,
SymbolReaper &SR) const {
// The special errno region should never garbage collected.
if (const auto *ErrnoR = getErrnoRegion(State))
if (const MemRegion *ErrnoR = State->get<ErrnoRegion>())
SR.markLive(ErrnoR);
}

Expand All @@ -210,7 +204,7 @@ namespace ento {
namespace errno_modeling {

Optional<SVal> getErrnoValue(ProgramStateRef State) {
const MemRegion *ErrnoR = getErrnoRegion(State);
const MemRegion *ErrnoR = State->get<ErrnoRegion>();
if (!ErrnoR)
return {};
QualType IntTy = State->getAnalysisManager().getASTContext().IntTy;
Expand All @@ -219,15 +213,15 @@ Optional<SVal> getErrnoValue(ProgramStateRef State) {

ProgramStateRef setErrnoValue(ProgramStateRef State,
const LocationContext *LCtx, SVal Value) {
const MemRegion *ErrnoR = getErrnoRegion(State);
const MemRegion *ErrnoR = State->get<ErrnoRegion>();
if (!ErrnoR)
return State;
return State->bindLoc(loc::MemRegionVal{ErrnoR}, Value, LCtx);
}

ProgramStateRef setErrnoValue(ProgramStateRef State, CheckerContext &C,
uint64_t Value) {
const MemRegion *ErrnoR = getErrnoRegion(State);
const MemRegion *ErrnoR = State->get<ErrnoRegion>();
if (!ErrnoR)
return State;
return State->bindLoc(
Expand Down
7 changes: 4 additions & 3 deletions clang/lib/StaticAnalyzer/Checkers/ObjCSelfInitChecker.cpp
Expand Up @@ -101,7 +101,7 @@ REGISTER_TRAIT_WITH_PROGRAMSTATE(CalledInit, bool)
/// 'self' contains. This keeps the "self flags" assigned to the 'self'
/// object before the call so we can assign them to the new object that 'self'
/// points to after the call.
REGISTER_TRAIT_WITH_PROGRAMSTATE(PreCallSelfFlags, unsigned)
REGISTER_TRAIT_WITH_PROGRAMSTATE(PreCallSelfFlags, SelfFlagEnum)

static SelfFlagEnum getSelfFlags(SVal val, ProgramStateRef state) {
if (SymbolRef sym = val.getAsSymbol())
Expand Down Expand Up @@ -251,11 +251,12 @@ void ObjCSelfInitChecker::checkPreCall(const CallEvent &CE,
for (unsigned i = 0; i < NumArgs; ++i) {
SVal argV = CE.getArgSVal(i);
if (isSelfVar(argV, C)) {
unsigned selfFlags = getSelfFlags(state->getSVal(argV.castAs<Loc>()), C);
SelfFlagEnum selfFlags =
getSelfFlags(state->getSVal(argV.castAs<Loc>()), C);
C.addTransition(state->set<PreCallSelfFlags>(selfFlags));
return;
} else if (hasSelfFlag(argV, SelfFlag_Self, C)) {
unsigned selfFlags = getSelfFlags(argV, C);
SelfFlagEnum selfFlags = getSelfFlags(argV, C);
C.addTransition(state->set<PreCallSelfFlags>(selfFlags));
return;
}
Expand Down

0 comments on commit cf1f1b7

Please sign in to comment.