Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Fix potential soundness hole when adding references to a mapped set
Fix soundness hole when adding references to a set that is the image of an idempotent `tm` map `tm`. If the element `ref` did not come from the source of the set, we still assumed that `tm(ref) = ref`, so that we simply added the reference to the set and also back-propagated it to source. But that is not necessarily the case (although it is the case in our complete test suite, so I am not sure this case can actually arise in practice. Nevertheless, it's better to not leave a potential soundness hole here. In the new implementation, we test whether `tm(ref) = ref`, and only proceed as before if that's the case. If not there are two sub-cases: - `{ref} <:< tm(ref)` and the variance of the set is positive. In that case we can soundly add `tm(ref)` to the set while back-propagating `ref` as before. - Otherwise there's nothing obvious left to do except fail (which is always sound.
- Loading branch information