[armedbear-ticket] [armedbear] #187: Stack Overflow for Worst-case Vector Sort

armedbear armedbear-devel at common-lisp.net
Tue Nov 8 10:08:11 UTC 2011


#187: Stack Overflow for Worst-case Vector Sort
------------------------------------------+---------------------------------
 Reporter:  mevenson                      |       Owner:  nobody     
     Type:  defect                        |      Status:  new        
 Priority:  major                         |   Milestone:  unscheduled
Component:  java                          |     Version:  1.0        
 Keywords:  array, CL:SORT, optimization  |  
------------------------------------------+---------------------------------
 [http://article.gmane.org/gmane.lisp.armedbear.devel/2118 James Lawrence
 reports on armedbear-devel that ABCL-1.0.0 overflows its stack when
 sorting an array of 10^4 elements]:

 {{{
    (let ((a (map-into (make-array 10000)
                       (let ((x 0))
                         (lambda () (incf x))))))
      (sort a #'<)
      nil)
 =>
 Stack overflow.
   [Condition of type STORAGE-CONDITION]

  0: (#<FUNCTION {7F535BDF}> #<STORAGE-CONDITION {74A2B3B8}>
 #<FUNCTION {7F535BDF}>)
  1: (APPLY #<FUNCTION {7F535BDF}> (#<STORAGE-CONDITION {74A2B3B8}>
 #<FUNCTION {7F535BDF}>))
  2: (SYSTEM::RUN-HOOK SYSTEM::*INVOKE-DEBUGGER-HOOK*
 #<STORAGE-CONDITION {74A2B3B8}> #<FUNCTION {7F535BDF}>)
  3: (INVOKE-DEBUGGER #<STORAGE-CONDITION {74A2B3B8}>)
  4: org.armedbear.lisp.Lisp.error(Lisp.java:374)
  5:
 org.armedbear.lisp.Java$pf_jrun_exception_protected.execute(Java.java:1315)
  6: org.armedbear.lisp.Symbol.execute(Symbol.java:785)
  7: org.armedbear.lisp.LispThread.execute(LispThread.java:649)
  8: org.armedbear.lisp.swank_469.execute(swank.lisp:2116)
  9: org.armedbear.lisp.LispThread.execute(LispThread.java:683)
 10: org.armedbear.lisp.Primitives$pf_apply.execute(Primitives.java:2797)
 11: (JAVA:JRUN-EXCEPTION-PROTECTED #<FUNCTION {39B4CEC7}>)
 }}}
 It looks like the quick-sort function (attributed to ECL) pivots off
 the first element. I would suggest using a midpoint instead.

-- 
Ticket URL: <http://trac.common-lisp.net/armedbear/ticket/187>
armedbear <http://common-lisp.net/project/armedbear>
armedbear


More information about the armedbear-ticket mailing list