emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

master b2b2be98da5: Fix nativecomp ICE compiling structure related code


From: Andrea Corallo
Subject: master b2b2be98da5: Fix nativecomp ICE compiling structure related code (bug#63674)
Date: Wed, 24 May 2023 11:21:13 -0400 (EDT)

branch: master
commit b2b2be98da5825e6bc130999ffe38f5ed615586a
Author: Andrea Corallo <akrl@sdf.org>
Commit: Andrea Corallo <akrl@sdf.org>

    Fix nativecomp ICE compiling structure related code (bug#63674)
    
    * lisp/emacs-lisp/cl-macs.el (cl-defstruct): Define the predicate to
    be effective at compile time as native comp relies on `cl-typep' that
    relies o predicates to work.
    
    * test/src/comp-resources/comp-test-funcs.el (cl-lib): Require.
    (comp-test-struct): Define struct.
    (comp-test-63674-1-f): Add new test.
---
 lisp/emacs-lisp/cl-macs.el                 | 9 ++++++---
 test/src/comp-resources/comp-test-funcs.el | 8 ++++++++
 2 files changed, 14 insertions(+), 3 deletions(-)

diff --git a/lisp/emacs-lisp/cl-macs.el b/lisp/emacs-lisp/cl-macs.el
index 6590b1baa1e..0b09cd7d225 100644
--- a/lisp/emacs-lisp/cl-macs.el
+++ b/lisp/emacs-lisp/cl-macs.el
@@ -3093,13 +3093,16 @@ To see the documentation for a defined struct type, use
                               (cons 'and (cdddr pred-form))
                             `(,predicate cl-x))))
     (when pred-form
-      (push `(,defsym ,predicate (cl-x)
+      (push `(eval-and-compile
+               ;; Define the predicate to be effective at compile time
+               ;; as native comp relies on `cl-typep' that relies on
+               ;; predicates to be defined as they are registered in
+               ;; cl-deftype-satisfies.
+               (,defsym ,predicate (cl-x)
                (declare (side-effect-free error-free) (pure t))
                ,(if (eq (car pred-form) 'and)
                     (append pred-form '(t))
                   `(and ,pred-form t)))
-            forms)
-      (push `(eval-and-compile
                (define-symbol-prop ',name 'cl-deftype-satisfies ',predicate))
             forms))
     (let ((pos 0) (descp descs))
diff --git a/test/src/comp-resources/comp-test-funcs.el 
b/test/src/comp-resources/comp-test-funcs.el
index 73da7182a54..d8c72c1a920 100644
--- a/test/src/comp-resources/comp-test-funcs.el
+++ b/test/src/comp-resources/comp-test-funcs.el
@@ -23,6 +23,8 @@
 
 ;;; Code:
 
+(require 'cl-lib)
+
 (defvar comp-tests-var1 3)
 
 (defun comp-tests-varref-f ()
@@ -530,6 +532,12 @@
     (comp-test-62537-1-f))
   t)
 
+(cl-defstruct comp-test-struct)
+
+(defun comp-test-63674-1-f (x)
+  (or
+   (if (comp-test-struct-p pkg) x)
+   t))
 
 
 ;;;;;;;;;;;;;;;;;;;;



reply via email to

[Prev in Thread] Current Thread [Next in Thread]