     _precondition(
       !hasPointerRepresentation,
       "StaticString should have Unicode scalar representation")
-    return UnicodeScalar(
-      UInt32(UInt(bitPattern: UnsafePointer<Builtin.RawPointer>(_startPtrOrData)))
-    )
+    return UnicodeScalar(UInt32(UInt(_startPtrOrData)))
   }
 
   /// If `self` stores a pointer to ASCII or UTF-8 code units, the

    CustomDebugStringConvertible,
    CustomReflectable {

  // FIXME(ABI): RawPointer is non-nullable, but we can store a null Unicode
  // scalar in it.  Change it to an integer.
  //
  /// Either a pointer to the start of UTF-8 data, or an integer representation
  /// of a single Unicode scalar.
  internal var _startPtrOrData: Builtin.RawPointer

  /// If `_startPtrOrData` is a pointer, contains the length of the UTF-8 data
  /// in bytes.

    utf8CodeUnitCount: Builtin.Word,
    isASCII: Builtin.Int1
  ) {
    // We don't go through UnsafePointer here to make things simpler for alias
    // analysis. A higher-level algorithm may be trying to make sure an
    // unrelated buffer is not accessed or freed.
    self._startPtrOrData = Builtin.ptrtoint_Word(_start)
    self._utf8CodeUnitCount = utf8CodeUnitCount
    self._flags = Bool(isASCII) ? (0x2 as UInt8)._value : (0x0 as UInt8)._value
  }
