show correct number of arguments for arg-count error frames
[sbcl.git] / tests / debug.impure.lisp
index 4d8ae6b..208cbe8 100644 (file)
 
 (defvar *undefined-function-frame*
   ;; bug 353
-  '(#+(or x86 x86-64) "bogus stack frame"
-    #-(or x86 x86-64) "undefined function"))
+  '("undefined function"))
 
 ;;; Test for "undefined function" (undefined_tramp) working properly.
 ;;; Try it with and without tail call elimination, since they can have
          (funcall fun)))
 
   (with-test (:name (:undefined-function :bug-346)
-              :fails-on '(or :alpha :ppc :sparc :mips
+                    ;; Failures on ALPHA, SPARC, MIPS, and probably
+                    ;; HPPA are due to not having a full and valid
+                    ;; stack frame for the undefined function frame.
+                    ;; See PPC undefined_tramp for details.
+              :fails-on '(or :alpha :sparc :mips
                           (and :x86-64 :freebsd)))
     (assert (verify-backtrace
              (lambda () (test #'optimized))
 
   ;; bug 353: This test fails at least most of the time for x86/linux
   ;; ca. 0.8.20.16. -- WHN
-  (with-test (:name (:undefined-function :bug-353)
-              ;; This used to have fewer :fails-on features pre-0.9.16.38,
-              ;; but it turns out that the bug was just being masked by
-              ;; the presence of the IR1 stepper instrumentation (and
-              ;; is thus again failing now that the instrumentation is
-              ;; no more).
-              :fails-on '(or :alpha :mips :ppc))
+  (with-test (:name (:undefined-function :bug-353))
     (assert (verify-backtrace
              (lambda () (test #'not-optimized))
              (list *undefined-function-frame*
                   ;; :TIMEOUT NIL to the frame we expect. If we leave it out,
                   ;; the backtrace is fine -- but the test fails. I can only
                   ;; boggle right now.
-            :fails-on :darwin)
+            :fails-on '(or (and :x86 :linux) :darwin))
   (let ((m (sb-thread:make-mutex))
         (q (sb-thread:make-waitqueue)))
     (assert (verify-backtrace
       (throw 'no-such-tag t))
     (assert (verify-backtrace #'throw-test '((throw-test))))))
 
+(defun bug-308926 (x)
+  (let ((v "foo"))
+    (flet ((bar (z)
+             (oops v z)
+             (oops z v)))
+      (bar x)
+      (bar v))))
+
+(with-test (:name :bug-308926)
+  (assert (verify-backtrace (lambda () (bug-308926 13))
+                            '(((flet bar :in bug-308926) 13)
+                              (bug-308926 &rest t)))))
+
 ;;; test entry point handling in backtraces
 
 (defun oops ()
   (error "oops"))
 
+(with-test (:name :xep-too-many-arguments)
+  (assert (verify-backtrace (lambda () (oops 1 2 3 4 5 6))
+                            '((oops ? ? ? ? ? ?)))))
+
 (defmacro defbt (n ll &body body)
   `(progn
      ;; normal debug info