From c6210521bebbafca6d21983c020e296bdb0ee99b Mon Sep 17 00:00:00 2001
From: ram <ram>
Date: Mon, 5 Mar 1990 17:02:43 +0000
Subject: [PATCH] Changed ILLEGAL-MOVE to signal an error.

---
 compiler/old-rt/move.lisp | 24 ++++++++++++++++--------
 1 file changed, 16 insertions(+), 8 deletions(-)

diff --git a/compiler/old-rt/move.lisp b/compiler/old-rt/move.lisp
index 38bf6d8b1..d6063dcfd 100644
--- a/compiler/old-rt/move.lisp
+++ b/compiler/old-rt/move.lisp
@@ -102,15 +102,23 @@
 
 ;;;; ILLEGAL-MOVE
 
-;;; This VOP exists just to begin the lifetime of a TN that couldn't be written
-;;; legally due to a type error.  An error is signalled before this VOP is
-;;; so we don't need to do anything (not that there would be anything sensible
-;;; to do anyway.)
+;;; This VOP is emitted when we attempt to do a move between incompatible
+;;; primitive types.  We signal an error, and ignore the result (which is
+;;; specified only to terminate its lifetime.)
 ;;;
-(define-vop (illegal-move)
-  (:results (y))
-  (:ignore y)
-  (:generator 666))
+(define-vop (illegal-move three-arg-miscop)
+  (:args (x :scs (any-reg descriptor-reg) :target a1)
+	 (y-type :scs (any-reg descriptor-reg) :target a2))
+  (:variant-vars)
+  (:ignore r a3 nl0 nl1 misc-pc)
+  (:generator 666
+    (loadi a0 clc::error-object-not-type)
+    (unless (location= x a1)
+      (inst lr a1 x))
+    (unless (location= y-type a2)
+      (inst lr a2 y-type))
+    (inst miscop 'clc::error2)
+    (note-this-location vop :internal-error)))
 
 
 ;;;; Operand loading and saving:
-- 
GitLab