[PATCH] D158813: [analyzer] MPIChecker: MPI_Waitall should respect count arg
Ding Fei via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Fri Aug 25 09:42:54 PDT 2023
danix800 added inline comments.
================
Comment at: clang/lib/StaticAnalyzer/Checkers/MPI-Checker/MPIChecker.cpp:192-198
+ SVal Count = CE.getArgSVal(0);
+ for (size_t i = 0; i < ArrSize; ++i) {
+ const NonLoc Idx = Ctx.getSValBuilder().makeArrayIndex(i);
+ auto CountReached = SVB.evalBinOp(State, BO_GE, Idx, Count, ASTCtx.BoolTy)
+ .getAs<DefinedOrUnknownSVal>();
+ if (CountReached && State->assume(*CountReached, true))
+ break;
----------------
steakhal wrote:
> It's suspicious to me to compare stuff in the symbolic domain, such as `Idx >= Count` here.
> And let me elaborate on why I think so.
>
> I'd assume that the first argument of `MPI_Waitall` is usually just a number literal, thus it's gonna be a ConcreteInt, so now we have `Count`.
> The `Index` you just created, obviously is just a ConcreteInt.
> After this, we could simply unwrap them and do the comparison without doing it in the symbolic domain.
>
> ---
>
> As a sidenote, `State->assume(*CountReached, true)` would return a state in two cases:
> 1) We can prove that the assumption holds.
> 2) We cannot disprove the assumption, thus it might hold, so we assume it holds.
> This is probably not what you wanted in the first place, but it's probably irrelelevant anyway.
I'll restrict this checker to handle `ConcreteInt` count only.
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D158813/new/
https://reviews.llvm.org/D158813
More information about the cfe-commits
mailing list