diff --git a/asdf.lisp b/asdf.lisp
index 269a579..2ec917f 100644
--- a/asdf.lisp
+++ b/asdf.lisp
@@ -750,6 +750,14 @@ actually-existing directory."
                  :directory '(:absolute)
                  :name nil :type nil :version nil))
 
+(defun probe-file-or-dir (p)
+  ;; CLISP signals an error when PROBE-FILE is used on a directory
+  #+clisp
+  (ignore-errors (truename p))
+  #-clisp
+  (and (not (wild-pathname-p p))
+       (probe-file p)))
+
 (defun truenamize (p)
   "Resolve as much of a pathname as possible"
   (block nil
@@ -757,10 +765,11 @@ actually-existing directory."
     (let* ((p (merge-pathnames* p))
            (directory (pathname-directory p)))
       (when (typep p 'logical-pathname) (return p))
-      (ignore-errors (return (truename p)))
+      (let ((found (probe-file-or-dir p)))
+        (when found (return found)))
       #-sbcl (when (stringp directory) (return p))
       (when (not (eq :absolute (car directory))) (return p))
-      (let ((sofar (ignore-errors (truename (pathname-root p)))))
+      (let ((sofar (probe-file-or-dir (pathname-root p))))
         (unless sofar (return p))
         (flet ((solution (directories)
                  (merge-pathnames*
@@ -772,11 +781,10 @@ actually-existing directory."
                   sofar)))
           (loop :for component :in (cdr directory)
             :for rest :on (cdr directory)
-            :for more = (ignore-errors
-                          (truename
+            :for more = (probe-file-or-dir
                            (merge-pathnames*
                             (make-pathname :directory `(:relative ,component))
-                            sofar))) :do
+                            sofar)) :do
             (if more
                 (setf sofar more)
                 (return (solution rest)))
@@ -2502,9 +2510,9 @@ located."
 
 (defun try-directory-subpath (x sub &key type)
   (let* ((p (and x (ensure-directory-pathname x)))
-         (tp (and p (ignore-errors (truename p))))
+         (tp (and p (probe-file-or-dir p)))
          (sp (and tp (merge-pathnames* (merge-component-name-type sub :type type) p)))
-         (ts (and sp (ignore-errors (truename sp)))))
+         (ts (and sp (probe-file-or-dir sp))))
     (and ts (values sp ts))))
 (defun user-configuration-directories ()
   (remove-if
@@ -2531,8 +2539,8 @@ located."
     (list #p"/etc/common-lisp/"))))
 (defun in-first-directory (dirs x)
   (loop :for dir :in dirs
-    :thereis (and dir (ignore-errors
-                        (truename (merge-pathnames* x (ensure-directory-pathname dir)))))))
+    :thereis (and dir (probe-file-or-dir
+                       (merge-pathnames* x (ensure-directory-pathname dir))))))
 (defun in-user-configuration-directory (x)
   (in-first-directory (user-configuration-directories) x))
 (defun in-system-configuration-directory (x)
