]> git.eshelyaron.com Git - emacs.git/commitdiff
Fix `comp-mvar-symbol-p' and `comp-mvar-cons-p' (bug#44968)
authorAndrea Corallo <akrl@sdf.org>
Mon, 30 Nov 2020 22:46:48 +0000 (23:46 +0100)
committerAndrea Corallo <akrl@sdf.org>
Mon, 30 Nov 2020 23:09:46 +0000 (00:09 +0100)
* lisp/emacs-lisp/comp.el (comp-mvar-symbol-p): As all slots into
a `comp-cstr' are in or fix this logic.
(comp-mvar-cons-p): Likewise.
* test/src/comp-tests.el (bug-44968): New testcase.
* test/src/comp-test-funcs.el (comp-test-44968-f): New test
function.

lisp/emacs-lisp/comp.el
test/src/comp-test-funcs.el
test/src/comp-tests.el

index 498aae183a540cc330f792d17caa25e58c91c306..13f9beb5f96ee3a53c9778ce3fa985eeddc41844 100644 (file)
@@ -550,12 +550,18 @@ CFG is mutated by a pass.")
 
 (defun comp-mvar-symbol-p (mvar)
   "Return t if MVAR is certainly a symbol."
-  (or (equal (comp-mvar-typeset mvar) '(symbol))
-      (cl-every #'symbolp (comp-mvar-valset mvar))))
+  (and (null (comp-mvar-range mvar))
+       (or (and (null (comp-mvar-valset mvar))
+                (equal (comp-mvar-typeset mvar) '(symbol)))
+           (and (or (null (comp-mvar-typeset mvar))
+                    (equal (comp-mvar-typeset mvar) '(symbol)))
+                (cl-every #'symbolp (comp-mvar-valset mvar))))))
 
 (defsubst comp-mvar-cons-p (mvar)
   "Return t if MVAR is certainly a cons."
-  (equal (comp-mvar-typeset mvar) '(cons)))
+  (and (null (comp-mvar-valset mvar))
+       (null (comp-mvar-range mvar))
+       (equal (comp-mvar-typeset mvar) '(cons))))
 
 (defun comp-mvar-type-hint-match-p (mvar type-hint)
   "Match MVAR against TYPE-HINT.
index 207b6455f7328cbafd70ec346483f8f36f5b6ec9..5fa427be190273cf8e9e839315ac400a45afda80 100644 (file)
        it
       nil)))
 
+(defun comp-test-44968-f (start end)
+  (let ((dirlist)
+        (dir (expand-file-name start))
+        (end (expand-file-name end)))
+    (while (not (or (equal dir (car dirlist))
+                    (file-equal-p dir end)))
+      (push dir dirlist)
+      (setq dir (directory-file-name (file-name-directory dir))))
+    (nreverse dirlist)))
+
 \f
 ;;;;;;;;;;;;;;;;;;;;
 ;; Tromey's tests ;;
index dd97ccd5bd1c1ccbd16824c4a3d85531d46e7196..c2af52e4cab0e64e0b0cd23cee39e06f3d5e49e8 100644 (file)
@@ -391,6 +391,10 @@ https://lists.gnu.org/archive/html/bug-gnu-emacs/2020-03/msg00914.html."
   (should (string= (comp-test-42360-f "Nel mezzo del " 18 0 32 "yyy" nil)
                    "Nel mezzo del     yyy")))
 
+(comp-deftest bug-44968 ()
+  "<https://lists.gnu.org/archive/html/bug-gnu-emacs/2020-11/msg02357.html>"
+  (comp-test-44968-f "/tmp/test/foo" "/tmp"))
+
 (defvar comp-test-primitive-advice)
 (comp-deftest primitive-advice ()
   "Test effectiveness of primitive advicing."