Subject: (wrong-type-argument stringp nil) in compilation-error-properties after 981f1358f0

From: Clément Pit-Claudel <[email-masked]>
Date: Tue, 17 Mar 2020 16:30:06 -0400

Hi there,

The docstring of compilation-error-regexp-alist says this:

If FILE, LINE or COLUMN are nil or that index didn’t match, that
information is not present on the matched line.  In that case the
file name is assumed to be the same as the previous one in the
buffer, line number defaults to 1 and column defaults to
beginning of line’s indentation.

But in fact if a filename doesn't match, an error is raised.  To reproduce, create a script tmp.sh with these contents:

echo "Error:abc.xyz: message"
echo "Error: message"

Then run the following:

(let ((buffer (compilation-start "sh ./tmp.sh" nil)))
  (with-current-buffer buffer
    (setq-local
     compilation-error-regexp-alist
     '(("Error:\\(?:\\(?1:.+?\\):\\)? .*" 1)))))

I get the following backtrace:

Debugger entered--Lisp error: (wrong-type-argument stringp nil)
  string-match("/bin/[a-z]*sh\\'" nil)
  compilation-error-properties(1 nil nil nil nil 2 nil)
  compilation-parse-errors(163 #<marker at 201 in *compilation*>)
  compilation--parse-region(163 #<marker at 201 in *compilation*>)
  compilation--ensure-parse(201)
  compilation-filter(#<process compilation> "Error:abc.xyz: message\nError: message\n")

I think this is due to 981f1358f0 Fix compilation-transform-file-match-alist failure.

Here's my config:

In GNU Emacs 28.0.50 (build 5, x86_64-pc-linux-gnu, GTK+ Version 3.22.30, cairo version 1.15.10)
 of 2020-03-15 built on clem-w50-mint
Repository revision: 9dccaf8a5cdb10dae597345ec3741475477a7d97
Repository branch: master
Windowing system distributor 'The X.Org Foundation', version 11.0.11906000
System Description: Linux Mint 19.3

Recent messages:
error in process filter: compilation-error-properties: Wrong type argument: stringp, nil
error in process filter: Wrong type argument: stringp, nil
Compilation finished
Debug on Error enabled globally
(("Error:\\(?:\\(?1:.+?\\):\\)? .*" 1))
Entering debugger...
Mark set [2 times]
Saved text until "or:abc.xyz: message\nError: message\n")
"
Continuing.
forward-sexp: Wrong type argument: stringp, nil
Configured features:
XPM JPEG TIFF GIF PNG RSVG CAIRO SOUND GPM DBUS GSETTINGS GLIB NOTIFY
INOTIFY ACL LIBSELINUX GNUTLS LIBXML2 FREETYPE HARFBUZZ M17N_FLT LIBOTF
ZLIB TOOLKIT_SCROLL_BARS GTK3 X11 XDBE XIM MODULES THREADS LIBSYSTEMD
JSON PDUMPER LCMS2 GMP

Important settings:
  value of $LC_MONETARY: en_DK.UTF-8
  value of $LC_NUMERIC: en_DK.UTF-8
  value of $LC_TIME: en_DK.UTF-8
  value of $LANG: en_US.UTF-8
  value of $XMODIFIERS: @im=ibus
  locale-coding-system: utf-8-unix

Major mode: ELisp/d

Minor modes in effect:
  tooltip-mode: t
  global-eldoc-mode: t
  eldoc-mode: t
  electric-indent-mode: t
  mouse-wheel-mode: t
  tool-bar-mode: t
  menu-bar-mode: t
  file-name-shadow-mode: t
  global-font-lock-mode: t
  font-lock-mode: t
  blink-cursor-mode: t
  auto-composition-mode: t
  auto-encryption-mode: t
  auto-compression-mode: t
  line-number-mode: t
  transient-mark-mode: t

Load-path shadows:
None found.

Features:
(shadow sort mail-extr emacsbug message rmc puny dired dired-loaddefs
format-spec rfc822 mml mml-sec password-cache epa derived epg epg-config
gnus-util rmail rmail-loaddefs text-property-search seq byte-opt gv
bytecomp byte-compile cconv mm-decode mm-bodies mm-encode mail-parse
rfc2231 mailabbrev gmm-utils mailheader sendmail rfc2047 rfc2045
ietf-drums mm-util mail-prsvr mail-utils help-fns radix-tree cl-print
debug backtrace help-mode find-func cus-start cus-load compile comint
ansi-color ring vc-git diff-mode easymenu easy-mmode time-date subr-x
cl-loaddefs cl-lib tooltip eldoc electric uniquify ediff-hook vc-hooks
lisp-float-type mwheel term/x-win x-win term/common-win x-dnd tool-bar
dnd fontset image regexp-opt fringe tabulated-list replace newcomment
text-mode elisp-mode lisp-mode prog-mode register page tab-bar menu-bar
rfn-eshadow isearch timer select scroll-bar mouse jit-lock font-lock
syntax facemenu font-core term/tty-colors frame minibuffer cl-generic
cham georgian utf-8-lang misc-lang vietnamese tibetan thai tai-viet lao
korean japanese eucjp-ms cp51932 hebrew greek romanian slovak czech
european ethiopic indian cyrillic chinese composite charscript charprop
case-table epa-hook jka-cmpr-hook help simple abbrev obarray
cl-preloaded nadvice loaddefs button faces cus-face macroexp files
text-properties overlay sha1 md5 base64 format env code-pages mule
custom widget hashtable-print-readable backquote threads dbusbind
inotify lcms2 dynamic-setting system-font-setting font-render-setting
cairo move-toolbar gtk x-toolkit x multi-tty make-network-process emacs)

Memory information:
((conses 16 67331 7329)
 (symbols 48 8635 1)
 (strings 32 22060 2058)
 (string-bytes 1 691603)
 (vectors 16 12573)
 (vector-slots 8 163864 8882)
 (floats 8 33 67)
 (intervals 56 278 0)
 (buffers 1000 14))