~~Block A is a control dependency of block B, is A dominates B but B doesn't post dominate A.~~
In detail:I intend to improve the analyzer's bug reports by tracking condition expressions.
* Create the `CFGControlDependencyTree`, which in fact stores both a dominator and a post dominator tree```lang=cpp
* Add the new debug checker `debug.DumpControlDependencies`01 bool b = messyComputation();
* Add both lit and unit tests.
Now I'm not sure whether this is the optimal approach -- In fact I'm fairly certain that this isn't the most efficient way of calculating control dependencies02 int i = 0;
03 if (val) // control dependency of the bug site, however,let's explain why we assume val to be true
04 10 / i; I'm not that concerned with performance just yet.// warn: division by zero
I'll detail this heuristic in the followup patch, This will be used to improve bug reports the static analyzer emits, and if this turns out to be useful, I might look enhancing this further.strictly related to this one however:
* Create the new `ControlDependencyCalculator` class that uses `llvm::IDFCalculator` to (lazily) calculate control dependencies for Clang's CFG.
* A new debug checker `debug.DumpControlDependencies` is added for lit tests
* Add unittests