This patch attempts to resolve a FIXME in DataflowEnvironment.cpp about merging BoolValues when the two flow conditions are not mutually exclusive. The issue here is that we are using the truth value of each flow condition as a proxy for the idea of whether or not we took that branch, which breaks down on backedges.
To try to resolve the issue, this patch creates two additional AtomicBoolValues to directly represent which branch we took, and uses those directly within mergeDistinctValues. As currently written, this doesn't quite work: it compiles, but 20 tests from ClangAnalysisFlowSensitiveTests fail. This patch is therefore simply meant as a starting point for discussion on how to properly resolve this issue.
Let's not call the new params "tokens" since they are plain bool values, not flow condition tokens.