[PATCH] D72705: [analyzer] Added new checker 'alpha.unix.ErrorReturn'.
Kristóf Umann via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Fri Jul 10 03:47:35 PDT 2020
Szelethus added a comment.
In D72705#2143405 <https://reviews.llvm.org/D72705#2143405>, @balazske wrote:
> We must check on every execution path that a specific condition on a value is satisfied (or: find one where the condition is not satisfied). This would be the most simple form of this checker. This can be done with the path sensitive check and `checkDeadSymbols`. If the symbol becomes dead with unsatisfied condition a warning is emitted. The "condition" is a syntactic-like check that looks for code like "`X != EOF`". This is probably done best by using `StmtVisitor` if a value is evaluated (at assignment or condition in `if` or other statements), different than the current form.
Pathsensitivity is about checking **one** specific path of execution with rather great precision, we really need dataflow to argue about **all** paths. Syntactic checking and pathsensitive analysis fundamentally lacks a lot of information that dataflow by design has. With that said, asking whether a symbol is dead is a part of liveness analysis which is a dataflow algorithm, but what that interface lacks is //why// a symbol is live/dead. I think what you need here is a set of reads reachable from the return value point. For this example, you are interested in which reads are reachable from b9, and you could analyze them one-by-one (which could be done syntactically at that point):
c = fgetc(fd); // [b9]
if (c == '+' || c == '*' || c == '|' || c == '>' || c == '@' || c == EOF || c == '\n') { [b1] }
// [b8] [b7] [b6] [b5] [b4] [b3] [b2]
// [b0 (EXIT)]
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D72705/new/
https://reviews.llvm.org/D72705
More information about the cfe-commits
mailing list