Subject: bug#24885: 26.0.50; edebug-eval-defun fails on a cl-destructuring-bind with cons cell

From: Alex <[email-masked]>
Date: Sat, 05 Nov 2016 12:49:52 -0600

Attempting to C-u C-M-x the following function produces an error:

(defun test ()
  (cl-destructuring-bind (a . b) (cons 1 2)
    (+ a b)))

Backtrace:

Debugger entered--Lisp error: (invalid-read-syntax "Dotted spec required.")
  signal(invalid-read-syntax ("Dotted spec required."))
  edebug-syntax-error("Dotted spec required.")
  apply(edebug-syntax-error "Dotted spec required.")
  edebug-no-match((b (190 . 192) . 193) "Dotted spec required.")
  edebug-match-specs((b (190 . 192) . 193) ([&optional ["&optional" &rest &or (cl-macro-arg &optional def-form cl-macro-arg) arg]] [&optional [[&or "&rest" "&body"] cl-macro-arg]] [&optional ["&key" [&rest [&or ([&or (symbolp cl-macro-arg) arg] &optional def-form cl-macro-arg) arg]] &optional "&allow-other-keys"]] [&optional ["&aux" &rest &or (symbolp &optional def-form) symbolp]] [&optional "&environment" arg]) edebug-match-specs)
  edebug-match-specs((b (190 . 192) . 193) ([&rest cl-macro-arg] [&optional ["&optional" &rest &or (cl-macro-arg &optional def-form cl-macro-arg) arg]] [&optional [[&or "&rest" "&body"] cl-macro-arg]] [&optional ["&key" [&rest [&or ([&or (symbolp cl-macro-arg) arg] &optional def-form cl-macro-arg) arg]] &optional "&allow-other-keys"]] [&optional ["&aux" &rest &or (symbolp &optional def-form) symbolp]] [&optional "&environment" arg]) edebug-match-specs)
  edebug-match-specs((b (190 . 192) . 193) ([&optional "&environment" arg] [&rest cl-macro-arg] [&optional ["&optional" &rest &or (cl-macro-arg &optional def-form cl-macro-arg) arg]] [&optional [[&or "&rest" "&body"] cl-macro-arg]] [&optional ["&key" [&rest [&or ([&or (symbolp cl-macro-arg) arg] &optional def-form cl-macro-arg) arg]] &optional "&allow-other-keys"]] [&optional ["&aux" &rest &or (symbolp &optional def-form) symbolp]] [&optional "&environment" arg]) edebug-match-specs)
  edebug-match-sublist((b (190 . 192) . 193) ([&optional "&environment" arg] [&rest cl-macro-arg] [&optional ["&optional" &rest &or (cl-macro-arg &optional def-form cl-macro-arg) arg]] [&optional [[&or "&rest" "&body"] cl-macro-arg]] [&optional ["&key" [&rest [&or ([&or (symbolp cl-macro-arg) arg] &optional def-form cl-macro-arg) arg]] &optional "&allow-other-keys"]] [&optional ["&aux" &rest &or (symbolp &optional def-form) symbolp]] [&optional "&environment" arg]))
  edebug-match-list((((a . b) (cons 1 2) (+ a b)) (186 (187 . 188) (190 . 192) . 193) (194 (195 . 199) (200 . 201) (202 . 203) . 204) (209 (210 . 211) (212 . 213) (214 . 215) . 216) . 217) ([&optional "&environment" arg] [&rest cl-macro-arg] [&optional ["&optional" &rest &or (cl-macro-arg &optional def-form cl-macro-arg) arg]] [&optional [[&or "&rest" "&body"] cl-macro-arg]] [&optional ["&key" [&rest [&or ([&or (symbolp cl-macro-arg) arg] &optional def-form cl-macro-arg) arg]] &optional "&allow-other-keys"]] [&optional ["&aux" &rest &or (symbolp &optional def-form) symbolp]] [&optional "&environment" arg]))
  edebug-match-one-spec((((a . b) (cons 1 2) (+ a b)) (186 (187 . 188) (190 . 192) . 193) (194 (195 . 199) (200 . 201) (202 . 203) . 204) (209 (210 . 211) (212 . 213) (214 . 215) . 216) . 217) ([&optional "&environment" arg] [&rest cl-macro-arg] [&optional ["&optional" &rest &or (cl-macro-arg &optional def-form cl-macro-arg) arg]] [&optional [[&or "&rest" "&body"] cl-macro-arg]] [&optional ["&key" [&rest [&or ([&or (symbolp cl-macro-arg) arg] &optional def-form cl-macro-arg) arg]] &optional "&allow-other-keys"]] [&optional ["&aux" &rest &or (symbolp &optional def-form) symbolp]] [&optional "&environment" arg]))
  edebug-match-specs((((a . b) (cons 1 2) (+ a b)) (186 (187 . 188) (190 . 192) . 193) (194 (195 . 199) (200 . 201) (202 . 203) . 204) (209 (210 . 211) (212 . 213) (214 . 215) . 216) . 217) (([&optional "&environment" arg] [&rest cl-macro-arg] [&optional ["&optional" &rest &or (cl-macro-arg &optional def-form cl-macro-arg) arg]] [&optional [[&or "&rest" "&body"] cl-macro-arg]] [&optional ["&key" [&rest [&or ([&or ... arg] &optional def-form cl-macro-arg) arg]] &optional "&allow-other-keys"]] [&optional ["&aux" &rest &or (symbolp &optional def-form) symbolp]] [&optional "&environment" arg])) edebug-match-specs)
  edebug-match((((a . b) (cons 1 2) (+ a b)) (186 (187 . 188) (190 . 192) . 193) (194 (195 . 199) (200 . 201) (202 . 203) . 204) (209 (210 . 211) (212 . 213) (214 . 215) . 216) . 217) (([&optional "&environment" arg] [&rest cl-macro-arg] [&optional ["&optional" &rest &or (cl-macro-arg &optional def-form cl-macro-arg) arg]] [&optional [[&or "&rest" "&body"] cl-macro-arg]] [&optional ["&key" [&rest [&or ([&or ... arg] &optional def-form cl-macro-arg) arg]] &optional "&allow-other-keys"]] [&optional ["&aux" &rest &or (symbolp &optional def-form) symbolp]] [&optional "&environment" arg])))
  edebug-match-symbol((((a . b) (cons 1 2) (+ a b)) (186 (187 . 188) (190 . 192) . 193) (194 (195 . 199) (200 . 201) (202 . 203) . 204) (209 (210 . 211) (212 . 213) (214 . 215) . 216) . 217) cl-macro-list)
  edebug-match-one-spec((((a . b) (cons 1 2) (+ a b)) (186 (187 . 188) (190 . 192) . 193) (194 (195 . 199) (200 . 201) (202 . 203) . 204) (209 (210 . 211) (212 . 213) (214 . 215) . 216) . 217) cl-macro-list)
  edebug-match-specs((((a . b) (cons 1 2) (+ a b)) (186 (187 . 188) (190 . 192) . 193) (194 (195 . 199) (200 . 201) (202 . 203) . 204) (209 (210 . 211) (212 . 213) (214 . 215) . 216) . 217) (cl-macro-list def-form cl-declarations def-body) edebug-match-specs)
  edebug-match-specs((((a . b) (cons 1 2) (+ a b)) (186 (187 . 188) (190 . 192) . 193) (194 (195 . 199) (200 . 201) (202 . 203) . 204) (209 (210 . 211) (212 . 213) (214 . 215) . 216) . 217) ("cl-destructuring-bind" cl-macro-list def-form cl-declarations def-body) edebug-match-specs)
  edebug-match((((a . b) (cons 1 2) (+ a b)) (186 (187 . 188) (190 . 192) . 193) (194 (195 . 199) (200 . 201) (202 . 203) . 204) (209 (210 . 211) (212 . 213) (214 . 215) . 216) . 217) ("cl-destructuring-bind" cl-macro-list def-form cl-declarations def-body))
  edebug-make-form-wrapper((((a . b) (cons 1 2) (+ a b)) (186 (187 . 188) (190 . 192) . 193) (194 (195 . 199) (200 . 201) (202 . 203) . 204) (209 (210 . 211) (212 . 213) (214 . 215) . 216) . 217) 163 216 ("cl-destructuring-bind" cl-macro-list def-form cl-declarations def-body))
  edebug-defining-form((((a . b) (cons 1 2) (+ a b)) (186 (187 . 188) (190 . 192) . 193) (194 (195 . 199) (200 . 201) (202 . 203) . 204) (209 (210 . 211) (212 . 213) (214 . 215) . 216) . 217) 163 217 ("cl-destructuring-bind" cl-macro-list def-form cl-declarations def-body))
  edebug-form((((cl-destructuring-bind (a . b) (cons 1 2) (+ a b))) (163 (164 . 185) (186 (187 . 188) (190 . 192) . 193) (194 (195 . 199) (200 . 201) (202 . 203) . 204) (209 (210 . 211) (212 . 213) (214 . 215) . 216) . 217) . 218))
  edebug-match-form((((cl-destructuring-bind (a . b) (cons 1 2) (+ a b))) (163 (164 . 185) (186 (187 . 188) (190 . 192) . 193) (194 (195 . 199) (200 . 201) (202 . 203) . 204) (209 (210 . 211) (212 . 213) (214 . 215) . 216) . 217) . 218))
  edebug-match-symbol((((cl-destructuring-bind (a . b) (cons 1 2) (+ a b))) (163 (164 . 185) (186 (187 . 188) (190 . 192) . 193) (194 (195 . 199) (200 . 201) (202 . 203) . 204) (209 (210 . 211) (212 . 213) (214 . 215) . 216) . 217) . 218) form)
  edebug-match-one-spec((((cl-destructuring-bind (a . b) (cons 1 2) (+ a b))) (163 (164 . 185) (186 (187 . 188) (190 . 192) . 193) (194 (195 . 199) (200 . 201) (202 . 203) . 204) (209 (210 . 211) (212 . 213) (214 . 215) . 216) . 217) . 218) form)
  edebug-match-specs((((cl-destructuring-bind (a . b) (cons 1 2) (+ a b))) (163 (164 . 185) (186 (187 . 188) (190 . 192) . 193) (194 (195 . 199) (200 . 201) (202 . 203) . 204) (209 (210 . 211) (212 . 213) (214 . 215) . 216) . 217) . 218) (form) edebug-&rest-wrapper)
  edebug-&optional-wrapper((((cl-destructuring-bind (a . b) (cons 1 2) (+ a b))) (163 (164 . 185) (186 (187 . 188) (190 . 192) . 193) (194 (195 . 199) (200 . 201) (202 . 203) . 204) (209 (210 . 211) (212 . 213) (214 . 215) . 216) . 217) . 218) (form) edebug-&rest-wrapper)
  edebug-&rest-wrapper((((cl-destructuring-bind (a . b) (cons 1 2) (+ a b))) (163 (164 . 185) (186 (187 . 188) (190 . 192) . 193) (194 (195 . 199) (200 . 201) (202 . 203) . 204) (209 (210 . 211) (212 . 213) (214 . 215) . 216) . 217) . 218) (form) edebug-&rest-wrapper)
  edebug-match-&rest((((cl-destructuring-bind (a . b) (cons 1 2) (+ a b))) (163 (164 . 185) (186 (187 . 188) (190 . 192) . 193) (194 (195 . 199) (200 . 201) (202 . 203) . 204) (209 (210 . 211) (212 . 213) (214 . 215) . 216) . 217) . 218) (form))
  edebug-match-specs((((cl-destructuring-bind (a . b) (cons 1 2) (+ a b))) (163 (164 . 185) (186 (187 . 188) (190 . 192) . 193) (194 (195 . 199) (200 . 201) (202 . 203) . 204) (209 (210 . 211) (212 . 213) (214 . 215) . 216) . 217) . 218) (&rest form) edebug-match-specs)
  edebug-match((((cl-destructuring-bind (a . b) (cons 1 2) (+ a b))) (163 (164 . 185) (186 (187 . 188) (190 . 192) . 193) (194 (195 . 199) (200 . 201) (202 . 203) . 204) (209 (210 . 211) (212 . 213) (214 . 215) . 216) . 217) . 218) (&rest form))
  edebug-match-def-body((((cl-destructuring-bind (a . b) (cons 1 2) (+ a b))) (163 (164 . 185) (186 (187 . 188) (190 . 192) . 193) (194 (195 . 199) (200 . 201) (202 . 203) . 204) (209 (210 . 211) (212 . 213) (214 . 215) . 216) . 217) . 218))
  edebug-match-symbol((((cl-destructuring-bind (a . b) (cons 1 2) (+ a b))) (163 (164 . 185) (186 (187 . 188) (190 . 192) . 193) (194 (195 . 199) (200 . 201) (202 . 203) . 204) (209 (210 . 211) (212 . 213) (214 . 215) . 216) . 217) . 218) def-body)
  edebug-match-one-spec((((cl-destructuring-bind (a . b) (cons 1 2) (+ a b))) (163 (164 . 185) (186 (187 . 188) (190 . 192) . 193) (194 (195 . 199) (200 . 201) (202 . 203) . 204) (209 (210 . 211) (212 . 213) (214 . 215) . 216) . 217) . 218) def-body)
  edebug-match-specs((((cl-destructuring-bind (a . b) (cons 1 2) (+ a b))) (163 (164 . 185) (186 (187 . 188) (190 . 192) . 193) (194 (195 . 199) (200 . 201) (202 . 203) . 204) (209 (210 . 211) (212 . 213) (214 . 215) . 216) . 217) . 218) (def-body) edebug-match-specs)
  edebug-match-specs((((cl-destructuring-bind (a . b) (cons 1 2) (+ a b))) (163 (164 . 185) (186 (187 . 188) (190 . 192) . 193) (194 (195 . 199) (200 . 201) (202 . 203) . 204) (209 (210 . 211) (212 . 213) (214 . 215) . 216) . 217) . 218) ([&optional ("interactive" interactive)] def-body) edebug-match-specs)
  edebug-match-specs((((cl-destructuring-bind (a . b) (cons 1 2) (+ a b))) (163 (164 . 185) (186 (187 . 188) (190 . 192) . 193) (194 (195 . 199) (200 . 201) (202 . 203) . 204) (209 (210 . 211) (212 . 213) (214 . 215) . 216) . 217) . 218) ([&optional ("declare" &rest sexp)] [&optional ("interactive" interactive)] def-body) edebug-match-specs)
  edebug-match-specs((((cl-destructuring-bind (a . b) (cons 1 2) (+ a b))) (163 (164 . 185) (186 (187 . 188) (190 . 192) . 193) (194 (195 . 199) (200 . 201) (202 . 203) . 204) (209 (210 . 211) (212 . 213) (214 . 215) . 216) . 217) . 218) ([&optional stringp] [&optional ("declare" &rest sexp)] [&optional ("interactive" interactive)] def-body) edebug-match-specs)
  edebug-match-specs((((cl-destructuring-bind (a . b) (cons 1 2) (+ a b))) (163 (164 . 185) (186 (187 . 188) (190 . 192) . 193) (194 (195 . 199) (200 . 201) (202 . 203) . 204) (209 (210 . 211) (212 . 213) (214 . 215) . 216) . 217) . 218) (lambda-list [&optional stringp] [&optional ("declare" &rest sexp)] [&optional ("interactive" interactive)] def-body) edebug-match-specs)
  edebug-match-specs((((cl-destructuring-bind (a . b) (cons 1 2) (+ a b))) (163 (164 . 185) (186 (187 . 188) (190 . 192) . 193) (194 (195 . 199) (200 . 201) (202 . 203) . 204) (209 (210 . 211) (212 . 213) (214 . 215) . 216) . 217) . 218) (name lambda-list [&optional stringp] [&optional ("declare" &rest sexp)] [&optional ("interactive" interactive)] def-body) edebug-match-specs)
  edebug-match-specs((((cl-destructuring-bind (a . b) (cons 1 2) (+ a b))) (163 (164 . 185) (186 (187 . 188) (190 . 192) . 193) (194 (195 . 199) (200 . 201) (202 . 203) . 204) (209 (210 . 211) (212 . 213) (214 . 215) . 216) . 217) . 218) ("defun" name lambda-list [&optional stringp] [&optional ("declare" &rest sexp)] [&optional ("interactive" interactive)] def-body) edebug-match-specs)
  edebug-match-sublist((((cl-destructuring-bind (a . b) (cons 1 2) (+ a b))) (163 (164 . 185) (186 (187 . 188) (190 . 192) . 193) (194 (195 . 199) (200 . 201) (202 . 203) . 204) (209 (210 . 211) (212 . 213) (214 . 215) . 216) . 217) . 218) ("defun" name lambda-list [&optional stringp] [&optional ("declare" &rest sexp)] [&optional ("interactive" interactive)] def-body))
  edebug-match-list((((defun test nil (cl-destructuring-bind (a . b) (cons 1 2) (+ a b)))) (146 (147 . 152) (153 . 157) (158 . 160) (163 (164 . 185) (186 (187 . 188) (190 . 192) . 193) (194 (195 . 199) (200 . 201) (202 . 203) . 204) (209 (210 . 211) (212 . 213) (214 . 215) . 216) . 217) . 218)) ("defun" name lambda-list [&optional stringp] [&optional ("declare" &rest sexp)] [&optional ("interactive" interactive)] def-body))
  edebug-match-one-spec((((defun test nil (cl-destructuring-bind (a . b) (cons 1 2) (+ a b)))) (146 (147 . 152) (153 . 157) (158 . 160) (163 (164 . 185) (186 (187 . 188) (190 . 192) . 193) (194 (195 . 199) (200 . 201) (202 . 203) . 204) (209 (210 . 211) (212 . 213) (214 . 215) . 216) . 217) . 218)) ("defun" name lambda-list [&optional stringp] [&optional ("declare" &rest sexp)] [&optional ("interactive" interactive)] def-body))
  edebug-match-specs((((defun test nil (cl-destructuring-bind (a . b) (cons 1 2) (+ a b)))) (146 (147 . 152) (153 . 157) (158 . 160) (163 (164 . 185) (186 (187 . 188) (190 . 192) . 193) (194 (195 . 199) (200 . 201) (202 . 203) . 204) (209 (210 . 211) (212 . 213) (214 . 215) . 216) . 217) . 218)) (("defun" name lambda-list [&optional stringp] [&optional ("declare" &rest sexp)] [&optional ("interactive" interactive)] def-body)) edebug-match-specs)
  edebug-match((((defun test nil (cl-destructuring-bind (a . b) (cons 1 2) (+ a b)))) (146 (147 . 152) (153 . 157) (158 . 160) (163 (164 . 185) (186 (187 . 188) (190 . 192) . 193) (194 (195 . 199) (200 . 201) (202 . 203) . 204) (209 (210 . 211) (212 . 213) (214 . 215) . 216) . 217) . 218)) (("defun" name lambda-list [&optional stringp] [&optional ("declare" &rest sexp)] [&optional ("interactive" interactive)] def-body)))
  edebug-make-form-wrapper((((defun test nil (cl-destructuring-bind (a . b) (cons 1 2) (+ a b)))) (146 (147 . 152) (153 . 157) (158 . 160) (163 (164 . 185) (186 (187 . 188) (190 . 192) . 193) (194 (195 . 199) (200 . 201) (202 . 203) . 204) (209 (210 . 211) (212 . 213) (214 . 215) . 216) . 217) . 218)) 146 217 (("defun" name lambda-list [&optional stringp] [&optional ("declare" &rest sexp)] [&optional ("interactive" interactive)] def-body)))
  edebug-read-and-maybe-wrap-form1()
  edebug-read-and-maybe-wrap-form()
  edebug-read-top-level-form()
  edebug-eval-defun((4))
  apply(edebug-eval-defun (4))
  eval-defun((4))
  funcall-interactively(eval-defun (4))
  call-interactively(eval-defun nil nil)
  command-execute(eval-defun)

In GNU Emacs 26.0.50.3 (x86_64-pc-linux-gnu, GTK+ Version 3.22.2)
 of 2016-11-04 built on lylat
Repository revision: 44c34c2ed30007fbcb4d33f3c2b390cc17a5b520
Windowing system distributor 'The X.Org Foundation', version 11.0.11804000
System Description:	Debian GNU/Linux testing (stretch)