Oh, it has to return a true boolean, not a generalized boolean.

(defun %other-pointer-subtype-p (x choices)
  (and (%other-pointer-p x)
       (not (null (member (%other-pointer-widetag x) choices)))))


On Sat, May 17, 2014 at 9:54 PM, Douglas Katzman <dougk@google.com> wrote:
Of course. Before I get into deeper trouble... How's this diff?
The reader conditional isn't strictly needed but seems to be customary based on the example above.

diff --git a/src/code/pred.lisp b/src/code/pred.lisp
index 43d12d9..33b658e 100644
--- a/src/code/pred.lisp
+++ b/src/code/pred.lisp
@@ -160,6 +160,10 @@
   (and (fixnump x)
        (<= 0 x limit)))
 
+#!+(or x86 x86-64)
+(defun %other-pointer-subtype-p (x choices)
+  (and (%other-pointer-p x)
+       (member (%other-pointer-widetag x) choices)))



On Sat, May 17, 2014 at 9:36 PM, Stas Boukarev <stassats@gmail.com> wrote:
Douglas Katzman <dougk@google.com> writes:

> ok, fixed now.
Now the same for %other-pointer-subtype-p.
(lambda () (typep #() '(or simple-vector simple-string)))
=>
full call to SB-KERNEL:%OTHER-POINTER-SUBTYPE-P.
[Condition of type SB-INT:BUG]
--
With best regards, Stas.