Here's an example slot conflict triggered by a downgrade:
$ emerge -p =dev-libs/glib-2.30.2
Calculating dependencies... done!
[ebuild UD ] dev-libs/glib-2.30.2 [2.32.3]
!!! Multiple package instances within a single package slot have been pulled
!!! into the dependency graph, resulting in a slot conflict:
(dev-libs/glib-2.30.2::test_repo, ebuild scheduled for merge) pulled in by
(dev-libs/glib-2.32.3::test_repo, installed) pulled in by
dev-libs/glib:2/2.32= required by (dev-libs/dbus-glib-0.98::test_repo, installed)
The depgraph._slot_abi_update_probe() method only searches for upgrades, so it doesn't trigger rebuild of reverse dependencies when there's a downgrade like this. We could add a complementary _slot_abi_downgrade_probe() method that detects cases where a downgrade is desirable, like when the newer version has been masked or removed (or possibly when an atom matching a lower version is given as an argument like in the above example).
This is fixed in git:
Note that it only triggers rebuilds when a downgrade will occur due to a package being masked or unavailable (though the mask could be a "runtime mask" that results from backtracking).
This is fixed in 18.104.22.168 and 2.2.0_alpha116.
*** Bug 608386 has been marked as a duplicate of this bug. ***