Subject: bug#76701: 31.0.50; recent regression in [global] font-lock-mode?

From: Madhu <[email-masked]>
Date: Mon, 03 Mar 2025 08:45:05 +0530 (IST)

[I posted a query
https://lists.gnu.org/archive/html/help-gnu-emacs/2025-03/msg00005.html
on help-gnu-emacs but the discussion didn't proceed, so I'm reposting
here]

Attached is a test case named `debug-font-lock-foo-spec-mode.el' which
sets up a minor-mode foo-spec-mode for *.foospec files which
highlights the string "FOO-SPEC" with font-lock-warning-space.

On invoking the following sequence
```
echo FOO-SPEC > /tmp/foo.foospec
emacs -Q -l debug-font-lock-foo-spec-mode.el /tmp/foo.foospec
```

I expect to open "/tmp/foo.foospec" in a buffer and have it fontified
in red.  However the buffer ends up with font-lock-mode: nil even
though global-font-lock-mode is t (under emacs -Q).

I think this used to work until recently. Is this a possible
regression or is the testcase flawed because of some recent changes?
--Best Regards, Madhu

(defvar foo-spec-mode-font-lock-keywords
  (list
   (cons "^FOO-SPEC$"  '(0 font-lock-warning-face))))

(defun foo-spec-mode ()
  (interactive)
  (kill-all-local-variables)
  (setq major-mode 'foo-spec-mode)
  (setq mode-name "FooSpec")
  (setq-local font-lock-defaults '(foo-spec-mode-font-lock-keywords nil t))
  (run-hooks 'foo-spec-mode-hook))

(add-to-list 'auto-mode-alist '("\\.foospec$" . foo-spec-mode))