Since mismatching recurs (loop locals that have a different inferred type in the loop body vs the loop arg) cause the loop body to be re-analyzed, macroexpansion in the loop body might happen more than once, causing any side effects that happen during macroexpansion to be evaluated potentially multiple times
`
Clojure 1.7.0-master-SNAPSHOT
user=> (defmacro x [] (println "foo"))
'user/x
user=> (fn [] (loop [y 1] (x) (recur (Integer. 1))))
foo
foo
<user$eval6$fn7 user$eval6$fn7@71687585>
`