Merge pull request #2379 from rudkx/unreachable
diff --git a/stdlib/public/core/Algorithm.swift b/stdlib/public/core/Algorithm.swift
index c6a5510..a80ec94 100644
--- a/stdlib/public/core/Algorithm.swift
+++ b/stdlib/public/core/Algorithm.swift
@@ -128,14 +128,14 @@
 extension EnumeratedIterator {
   @available(*, unavailable, message: "use the 'enumerated()' method on the sequence")
   public init(_ base: Base) {
-    fatalError("unavailable function can't be called")
+    Builtin.unreachable()
   }
 }
 
 extension EnumeratedSequence {
   @available(*, unavailable, message: "use the 'enumerated()' method on the sequence")
   public init(_ base: Base) {
-    fatalError("unavailable function can't be called")
+    Builtin.unreachable()
   }
 }
 
diff --git a/stdlib/public/core/Arrays.swift.gyb b/stdlib/public/core/Arrays.swift.gyb
index 7b177a8..3caa918 100644
--- a/stdlib/public/core/Arrays.swift.gyb
+++ b/stdlib/public/core/Arrays.swift.gyb
@@ -2057,19 +2057,19 @@
 extension ${Self} {
   @available(*, unavailable, message: "Please use init(repeating:count:) instead")
   init(count: Int, repeatedValue: Element) {
-    fatalError("unavailable function can't be called")
+    Builtin.unreachable()
   }
 
   @available(*, unavailable, renamed: "remove")
   public mutating func removeAtIndex(_ index: Int) -> Element {
-    fatalError("unavailable function can't be called")
+    Builtin.unreachable()
   }
 
   @available(*, unavailable, renamed: "replaceSubrange")
   public mutating func replaceRange<
     C : Collection where C.Iterator.Element == _Buffer.Element
   >(_ subRange: Range<Int>, with newElements: C) {
-    fatalError("unavailable function can't be called")
+    Builtin.unreachable()
   }
 
   @available(*, unavailable, renamed: "append(contentsOf:)")
@@ -2078,7 +2078,7 @@
     where
     S.Iterator.Element == Element
   >(_ newElements: S) {
-    fatalError("unavailable function can't be called")
+    Builtin.unreachable()
   }
 }
 %end
diff --git a/stdlib/public/core/BridgeObjectiveC.swift b/stdlib/public/core/BridgeObjectiveC.swift
index a1ebdf1..d366747 100644
--- a/stdlib/public/core/BridgeObjectiveC.swift
+++ b/stdlib/public/core/BridgeObjectiveC.swift
@@ -530,12 +530,12 @@
 
   @available(*, unavailable, renamed: "pointee")
   public var memory: Pointee {
-    fatalError("unavailable function can't be called")
+    Builtin.unreachable()
   }
 
   @available(*, unavailable, message: "Removed in Swift 3. Please use nil literal instead.")
   public init() {
-    fatalError("unavailable function can't be called")
+    Builtin.unreachable()
   }
 }
 #endif
diff --git a/stdlib/public/core/Builtin.swift b/stdlib/public/core/Builtin.swift
index 3c4ef0e..071a120 100644
--- a/stdlib/public/core/Builtin.swift
+++ b/stdlib/public/core/Builtin.swift
@@ -204,7 +204,7 @@
 
 @available(*, unavailable, renamed: "unsafeAddress(of:)")
 public func unsafeAddressOf(_ object: AnyObject) -> UnsafePointer<Void> {
-  fatalError("unavailable function can't be called")
+  Builtin.unreachable()
 }
 
 /// Converts a reference of type `T` to a reference of type `U` after
@@ -594,5 +594,5 @@
 
 @available(*, unavailable, message: "Removed in Swift 3. Please use Optional.unsafelyUnwrapped instead.")
 public func unsafeUnwrap<T>(_ nonEmpty: T?) -> T {
-  fatalError("unavailable function can't be called")
+  Builtin.unreachable()
 }
diff --git a/stdlib/public/core/CString.swift b/stdlib/public/core/CString.swift
index 8376e5a..15d6095 100644
--- a/stdlib/public/core/CString.swift
+++ b/stdlib/public/core/CString.swift
@@ -94,7 +94,7 @@
   @available(*, unavailable, message: "Please use String.init?(validatingUTF8:) instead. Note that it no longer accepts NULL as a valid input. Also consider using String(cString:), that will attempt to repair ill-formed code units.")
   @warn_unused_result
   public static func fromCString(_ cs: UnsafePointer<CChar>) -> String? {
-    fatalError("unavailable function can't be called")
+    Builtin.unreachable()
   }
 
   @available(*, unavailable, message: "Please use String.init(cString:) instead. Note that it no longer accepts NULL as a valid input. See also String.decodeCString if you need more control.")
@@ -102,6 +102,6 @@
   public static func fromCStringRepairingIllFormedUTF8(
     _ cs: UnsafePointer<CChar>
   ) -> (String?, hadError: Bool) {
-    fatalError("unavailable function can't be called")
+    Builtin.unreachable()
   }
 }
