]> git.eshelyaron.com Git - emacs.git/commitdiff
Propagate function calls also when hiddend under funcall
authorAndrea Corallo <akrl@sdf.org>
Mon, 28 Dec 2020 10:54:34 +0000 (11:54 +0100)
committerAndrea Corallo <akrl@sdf.org>
Mon, 28 Dec 2020 15:12:08 +0000 (16:12 +0100)
* lisp/emacs-lisp/comp.el (comp-fwprop-call): Propagate functions
also when called under `funcall'.
* test/src/comp-tests.el (comp-tests-type-spec-tests): Add a test.

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

index c6bd040e5f6fbbe53977b8eeefac414054285fd1..2ca7c50045e1a4828a8d4dd028455a1b4bca292a 100644 (file)
@@ -2642,6 +2642,10 @@ Return non-nil if the function is folded successfully."
 F is the function being called with arguments ARGS.
 Fold the call in case."
   (unless (comp-function-call-maybe-fold insn f args)
+    (when (and (eq 'funcall f)
+               (comp-mvar-value-vld-p (car args)))
+      (setf f (comp-mvar-value (car args))
+            args (cdr args)))
     (when-let ((cstr-f (gethash f comp-known-func-cstr-h)))
       (let ((cstr (comp-cstr-f-ret cstr-f)))
         (setf (comp-mvar-range lval) (comp-cstr-range cstr)
index dbfa3702ff166d0b2680c5562345878b7ddfa21f..d4eb39a736f55f2c27279bf0e12a4381256126dd 100644 (file)
@@ -1137,7 +1137,12 @@ Return a list of results."
       ((defun comp-tests-ret-type-spec-f (x)
          (when (<= 1 x 5)
            (1- x)))
-       (or null float (integer 0 4)))))
+       (or null float (integer 0 4)))
+
+      ;; 47
+      ((defun comp-tests-ret-type-spec-f ()
+         (error "foo"))
+       nil)))
 
   (defun comp-tests-define-type-spec-test (number x)
     `(comp-deftest ,(intern (format "ret-type-spec-%d" number)) ()