The following code causes command "guild compile" to hang: ---cut here--- (define (select-nearest-methods binder index v-fixed-args v-rest-arg vb-included) (dwl4 "select-nearest-methods") (assert (is-binder? binder)) (let ((n (vector-length vb-included))) (do ((i 0 (+ i 1))) ((>= i n)) (if (vector-ref vb-included i) (let ((t1 (get-item-at-index (vector-ref v-fixed-args i) (vector-ref v-rest-arg i) index))) (do ((j 0 (+ j 1))) ((>= j n)) (if (and (not (= i j)) (vector-ref vb-included j)) (let ((t2 (get-item-at-index (vector-ref v-fixed-args j) (vector-ref v-rest-arg j) index))) (if (is-t-subtype? binder t1 t2) ;; t2 is excluded (vector-set! vb-included j #f)))))))))) ---cut here--- However, the following code works fine: ---cut here--- (define (method-loop binder index v-fixed-args v-rest-arg vb-included t1 i n) (do ((j 0 (+ j 1))) ((>= j n)) (if (and (not (= i j)) (vector-ref vb-included j)) (let ((t2 (get-item-at-index (vector-ref v-fixed-args j) (vector-ref v-rest-arg j) index))) (if (is-t-subtype? binder t1 t2) ;; t2 is excluded (vector-set! vb-included j #f)))))) (define (select-nearest-methods binder index v-fixed-args v-rest-arg vb-included) (dwl4 "select-nearest-methods") (assert (is-binder? binder)) (let ((n (vector-length vb-included))) (do ((i 0 (+ i 1))) ((>= i n)) (if (vector-ref vb-included i) (let ((t1 (get-item-at-index (vector-ref v-fixed-args i) (vector-ref v-rest-arg i) index))) (method-loop binder index v-fixed-args v-rest-arg vb-included t1 i n)))))) ---cut here--- This problem occurs with guile 2.2.3. - Tommi Höynälänmaa