[PATCH] D158295: [NFC][clang][analyzer] Avoid potential dereferencing of null pointer value
Balázs Benics via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Fri Aug 18 11:11:25 PDT 2023
steakhal requested changes to this revision.
steakhal added a comment.
This revision now requires changes to proceed.
Thanks for the PR.
I went over the code and concluded that it can never be null.
However, the code could be improved, while making this explicit.
================
Comment at: clang/lib/StaticAnalyzer/Checkers/RetainCountChecker/RetainCountChecker.cpp:1416-1433
// Update counts from autorelease pools
for (const auto &I: state->get<RefBindings>()) {
SymbolRef Sym = I.first;
if (SymReaper.isDead(Sym)) {
static CheckerProgramPointTag Tag(this, "DeadSymbolAutorelease");
const RefVal &V = I.second;
state = handleAutoreleaseCounts(state, Pred, &Tag, C, Sym, V);
----------------
So `state->get<RefBindings>()` returns a map, and we iterate over the Key&Val pairs of that map.
```
const RefVal *getRefBinding(ProgramStateRef State, SymbolRef Sym) {
return State->get<RefBindings>(Sym);
}
```
So, this just returns the associated value with `Sym` in the map.
Instead of this lookup ,we really should have just used the `I.second`.
Now the question is, could have map a `Sym` to a null pointer?
```
static ProgramStateRef setRefBinding(ProgramStateRef State, SymbolRef Sym,
RefVal Val) {
assert(Sym != nullptr);
return State->set<RefBindings>(Sym, Val);
}
```
Nop. It's never supposed to be null.
---
Could you please just decompose in the loop with a structured-binding to `auto [Sym, V]` and use `V` instead of `T`?
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D158295/new/
https://reviews.llvm.org/D158295
More information about the cfe-commits
mailing list