The Allegro compiler won't compile some iterate forms that expand to a tagbody form that has several nil tags. At first I thought that it was a bug with allegro, since it worked fine in sbcl, and in allegros own interpreter. But on second thought and some reading of the hyperspec, I think it is the allegro compiler that is right: hyperspec: ...The statements in a tagbody are evaluated in order from left to right, and their values are discarded. If at any time there are no remaining statements, tagbody returns nil. However, if (go tag) is evaluated, control jumps to the part of the body labeled with the tag. (Tags are compared with eql.) ... and since tags are compared with eql, how can we allow several nils? If tags with the same label was allowed, the description should say something about "the first" or "the last" tag. Now it says labeled with THE tag, singularis. I have attached two bundled darcs-patches, first a testcase that shows the problem, then a solution. I have run all tests with sbcl and allegro. As usual it turns out it was more difficult to write a test than to fix the bug. /Henrik Hjelte (TAGBODY (print "hi") NIL (print "ciao") LOOP-TOP-NIL (print "hello") NIL (print "second nil") ) ; the Allegro error is : ;;Tag NIL is used more than once ;;Problem detected when processing ;; (TAGBODY (PRINT "hi") NIL...) ;;inside (BLOCK MYTEST (TAGBODY (PRINT "hi") NIL...)) ;;inside (PROGN (BLOCK MYTEST (TAGBODY # NIL...))) ;; ;; [Condition of type PARSE-ERROR] And why these nils turn up in iterate, see the testcase in the patch for an example.