diff --git a/stdlib/public/core/Collection.swift b/stdlib/public/core/Collection.swift
index 6e8e396..b4876ee 100644
--- a/stdlib/public/core/Collection.swift
+++ b/stdlib/public/core/Collection.swift
@@ -1468,12 +1468,12 @@
 
   @available(*, unavailable, renamed: "makeIterator")
   public func generate() -> Iterator {
-    fatalError("unavailable function can't be called")
+    Builtin.unreachable()
   }
 
   @available(*, unavailable, message: "Removed in Swift 3. Please use underestimatedCount property.")
   public func underestimateCount() -> Int {
-    fatalError("unavailable function can't be called")
+    Builtin.unreachable()
   }
 
   @available(*, unavailable, message: "Please use split(maxSplits:omittingEmptySubsequences:isSeparator:) instead")
@@ -1482,7 +1482,7 @@
     allowEmptySlices: Bool = false,
     isSeparator: @noescape (Iterator.Element) throws -> Bool
   ) rethrows -> [SubSequence] {
-    fatalError("unavailable function can't be called")
+    Builtin.unreachable()
   }
 }
 
@@ -1493,7 +1493,7 @@
     maxSplit: Int = Int.max,
     allowEmptySlices: Bool = false
   ) -> [SubSequence] {
-    fatalError("unavailable function can't be called")
+    Builtin.unreachable()
   }
 }
 
diff --git a/stdlib/public/core/CollectionAlgorithms.swift.gyb b/stdlib/public/core/CollectionAlgorithms.swift.gyb
index b136930..7cd55a3 100644
--- a/stdlib/public/core/CollectionAlgorithms.swift.gyb
+++ b/stdlib/public/core/CollectionAlgorithms.swift.gyb
@@ -642,7 +642,7 @@
     _ range: Range<Index>,
     isOrderedBefore: (${IElement}, ${IElement}) -> Bool
   ) -> Index {
-    fatalError("unavailable function can't be called")
+    Builtin.unreachable()
   }
 }
 
@@ -651,7 +651,7 @@
 
   @available(*, unavailable, message: "slice the collection using the range, and call partition()")
   public mutating func partition(_ range: Range<Index>) -> Index {
-    fatalError("unavailable function can't be called")
+    Builtin.unreachable()
   }
 }
 
@@ -662,7 +662,7 @@
 
   @available(*, unavailable, renamed: "sort")
   public mutating func sortInPlace() {
-    fatalError("unavailable function can't be called")
+    Builtin.unreachable()
   }
 }
 
@@ -671,7 +671,7 @@
   public mutating func sortInPlace(
     _ isOrderedBefore: @noescape (Iterator.Element, Iterator.Element) -> Bool
   ) {
-    fatalError("unavailable function can't be called")
+    Builtin.unreachable()
   }
 }
 
@@ -679,7 +679,7 @@
   @available(*, unavailable, renamed: "index(of:)")
   @warn_unused_result
   public func indexOf(_ element: ${IElement}) -> Index? {
-    fatalError("unavailable function can't be called")
+    Builtin.unreachable()
   }
 }
 
@@ -689,6 +689,6 @@
   public func indexOf(
     _ predicate: @noescape (${IElement}) throws -> Bool
   ) rethrows -> Index? {
-    fatalError("unavailable function can't be called")
+    Builtin.unreachable()
   }
 }
diff --git a/stdlib/public/core/CollectionOfOne.swift b/stdlib/public/core/CollectionOfOne.swift
index 5c592d7..5dc33bf 100644
--- a/stdlib/public/core/CollectionOfOne.swift
+++ b/stdlib/public/core/CollectionOfOne.swift
@@ -106,6 +106,6 @@
 extension IteratorOverOne {
   @available(*, unavailable, renamed: "makeIterator")
   public func generate() -> IteratorOverOne<Element> {
-    fatalError("unavailable function can't be called")
+    Builtin.unreachable()
   }
 }
diff --git a/stdlib/public/core/EmptyCollection.swift b/stdlib/public/core/EmptyCollection.swift
index 0eaf04c..98f9e17 100644
--- a/stdlib/public/core/EmptyCollection.swift
+++ b/stdlib/public/core/EmptyCollection.swift
@@ -162,6 +162,6 @@
 extension EmptyIterator {
   @available(*, unavailable, renamed: "makeIterator")
   public func generate() -> EmptyIterator<Element> {
-    fatalError("unavailable function can't be called")
+    Builtin.unreachable()
   }
 }
diff --git a/stdlib/public/core/ExistentialCollection.swift.gyb b/stdlib/public/core/ExistentialCollection.swift.gyb
index 4acc71d..90fa4eb 100644
--- a/stdlib/public/core/ExistentialCollection.swift.gyb
+++ b/stdlib/public/core/ExistentialCollection.swift.gyb
@@ -1106,7 +1106,7 @@
 extension AnyIterator {
   @available(*, unavailable, renamed: "makeIterator")
   public func generate() -> AnyIterator<Element> {
-    fatalError("unavailable function can't be called")
+    Builtin.unreachable()
   }
 }
 
