Subject: 31.0.50; condition-case's `debug` causes Emacs to exit when in batch mode

From: Stefan Monnier <[email-masked]>
Date: Thu, 06 Mar 2025 12:20:28 -0500

Package: Emacs
Version: 31.0.50

    % /usr/bin/emacs -Q --batch --eval '(setq debug-on-error t)' --eval '(progn (with-demoted-errors "A %S" (error "foo")) (message "B bar"))'
    Debugger entered--Lisp error: (error "foo")
      error("foo")
      (condition-case err (error "foo") ((debug error) (message "A %S" err) nil))
      (condition-case-unless-debug err (error "foo") (error (message "A %S" err) nil))
      (with-demoted-errors "A %S" (error "foo"))
      (progn (with-demoted-errors "A %S" (error "foo")) (message "B bar"))
      eval((progn (with-demoted-errors "A %S" (error "foo")) (message "B bar")) t)
      command-line-1(("--eval" "(setq debug-on-error t)" "--eval" "(progn (with-demoted-errors \"A %S\" (error \"foo\")) (message \"B bar\"))"))
      command-line()
      normal-top-level()
    
    % 

I'm happy to see a backtrace, but I should *also* see the

    A foo
    B bar

messages that I get to see when running this code without `--batch`.

        Stefan