summaryrefslogtreecommitdiff
path: root/lisp/emacs-lisp
diff options
context:
space:
mode:
authorAndrea Corallo <acorallo@gnu.org>2023-12-04 19:14:28 +0100
committerAndrea Corallo <acorallo@gnu.org>2023-12-04 20:57:52 +0100
commitf5e45247081ab2489581c650423413a2b6c2caf9 (patch)
tree99ea970cf13acf489196b7e9fdd0e2d557f49a78 /lisp/emacs-lisp
parent365114d3bda270f35268ab7d5335de3bec0e89ac (diff)
comp: Fix mvar dependency chain (bug#67239)
* lisp/emacs-lisp/comp.el (comp-add-cond-cstrs): Emit assume with the original mvar as explicit rhs. (comp-fwprop-insn): Add note. * test/src/comp-tests.el (67239-1): Add new test. * test/src/comp-resources/comp-test-funcs.el (comp-test-time) (comp-test-67239-00-f, comp-test-67239-0-f, comp-test-67239-1-f): Define.
Diffstat (limited to 'lisp/emacs-lisp')
-rw-r--r--lisp/emacs-lisp/comp.el14
1 files changed, 10 insertions, 4 deletions
diff --git a/lisp/emacs-lisp/comp.el b/lisp/emacs-lisp/comp.el
index 08d406b7999..39e32d5142c 100644
--- a/lisp/emacs-lisp/comp.el
+++ b/lisp/emacs-lisp/comp.el
@@ -1967,10 +1967,14 @@ TARGET-BB-SYM is the symbol name of the target block."
(set ,(and (pred comp-mvar-p) mvar-3)
(call memq ,(and (pred comp-mvar-p) mvar-1) ,(and (pred comp-mvar-p) mvar-2)))
(cond-jump ,(and (pred comp-mvar-p) mvar-3) ,(pred comp-mvar-p) ,bb1 ,bb2))
- (push `(assume ,mvar-tested ,(make-comp-mvar :type (comp-cstr-cl-tag mvar-tag)))
- (comp-block-insns (comp-add-cond-cstrs-target-block b bb2)))
- (push `(assume ,mvar-tested ,(make-comp-mvar :type (comp-cstr-cl-tag mvar-tag) :neg t))
- (comp-block-insns (comp-add-cond-cstrs-target-block b bb1))))
+ (comp-emit-assume 'and mvar-tested
+ (make-comp-mvar :type (comp-cstr-cl-tag mvar-tag))
+ (comp-add-cond-cstrs-target-block b bb2)
+ nil)
+ (comp-emit-assume 'and mvar-tested
+ (make-comp-mvar :type (comp-cstr-cl-tag mvar-tag))
+ (comp-add-cond-cstrs-target-block b bb1)
+ t))
(`((set ,(and (pred comp-mvar-p) cmp-res)
(,(pred comp--call-op-p)
,(and (or (pred comp--equality-fun-p)
@@ -2645,6 +2649,8 @@ Fold the call in case."
(_
(comp-cstr-shallow-copy lval rval))))
(`(assume ,lval ,(and (pred comp-mvar-p) rval))
+ ;; NOTE we should probably assert this case in the future when
+ ;; will be possible.
(comp-cstr-shallow-copy lval rval))
(`(assume ,lval (,kind . ,operands))
(cl-case kind