@@ -1115,7 +1115,7 @@
 
   @available(*, unavailable, message: "Please use underestimatedCount property instead.")
   public var underestimateCount: Int {
-    fatalError("unavailable function can't be called")
+    Builtin.unreachable()
   }
 }
 %end
@@ -1126,6 +1126,6 @@
 extension AnyCollectionProtocol {
   @available(*, unavailable, renamed: "makeIterator")
   public func generate() -> AnyIterator<Iterator.Element> {
-    fatalError("unavailable function can't be called")
+    Builtin.unreachable()
   }
 }
diff --git a/stdlib/public/core/Filter.swift.gyb b/stdlib/public/core/Filter.swift.gyb
index 7c9a1f1..c45e4a5 100644
--- a/stdlib/public/core/Filter.swift.gyb
+++ b/stdlib/public/core/Filter.swift.gyb
@@ -348,7 +348,7 @@
     _ base: Base,
     whereElementsSatisfy predicate: (Base.Element) -> Bool
   ) {
-    fatalError("unavailable function can't be called")
+    Builtin.unreachable()
   }
 }
 
@@ -358,12 +358,12 @@
     _ base: Base,
     whereElementsSatisfy predicate: (Base.Iterator.Element) -> Bool
   ) {
-    fatalError("unavailable function can't be called")
+    Builtin.unreachable()
   }
 
   @available(*, unavailable, renamed: "makeIterator")
   public func generate() -> LazyFilterIterator<Base.Iterator> {
-    fatalError("unavailable function can't be called")
+    Builtin.unreachable()
   }
 }
 
@@ -373,12 +373,12 @@
     _ base: Base,
     whereElementsSatisfy predicate: (Base.Iterator.Element) -> Bool
   ) {
-    fatalError("unavailable function can't be called")
+    Builtin.unreachable()
   }
 
   @available(*, unavailable, renamed: "makeIterator")
   public func generate() -> LazyFilterIterator<Base.Iterator> {
-    fatalError("unavailable function can't be called")
+    Builtin.unreachable()
   }
 }
 
diff --git a/stdlib/public/core/Flatten.swift.gyb b/stdlib/public/core/Flatten.swift.gyb
index 0857c87..30e6b53 100644
--- a/stdlib/public/core/Flatten.swift.gyb
+++ b/stdlib/public/core/Flatten.swift.gyb
@@ -428,7 +428,7 @@
 extension FlattenSequence {
   @available(*, unavailable, renamed: "makeIterator")
   public func generate() -> FlattenIterator<Base.Iterator> {
-    fatalError("unavailable function can't be called")
+    Builtin.unreachable()
   }
 }
 
@@ -436,7 +436,7 @@
 extension Flatten${collectionForTraversal(traversal)} {
   @available(*, unavailable, message: "Please use underestimatedCount property instead.")
   public func underestimateCount() -> Int {
-    fatalError("unavailable function can't be called")
+    Builtin.unreachable()
   }
 }
 %end
diff --git a/stdlib/public/core/HashedCollections.swift.gyb b/stdlib/public/core/HashedCollections.swift.gyb
index 077e65d..eeb4522 100644
--- a/stdlib/public/core/HashedCollections.swift.gyb
+++ b/stdlib/public/core/HashedCollections.swift.gyb
@@ -4937,38 +4937,38 @@
 extension Set {
   @available(*, unavailable, renamed: "remove(at:)")
   public mutating func removeAtIndex(_ index: Index) -> Element {
-    fatalError("unavailable function can't be called")
+    Builtin.unreachable()
   }
 
   @available(*, unavailable, renamed: "makeIterator")
   public func generate() -> SetIterator<Element> {
-    fatalError("unavailable function can't be called")
+    Builtin.unreachable()
   }
 
   @available(*, unavailable, renamed: "index(of:)")
   public func indexOf(_ member: Element) -> Index? {
-    fatalError("unavailable function can't be called")
+    Builtin.unreachable()
   }
 }
 
 extension Dictionary {
   @available(*, unavailable, renamed: "remove(at:)")
   public mutating func removeAtIndex(_ index: Index) -> Element {
-    fatalError("unavailable function can't be called")
+    Builtin.unreachable()
   }
 
   @available(*, unavailable, renamed: "index(forKey:)")
   public func indexForKey(_ key: Key) -> Index? {
-    fatalError("unavailable function can't be called")
+    Builtin.unreachable()
   }
 
   @available(*, unavailable, renamed: "removeValue(forKey:)")
   public mutating func removeValueForKey(_ key: Key) -> Value? {
-    fatalError("unavailable function can't be called")
+    Builtin.unreachable()
   }
 
   @available(*, unavailable, renamed: "makeIterator")
   public func generate() -> DictionaryIterator<Key, Value> {
-    fatalError("unavailable function can't be called")
+    Builtin.unreachable()
   }
 }
