Test cases for code-movement fail on ECL
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
ITERATE macro |
New
|
Undecided
|
Unassigned | ||
common-lisp |
New
|
Undecided
|
Unassigned |
Bug Description
These test cases fail on ECL, but not on other Lisps: ITERATE.
cl-test-grid shows these failures for ecl-12.
I also reproduced it with ecl-12.2.1 on darwin-x86.
I suspect it is because on ECL, RETURN is a macro that is effectively: (defmacro return (&rest rest) `(return-from nil ,@rest)). And, I bet the iterate code handles RETURN and RETURN-FROM differently.
Here's an example of one of those test forms. In the test failure output below, you can see that return was expanded to return-from:
(deftest code-movement.else
(handler-case (macroexpand '
(error () t)
(:no-error (f x) (declare (ignore f x)) nil))
t)
Test ITERATE.
Form: (HANDLER-CASE
(MACROEXPAND
10)
(LET ((ITERATE.TEST::X 3))
(ERROR NIL T)
(:NO-ERROR (ITERATE.TEST::F ITERATE.TEST::X)
(DECLARE (IGNORE ITERATE.TEST::F ITERATE.TEST::X)) NIL))
Expected value: T
Actual value: NIL.
Test ITERATE.
Form: (HANDLER-CASE
(MACROEXPAND
10)
(LET ((ITERATE.TEST::Y ITERATE.TEST::I))
(ERROR NIL T)
(:NO-ERROR (ITERATE.TEST::F ITERATE.TEST::X)
(DECLARE (IGNORE ITERATE.TEST::F ITERATE.TEST::X)) NIL))
Expected value: T
Actual value: NIL.
Test ITERATE.
Form: (HANDLER-CASE
(MACROEXPAND
10)
(LET ((ITERATE.TEST::Y ITERATE.TEST::I))
(ERROR NIL T)
(:NO-ERROR (ITERATE.TEST::F ITERATE.TEST::X)
(DECLARE (IGNORE ITERATE.TEST::F ITERATE.TEST::X)) NIL))
Expected value: T
Actual value: NIL.
Also affects Allegro (acl-8. 2a-linux- x64), but does not appear to involve macro expansion of RETURN:
Test ITERATE. TEST::CODE- MOVEMENT. ELSE failed TEST::X) ))))) (ERROR NIL T) (:NO-ERROR (ITERATE.TEST::F ITERATE.TEST::X) (DECLARE (IGNORE ITERATE.TEST::F ITERATE.TEST::X)) NIL))
Form: (HANDLER-CASE (MACROEXPAND (QUOTE (ITERATE:ITER (ITERATE:FOR ITERATE.TEST::I ITERATE.TEST::FROM 1 ITERATE.TEST::TO 10) (LET ((ITERATE.TEST::X 3)) (ITERATE:ELSE (RETURN ITERATE.
Expected value: T
Actual value: NIL.