Call Arity has the trivial application case wrong
e x, the result of
x is not shared in contrast to
e (f x), where CorePrep will turn it into
let y = f x in e x. So in
let f = ... in e (f x)
we know that f is called at most once, but in
let f = ... in e f
we do not know that.
Previously Call Arity would assume that in
x is evaluated at
most once. This rarely would make a difference (the argument
analized with an incoming arity of 0, so no eta-expansion would be done
anyways), but of course this should still be fixed.
I just validated a patch and will push shortly.