diff --git a/stdlib/public/core/ImplicitlyUnwrappedOptional.swift b/stdlib/public/core/ImplicitlyUnwrappedOptional.swift
index 7a28507..f401aed 100644
--- a/stdlib/public/core/ImplicitlyUnwrappedOptional.swift
+++ b/stdlib/public/core/ImplicitlyUnwrappedOptional.swift
@@ -125,20 +125,20 @@
 extension ImplicitlyUnwrappedOptional {
   @available(*, unavailable, message: "Please use nil literal instead.")
   public init() {
-    fatalError("unavailable function can't be called")
+    Builtin.unreachable()
   }
 
   @available(*, unavailable, message: "Has been removed in Swift 3.")
   public func map<U>(
     _ f: @noescape (Wrapped) throws -> U
   ) rethrows -> ImplicitlyUnwrappedOptional<U> {
-    fatalError("unavailable function can't be called")
+    Builtin.unreachable()
   }
 
   @available(*, unavailable, message: "Has been removed in Swift 3.")
   public func flatMap<U>(
       _ f: @noescape (Wrapped) throws -> ImplicitlyUnwrappedOptional<U>
   ) rethrows -> ImplicitlyUnwrappedOptional<U> {
-    fatalError("unavailable function can't be called")
+    Builtin.unreachable()
   }
 }
diff --git a/stdlib/public/core/Index.swift b/stdlib/public/core/Index.swift
index 64f1125..cfcf3ae 100644
--- a/stdlib/public/core/Index.swift
+++ b/stdlib/public/core/Index.swift
@@ -15,22 +15,22 @@
 
 @available(*, unavailable, message: "Use \'-= 1\' or call collection.prior(Index)")
 public prefix func -- <T : _Incrementable> (i: inout T) -> T {
-  fatalError("unavailable operator can't be called")
+  Builtin.unreachable()
 }
 
 @available(*, unavailable, message: "Use \'-= 1\' or call collection.prior(Index)")
 public postfix func -- <T : _Incrementable> (i: inout T) -> T {
-  fatalError("unavailable operator can't be called")
+  Builtin.unreachable()
 }
 
 @available(*, unavailable, message: "Use \'+= 1\' or call 'collection.index(after: Index)")
 public prefix func ++ <T : _Incrementable> (i: inout T) -> T {
-  fatalError("unavailable operator can't be called")
+  Builtin.unreachable()
 }
 
 @available(*, unavailable, message: "Use \'+= 1\' or call 'collection.index(after: Index)")
 public postfix func ++ <T : _Incrementable> (i: inout T) -> T {
-  fatalError("unavailable operator can't be called")
+  Builtin.unreachable()
 }
 
 @available(*, unavailable, renamed: "Comparable")
diff --git a/stdlib/public/core/Join.swift b/stdlib/public/core/Join.swift
index 0027210..89e86a8 100644
--- a/stdlib/public/core/Join.swift
+++ b/stdlib/public/core/Join.swift
@@ -193,7 +193,7 @@
 extension JoinedSequence {
   @available(*, unavailable, renamed: "makeIterator")
   public func generate() -> JoinedIterator<Base.Iterator> {
-    fatalError("unavailable function can't be called")
+    Builtin.unreachable()
   }
 }
 
@@ -204,6 +204,6 @@
     where
     Separator.Iterator.Element == Iterator.Element.Iterator.Element
   >(_ separator: Separator) -> JoinedSequence<Self> {
-    fatalError("unavailable function can't be called")
+    Builtin.unreachable()
   }
 }
diff --git a/stdlib/public/core/LazySequence.swift b/stdlib/public/core/LazySequence.swift
index 4cf41a5..6615a8f 100644
--- a/stdlib/public/core/LazySequence.swift
+++ b/stdlib/public/core/LazySequence.swift
@@ -203,6 +203,6 @@
 extension LazySequenceProtocol {
   @available(*, unavailable, message: "Please use Array initializer instead.")
   public var array: [Iterator.Element] {
-    fatalError("unavailable function can't be called")
+    Builtin.unreachable()
   }
 }
diff --git a/stdlib/public/core/ManagedBuffer.swift b/stdlib/public/core/ManagedBuffer.swift
index c955f10..cd9f47b 100644
--- a/stdlib/public/core/ManagedBuffer.swift
+++ b/stdlib/public/core/ManagedBuffer.swift
@@ -548,6 +548,6 @@
 extension ManagedBufferPointer {
   @available(*, unavailable, renamed: "capacity")
   public var allocatedElementCount: Int {
-    fatalError("unavailable function can't be called")
+    Builtin.unreachable()
   }
 }
diff --git a/stdlib/public/core/Map.swift.gyb b/stdlib/public/core/Map.swift.gyb
index 802bce7..ad299bd 100644
--- a/stdlib/public/core/Map.swift.gyb
+++ b/stdlib/public/core/Map.swift.gyb
@@ -245,14 +245,14 @@
 extension LazyMapSequence {
   @available(*, unavailable, message: "use '.lazy.map' on the sequence")
   public init(_ base: Base, transform: (Base.Iterator.Element) -> Element) {
-    fatalError("unavailable function can't be called")
+    Builtin.unreachable()
   }
 }
 
 extension LazyMapCollection {
   @available(*, unavailable, message: "use '.lazy.map' on the collection")
   public init(_ base: Base, transform: (Base.Iterator.Element) -> Element) {
-    fatalError("unavailable function can't be called")
+    Builtin.unreachable()
   }
 }
 
