       
       // Map the high nibble of the current code unit into the
       // amount by which to increment the UTF-16 index.
-      let increment = (u16Increments &>> numericCast(hiNibble &<< 1)) & 0x3
+      let increment = (u16Increments &>>
+        Int(extendingOrTruncating: hiNibble &<< (1 as UTF8.CodeUnit))) & 0x3
       let nextCoreIndex = i._coreIndex &+ increment
       let nextBuffer = Index._nextBuffer(after: i._buffer)
 

      self._endIndex = e
    }

    /// A position in a string's `UTF8View` instance.
    ///
    /// You can convert between indices of the different string views by using

    public func index(after i: Index) -> Index {
      // FIXME: swift-3-indexing-model: range check i?
      let currentUnit = UTF8.CodeUnit(extendingOrTruncating: i._buffer)
      let hiNibble = currentUnit &>> (4 as UTF8.CodeUnit)

      // Amounts to increment the UTF-16 index based on the high nibble of a
      // UTF-8 code unit. If the high nibble is:
