Xazax-hun wrote:

Sorry for all the false starts, it looks like I mislead you a couple times 
generating some extra work on your end. This is sometimes part of the process 
to come up with the best possible fix though. I realized `isInevitablySinking` 
is not the right fix. Consider the following code:

```
int *p = cond ? q : r;
throw 5;
```

Here, all nodes post-dominated by the `throw` will be "inevitably sinking".

I think the right fix really is just checking if there is an edge between the 
CFG nodes representing the whole ternary and the branches. 

The whole flow of fact generation is driven by the CFG edges. But in case of 
ternary, we occasionally end up visiting an AST node that belongs to a 
different CFG node even if there is no corresponding CFG edge. This is the root 
cause of both problem 1 and 2 that I mentioned earlier. So I think the right 
solution is to just check for the presence of those edges.

https://github.com/llvm/llvm-project/pull/190345
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to