From 05ecb2b8f0216aa3f391ee661aad4d61fd6aed0e Mon Sep 17 00:00:00 2001 From: Andrea Corallo Date: Tue, 17 Jun 2025 09:06:45 +0200 Subject: [PATCH] Nativecomp don't error with undeclared types (bug#6573) (don't merge) Backporting f38e969e472 from trunk to emacs-30 * test/src/comp-resources/comp-test-funcs.el (comp-test-76573-1-f): New function. * lisp/emacs-lisp/comp-cstr.el (comp-supertypes): Don't error if 'type' is unknown. --- lisp/emacs-lisp/comp-cstr.el | 10 +++++++--- test/src/comp-resources/comp-test-funcs.el | 20 ++++++++++++++++++++ 2 files changed, 27 insertions(+), 3 deletions(-) diff --git a/lisp/emacs-lisp/comp-cstr.el b/lisp/emacs-lisp/comp-cstr.el index 52ed73ff5c3..ca59eb04901 100644 --- a/lisp/emacs-lisp/comp-cstr.el +++ b/lisp/emacs-lisp/comp-cstr.el @@ -336,9 +336,13 @@ Return them as multiple value." (nreverse res)))) (defun comp-supertypes (type) - "Return the ordered list of supertypes of TYPE." - (or (assq type (comp-cstr-ctxt-typeof-types comp-ctxt)) - (error "Type %S missing from typeof-types!" type))) + "Return the ordered list of supertypes of TYPE." + (or (assq type (comp-cstr-ctxt-typeof-types comp-ctxt)) + (progn + (display-warning + 'native-compiler + (format "Unknown type %S" type)) + '(t)))) (defun comp--union-typesets (&rest typesets) "Union types present into TYPESETS." diff --git a/test/src/comp-resources/comp-test-funcs.el b/test/src/comp-resources/comp-test-funcs.el index 72fe71aa359..837ef018efb 100644 --- a/test/src/comp-resources/comp-test-funcs.el +++ b/test/src/comp-resources/comp-test-funcs.el @@ -562,6 +562,26 @@ (defun comp-test-67883-1-f () '#1=(1 . #1#)) +(cl-defstruct comp-test-73270-base) +(cl-defstruct + (comp-test-73270-child1 (:include comp-test-73270-base))) +(cl-defstruct + (comp-test-73270-child2 (:include comp-test-73270-base))) +(cl-defstruct + (comp-test-73270-child3 (:include comp-test-73270-base))) +(cl-defstruct + (comp-test-73270-child4 (:include comp-test-73270-base))) + +(defun comp-test-73270-1-f (x) + (cl-typecase x + (comp-test-73270-child1 'child1) + (comp-test-73270-child2 'child2) + (comp-test-73270-child3 'child3) + (comp-test-73270-child4 'child4))) + +(defun comp-test-76573-1-f () + (record 'undeclared-type)) + ;;;;;;;;;;;;;;;;;;;; ;; Tromey's tests ;;