Failed AVER when erroneously declaring the type of a &rest var as NUMBER

Bug #801737 reported by Jean-Philippe Paradis
6
This bug affects 1 person
Affects Status Importance Assigned to Milestone
SBCL
Triaged
Medium
Unassigned

Bug Description

What I do:
(defun test (&rest definitely-a-list)
  (declare (type number definitely-a-list))
  definitely-a-list)

What happens:
  failed AVER:
    (NOT (FUNCTIONAL-HAS-EXTERNAL-REFERENCES-P CLAMBDA))
This is probably a bug in SBCL itself. (Alternatively, SBCL
might have been corrupted by bad user code, e.g. by an undefined
Lisp operation like (FMAKUNBOUND 'COMPILE), or by stray pointers
from alien code or from unsafe Lisp code; or there might be a
bug in the OS or hardware that SBCL is running on.) If it seems
to be a bug in SBCL itself, the maintainers would like to know
about it. Bug reports are welcome on the SBCL mailing lists,
which you can find at <http://sbcl.sourceforge.net/>.
   [Condition of type SB-INT:BUG]

Restarts:
 0: [RETRY] Retry SLIME REPL evaluation request.
 1: [*ABORT] Return to SLIME's top level.
 2: [TERMINATE-THREAD] Terminate this thread (#<THREAD "repl-thread" RUNNING {BBF7BB9}>)

Backtrace:
  0: (SB-INT:BUG "~@<failed AVER: ~2I~_~A~:>")[:EXTERNAL]
  1: (SB-IMPL::%FAILED-AVER (NOT (SB-C::FUNCTIONAL-HAS-EXTERNAL-REFERENCES-P SB-C::CLAMBDA)))
  2: (SB-C::DELETE-LAMBDA ..)
  3: (SB-C::DELETE-BLOCK #<SB-C::CBLOCK 4 :START c1 {E9BE609}> NIL)
  4: (SB-C::CLEAN-COMPONENT #<SB-C:COMPONENT :NAME (SB-C::XEP TEST) {E9C7E91}> #<unavailable argument>)
  5: (SB-C::IR1-OPTIMIZE #<SB-C:COMPONENT :NAME (SB-C::XEP TEST) {E9C7E91}> NIL)
  6: (SB-C::IR1-OPTIMIZE-UNTIL-DONE #<SB-C:COMPONENT :NAME (SB-C::XEP TEST) {E9C7E91}>)
  7: (SB-C::IR1-PHASES #<SB-C:COMPONENT :NAME (SB-C::XEP TEST) {E9C7E91}>)
  8: (SB-C::COMPILE-COMPONENT #<SB-C:COMPONENT :NAME (SB-C::XEP TEST) {E9C7E91}>)
  9: (SB-C::%COMPILE ..)[:EXTERNAL]
 10: ((LAMBDA ()))
 11: ((FLET SB-THREAD::WITH-RECURSIVE-LOCK-THUNK))
 12: ((FLET #:WITHOUT-INTERRUPTS-BODY-[CALL-WITH-RECURSIVE-LOCK]324))
 13: (SB-THREAD::CALL-WITH-RECURSIVE-LOCK ..)
 14: ((FLET SB-C::WITH-IT))
 15: (SB-C::ACTUALLY-COMPILE ..)
 16: (SB-C:COMPILE-IN-LEXENV ..)
 17: (SB-IMPL::%SIMPLE-EVAL ..)
 18: (SB-INT:SIMPLE-EVAL-IN-LEXENV ..)
 19: (SB-INT:SIMPLE-EVAL-IN-LEXENV ..)
 20: (SB-INT:SIMPLE-EVAL-IN-LEXENV ..)
 21: (SB-INT:SIMPLE-EVAL-IN-LEXENV (DEFUN TEST (&REST DEFINITELY-A-LIST) (DECLARE (TYPE NUMBER DEFINITELY-A-LIST)) DEFINITELY-A-LIST) #<NULL-LEXENV>)
 22: (SWANK::EVAL-REGION "\n(defun test (&rest definitely-a-list)\n (declare (type number definitely-a-list))\n definitely-a-list)\n")
 23: ((LAMBDA ()))
 24: (SWANK::TRACK-PACKAGE #<CLOSURE (LAMBDA #) {E9B973D}>)
 25: ((LAMBDA ()))
 26: (SWANK::CALL-WITH-RETRY-RESTART "Retry SLIME REPL evaluation request." #<CLOSURE (LAMBDA #) {E9B96CD}>)
 27: ((LAMBDA ()))
 28: (SWANK-BACKEND:CALL-WITH-SYNTAX-HOOKS #<CLOSURE (LAMBDA #) {E9B96B5}>)
 29: (SWANK::CALL-WITH-BUFFER-SYNTAX NIL #<CLOSURE (LAMBDA #) {E9B96B5}>)
 30: (SWANK::REPL-EVAL "\n(defun test (&rest definitely-a-list)\n (declare (type number definitely-a-list))\n definitely-a-list)\n")
 31: (SWANK:LISTENER-EVAL "\n(defun test (&rest definitely-a-list)\n (declare (type number definitely-a-list))\n definitely-a-list)\n")
 32: (SB-INT:SIMPLE-EVAL-IN-LEXENV (SWANK:LISTENER-EVAL "\n(defun test (&rest definitely-a-list)\n (declare (type number definitely-a-list))\n definitely-a-list)\n") #<NULL-LEXENV>)
 33: (SWANK:EVAL-FOR-EMACS (SWANK:LISTENER-EVAL "\n(defun test (&rest definitely-a-list)\n (declare (type number definitely-a-list))\n definitely-a-list)\n") "LOOPLESS-MAP" 1343)
 34: (SWANK::PROCESS-REQUESTS NIL)
 35: ((LAMBDA ()))
 36: ((LAMBDA ()))
 37: (SWANK-BACKEND::CALL-WITH-BREAK-HOOK #<FUNCTION SWANK:SWANK-DEBUGGER-HOOK> #<CLOSURE (LAMBDA #) {BC0109D}>)
 38: ((FLET SWANK-BACKEND:CALL-WITH-DEBUGGER-HOOK) #<FUNCTION SWANK:SWANK-DEBUGGER-HOOK> #<CLOSURE (LAMBDA #) {BC0109D}>)
 39: (SWANK-BACKEND:CALL-WITH-DEBUGGER-HOOK #<FUNCTION SWANK:SWANK-DEBUGGER-HOOK> #<CLOSURE (LAMBDA #) {BC0109D}>)
 40: ((LAMBDA ()))
 41: (SWANK::CALL-WITH-BINDINGS ((*STANDARD-OUTPUT* . #) (*STANDARD-INPUT* . #) (*TRACE-OUTPUT* . #) (*ERROR-OUTPUT* . #) (*DEBUG-IO* . #) (*QUERY-IO* . #) ...) #<CLOSURE (LAMBDA #) {BC010AD}>)
 42: ((FLET #:FORM-FUN-[HANDLE-REQUESTS]1558))
 43: (SWANK::HANDLE-REQUESTS #<SWANK::CONNECTION {ACF2999}> NIL)
 44: (SWANK::REPL-LOOP #<SWANK::CONNECTION {ACF2999}>)
 45: ((LAMBDA ()))
 46: (SWANK::CALL-WITH-BINDINGS NIL #<CLOSURE (LAMBDA #) {BC0108D}>)
 47: ((LAMBDA ()))
 48: ((FLET #:WITHOUT-INTERRUPTS-BODY-[BLOCK362]367))
 49: ((FLET SB-THREAD::WITH-MUTEX-THUNK))
 50: ((FLET #:WITHOUT-INTERRUPTS-BODY-[CALL-WITH-MUTEX]300))
 51: (SB-THREAD::CALL-WITH-MUTEX ..)
 52: (SB-THREAD::INITIAL-THREAD-FUNCTION)
 53: ("foreign function: #x8067E5B")
 54: ("foreign function: #x805300D")
 55: ("foreign function: #x805EBE0")
 56: ("foreign function: #xB7FB496E")

What I expected to happen:
A "normal" compile-time error saying something like: "Erroneous declared type NUMBER for &rest var DEFINITELY-A-LIST".

SBCL version: 1.0.42
uname -a: Linux dynamorph 2.6.32-32-generic #62-Ubuntu SMP Wed Apr 20 21:54:21 UTC 2011 i686 GNU/Linux

*features*:
(:SWANK :QUICKLISP :SB-BSD-SOCKETS-ADDRINFO :ASDF-UNIX :ASDF2 :ASDF :ANSI-CL
 :COMMON-LISP :SBCL :SB-DOC :SB-TEST :SB-LDB :SB-PACKAGE-LOCKS :SB-UNICODE
 :SB-EVAL :SB-SOURCE-LOCATIONS :IEEE-FLOATING-POINT :X86 :UNIX :ELF :LINUX
 :SB-THREAD :LARGEFILE :GENCGC :STACK-GROWS-DOWNWARD-NOT-UPWARD
 :C-STACK-IS-CONTROL-STACK :COMPARE-AND-SWAP-VOPS :UNWIND-TO-FRAME-AND-CALL-VOP
 :RAW-INSTANCE-INIT-VOPS :STACK-ALLOCATABLE-CLOSURES :STACK-ALLOCATABLE-VECTORS
 :STACK-ALLOCATABLE-LISTS :STACK-ALLOCATABLE-FIXED-OBJECTS :ALIEN-CALLBACKS
 :CYCLE-COUNTER :INLINE-CONSTANTS :MEMORY-BARRIER-VOPS :LINKAGE-TABLE
 :OS-PROVIDES-DLOPEN :OS-PROVIDES-PUTWC :OS-PROVIDES-SUSECONDS-T)

Tags: compiler-ir1
Stas Boukarev (stassats)
tags: added: ir1
tags: added: compiler-ir1
removed: ir1
Changed in sbcl:
importance: Undecided → Medium
status: New → Triaged
Revision history for this message
Paul Khuong (pvk) wrote :

On HEAD, I get this infamous error instead

debugger invoked on a SIMPLE-ERROR in thread
#<THREAD "main thread" RUNNING {1003780E23}>:
  attempt to dump invalid structure:
  #<SB-C::CLAMBDA
    :%SOURCE-NAME TEST
    :%DEBUG-NAME NIL
    :KIND :DELETED
    :TYPE #<SB-KERNEL:BUILT-IN-CLASSOID FUNCTION (read-only)>
    :WHERE-FROM :DEFINED
    :VARS (DEFINITELY-A-LIST #:REST-CONTEXT-0 #:REST-COUNT-1) {1004E5F5C3}>
How did this happen?

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.