slow compilation/excess memory use (from constraint propagation?)

Bug #1751333 reported by 3b
6
This bug affects 1 person
Affects Status Importance Assigned to Milestone
SBCL
Fix Released
Undecided
Unassigned

Bug Description

(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}>)

Tags: compiler
Revision history for this message
Stas Boukarev (stassats) wrote :

d42f282f063d566b77e08588fddf1cf383feabce

Changed in sbcl:
status: New → Fix Committed
Stas Boukarev (stassats)
Changed in sbcl:
status: Fix Committed → Fix Released
To post a comment you must log in.
This report contains Public information  
Everyone can see this information.

Other bug subscribers

Remote bug watches

Bug watches keep track of this bug in other bug trackers.