[PATCH] D74973: [analyzer] StdLibraryFunctionsChecker refactor w/ inheritance
Gabor Marton via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Mon Feb 24 06:32:00 PST 2020
martong added a comment.
> Is really more kind of constraint needed than range constraint?
Yes, there are other constraints I am planning to implement:
- Size requirements E.g.: asctime_s(char *buf, rsize_t bufsz, const struct tm *time_ptr); `buf` size must be at least `bufsz`.
- Not-null
- Not-uninitalized
- Not-tainted
> A non-null can be represented as range constraint too.
Actually, to implement that we should have a branch in all `ValueRange::apply*` functions that handles `Loc` SVals. Unfortunately, a pointer cannot be handled as `NonLoc`, and the current Range based implementation handles `NonLoc`s only.
> The compare constraint is used only for the return value for which a special `ReturnConstraint` can be used to handle the return value not like a normal argument (and then the `Ret` special value is not needed).
The Compare constraint is already forced into a Range "concept" whereas it has nothing to do with ranges. By handling compare constraints separately, we attach a single responsibility to each constraint class, instead of having a monolithic god constraint class. Take a look at this coerced data representation that we have today in ValueRange:
BinaryOperator::Opcode getOpcode() const {
assert(Kind == ComparesToArgument);
assert(Args.size() == 1);
BinaryOperator::Opcode Op =
static_cast<BinaryOperator::Opcode>(Args[0].first);
assert(BinaryOperator::isComparisonOp(Op) &&
"Only comparison ops are supported for ComparesToArgument");
return Op;
}
Subclasses are a good way to get rid of this not-so-intuitive structure and assertions.
> Or are there sometimes relations between arguments of a function?
I can't recall now a direct relation by heart.
But there could be more subtle indirect relations, see the size requirements above. (Thought I'd rather implement that in a separate constraint class.)
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D74973/new/
https://reviews.llvm.org/D74973
More information about the cfe-commits
mailing list