   U32(o)
   # Assign all the on-stack locals to their addresses.
   scope = o.scope
-  exprs.unshift new Assign SP, normalizePtr(SPREAL, U32.BYTES_PER_ELEMENT, 1)
+  exprs.unshift new Assign SP, normalizePtr(SPREAL, SPREAL.computedType.view.BYTES_PER_ELEMENT,
+                                                    SP.computedType.view.BYTES_PER_ELEMENT)
   exprs.unshift new Assign SPREAL, new Value(new Literal frameSize), '-='
   restoreStack = new Assign SPREAL, new Value(new Literal frameSize), '+='
   if opts.unsafe

      # This is only called when this deref is _not_ the base of a struct
      # access, as in struct accesses, dereferencing is the same as not
      # dereferencing, since . is extended to work like -> in C.
      ty1 = @first.computedType
      makeDeref o, @first, ty1, 0, ty1
    else if (op is '++' or op is '--') and
            (ty1 = @computedType) instanceof PointerType and

        offset = stackOffsetExpr bind.spOffset, bind.type
        if ty instanceof StructType
          return offset
        return new Value ty.view(o), [new Index offset]
      if inner.value is 'null' and ty instanceof PointerType
        # This matters for TI: null will cause the typeset of pointers to be
        # dimorphic.