diff --git a/stdlib/public/core/RangeReplaceableCollection.swift.gyb b/stdlib/public/core/RangeReplaceableCollection.swift.gyb
index 18e2d1f..398e011 100644
--- a/stdlib/public/core/RangeReplaceableCollection.swift.gyb
+++ b/stdlib/public/core/RangeReplaceableCollection.swift.gyb
@@ -1078,12 +1078,12 @@
   >(
     _ subrange: Range<Index>, with newElements: C
   ) {
-    fatalError("unavailable function can't be called")
+    Builtin.unreachable()
   }
   
   @available(*, unavailable, renamed: "removeAt")
   public mutating func removeAtIndex(_ i: Index) -> Iterator.Element {
-    fatalError("unavailable function can't be called")
+    Builtin.unreachable()
   }
 
   @available(*, unavailable, renamed: "removeSubrange")
@@ -1096,14 +1096,14 @@
     where
     S.Iterator.Element == Iterator.Element
   >(_ newElements: S) {
-    fatalError("unavailable function can't be called")
+    Builtin.unreachable()
   }
 
   @available(*, unavailable, renamed: "insert(contentsOf:at:)")
   public mutating func insertContentsOf<
     C : Collection where C.Iterator.Element == Iterator.Element
   >(_ newElements: C, at i: Index) {
-    fatalError("unavailable function can't be called")
+    Builtin.unreachable()
   }
 }
 
diff --git a/stdlib/public/core/Reflection.swift b/stdlib/public/core/Reflection.swift
index 162054f..663c0d8 100644
--- a/stdlib/public/core/Reflection.swift
+++ b/stdlib/public/core/Reflection.swift
@@ -645,6 +645,6 @@
 extension ObjectIdentifier {
   @available(*, unavailable, message: "use the 'UInt(_:)' initializer")
   public var uintValue: UInt {
-    fatalError("unavailable function can't be called")
+    Builtin.unreachable()
   }
 }
diff --git a/stdlib/public/core/Repeat.swift b/stdlib/public/core/Repeat.swift
index 2229637..74cb049 100644
--- a/stdlib/public/core/Repeat.swift
+++ b/stdlib/public/core/Repeat.swift
@@ -68,6 +68,6 @@
 extension Repeated {
   @available(*, unavailable, renamed: "repeatElement")
   public init(count: Int, repeatedValue: Element) {
-    fatalError("unavailable function can't be called")
+    Builtin.unreachable()
   }
 }
diff --git a/stdlib/public/core/Reverse.swift b/stdlib/public/core/Reverse.swift
index fdebda3..42052c2 100644
--- a/stdlib/public/core/Reverse.swift
+++ b/stdlib/public/core/Reverse.swift
@@ -350,28 +350,28 @@
 extension ReversedCollection {
   @available(*, unavailable, message: "use the 'reversed()' method on the collection")
   public init(_ base: Base) {
-    fatalError("unavailable function can't be called")
+    Builtin.unreachable()
   }
 }
 
 extension ReversedRandomAccessCollection {
   @available(*, unavailable, message: "use the 'reversed()' method on the collection")
   public init(_ base: Base) {
-    fatalError("unavailable function can't be called")
+    Builtin.unreachable()
   }
 }
 
 extension BidirectionalCollection {
   @available(*, unavailable, renamed: "reversed")
   public func reverse() -> ReversedCollection<Self> {
-    fatalError("unavailable function can't be called")
+    Builtin.unreachable()
   }
 }
 
 extension RandomAccessCollection {
   @available(*, unavailable, renamed: "reversed")
   public func reverse() -> ReversedRandomAccessCollection<Self> {
-    fatalError("unavailable function can't be called")
+    Builtin.unreachable()
   }
 }
 
@@ -385,7 +385,7 @@
   public func reverse() -> LazyCollection<
     ReversedCollection<Elements>
   > {
-    fatalError("unavailable function can't be called")
+    Builtin.unreachable()
   }
 }
 
@@ -398,7 +398,7 @@
   public func reverse() -> LazyCollection<
     ReversedRandomAccessCollection<Elements>
   > {
-    fatalError("unavailable function can't be called")
+    Builtin.unreachable()
   }
 }
 
diff --git a/stdlib/public/core/Sequence.swift b/stdlib/public/core/Sequence.swift
index 815d490..181b185 100644
--- a/stdlib/public/core/Sequence.swift
+++ b/stdlib/public/core/Sequence.swift
@@ -1201,19 +1201,19 @@
 extension Sequence {
   @available(*, unavailable, renamed: "makeIterator()")
   func generate() -> Iterator {
-    fatalError("unavailable function can't be called")
+    Builtin.unreachable()
   }
 
   @available(*, unavailable, message: "it became a property 'underestimatedCount'")
   func underestimateCount() -> Int {
-    fatalError("unavailable function can't be called")
+    Builtin.unreachable()
   }
 
   @available(*, unavailable, message: "call 'split(_:omittingEmptySubsequences:isSeparator:)' and invert the 'allowEmptySlices' argument")
   func split(_ maxSplit: Int, allowEmptySlices: Bool,
     isSeparator: @noescape (Iterator.Element) throws -> Bool
   ) rethrows -> [SubSequence] {
-    fatalError("unavailable function can't be called")
+    Builtin.unreachable()
   }
 }
 
