I'm currently working on a GSoC project that aims to improve the the bug reports of the analyzer. The main heuristic I plan to use is to explain values that are a control dependency of the bug location better.
01 bool b = messyComputation();
02 int i = 0;
03 if (val) // control dependency of the bug site, let's explain why we assume val to be true
04 10 / i; // warn: division by zero
Because of this, I'd like to generalize `IDFCalculator` so that I could use it for Clang's CFG: D62883.
* Rename `IDFCalculator` to `IDFCalculatorBase`, make it take a general CFG node type as a template argument rather then strictly `BasicBlock` (but preserve `ForwardIDFCalculator` and `ReverseIDFCalculator`)
* Move `IDFCalculatorBase` from `llvm/include/llvm/Analysis` to `llvm/include/llvm/Support` (but leave the `BasicBlock` variants in `llvm/include/llvm/Analysis`)
* clang-format the file since this patch messes up git blame anyways
* Change `typedef` to `using`
* Practically revert D50675. This was done because `GraphDiff` is only specialized for `BasicBlock`, and wouldn't be used for `clang::CFGBlcok`. Interestingly, it wasn't even used at all: In D45299, it was used at a certain point (https://reviews.llvm.org/D45299?id=160698) but was ultimately removed. Is this okay?
* Add the new method `IDFCalculatorBase::getChildren`. This is important because I'll have to specialize it for Clang's CFG to filter out nullpointer successors, similarly to D62507.