From cd739d3644be618008e5c369b4e96201a05a3d1b Mon Sep 17 00:00:00 2001 From: Andrea Corallo Date: Tue, 15 Oct 2024 15:30:49 +0200 Subject: Fix comp branch-optim pass (bug#73270) * test/src/comp-tests.el (comp-test-73270-1): Define new test. * test/src/comp-resources/comp-test-funcs.el (comp-test-73270-base) (comp-test-73270-child1, comp-test-73270-child2) (comp-test-73270-child3, comp-test-73270-child4) (comp-test-73270-1-f): Define. * lisp/emacs-lisp/comp-cstr.el (comp-cstr-type-p): Fix it for nil cstrs. --- lisp/emacs-lisp/comp-cstr.el | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) (limited to 'lisp/emacs-lisp/comp-cstr.el') diff --git a/lisp/emacs-lisp/comp-cstr.el b/lisp/emacs-lisp/comp-cstr.el index 66c44f16835..b2eaf8cc423 100644 --- a/lisp/emacs-lisp/comp-cstr.el +++ b/lisp/emacs-lisp/comp-cstr.el @@ -950,9 +950,12 @@ Non memoized version of `comp-cstr-intersection-no-mem'." (if-let ((pred (get type 'cl-deftype-satisfies))) (and (null (range cstr)) (null (neg cstr)) - (and (or (null (typeset cstr)) - (equal (typeset cstr) `(,type))) - (cl-every pred (valset cstr)))) + (if (null (typeset cstr)) + (and (valset cstr) + (cl-every pred (valset cstr))) + (when (equal (typeset cstr) `(,type)) + ;; (valset cstr) can be nil as well. + (cl-every pred (valset cstr))))) (error "Unknown predicate for type %s" type))))) t)) -- cgit v1.2.3 From 1686d48417315f809403aeb29559788ef4b755a6 Mon Sep 17 00:00:00 2001 From: Andrea Corallo Date: Tue, 15 Oct 2024 21:02:59 +0200 Subject: * lisp/emacs-lisp/comp-cstr.el (comp-cstr-type-p): Add assertion. --- lisp/emacs-lisp/comp-cstr.el | 2 ++ 1 file changed, 2 insertions(+) (limited to 'lisp/emacs-lisp/comp-cstr.el') diff --git a/lisp/emacs-lisp/comp-cstr.el b/lisp/emacs-lisp/comp-cstr.el index b2eaf8cc423..3f70b42774f 100644 --- a/lisp/emacs-lisp/comp-cstr.el +++ b/lisp/emacs-lisp/comp-cstr.el @@ -936,6 +936,8 @@ Non memoized version of `comp-cstr-intersection-no-mem'." (defun comp-cstr-type-p (cstr type) "Return t if CSTR is certainly of type TYPE." + ;; Only basic types are valid input. + (cl-assert (symbolp type)) (when (with-comp-cstr-accessors (cl-case type -- cgit v1.2.3