@@ -1224,7 +1224,7 @@
     maxSplit: Int = Int.max,
     allowEmptySlices: Bool = false
   ) -> [AnySequence<Iterator.Element>] {
-    fatalError("unavailable function can't be called")
+    Builtin.unreachable()
   }
 }
 
diff --git a/stdlib/public/core/SequenceAlgorithms.swift.gyb b/stdlib/public/core/SequenceAlgorithms.swift.gyb
index 9417df5..8537d3e 100644
--- a/stdlib/public/core/SequenceAlgorithms.swift.gyb
+++ b/stdlib/public/core/SequenceAlgorithms.swift.gyb
@@ -673,26 +673,26 @@
 extension Sequence {
   @available(*, unavailable, renamed: "enumerated")
   public func enumerate() -> EnumeratedSequence<Self> {
-    fatalError("unavailable function can't be called")
+    Builtin.unreachable()
   }
 
   @available(*, unavailable, renamed: "min")
   public func minElement(
     _ isOrderedBefore: @noescape (Iterator.Element, Iterator.Element) throws -> Bool
   ) rethrows -> Iterator.Element? {
-    fatalError("unavailable function can't be called")
+    Builtin.unreachable()
   }
 
   @available(*, unavailable, renamed: "max")
   public func maxElement(
     _ isOrderedBefore: @noescape (Iterator.Element, Iterator.Element) throws -> Bool
   ) rethrows -> Iterator.Element? {
-    fatalError("unavailable function can't be called")
+    Builtin.unreachable()
   }
 
   @available(*, unavailable, renamed: "reversed")
   public func reverse() -> [Iterator.Element] {
-    fatalError("unavailable function can't be called")
+    Builtin.unreachable()
   }
 
   @available(*, unavailable, renamed: "starts")
@@ -702,7 +702,7 @@
     with possiblePrefix: PossiblePrefix,
     isEquivalent: @noescape (Iterator.Element, Iterator.Element) throws -> Bool
   ) rethrows-> Bool {
-    fatalError("unavailable function can't be called")
+    Builtin.unreachable()
   }
 
   @available(*, unavailable, renamed: "lexicographicallyPrecedes")
@@ -712,19 +712,19 @@
     _ other: OtherSequence,
     isOrderedBefore: @noescape (${GElement}, ${GElement}) throws -> Bool
   ) rethrows -> Bool {
-    fatalError("unavailable function can't be called")
+    Builtin.unreachable()
   }
 }
 
 extension Sequence where Iterator.Element : Comparable {
   @available(*, unavailable, renamed: "min")
   public func minElement() -> Iterator.Element? {
-    fatalError("unavailable function can't be called")
+    Builtin.unreachable()
   }
 
   @available(*, unavailable, renamed: "max")
   public func maxElement() -> Iterator.Element? {
-    fatalError("unavailable function can't be called")
+    Builtin.unreachable()
   }
 
   @available(*, unavailable, renamed: "starts")
@@ -733,7 +733,7 @@
   >(
     with possiblePrefix: PossiblePrefix
   ) -> Bool {
-    fatalError("unavailable function can't be called")
+    Builtin.unreachable()
   }
 
   @available(*, unavailable, renamed: "lexicographicallyPrecedes")
@@ -742,6 +742,6 @@
   >(
     _ other: OtherSequence
   ) -> Bool {
-    fatalError("unavailable function can't be called")
+    Builtin.unreachable()
   }
 }
diff --git a/stdlib/public/core/StaticString.swift b/stdlib/public/core/StaticString.swift
index 5f4f3a5..20fca01 100644
--- a/stdlib/public/core/StaticString.swift
+++ b/stdlib/public/core/StaticString.swift
@@ -244,12 +244,12 @@
 extension StaticString {
   @available(*, unavailable, renamed: "utf8CodeUnitCount")
   public var byteSize: Int {
-    fatalError("unavailable function can't be called")
+    Builtin.unreachable()
   }
 
   @available(*, unavailable, message: "use the 'String(_:)' initializer")
   public var stringValue: String {
-    fatalError("unavailable function can't be called")
+    Builtin.unreachable()
   }
 }
 
diff --git a/stdlib/public/core/Stride.swift.gyb b/stdlib/public/core/Stride.swift.gyb
index 8d2c4c2..fd0a489 100644
--- a/stdlib/public/core/Stride.swift.gyb
+++ b/stdlib/public/core/Stride.swift.gyb
@@ -266,13 +266,13 @@
 extension Strideable {
   @available(*, unavailable, message: "Use stride(from:to:by:) free function instead")
   public func stride(to end: Self, by stride: Stride) -> StrideTo<Self> {
-    fatalError("unavailable function can't be called")
+    Builtin.unreachable()
   }
 
   @available(*, unavailable, message: "Use stride(from:through:by:) free function instead")
   public func stride(
     through end: Self, by stride: Stride
   ) -> StrideThrough<Self> {
-    fatalError("unavailable function can't be called")
+    Builtin.unreachable()
   }
 }
