The Edebug spec for and-let* inherits from if-let*, but and-let* allows its code body to be empty and if-let*'s Edebug spec does not permit that. To reproduce: Load test/lisp/emacs-lisp/subr-x-tests.el M-x edebug-all-defs RET M-x eval-buffer RET Result: edebug-syntax-error: Invalid read syntax: "Expected form" The error happens while instrumenting subr-x-and-let*-test-empty-varlist. I noticed while looking at the Edebug specs for these macros that the one for if-let* uses "sexp" to match a form which will be evaluated, in the case where a test is not bound to a symbol (referred to as the (VALUEFORM) case in the docstring). This will cause Edebug to skip over that test instead of stepping through it, so it should be changed from "sexp" to "form". After those two fixes, Edebug still fails to instrument subr-x-tests.el because of a missing quote in subr-x-and-let*-test-group-1. Here is a patch with all three of these fixed: