summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrea Corallo <akrl@sdf.org>2023-03-05 10:46:18 +0100
committerAndrea Corallo <akrl@sdf.org>2023-03-05 11:06:37 +0100
commit9c18af0cfaf2d949d782f6c44c6604b54dbb87a0 (patch)
tree4c2df058e89d64a91231247295f81e368c39a379
parent5af695c7479f97d86bf913b5ff96d3f3b744781f (diff)
downloademacs-9c18af0cfaf2d949d782f6c44c6604b54dbb87a0.tar.gz
* Warn when certain primitives are redefined (bug#61880)
* lisp/emacs-lisp/comp.el (comp-warn-primitives): New constant. (comp-subr-trampoline-install): Warn when a sensitive primitive is being redefined.
-rw-r--r--lisp/emacs-lisp/comp.el11
1 files changed, 11 insertions, 0 deletions
diff --git a/lisp/emacs-lisp/comp.el b/lisp/emacs-lisp/comp.el
index 046d169f00f..48756caf100 100644
--- a/lisp/emacs-lisp/comp.el
+++ b/lisp/emacs-lisp/comp.el
@@ -698,11 +698,22 @@ Useful to hook into pass checkers.")
(defvar comp-no-spawn nil
"Non-nil don't spawn native compilation processes.")
+(defconst comp-warn-primitives
+ '(null memq gethash and subrp not subr-native-elisp-p
+ comp--install-trampoline concat if symbolp symbol-name make-string
+ length aset aref length> mapcar expand-file-name
+ file-name-as-directory file-exists-p native-elisp-load)
+ "List of primitives we want to warn about in case of redefinition.
+This are essential for the trampoline machinery to work properly.")
+
;; Moved early to avoid circularity when comp.el is loaded and
;; `macroexpand' needs to be advised (bug#47049).
;;;###autoload
(defun comp-subr-trampoline-install (subr-name)
"Make SUBR-NAME effectively advice-able when called from native code."
+ (when (memq subr-name comp-warn-primitives)
+ (warn "Redefining `%s' might breaks trampoline native compilation."
+ subr-name))
(unless (or (null native-comp-enable-subr-trampolines)
(memq subr-name native-comp-never-optimize-functions)
(gethash subr-name comp-installed-trampolines-h))