(defun foo (a b)
(check-type a list)
(when a
(mapcar #'identity a)
(loop for c from 0
do (loop for d in b
do (loop for e in a)))))
compiles until it runs out of ram (~15min to fill 16GB heap here), on x8664 windows 1.4.4.157 and x8664 linux 1.3.21.196. Compiles quickly on x86 linux 1.1.6.6.
backtraces from interrupting compilation:
0: (SB-KERNEL:%MAP-FOR-EFFECT-ARITY-1 #<CLOSURE (LAMBDA (SB-C::CONSTRAINT) :IN SB-C::CONSET-ADD-CONSTRAINT-TO-EQL) {10137F8FDB}> #(#S(SB-C::CONSTRAINT :NUMBER 25 :KIND EQL :X #<SB-C::LAMBDA-VAR :%SOURCE-..
1: (SB-C::PRECISE-ADD-COMPLEMENT-CONSTRAINTS TYPEP #<SB-C::LAMBDA-VAR :%SOURCE-NAME #:LOOP-LIST-11 :TYPE #<SB-KERNEL:UNION-TYPE LIST> :WHERE-FROM :DECLARED {100B2BDD13}> #<SB-KERNEL:MEMBER-TYPE NULL> T #..
2: (SB-C::ADD-TEST-CONSTRAINTS #<SB-C::REF :%SOURCE-NAME #1=#:LOOP-LIST-11 :LEAF #<SB-C::LAMBDA-VAR :%SOURCE-NAME #1# :TYPE #<SB-KERNEL:UNION-TYPE LIST> :WHERE-FROM :DECLARED {100B2BDD13}> {100B2DCA63}> ..
3: (SB-C::FIND-BLOCK-TYPE-CONSTRAINTS #<SB-C::CBLOCK 13 :START c5 {100B1A8AF3}> NIL)
4: (SB-C::FIND-AND-PROPAGATE-CONSTRAINTS #<SB-C:COMPONENT :NAME FOO {100B0A5203}>)
5: (SB-C::CONSTRAINT-PROPAGATE #<SB-C:COMPONENT :NAME FOO {100B0A5203}>)
6: (SB-C::IR1-PHASES #<SB-C:COMPONENT :NAME FOO {100B0A5203}>)
7: (SB-C::COMPILE-COMPONENT #<SB-C:COMPONENT :NAME FOO {100B0A5203}>)
8: (SB-C::%COMPILE (SB-INT:NAMED-LAMBDA FOO (A B) (BLOCK FOO (CHECK-TYPE A LIST) (WHEN A # #))) #<SB-C::CORE-OBJECT {100AFB5573}> :NAME NIL :PATH (SB-C::ORIGINAL-SOURCE-START 0 0))
9: ((FLET "WITHOUT-INTERRUPTS-BODY-29" :IN SB-THREAD::CALL-WITH-RECURSIVE-LOCK))
10: (SB-THREAD::CALL-WITH-RECURSIVE-LOCK #<CLOSURE (FLET SB-THREAD::WITH-RECURSIVE-LOCK-THUNK :IN SB-C::ACTUALLY-COMPILE) {5B3E61B}> #<SB-THREAD:MUTEX "World Lock" owner: #<SB-THREAD:THREAD "repl-thread" ..
11: ((LAMBDA NIL :IN SB-C::ACTUALLY-COMPILE))
12: ((FLET SB-C::WITH-IT :IN SB-C::%WITH-COMPILATION-UNIT))
13: (SB-C::ACTUALLY-COMPILE NIL (SB-INT:NAMED-LAMBDA FOO (A B) (BLOCK FOO (CHECK-TYPE A LIST) (WHEN A # #))) #<NULL-LEXENV> NIL NIL T)
14: (SB-C:COMPILE-IN-LEXENV (SB-INT:NAMED-LAMBDA FOO (A B) (BLOCK FOO (CHECK-TYPE A LIST) (WHEN A # #))) #<NULL-LEXENV> NIL NIL NIL T)
15: (SB-IMPL::%SIMPLE-EVAL (SB-INT:NAMED-LAMBDA FOO (A B) (BLOCK FOO (CHECK-TYPE A LIST) (WHEN A # #))) #<NULL-LEXENV>)
16: (SB-INT:SIMPLE-EVAL-IN-LEXENV (SB-INT:NAMED-LAMBDA FOO (A B) (BLOCK FOO (CHECK-TYPE A LIST) (WHEN A # #))) #<NULL-LEXENV>)
17: (SB-INT:SIMPLE-EVAL-IN-LEXENV (SB-IMPL::%DEFUN (QUOTE FOO) (SB-INT:NAMED-LAMBDA FOO (A B) (BLOCK FOO # #))) #<NULL-LEXENV>)
18: (SB-INT:SIMPLE-EVAL-IN-LEXENV (DEFUN FOO (A B) (CHECK-TYPE A LIST) (WHEN A (MAPCAR # A) (LOOP FOR C FROM 0 DO ...))) #<NULL-LEXENV>)
19: (EVAL (DEFUN FOO (A B) (CHECK-TYPE A LIST) (WHEN A (MAPCAR # A) (LOOP FOR C FROM 0 DO ...))))
0: (SB-C::MAKE-CONSET)
1: (SB-C::ADD-TEST-CONSTRAINTS #<SB-C::REF :%SOURCE-NAME #1=#:LOOP-LIST-11 :LEAF #<SB-C::LAMBDA-VAR :%SOURCE-NAME #1# :TYPE #<SB-KERNEL:UNION-TYPE LIST> :WHERE-FROM :DECLARED {100B2BDD13}> {100B2DCA63}> ..
2: (SB-C::FIND-BLOCK-TYPE-CONSTRAINTS #<SB-C::CBLOCK 13 :START c5 {100B1A8AF3}> NIL)
3: (SB-C::FIND-AND-PROPAGATE-CONSTRAINTS #<SB-C:COMPONENT :NAME FOO {100B0A5203}>)
4: (SB-C::CONSTRAINT-PROPAGATE #<SB-C:COMPONENT :NAME FOO {100B0A5203}>)
0: (SB-C::CONSTRAINT-PROPAGATE-IF #<SB-C::CBLOCK 14 :START c7 {10034F3CC3}> #S(SB-C::CONSET :VECTOR #*0000100011000110100110111100000000000000000000000000000000000000 :MIN 4 :MAX 26)) [external]
1: (SB-C::FIND-BLOCK-TYPE-CONSTRAINTS #<SB-C::CBLOCK 14 :START c7 {10034F3CC3}> NIL)
2: (SB-C::FIND-AND-PROPAGATE-CONSTRAINTS #<SB-C:COMPONENT :NAME FOO {100B0A5203}>)
3: (SB-C::CONSTRAINT-PROPAGATE #<SB-C:COMPONENT :NAME FOO {100B0A5203}>)
d42f282f063d566 b77e08588fddf1c f383feabce