diff --git a/compiler/represent.lisp b/compiler/represent.lisp
index 7392a2aa13c74b273688465ae08bb599945d1eb4..913ec6c2d57ad2c6c46446c55c40655516efa855 100644
--- a/compiler/represent.lisp
+++ b/compiler/represent.lisp
@@ -489,12 +489,13 @@
 ;;; SELECT-REPRESENTATIONS  --  Interface
 ;;;
 ;;;    Entry to representation selection.  First we select the representation
-;;; for all normal TNs, setting the TN-SC.  We then scan all the IR2,
-;;; emitting any necessary coerce and move-arg VOPs.  Finally, we scan all
-;;; TNs looking for ones that might be placed on the number stack, noting
-;;; this so that the number-FP can be allocated.  This must be done last,
-;;; since references in new environments may be introduced by MOVE-ARG
-;;; insertion.
+;;; for all normal TNs, setting the TN-SC.  After selecting the TN
+;;; representations, we set the SC for all :ALIAS TNs to be the representation
+;;; chosen for the original TN.  We then scan all the IR2, emitting any
+;;; necessary coerce and move-arg VOPs.  Finally, we scan all TNs looking for
+;;; ones that might be placed on the number stack, noting this so that the
+;;; number-FP can be allocated.  This must be done last, since references in
+;;; new environments may be introduced by MOVE-ARG insertion.
 ;;;
 (defun select-representations (component)
   (let ((costs (make-array sc-number-limit))
@@ -512,6 +513,11 @@
 	  (assert sc)
 	  (setf (tn-sc tn) sc))))
 
+    (do ((alias (ir2-component-alias-tns 2comp)
+		(tn-next alias)))
+	((null alias))
+      (setf (tn-sc alias) (tn-sc (tn-save-tn alias))))
+
     (do-ir2-blocks (block component)
       (emit-moves-and-coercions block))