diff --git a/stdlib/public/core/String.swift b/stdlib/public/core/String.swift
index be4ef14..214e27c 100644
--- a/stdlib/public/core/String.swift
+++ b/stdlib/public/core/String.swift
@@ -769,21 +769,21 @@
 extension String {
   @available(*, unavailable, renamed: "append")
   public mutating func appendContentsOf(_ other: String) {
-    fatalError("unavailable function can't be called")
+    Builtin.unreachable()
   }
 
   @available(*, unavailable, renamed: "append(contentsOf:)")
   public mutating func appendContentsOf<
     S : Sequence where S.Iterator.Element == Character
   >(_ newElements: S) {
-    fatalError("unavailable function can't be called")
+    Builtin.unreachable()
   }
 
   @available(*, unavailable, renamed: "insert(contentsOf:at:)")
   public mutating func insertContentsOf<
     S : Collection where S.Iterator.Element == Character
   >(_ newElements: S, at i: Index) {
-    fatalError("unavailable function can't be called")
+    Builtin.unreachable()
   }
 
   @available(*, unavailable, renamed: "replaceSubrange")
@@ -792,40 +792,40 @@
   >(
     _ subRange: Range<Index>, with newElements: C
   ) {
-    fatalError("unavailable function can't be called")
+    Builtin.unreachable()
   }
     
   @available(*, unavailable, renamed: "replaceSubrange")
   public mutating func replaceRange(
     _ subRange: Range<Index>, with newElements: String
   ) {
-    fatalError("unavailable function can't be called")
+    Builtin.unreachable()
   }
   
   @available(*, unavailable, renamed: "removeAt")
   public mutating func removeAtIndex(_ i: Index) -> Character {
-    fatalError("unavailable function can't be called")
+    Builtin.unreachable()
   }
 
   @available(*, unavailable, renamed: "removeSubrange")
   public mutating func removeRange(_ subRange: Range<Index>) {
-    fatalError("unavailable function can't be called")
+    Builtin.unreachable()
   }
 
   @available(*, unavailable, renamed: "lowercased()")
   public var lowercaseString: String {
-    fatalError("unavailable function can't be called")
+    Builtin.unreachable()
   }
 
   @available(*, unavailable, renamed: "uppercased()")
   public var uppercaseString: String {
-    fatalError("unavailable function can't be called")
+    Builtin.unreachable()
   }
 }
 
 extension Sequence where Iterator.Element == String {
   @available(*, unavailable, renamed: "joined")
   public func joinWithSeparator(_ separator: String) -> String {
-    fatalError("unavailable function can't be called")
+    Builtin.unreachable()
   }
 }
diff --git a/stdlib/public/core/StringCharacterView.swift b/stdlib/public/core/StringCharacterView.swift
index ce8a1cd..82c81e8 100644
--- a/stdlib/public/core/StringCharacterView.swift
+++ b/stdlib/public/core/StringCharacterView.swift
@@ -344,13 +344,13 @@
   >(
     _ subRange: Range<Index>, with newElements: C
   ) {
-    fatalError("unavailable function can't be called")
+    Builtin.unreachable()
   }
     
   @available(*, unavailable, renamed: "append(contentsOf:)")
   public mutating func appendContentsOf<
     S : Sequence where S.Iterator.Element == Character
   >(_ newElements: S) {
-    fatalError("unavailable function can't be called")
+    Builtin.unreachable()
   }
 }
diff --git a/stdlib/public/core/StringLegacy.swift b/stdlib/public/core/StringLegacy.swift
index b9b22d9..c4ad994 100644
--- a/stdlib/public/core/StringLegacy.swift
+++ b/stdlib/public/core/StringLegacy.swift
@@ -210,11 +210,11 @@
 extension String {
   @available(*, unavailable, message: "Renamed to init(repeating:count:) and reordered parameters")
   public init(count: Int, repeatedValue c: Character) {
-    fatalError("unavailable function can't be called")
+    Builtin.unreachable()
   }
 
   @available(*, unavailable, message: "Renamed to init(repeating:count:) and reordered parameters")
   public init(count: Int, repeatedValue c: UnicodeScalar) {
-    fatalError("unavailable function can't be called")
+    Builtin.unreachable()
   }
 }
diff --git a/stdlib/public/core/StringUTF16.swift b/stdlib/public/core/StringUTF16.swift
index f58eaae..b3ab5a3 100644
--- a/stdlib/public/core/StringUTF16.swift
+++ b/stdlib/public/core/StringUTF16.swift
@@ -147,14 +147,14 @@
       *, unavailable,
       message: "Indexing a String's UTF16View requires a String.UTF16View.Index, which can be constructed from Int when Foundation is imported")
     public subscript(i: Int) -> UTF16.CodeUnit {
-      fatalError("unavailable function can't be called")
+      Builtin.unreachable()
     }
 
     @available(
       *, unavailable,
       message: "Slicing a String's UTF16View requires a Range<String.UTF16View.Index>, String.UTF16View.Index can be constructed from Int when Foundation is imported")
     public subscript(bounds: Range<Int>) -> UTF16View {
-      fatalError("unavailable function can't be called")
+      Builtin.unreachable()
     }
 #endif
 
