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



_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to