We define special tainting behavior to avoid cycles with animation properties but we have a similar issue for the 'display' property.
:root {
--foo: block
}
div {
display: var(--foo);
animation: change-foo 100s;
}
@keyframes change-foo {
to, from { --foo: none; }
}
In this case, we start off with a <div> with display: block, run the animation which sets --foo to none so the <div> ends up with display: none. As a result we cancel the animation in <div>. Since we cancelled the animation, --foo goes back to block, and hence the animation restarts. And so on.
(For what it's worth, this is the reason why display is considered non-animatable for at least CSS animations and CSS transitions. As a result, the corresponding spec text might not necessarily need to refer to display specifically but rather all non-animatable properties.)