diff --git a/stdlib/public/core/UnavailableStringAPIs.swift.gyb b/stdlib/public/core/UnavailableStringAPIs.swift.gyb
index e463892..947be89 100644
--- a/stdlib/public/core/UnavailableStringAPIs.swift.gyb
+++ b/stdlib/public/core/UnavailableStringAPIs.swift.gyb
@@ -57,7 +57,7 @@
     *, unavailable,
     message: "cannot subscript String with an Int, see the documentation comment for discussion")
   public subscript(i: Int) -> Character {
-    fatalError("unavailable function can't be called")
+    Builtin.unreachable()
   }
 
 % for Range in 'Range', 'ClosedRange', 'CountableRange', 'CountableClosedRange':
@@ -66,7 +66,7 @@
     *, unavailable,
     message: "cannot subscript String with a ${Range}<Int>, see the documentation comment for discussion")
   public subscript(bounds: ${Range}<Int>) -> String {
-    fatalError("unavailable function can't be called")
+    Builtin.unreachable()
   }
 % end
   /// The unavailable `String.count` API.
@@ -106,6 +106,6 @@
     *, unavailable,
     message: "there is no universally good answer, see the documentation comment for discussion")
   public var count: Int {
-    fatalError("unavailable function can't be called")
+    Builtin.unreachable()
   }
 }
diff --git a/stdlib/public/core/Unicode.swift b/stdlib/public/core/Unicode.swift
index ec1e60c..842662f 100644
--- a/stdlib/public/core/Unicode.swift
+++ b/stdlib/public/core/Unicode.swift
@@ -831,7 +831,7 @@
   _ input: Input, _ output: (OutputEncoding.CodeUnit) -> Void,
   stoppingOnError stopOnError: Bool
 ) -> Bool {
-  fatalError("unavailable function can't be called")
+  Builtin.unreachable()
 }
 
 extension UTF16 {
@@ -842,6 +842,6 @@
   >(
     _: Encoding.Type, input: Input, repairIllFormedSequences: Bool
   ) -> (Int, Bool)? {
-    fatalError("unavailable function can't be called")
+    Builtin.unreachable()
   }
 }
diff --git a/stdlib/public/core/UnicodeScalar.swift b/stdlib/public/core/UnicodeScalar.swift
index 4f85718..e232e9b 100644
--- a/stdlib/public/core/UnicodeScalar.swift
+++ b/stdlib/public/core/UnicodeScalar.swift
@@ -287,11 +287,11 @@
   /// Creates an instance of the NUL scalar value.
   @available(*, unavailable, message: "use the 'UnicodeScalar(\"\\0\")'")
   public init() {
-    fatalError("unavailable function can't be called")
+    Builtin.unreachable()
   }
 
   @available(*, unavailable, renamed: "escaped")
   public func escape(asASCII forceASCII: Bool) -> String {
-    fatalError("unavailable function can't be called")
+    Builtin.unreachable()
   }
 }
diff --git a/stdlib/public/core/UnsafePointer.swift.gyb b/stdlib/public/core/UnsafePointer.swift.gyb
index 3b14d32..fe567a2 100644
--- a/stdlib/public/core/UnsafePointer.swift.gyb
+++ b/stdlib/public/core/UnsafePointer.swift.gyb
@@ -539,42 +539,42 @@
 
   @available(*, unavailable, message: "use 'nil' literal")
   public init() {
-    fatalError("unavailable function can't be called")
+    Builtin.unreachable()
   }
 
   @available(*, unavailable, message: "use the '${Self}(allocatingCapacity:)' initializer")
   public static func alloc(_ num: Int) -> ${Self} {
-    fatalError("unavailable function can't be called")
+    Builtin.unreachable()
   }
 
   @available(*, unavailable, renamed: "deallocateCapacity")
   public func dealloc(_ num: Int) {
-    fatalError("unavailable function can't be called")
+    Builtin.unreachable()
   }
 
   @available(*, unavailable, renamed: "pointee")
   public var memory: Pointee {
     get {
-      fatalError("unavailable function can't be called")
+      Builtin.unreachable()
     }
     set {
-      fatalError("unavailable function can't be called")
+      Builtin.unreachable()
     }
   }
 
   @available(*, unavailable, renamed: "initialize(with:)")
   public func initialize(_ newvalue: Pointee) {
-    fatalError("unavailable function can't be called")
+    Builtin.unreachable()
   }
 
   @available(*, unavailable, renamed: "deinitialize(count:)")
   public func destroy() {
-    fatalError("unavailable function can't be called")
+    Builtin.unreachable()
   }
 
   @available(*, unavailable, renamed: "deinitialize(count:)")
   public func destroy(_ count: Int) {
-    fatalError("unavailable function can't be called")
+    Builtin.unreachable()
   }
 }