Currently we say that equal? must detect loops, but we don't say what it should do. The wording in R6RS is "The equal? predicate returns #t if and only if the (possibly infinite) unfoldings of its arguments into regular trees are equal as ordered trees." (Better wording would be good.)
Possibilities: R6RS, signal an error, return #f.
This is being handled editorially, since the objection that led to its appearance as a ballot ticket is now withdrawn.