Merge pull request #21037 from DougGregor/flatten-abs

[ABI] [stdlib] Remove magnitude-based overload of abs(_:).
diff --git a/benchmark/single-source/Hash.swift b/benchmark/single-source/Hash.swift
index 3767c87..366a8e0 100644
--- a/benchmark/single-source/Hash.swift
+++ b/benchmark/single-source/Hash.swift
@@ -21,7 +21,7 @@
   tags: [.validation, .algorithm])
 
 class Hash {
-  /// \brief C'tor.
+  /// C'tor.
   init(_ bs: Int) {
     blocksize = bs
     messageLength = 0
@@ -29,7 +29,7 @@
     assert(blocksize <= 64, "Invalid block size")
   }
 
-  /// \brief Add the bytes in \p Msg to the hash.
+  /// Add the bytes in \p Msg to the hash.
   func update(_ Msg: String) {
     for c in Msg.unicodeScalars {
       data[dataLength] = UInt8(ascii: c)
@@ -39,7 +39,7 @@
     }
   }
 
-  /// \brief Add the bytes in \p Msg to the hash.
+  /// Add the bytes in \p Msg to the hash.
   func update(_ Msg: [UInt8]) {
     for c in Msg {
       data[dataLength] = c
@@ -65,7 +65,7 @@
   final var data = [UInt8](repeating: 0, count: 64)
   final var blocksize: Int
 
-  /// \brief Hash the internal data.
+  /// Hash the internal data.
   func hash() {
     fatalError("Pure virtual")
   }
@@ -78,7 +78,7 @@
     fatalError("Pure virtual")
   }
 
-  /// \brief Blow the data to fill the block.
+  /// Blow the data to fill the block.
   func fillBlock() {
     fatalError("Pure virtual")
   }
@@ -87,7 +87,7 @@
   final
   var HexTblFast : [UInt8] = [48,49,50,51,52,53,54,55,56,57,97,98,99,100,101,102]
 
-  /// \brief Convert a 4-byte integer to a hex string.
+  /// Convert a 4-byte integer to a hex string.
   final
   func toHex(_ In: UInt32) -> String {
     var In = In
@@ -110,13 +110,13 @@
     }
   }
 
-  /// \brief Left-rotate \p x by \p c.
+  /// Left-rotate \p x by \p c.
   final
   func rol(_ x: UInt32, _ c: UInt32) -> UInt32 {
     return x &<< c | x &>> (32 &- c)
   }
 
-  /// \brief Right-rotate \p x by \p c.
+  /// Right-rotate \p x by \p c.
   final
   func ror(_ x: UInt32, _ c: UInt32) -> UInt32 {
     return x &>> c | x &<< (32 &- c)
diff --git a/docs/TextFormatting.rst b/docs/TextFormatting.rst
index 9fbcecc..c7cbf7b 100644
--- a/docs/TextFormatting.rst
+++ b/docs/TextFormatting.rst
@@ -131,11 +131,11 @@
 protocol. To change the debug representation for a type, you don't
 need to declare conformance: simply give the type a ``debugFormat()``::
 
-  /// \brief A thing that can be printed in the REPL and the Debugger
+  /// A thing that can be printed in the REPL and the Debugger
   protocol CustomDebugStringConvertible {
     typealias DebugRepresentation : TextOutputStreamable = String
 
-    /// \brief Produce a textual representation for the REPL and
+    /// Produce a textual representation for the REPL and
     /// Debugger.
     func debugFormat() -> DebugRepresentation
   }
@@ -169,11 +169,11 @@
 need to do is declare conformance to ``CustomStringConvertible``; there's nothing to
 implement::
 
-  /// \brief A thing that can be print()ed and toString()ed.
+  /// A thing that can be print()ed and toString()ed.
   protocol CustomStringConvertible : CustomDebugStringConvertible {
     typealias PrintRepresentation : TextOutputStreamable = DebugRepresentation
 
-    /// \brief produce a "pretty" textual representation.
+    /// produce a "pretty" textual representation.
     ///
     /// In general you can return a String here, but if you need more
     /// control, return a custom TextOutputStreamable type
@@ -181,7 +181,7 @@
       return debugFormat()
     }
 
-    /// \brief Simply convert to String
+    /// Simply convert to String
     ///
     /// You'll never want to reimplement this
     func toString() -> String {
diff --git a/docs/WindowsBuild.md b/docs/WindowsBuild.md
index 205b07e..66bfc7c 100644
--- a/docs/WindowsBuild.md
+++ b/docs/WindowsBuild.md
@@ -166,17 +166,13 @@
 cmake -G "Ninja" "%swift_source_dir%/lldb"^
   -DCMAKE_BUILD_TYPE=Debug^
   -DLLDB_PATH_TO_CMARK_SOURCE="%swift_source_dir%/cmark"^
-  -DLLDB_PATH_TO_CMARK_BUILD="%swift_source_dir%/build/Ninja-DebugAssert/cmark-windows-amd64"^
   -DLLDB_PATH_TO_LLVM_SOURCE="%swift_source_dir%/llvm"^
-  -DLLDB_PATH_TO_LLVM_BUILD="%swift_source_dir%/build/Ninja-DebugAssert/llvm-windows-amd64"^
   -DLLDB_PATH_TO_CLANG_SOURCE="%swift_source_dir%/clang"^
-  -DLLDB_PATH_TO_CLANG_BUILD="%swift_source_dir%/build/Ninja-DebugAssert/llvm-windows-amd64"^
   -DLLDB_PATH_TO_SWIFT_SOURCE="%swift_source_dir%/swift"^
+  -DLLDB_PATH_TO_CMARK_BUILD="%swift_source_dir%/build/Ninja-DebugAssert/cmark-windows-amd64"^
+  -DLLDB_PATH_TO_CLANG_BUILD="%swift_source_dir%/build/Ninja-DebugAssert/llvm-windows-amd64"^
+  -DLLDB_PATH_TO_LLVM_BUILD="%swift_source_dir%/build/Ninja-DebugAssert/llvm-windows-amd64"^
   -DLLDB_PATH_TO_SWIFT_BUILD="%swift_source_dir%/build/Ninja-DebugAssert/swift-windows-amd64"^
-  -DCMAKE_C_COMPILER="%llvm_bin_dir%/clang-cl.exe"^
-  -DCMAKE_CXX_COMPILER="%llvm_bin_dir%/clang-cl.exe"^
-  -DCMAKE_C_FLAGS="/Z7"^
-  -DCMAKE_CXX_FLAGS="/Z7 -Wno-c++98-compat"^
   -DLLVM_ENABLE_ASSERTIONS=YES
 popd
 cmake --build "%swift_source_dir%/build/Ninja-RelWithDebInfoAssert/lldb-windows-amd64"
diff --git a/docs/doxygen.cfg.in b/docs/doxygen.cfg.in
index ab44073..c17eecd 100644
--- a/docs/doxygen.cfg.in
+++ b/docs/doxygen.cfg.in
@@ -138,7 +138,7 @@
 # comments will behave just like the Qt-style comments (thus requiring an
 # explicit @brief command for a brief description.
 
-JAVADOC_AUTOBRIEF      = NO
+JAVADOC_AUTOBRIEF      = YES
 
 # The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen
 # treat a multi-line C++ special comment block (i.e. a block of //! or ///
diff --git a/include/swift/ABI/Metadata.h b/include/swift/ABI/Metadata.h
index 99832e9..6a2dce4 100644
--- a/include/swift/ABI/Metadata.h
+++ b/include/swift/ABI/Metadata.h
@@ -1957,7 +1957,7 @@
 };
 using GenericBoxHeapMetadata = TargetGenericBoxHeapMetadata<InProcess>;
 
-/// \brief The control structure of a generic or resilient protocol
+/// The control structure of a generic or resilient protocol
 /// conformance witness.
 ///
 /// Resilient conformances must use a pattern where new requirements
@@ -2008,7 +2008,7 @@
 };
 using ResilientWitnessTable = TargetResilientWitnessTable<InProcess>;
 
-/// \brief The control structure of a generic or resilient protocol
+/// The control structure of a generic or resilient protocol
 /// conformance, which is embedded in the protocol conformance descriptor.
 ///
 /// Witness tables need to be instantiated at runtime in these cases:
diff --git a/include/swift/AST/ASTContext.h b/include/swift/AST/ASTContext.h
index 438f3cf..c1f56f0 100644
--- a/include/swift/AST/ASTContext.h
+++ b/include/swift/AST/ASTContext.h
@@ -112,16 +112,16 @@
   class SyntaxArena;
 }
 
-/// \brief The arena in which a particular ASTContext allocation will go.
+/// The arena in which a particular ASTContext allocation will go.
 enum class AllocationArena {
-  /// \brief The permanent arena, which is tied to the lifetime of
+  /// The permanent arena, which is tied to the lifetime of
   /// the ASTContext.
   ///
   /// All global declarations and types need to be allocated into this arena.
   /// At present, everything that is not a type involving a type variable is
   /// allocated in this arena.
   Permanent,
-  /// \brief The constraint solver's temporary arena, which is tied to the
+  /// The constraint solver's temporary arena, which is tied to the
   /// lifetime of a particular instance of the constraint solver.
   ///
   /// Any type involving a type variable is allocated in this arena.
@@ -144,14 +144,14 @@
 /// entity name.
 Optional<KnownFoundationEntity> getKnownFoundationEntity(StringRef name);
 
-/// \brief Introduces a new constraint checker arena, whose lifetime is
+/// Introduces a new constraint checker arena, whose lifetime is
 /// tied to the lifetime of this RAII object.
 class ConstraintCheckerArenaRAII {
   ASTContext &Self;
   void *Data;
 
 public:
-  /// \brief Introduces a new constraint checker arena, supplanting any
+  /// Introduces a new constraint checker arena, supplanting any
   /// existing constraint checker arena.
   ///
   /// \param self The ASTContext into which this constraint checker arena
@@ -216,13 +216,13 @@
   /// it before being set to null.
   UnifiedStatsReporter *Stats = nullptr;
 
-  /// \brief The language options used for translation.
+  /// The language options used for translation.
   LangOptions &LangOpts;
 
-  /// \brief The search path options used by this AST context.
+  /// The search path options used by this AST context.
   SearchPathOptions &SearchPathOpts;
 
-  /// \brief The source manager object.
+  /// The source manager object.
   SourceManager &SourceMgr;
 
   /// Diags - The diagnostics engine.
@@ -252,7 +252,7 @@
 #define IDENTIFIER_WITH_NAME(Name, IdStr) Identifier Id_##Name;
 #include "swift/AST/KnownIdentifiers.def"
 
-  /// \brief The list of external definitions imported by this context.
+  /// The list of external definitions imported by this context.
   llvm::SetVector<Decl *> ExternalDefinitions;
 
   /// FIXME: HACK HACK HACK
@@ -270,7 +270,7 @@
   llvm::StringMap<Type> RemappedTypes;
 
 private:
-  /// \brief The current generation number, which reflects the number of
+  /// The current generation number, which reflects the number of
   /// times that external modules have been loaded.
   ///
   /// Various places in the AST, such as the set of extensions associated with
@@ -289,7 +289,7 @@
   /// Cache of module names that fail the 'canImport' test in this context.
   llvm::SmallPtrSet<Identifier, 8> FailedModuleImportNames;
   
-  /// \brief Retrieve the allocator for the given arena.
+  /// Retrieve the allocator for the given arena.
   llvm::BumpPtrAllocator &
   getAllocator(AllocationArena arena = AllocationArena::Permanent) const;
 
@@ -630,7 +630,7 @@
   /// Does any proper bookkeeping to keep all module loaders up to date as well.
   void addSearchPath(StringRef searchPath, bool isFramework, bool isSystem);
 
-  /// \brief Adds a module loader to this AST context.
+  /// Adds a module loader to this AST context.
   ///
   /// \param loader The new module loader, which will be added after any
   ///               existing module loaders.
@@ -640,7 +640,7 @@
   void addModuleLoader(std::unique_ptr<ModuleLoader> loader,
                        bool isClang = false);
 
-  /// \brief Load extensions to the given nominal type from the external
+  /// Load extensions to the given nominal type from the external
   /// module loaders.
   ///
   /// \param nominal The nominal type whose extensions should be loaded.
@@ -650,7 +650,7 @@
   /// one.
   void loadExtensions(NominalTypeDecl *nominal, unsigned previousGeneration);
 
-  /// \brief Load the methods within the given class that produce
+  /// Load the methods within the given class that produce
   /// Objective-C class or instance methods with the given selector.
   ///
   /// \param classDecl The class in which we are searching for @objc methods.
@@ -675,7 +675,7 @@
                        unsigned previousGeneration,
                        llvm::TinyPtrVector<AbstractFunctionDecl *> &methods);
 
-  /// \brief Retrieve the Clang module loader for this ASTContext.
+  /// Retrieve the Clang module loader for this ASTContext.
   ///
   /// If there is no Clang module loader, returns a null pointer.
   /// The loader is owned by the AST context.
@@ -686,7 +686,7 @@
   /// Does nothing in non-asserts (NDEBUG) builds.
   void verifyAllLoadedModules() const;
 
-  /// \brief Check whether the module with a given name can be imported without
+  /// Check whether the module with a given name can be imported without
   /// importing it.
   ///
   /// Note that even if this check succeeds, errors may still occur if the
@@ -700,7 +700,7 @@
 
   ModuleDecl *getLoadedModule(Identifier ModuleName) const;
 
-  /// \brief Attempts to load a module into this ASTContext.
+  /// Attempts to load a module into this ASTContext.
   ///
   /// If a module by this name has already been loaded, the existing module will
   /// be returned.
@@ -720,7 +720,7 @@
     return const_cast<ASTContext *>(this)->getStdlibModule(false);
   }
 
-  /// \brief Retrieve the current generation number, which reflects the
+  /// Retrieve the current generation number, which reflects the
   /// number of times a module import has caused mass invalidation of
   /// lookup tables.
   ///
@@ -729,14 +729,14 @@
   /// with a nominal type.
   unsigned getCurrentGeneration() const { return CurrentGeneration; }
 
-  /// \brief Increase the generation number, implying that various lookup
+  /// Increase the generation number, implying that various lookup
   /// tables have been significantly altered by the introduction of a new
   /// module import.
   ///
   /// \returns the previous generation number.
   unsigned bumpGeneration() { return CurrentGeneration++; }
 
-  /// \brief Produce a "normal" conformance for a nominal type.
+  /// Produce a "normal" conformance for a nominal type.
   NormalProtocolConformance *
   getConformance(Type conformingType,
                  ProtocolDecl *protocol,
@@ -785,7 +785,7 @@
   std::vector<ValueDecl*>
   takeDelayedMissingWitnesses(NormalProtocolConformance *conformance);
 
-  /// \brief Produce a specialized conformance, which takes a generic
+  /// Produce a specialized conformance, which takes a generic
   /// conformance and substitutions written in terms of the generic
   /// conformance's signature.
   ///
@@ -800,7 +800,7 @@
                             ProtocolConformance *generic,
                             SubstitutionMap substitutions);
 
-  /// \brief Produce an inherited conformance, for subclasses of a type
+  /// Produce an inherited conformance, for subclasses of a type
   /// that already conforms to a protocol.
   ///
   /// \param type The type for which we are retrieving the conformance.
@@ -848,10 +848,10 @@
                                               const IterableDeclContext *idc,
                                               LazyMemberLoader *lazyLoader);
 
-  /// \brief Returns memory usage of this ASTContext.
+  /// Returns memory usage of this ASTContext.
   size_t getTotalMemory() const;
   
-  /// \brief Returns memory used exclusively by constraint solver.
+  /// Returns memory used exclusively by constraint solver.
   size_t getSolverMemory() const;
 
   /// Complain if @objc or dynamic is used without importing Foundation.
diff --git a/include/swift/AST/ASTMangler.h b/include/swift/AST/ASTMangler.h
index 9814232..3159c8b 100644
--- a/include/swift/AST/ASTMangler.h
+++ b/include/swift/AST/ASTMangler.h
@@ -198,7 +198,7 @@
 
   void bindGenericParameters(CanGenericSignature sig);
 
-  /// \brief Mangles a sugared type iff we are mangling for the debugger.
+  /// Mangles a sugared type iff we are mangling for the debugger.
   template <class T> void appendSugaredType(Type type) {
     assert(DWARFMangling &&
            "sugared types are only legal when mangling for the debugger");
diff --git a/include/swift/AST/ASTNode.h b/include/swift/AST/ASTNode.h
index 5332fa7..2e39a1a 100644
--- a/include/swift/AST/ASTNode.h
+++ b/include/swift/AST/ASTNode.h
@@ -38,16 +38,16 @@
     
     SourceRange getSourceRange() const;
 
-    /// \brief Return the location of the start of the statement.
+    /// Return the location of the start of the statement.
     SourceLoc getStartLoc() const;
   
-    /// \brief Return the location of the end of the statement.
+    /// Return the location of the end of the statement.
     SourceLoc getEndLoc() const;
 
     void walk(ASTWalker &Walker);
     void walk(ASTWalker &&walker) { walk(walker); }
 
-    /// \brief get the underlying entity as a decl context if it is one,
+    /// get the underlying entity as a decl context if it is one,
     /// otherwise, return nullptr;
     DeclContext *getAsDeclContext() const;
 
diff --git a/include/swift/AST/ASTWalker.h b/include/swift/AST/ASTWalker.h
index 69519f8..8cd3dc2 100644
--- a/include/swift/AST/ASTWalker.h
+++ b/include/swift/AST/ASTWalker.h
@@ -45,7 +45,7 @@
     Kind(Kind), AccKind(AccKind) {}
 };
 
-/// \brief An abstract class used to traverse an AST.
+/// An abstract class used to traverse an AST.
 class ASTWalker {
 public:
   enum class ParentKind {
@@ -92,7 +92,7 @@
     }
   };
 
-  /// \brief The parent of the node we are visiting.
+  /// The parent of the node we are visiting.
   ParentTy Parent;
 
   /// This method is called when first visiting an expression
@@ -173,26 +173,26 @@
   /// returns failure.
   virtual bool walkToDeclPost(Decl *D) { return true; }
 
-  /// \brief This method is called when first visiting a TypeLoc, before
+  /// This method is called when first visiting a TypeLoc, before
   /// walking into its TypeRepr children.  If it returns false, the subtree is
   /// skipped.
   ///
   /// \param TL The TypeLoc to check.
   virtual bool walkToTypeLocPre(TypeLoc &TL) { return true; }
 
-  /// \brief This method is called after visiting the children of a TypeLoc.
+  /// This method is called after visiting the children of a TypeLoc.
   /// If it returns false, the remaining traversal is terminated and returns
   /// failure.
   virtual bool walkToTypeLocPost(TypeLoc &TL) { return true; }
 
 
-  /// \brief This method is called when first visiting a TypeRepr, before
+  /// This method is called when first visiting a TypeRepr, before
   /// walking into its children.  If it returns false, the subtree is skipped.
   ///
   /// \param T The TypeRepr to check.
   virtual bool walkToTypeReprPre(TypeRepr *T) { return true; }
 
-  /// \brief This method is called after visiting the children of a TypeRepr.
+  /// This method is called after visiting the children of a TypeRepr.
   /// If it returns false, the remaining traversal is terminated and returns
   /// failure.
   virtual bool walkToTypeReprPost(TypeRepr *T) { return true; }
diff --git a/include/swift/AST/AnyFunctionRef.h b/include/swift/AST/AnyFunctionRef.h
index acd5c04..f308c88 100644
--- a/include/swift/AST/AnyFunctionRef.h
+++ b/include/swift/AST/AnyFunctionRef.h
@@ -24,7 +24,7 @@
 namespace swift {
 class CaptureInfo;
 
-/// \brief A universal function reference -- can wrap all AST nodes that
+/// A universal function reference -- can wrap all AST nodes that
 /// represent functions and exposes a common interface to them.
 class AnyFunctionRef {
   PointerUnion<AbstractFunctionDecl *, AbstractClosureExpr *> TheFunction;
diff --git a/include/swift/AST/Attr.h b/include/swift/AST/Attr.h
index 367a198..98e447d 100644
--- a/include/swift/AST/Attr.h
+++ b/include/swift/AST/Attr.h
@@ -1395,7 +1395,7 @@
   }
 };
 
-/// \brief Attributes that may be applied to declarations.
+/// Attributes that may be applied to declarations.
 class DeclAttributes {
   /// Linked list of declaration attributes.
   DeclAttribute *DeclAttrs;
diff --git a/include/swift/AST/Availability.h b/include/swift/AST/Availability.h
index 13b1409..58d6f7b 100644
--- a/include/swift/AST/Availability.h
+++ b/include/swift/AST/Availability.h
@@ -329,11 +329,11 @@
 
   static AvailabilityContext inferForType(Type t);
 
-  /// \brief Returns the context where a declaration is available
+  /// Returns the context where a declaration is available
   ///  We assume a declaration without an annotation is always available.
   static AvailabilityContext availableRange(const Decl *D, ASTContext &C);
 
-  /// \brief Returns the context for which the declaration
+  /// Returns the context for which the declaration
   /// is annotated as available, or None if the declaration
   /// has no availability annotation.
   static Optional<AvailabilityContext> annotatedAvailableRange(const Decl *D,
diff --git a/include/swift/AST/AvailabilitySpec.h b/include/swift/AST/AvailabilitySpec.h
index 1794d9a..56a085a 100644
--- a/include/swift/AST/AvailabilitySpec.h
+++ b/include/swift/AST/AvailabilitySpec.h
@@ -58,7 +58,7 @@
   void operator delete(void *Data) throw() = delete;
 };
 
-/// \brief An availability specification that guards execution based on the
+/// An availability specification that guards execution based on the
 /// run-time platform and version, e.g., OS X >= 10.10.
 class PlatformVersionConstraintAvailabilitySpec : public AvailabilitySpec {
   PlatformKind Platform;
@@ -100,7 +100,7 @@
   }
 };
 
-/// \brief An availability specification that guards execution based on the
+/// An availability specification that guards execution based on the
 /// compile-time language version, e.g., swift >= 3.0.1.
 class LanguageVersionConstraintAvailabilitySpec : public AvailabilitySpec {
   SourceLoc SwiftLoc;
diff --git a/include/swift/AST/Builtins.h b/include/swift/AST/Builtins.h
index e635992..22b6b8c 100644
--- a/include/swift/AST/Builtins.h
+++ b/include/swift/AST/Builtins.h
@@ -90,15 +90,15 @@
 getLLVMIntrinsicIDForBuiltinWithOverflow(BuiltinValueKind ID);
 
 
-/// \brief Create a ValueDecl for the builtin with the given name.
+/// Create a ValueDecl for the builtin with the given name.
 ///
 /// Returns null if the name does not identifier a known builtin value.
 ValueDecl *getBuiltinValueDecl(ASTContext &Context, Identifier Name);
   
-/// \brief Returns the name of a builtin declaration given a builtin ID.
+/// Returns the name of a builtin declaration given a builtin ID.
 StringRef getBuiltinName(BuiltinValueKind ID);
   
-/// \brief The information identifying the builtin - its kind and types.
+/// The information identifying the builtin - its kind and types.
 class BuiltinInfo {
 public:
   BuiltinValueKind ID;
@@ -106,7 +106,7 @@
   bool isReadNone() const;
 };
 
-/// \brief The information identifying the llvm intrinsic - its id and types.
+/// The information identifying the llvm intrinsic - its id and types.
 class IntrinsicInfo {
   mutable llvm::AttributeList Attrs =
       llvm::DenseMapInfo<llvm::AttributeList>::getEmptyKey();
@@ -116,7 +116,7 @@
   bool hasAttribute(llvm::Attribute::AttrKind Kind) const;
 };
 
-/// decodeLLVMAtomicOrdering - turn a string like "release" into the LLVM enum.
+/// Turn a string like "release" into the LLVM enum.
 llvm::AtomicOrdering decodeLLVMAtomicOrdering(StringRef O);
   
 }
diff --git a/include/swift/AST/CaptureInfo.h b/include/swift/AST/CaptureInfo.h
index 47b49ba..c1cab20 100644
--- a/include/swift/AST/CaptureInfo.h
+++ b/include/swift/AST/CaptureInfo.h
@@ -124,7 +124,7 @@
 
 class DynamicSelfType;
 
-/// \brief Stores information about captured variables.
+/// Stores information about captured variables.
 class CaptureInfo {
   const CapturedValue *Captures;
   DynamicSelfType *DynamicSelf;
@@ -152,7 +152,7 @@
     Count = C.size();
   }
 
-  /// \brief Return a filtered list of the captures for this function,
+  /// Return a filtered list of the captures for this function,
   /// filtering out global variables.  This function returns the list that
   /// actually needs to be closed over.
   ///
diff --git a/include/swift/AST/Decl.h b/include/swift/AST/Decl.h
index 6f01693..49d1603 100644
--- a/include/swift/AST/Decl.h
+++ b/include/swift/AST/Decl.h
@@ -268,40 +268,40 @@
   SWIFT_INLINE_BITFIELD_BASE(Decl, bitmax(NumDeclKindBits,8)+1+1+1+1+1+1+1,
     Kind : bitmax(NumDeclKindBits,8),
 
-    /// \brief Whether this declaration is invalid.
+    /// Whether this declaration is invalid.
     Invalid : 1,
 
-    /// \brief Whether this declaration was implicitly created, e.g.,
+    /// Whether this declaration was implicitly created, e.g.,
     /// an implicit constructor in a struct.
     Implicit : 1,
 
-    /// \brief Whether this declaration was mapped directly from a Clang AST.
+    /// Whether this declaration was mapped directly from a Clang AST.
     ///
     /// Use getClangNode() to retrieve the corresponding Clang AST.
     FromClang : 1,
 
-    /// \brief Whether we've already performed early attribute validation.
+    /// Whether we've already performed early attribute validation.
     /// FIXME: This is ugly.
     EarlyAttrValidation : 1,
 
-    /// \brief The validation state of this declaration.
+    /// The validation state of this declaration.
     ValidationState : 2,
 
-    /// \brief Whether this declaration was added to the surrounding
+    /// Whether this declaration was added to the surrounding
     /// DeclContext of an active #if config clause.
     EscapedFromIfConfig : 1
   );
 
   SWIFT_INLINE_BITFIELD_FULL(PatternBindingDecl, Decl, 1+2+16,
-    /// \brief Whether this pattern binding declares static variables.
+    /// Whether this pattern binding declares static variables.
     IsStatic : 1,
 
-    /// \brief Whether 'static' or 'class' was used.
+    /// Whether 'static' or 'class' was used.
     StaticSpelling : 2,
 
     : NumPadBits,
 
-    /// \brief The number of pattern binding declarations.
+    /// The number of pattern binding declarations.
     NumPatternEntries : 16
   );
   
@@ -347,27 +347,27 @@
   );
 
   SWIFT_INLINE_BITFIELD(VarDecl, AbstractStorageDecl, 1+4+1+1+1+1,
-    /// \brief Whether this property is a type property (currently unfortunately
+    /// Whether this property is a type property (currently unfortunately
     /// called 'static').
     IsStatic : 1,
 
-    /// \brief The specifier associated with this variable or parameter.  This
+    /// The specifier associated with this variable or parameter.  This
     /// determines the storage semantics of the value e.g. mutability.
     Specifier : 4,
 
-    /// \brief Whether this declaration was an element of a capture list.
+    /// Whether this declaration was an element of a capture list.
     IsCaptureList : 1,
 
-    /// \brief Whether this vardecl has an initial value bound to it in a way
+    /// Whether this vardecl has an initial value bound to it in a way
     /// that isn't represented in the AST with an initializer in the pattern
     /// binding.  This happens in cases like "for i in ...", switch cases, etc.
     HasNonPatternBindingInit : 1,
 
-    /// \brief Whether this is a property used in expressions in the debugger.
+    /// Whether this is a property used in expressions in the debugger.
     /// It is up to the debugger to instruct SIL how to access this variable.
     IsDebuggerVar : 1,
 
-    /// \brief Whether this is a property defined in the debugger's REPL.
+    /// Whether this is a property defined in the debugger's REPL.
     /// FIXME: Remove this once LLDB has proper support for resilience.
     IsREPLVar : 1
   );
@@ -385,7 +385,7 @@
   );
 
   SWIFT_INLINE_BITFIELD(EnumElementDecl, ValueDecl, 1,
-    /// \brief The ResilienceExpansion to use for default arguments.
+    /// The ResilienceExpansion to use for default arguments.
     DefaultArgumentResilienceExpansion : 1
   );
   
@@ -423,7 +423,7 @@
     /// Whether this function is a 'static' method.
     IsStatic : 1,
 
-    /// \brief Whether 'static' or 'class' was used.
+    /// Whether 'static' or 'class' was used.
     StaticSpelling : 2,
 
     /// Whether we are statically dispatched even if overridable
@@ -675,10 +675,10 @@
     Bits.Decl.EscapedFromIfConfig = false;
   }
 
-  /// \brief Get the Clang node associated with this declaration.
+  /// Get the Clang node associated with this declaration.
   ClangNode getClangNodeImpl() const;
 
-  /// \brief Set the Clang node associated with this declaration.
+  /// Set the Clang node associated with this declaration.
   void setClangNode(ClangNode Node);
 
   void updateClangNode(ClangNode node) {
@@ -692,7 +692,7 @@
 public:
   DeclKind getKind() const { return DeclKind(Bits.Decl.Kind); }
 
-  /// \brief Retrieve the name of the given declaration kind.
+  /// Retrieve the name of the given declaration kind.
   ///
   /// This name should only be used for debugging dumps and other
   /// developer aids, and should never be part of a diagnostic or exposed
@@ -730,7 +730,7 @@
   /// also a declaration context) or its declaration context.
   DeclContext *getInnermostDeclContext() const;
 
-  /// \brief Retrieve the module in which this declaration resides.
+  /// Retrieve the module in which this declaration resides.
   LLVM_READONLY
   ModuleDecl *getModuleContext() const;
 
@@ -777,13 +777,13 @@
       "only for use within the debugger");
   void dump(raw_ostream &OS, unsigned Indent = 0) const;
 
-  /// \brief Pretty-print the given declaration.
+  /// Pretty-print the given declaration.
   ///
   /// \param OS Output stream to which the declaration will be printed.
   void print(raw_ostream &OS) const;
   void print(raw_ostream &OS, const PrintOptions &Opts) const;
 
-  /// \brief Pretty-print the given declaration.
+  /// Pretty-print the given declaration.
   ///
   /// \param Printer ASTPrinter object.
   ///
@@ -793,23 +793,23 @@
   /// required the declaration to be skipped from printing.
   bool print(ASTPrinter &Printer, const PrintOptions &Opts) const;
 
-  /// \brief Determine whether this declaration should be printed when
+  /// Determine whether this declaration should be printed when
   /// encountered in its declaration context's list of members.
   bool shouldPrintInContext(const PrintOptions &PO) const;
 
   bool walk(ASTWalker &walker);
 
-  /// \brief Return whether this declaration has been determined invalid.
+  /// Return whether this declaration has been determined invalid.
   bool isInvalid() const { return Bits.Decl.Invalid; }
   
-  /// \brief Mark this declaration invalid.
+  /// Mark this declaration invalid.
   void setInvalid(bool isInvalid = true) { Bits.Decl.Invalid = isInvalid; }
 
-  /// \brief Determine whether this declaration was implicitly generated by the
+  /// Determine whether this declaration was implicitly generated by the
   /// compiler (rather than explicitly written in source code).
   bool isImplicit() const { return Bits.Decl.Implicit; }
 
-  /// \brief Mark this declaration as implicit.
+  /// Mark this declaration as implicit.
   void setImplicit(bool implicit = true) { Bits.Decl.Implicit = implicit; }
 
   /// Whether we have already done early attribute validation.
@@ -890,13 +890,13 @@
   /// \returns the brief comment attached to this declaration.
   StringRef getBriefComment() const;
 
-  /// \brief Returns true if there is a Clang AST node associated
+  /// Returns true if there is a Clang AST node associated
   /// with self.
   bool hasClangNode() const {
     return Bits.Decl.FromClang;
   }
 
-  /// \brief Retrieve the Clang AST node from which this declaration was
+  /// Retrieve the Clang AST node from which this declaration was
   /// synthesized, if any.
   LLVM_READONLY
   ClangNode getClangNode() const {
@@ -906,7 +906,7 @@
     return getClangNodeImpl();
   }
 
-  /// \brief Retrieve the Clang declaration from which this declaration was
+  /// Retrieve the Clang declaration from which this declaration was
   /// synthesized, if any.
   LLVM_READONLY
   const clang::Decl *getClangDecl() const {
@@ -916,7 +916,7 @@
     return getClangNodeImpl().getAsDecl();
   }
 
-  /// \brief Retrieve the Clang macro from which this declaration was
+  /// Retrieve the Clang macro from which this declaration was
   /// synthesized, if any.
   LLVM_READONLY
   const clang::MacroInfo *getClangMacro() {
@@ -926,7 +926,7 @@
     return getClangNodeImpl().getAsMacro();
   }
 
-  /// \brief Return the GenericContext if the Decl has one.
+  /// Return the GenericContext if the Decl has one.
   LLVM_READONLY
   const GenericContext *getAsGenericContext() const;
 
@@ -968,7 +968,7 @@
   }
 };
 
-/// \brief Use RAII to track Decl validation progress and non-reentrancy.
+/// Use RAII to track Decl validation progress and non-reentrancy.
 class DeclValidationRAII {
   Decl *D;
 
@@ -987,7 +987,7 @@
   }
 };
 
-/// \brief Allocates memory for a Decl with the given \p baseSize. If necessary,
+/// Allocates memory for a Decl with the given \p baseSize. If necessary,
 /// it includes additional space immediately preceding the Decl for a ClangNode.
 /// \note \p baseSize does not need to include space for a ClangNode if
 /// requested -- the necessary space will be added automatically.
@@ -1025,7 +1025,7 @@
   // when adding enumerators.
 };
 
-/// \brief A single requirement in a 'where' clause, which places additional
+/// A single requirement in a 'where' clause, which places additional
 /// restrictions on the generic parameters or associated types of a generic
 /// function, type, or protocol.
 ///
@@ -1063,7 +1063,7 @@
   void printImpl(ASTPrinter &OS, bool AsWritten) const;
 
 public:
-  /// \brief Construct a new type-constraint requirement.
+  /// Construct a new type-constraint requirement.
   ///
   /// \param Subject The type that must conform to the given protocol or
   /// composition, or be a subclass of the given class type.
@@ -1077,7 +1077,7 @@
     return { ColonLoc, RequirementReprKind::TypeConstraint, Subject, Constraint };
   }
 
-  /// \brief Construct a new same-type requirement.
+  /// Construct a new same-type requirement.
   ///
   /// \param FirstType The first type.
   /// \param EqualLoc The location of the '==' in the same-type constraint, or
@@ -1089,7 +1089,7 @@
     return { EqualLoc, RequirementReprKind::SameType, FirstType, SecondType };
   }
 
-  /// \brief Construct a new layout-constraint requirement.
+  /// Construct a new layout-constraint requirement.
   ///
   /// \param Subject The type that must conform to the given layout 
   /// requirement.
@@ -1104,16 +1104,16 @@
             Layout};
   }
 
-  /// \brief Determine the kind of requirement
+  /// Determine the kind of requirement
   RequirementReprKind getKind() const { return Kind; }
 
-  /// \brief Determine whether this requirement is invalid.
+  /// Determine whether this requirement is invalid.
   bool isInvalid() const { return Invalid; }
 
-  /// \brief Mark this requirement invalid.
+  /// Mark this requirement invalid.
   void setInvalid() { Invalid = true; }
 
-  /// \brief For a type-bound requirement, return the subject of the
+  /// For a type-bound requirement, return the subject of the
   /// conformance relationship.
   Type getSubject() const {
     assert(getKind() == RequirementReprKind::TypeConstraint ||
@@ -1139,7 +1139,7 @@
     return FirstType;
   }
 
-  /// \brief For a type-bound requirement, return the protocol or to which
+  /// For a type-bound requirement, return the protocol or to which
   /// the subject conforms or superclass it inherits.
   Type getConstraint() const {
     assert(getKind() == RequirementReprKind::TypeConstraint);
@@ -1176,7 +1176,7 @@
     return SecondLayout;
   }
 
-  /// \brief Retrieve the first type of a same-type requirement.
+  /// Retrieve the first type of a same-type requirement.
   Type getFirstType() const {
     assert(getKind() == RequirementReprKind::SameType);
     return FirstType.getType();
@@ -1197,7 +1197,7 @@
     return FirstType;
   }
 
-  /// \brief Retrieve the second type of a same-type requirement.
+  /// Retrieve the second type of a same-type requirement.
   Type getSecondType() const {
     assert(getKind() == RequirementReprKind::SameType);
     return SecondType.getType();
@@ -1218,7 +1218,7 @@
     return SecondType;
   }
 
-  /// \brief Retrieve the location of the ':' or '==' in an explicitly-written
+  /// Retrieve the location of the ':' or '==' in an explicitly-written
   /// conformance or same-type requirement respectively.
   SourceLoc getSeparatorLoc() const {
     return SeparatorLoc;
@@ -1332,11 +1332,11 @@
   const_iterator begin() const { return getParams().begin(); }
   const_iterator end() const { return getParams().end(); }
 
-  /// \brief Retrieve the location of the 'where' keyword, or an invalid
+  /// Retrieve the location of the 'where' keyword, or an invalid
   /// location if 'where' was not present.
   SourceLoc getWhereLoc() const { return WhereLoc; }
 
-  /// \brief Retrieve the set of additional requirements placed on these
+  /// Retrieve the set of additional requirements placed on these
   /// generic parameters and types derived from them.
   ///
   /// This list may contain both explicitly-written requirements as well as
@@ -1344,7 +1344,7 @@
   /// 'where' keyword is present.
   MutableArrayRef<RequirementRepr> getRequirements() { return Requirements; }
 
-  /// \brief Retrieve the set of additional requirements placed on these
+  /// Retrieve the set of additional requirements placed on these
   /// generic parameters and types derived from them.
   ///
   /// This list may contain both explicitly-written requirements as well as
@@ -1377,7 +1377,7 @@
   void addTrailingWhereClause(ASTContext &ctx, SourceLoc trailingWhereLoc,
                               ArrayRef<RequirementRepr> trailingRequirements);
   
-  /// \brief Retrieve the outer generic parameter list, which provides the
+  /// Retrieve the outer generic parameter list, which provides the
   /// generic parameters of the context in which this generic parameter list
   /// exists.
   ///
@@ -1395,7 +1395,7 @@
   /// its outer generic parameter list.
   GenericParamList *getOuterParameters() const { return OuterParameters; }
 
-  /// \brief Set the outer generic parameter list. See \c getOuterParameters
+  /// Set the outer generic parameter list. See \c getOuterParameters
   /// for more information.
   void setOuterParameters(GenericParamList *Outer) { OuterParameters = Outer; }
 
@@ -1506,13 +1506,13 @@
     : _GenericContext(), DeclContext(Kind, Parent) { }
 
 public:
-  /// \brief Retrieve the set of parameters to a generic context, or null if
+  /// Retrieve the set of parameters to a generic context, or null if
   /// this context is not generic.
   GenericParamList *getGenericParams() const { return GenericParams; }
 
   void setGenericParams(GenericParamList *GenericParams);
 
-  /// \brief Determine whether this context has generic parameters
+  /// Determine whether this context has generic parameters
   /// of its own.
   bool isGeneric() const { return GenericParams != nullptr; }
 
@@ -1677,7 +1677,7 @@
 
   MutableArrayRef<TypeLoc> Inherited;
 
-  /// \brief The next extension in the linked list of extensions.
+  /// The next extension in the linked list of extensions.
   ///
   /// The bit indicates whether this extension has been resolved to refer to
   /// a known nominal type.
@@ -1752,7 +1752,7 @@
   /// Retrieve the extended type location.
   const TypeLoc &getExtendedTypeLoc() const { return ExtendedType; }
 
-  /// \brief Retrieve the set of protocols that this type inherits (i.e,
+  /// Retrieve the set of protocols that this type inherits (i.e,
   /// explicitly conforms to).
   MutableArrayRef<TypeLoc> getInherited() { return Inherited; }
   ArrayRef<TypeLoc> getInherited() const { return Inherited; }
@@ -1829,7 +1829,7 @@
   using DeclContext::operator new;
 };
 
-/// \brief Iterator that walks the extensions of a particular type.
+/// Iterator that walks the extensions of a particular type.
 class ExtensionIterator {
   ExtensionDecl *current;
 
@@ -1860,7 +1860,7 @@
   }
 };
 
-/// \brief Range that covers a set of extensions.
+/// Range that covers a set of extensions.
 class ExtensionRange {
   ExtensionIterator first;
   ExtensionIterator last;
@@ -1996,7 +1996,7 @@
   SourceRange getSourceRange(bool omitAccessors = false) const;
 };
 
-/// \brief This decl contains a pattern and optional initializer for a set
+/// This decl contains a pattern and optional initializer for a set
 /// of one or more VarDecls declared together.
 ///
 /// For example, in
@@ -2366,7 +2366,7 @@
   }
 
 public:
-  /// \brief Return true if this protocol member is a protocol requirement.
+  /// Return true if this protocol member is a protocol requirement.
   ///
   /// Asserts if this is not a member of a protocol.
   bool isProtocolRequirement() const;
@@ -2686,7 +2686,7 @@
   /// metatype.
   Type getDeclaredInterfaceType() const;
 
-  /// \brief Retrieve the set of protocols that this type inherits (i.e,
+  /// Retrieve the set of protocols that this type inherits (i.e,
   /// explicitly conforms to).
   MutableArrayRef<TypeLoc> getInherited() { return Inherited; }
   ArrayRef<TypeLoc> getInherited() const { return Inherited; }
@@ -3040,14 +3040,14 @@
 class NominalTypeDecl : public GenericTypeDecl, public IterableDeclContext {
   SourceRange Braces;
 
-  /// \brief The first extension of this type.
+  /// The first extension of this type.
   ExtensionDecl *FirstExtension = nullptr;
 
-  /// \brief The last extension of this type, used solely for efficient
+  /// The last extension of this type, used solely for efficient
   /// insertion of new extensions.
   ExtensionDecl *LastExtension = nullptr;
 
-  /// \brief The generation at which we last loaded extensions.
+  /// The generation at which we last loaded extensions.
   unsigned ExtensionGeneration;
   
   /// Prepare to traverse the list of extensions.
@@ -3066,7 +3066,7 @@
   /// Slow path for \c takeConformanceLoader().
   std::pair<LazyMemberLoader *, uint64_t> takeConformanceLoaderSlow();
 
-  /// \brief A lookup table containing all of the members of this type and
+  /// A lookup table containing all of the members of this type and
   /// its extensions.
   ///
   /// The table itself is lazily constructed and updated when
@@ -3092,7 +3092,7 @@
   /// so that its members can eventually be added to the lookup table.
   void addedExtension(ExtensionDecl *ext);
 
-  /// \brief A lookup table used to find the protocol conformances of
+  /// A lookup table used to find the protocol conformances of
   /// a given nominal type.
   mutable ConformanceLookupTable *ConformanceTable = nullptr;
 
@@ -3140,18 +3140,18 @@
   
   void setBraces(SourceRange braces) { Braces = braces; }
 
-  /// \brief Should this declaration behave as if it must be accessed
+  /// Should this declaration behave as if it must be accessed
   /// resiliently, even when we're building a non-resilient module?
   ///
   /// This is used for diagnostics, because we do not want a behavior
   /// change between builds with resilience enabled and disabled.
   bool isFormallyResilient() const;
 
-  /// \brief Do we need to use resilient access patterns outside of this type's
+  /// Do we need to use resilient access patterns outside of this type's
   /// resilience domain?
   bool isResilient() const;
 
-  /// \brief Do we need to use resilient access patterns when accessing this
+  /// Do we need to use resilient access patterns when accessing this
   /// type from the given module?
   bool isResilient(ModuleDecl *M, ResilienceExpansion expansion) const;
 
@@ -3182,10 +3182,10 @@
   /// generic parameters bound if this is a generic type.
   Type getDeclaredInterfaceType() const;
 
-  /// \brief Add a new extension to this nominal type.
+  /// Add a new extension to this nominal type.
   void addExtension(ExtensionDecl *extension);
 
-  /// \brief Retrieve the set of extensions of this type.
+  /// Retrieve the set of extensions of this type.
   ExtensionRange getExtensions();
 
   /// Make a member of this nominal type, or one of its extensions,
@@ -3320,7 +3320,7 @@
   static bool classof(const ExtensionDecl *D) { return false; }
 };
 
-/// \brief This is the declaration of an enum.
+/// This is the declaration of an enum.
 ///
 /// For example:
 ///
@@ -3943,7 +3943,7 @@
   bool walkInheritedProtocols(
                llvm::function_ref<TypeWalker::Action(ProtocolDecl *)> fn) const;
 
-  /// \brief Determine whether this protocol inherits from the given ("super")
+  /// Determine whether this protocol inherits from the given ("super")
   /// protocol.
   bool inheritsFrom(const ProtocolDecl *Super) const;
   
@@ -3985,6 +3985,9 @@
              ->existentialConformsToSelfSlow();
   }
 
+  /// Does this protocol require a self-conformance witness table?
+  bool requiresSelfConformanceWitnessTable() const;
+
   /// Find direct Self references within the given requirement.
   ///
   /// \param allowCovariantParameters If true, 'Self' is assumed to be
@@ -4288,18 +4291,18 @@
 
 public:
 
-  /// \brief Should this declaration be treated as if annotated with transparent
+  /// Should this declaration be treated as if annotated with transparent
   /// attribute.
   bool isTransparent() const;
 
-  /// \brief Determine whether this storage is a static member, if it
+  /// Determine whether this storage is a static member, if it
   /// is a member.  Currently only variables can be static.
   inline bool isStatic() const; // defined in this header
 
-  /// \brief Return the interface type of the stored value.
+  /// Return the interface type of the stored value.
   Type getValueInterfaceType() const;
 
-  /// \brief Determine how this storage is implemented.
+  /// Determine how this storage is implemented.
   StorageImplInfo getImplInfo() const {
     if (auto ptr = Accessors.getPointer())
       return ptr->getImplInfo();
@@ -4320,13 +4323,13 @@
   /// used carefully.
   void overwriteImplInfo(StorageImplInfo implInfo);
 
-  /// \brief Return true if this is a VarDecl that has storage associated with
+  /// Return true if this is a VarDecl that has storage associated with
   /// it.
   bool hasStorage() const {
     return Bits.AbstractStorageDecl.HasStorage;
   }
 
-  /// \brief Return true if this storage has the basic accessors/capability
+  /// Return true if this storage has the basic accessors/capability
   /// to be mutated.  This is generally constant after the accessors are
   /// installed by the parser/importer/whatever.
   ///
@@ -4344,7 +4347,7 @@
     return !getAllAccessors().empty();
   }
 
-  /// \brief Return the ownership of values opaquely read from this storage.
+  /// Return the ownership of values opaquely read from this storage.
   OpaqueReadOwnership getOpaqueReadOwnership() const {
     return OpaqueReadOwnership(Bits.AbstractStorageDecl.OpaqueReadOwnership);
   }
@@ -4352,7 +4355,7 @@
     Bits.AbstractStorageDecl.OpaqueReadOwnership = unsigned(ownership);
   }
 
-  /// \brief Return true if reading this storage requires the ability to
+  /// Return true if reading this storage requires the ability to
   /// modify the base value.
   bool isGetterMutating() const {
     return Bits.AbstractStorageDecl.IsGetterMutating;
@@ -4361,7 +4364,7 @@
     Bits.AbstractStorageDecl.IsGetterMutating = isMutating;
   }
   
-  /// \brief Return true if modifying this storage requires the ability to
+  /// Return true if modifying this storage requires the ability to
   /// modify the base value.
   bool isSetterMutating() const {
     return Bits.AbstractStorageDecl.IsSetterMutating;
@@ -4393,24 +4396,24 @@
                     SourceLoc lbraceLoc, ArrayRef<AccessorDecl*> accessors,
                     SourceLoc rbraceLoc);
 
-  /// \brief Add a setter to an existing Computed var.
+  /// Add a setter to an existing Computed var.
   ///
   /// This should only be used by the ClangImporter.
   void setComputedSetter(AccessorDecl *Set);
 
-  /// \brief Add a behavior to a property.
+  /// Add a behavior to a property.
   void addBehavior(TypeRepr *Type, Expr *Param);
 
-  /// \brief Add a synthesized getter.
+  /// Add a synthesized getter.
   void setSynthesizedGetter(AccessorDecl *getter);
 
-  /// \brief Add a synthesized setter.
+  /// Add a synthesized setter.
   void setSynthesizedSetter(AccessorDecl *setter);
 
-  /// \brief Add a synthesized read coroutine.
+  /// Add a synthesized read coroutine.
   void setSynthesizedReadCoroutine(AccessorDecl *read);
 
-  /// \brief Add a synthesized modify coroutine.
+  /// Add a synthesized modify coroutine.
   void setSynthesizedModifyCoroutine(AccessorDecl *modify);
 
   /// Does this storage require an opaque accessor of the given kind?
@@ -4438,12 +4441,12 @@
     return SourceRange();
   }
 
-  /// \brief Retrieve the getter used to access the value of this variable.
+  /// Retrieve the getter used to access the value of this variable.
   AccessorDecl *getGetter() const {
     return getAccessor(AccessorKind::Get);
   }
   
-  /// \brief Retrieve the setter used to mutate the value of this variable.
+  /// Retrieve the setter used to mutate the value of this variable.
   AccessorDecl *getSetter() const {
     return getAccessor(AccessorKind::Set);
   }
@@ -4457,40 +4460,40 @@
 
   void overwriteSetterAccess(AccessLevel accessLevel);
 
-  /// \brief Return the decl for the immutable addressor if it exists.
+  /// Return the decl for the immutable addressor if it exists.
   AccessorDecl *getAddressor() const {
     return getAccessor(AccessorKind::Address);
   }
 
-  /// \brief Return the decl for the mutable accessor if it exists.
+  /// Return the decl for the mutable accessor if it exists.
   AccessorDecl *getMutableAddressor() const {
     return getAccessor(AccessorKind::MutableAddress);
   }
 
-  /// \brief Return the appropriate addressor for the given access kind.
+  /// Return the appropriate addressor for the given access kind.
   AccessorDecl *getAddressorForAccess(AccessKind accessKind) const {
     if (accessKind == AccessKind::Read)
       return getAddressor();
     return getMutableAddressor();
   }
 
-  /// \brief Return the decl for the 'read' coroutine accessor if it exists.
+  /// Return the decl for the 'read' coroutine accessor if it exists.
   AccessorDecl *getReadCoroutine() const {
     return getAccessor(AccessorKind::Read);
   }
 
-  /// \brief Return the decl for the 'modify' coroutine accessor if it exists.
+  /// Return the decl for the 'modify' coroutine accessor if it exists.
   AccessorDecl *getModifyCoroutine() const {
     return getAccessor(AccessorKind::Modify);
   }
 
-  /// \brief Return the decl for the willSet specifier if it exists, this is
+  /// Return the decl for the willSet specifier if it exists, this is
   /// only valid on a declaration with Observing storage.
   AccessorDecl *getWillSetFunc() const {
     return getAccessor(AccessorKind::WillSet);
   }
 
-  /// \brief Return the decl for the didSet specifier if it exists, this is
+  /// Return the decl for the didSet specifier if it exists, this is
   /// only valid on a declaration with Observing storage.
   AccessorDecl *getDidSetFunc() const {
     return getAccessor(AccessorKind::DidSet);
@@ -4529,18 +4532,18 @@
                                    ModuleDecl *module,
                                    ResilienceExpansion expansion) const;
 
-  /// \brief Should this declaration behave as if it must be accessed
+  /// Should this declaration behave as if it must be accessed
   /// resiliently, even when we're building a non-resilient module?
   ///
   /// This is used for diagnostics, because we do not want a behavior
   /// change between builds with resilience enabled and disabled.
   bool isFormallyResilient() const;
 
-  /// \brief Do we need to use resilient access patterns outside of this
+  /// Do we need to use resilient access patterns outside of this
   /// property's resilience domain?
   bool isResilient() const;
 
-  /// \brief Do we need to use resilient access patterns when accessing this
+  /// Do we need to use resilient access patterns when accessing this
   /// property from the given module?
   bool isResilient(ModuleDecl *M, ResilienceExpansion expansion) const;
 
@@ -4668,7 +4671,7 @@
   /// precisely point to the variable type because of type aliases.
   SourceRange getTypeSourceRangeForDiagnostics() const;
 
-  /// \brief Returns whether the var is settable in the specified context: this
+  /// Returns whether the var is settable in the specified context: this
   /// is either because it is a stored var, because it has a custom setter, or
   /// is a let member in an initializer.
   ///
@@ -5033,7 +5036,7 @@
   Keyed
 };
 
-/// \brief Declares a subscripting operator for a type.
+/// Declares a subscripting operator for a type.
 ///
 /// A subscript declaration is defined as a get/set pair that produces a
 /// specific type. For example:
@@ -5083,12 +5086,12 @@
   SourceRange getSourceRange() const;
   SourceRange getSignatureSourceRange() const;
 
-  /// \brief Retrieve the indices for this subscript operation.
+  /// Retrieve the indices for this subscript operation.
   ParameterList *getIndices() { return Indices; }
   const ParameterList *getIndices() const { return Indices; }
   void setIndices(ParameterList *p);
 
-  /// \brief Retrieve the type of the element referenced by a subscript
+  /// Retrieve the type of the element referenced by a subscript
   /// operation.
   Type getElementInterfaceType() const;
   TypeLoc &getElementTypeLoc() { return ElementTy; }
@@ -5098,7 +5101,7 @@
   /// element types.
   void computeType();
 
-  /// \brief Returns whether the result of the subscript operation can be set.
+  /// Returns whether the result of the subscript operation can be set.
   bool isSettable() const;
 
   /// Determine the kind of Objective-C subscripting this declaration
@@ -5156,7 +5159,7 @@
   }
 };
 
-/// \brief Base class for function-like declarations.
+/// Base class for function-like declarations.
 class AbstractFunctionDecl : public GenericContext, public ValueDecl {
 public:
   enum class BodyKind {
@@ -5252,7 +5255,7 @@
     return hasName() ? getBaseName().getIdentifier().str() : "_";
   }
 
-  /// \brief Should this declaration be treated as if annotated with transparent
+  /// Should this declaration be treated as if annotated with transparent
   /// attribute.
   bool isTransparent() const;
 
@@ -5331,7 +5334,7 @@
     setBodyKind(NewBodyKind);
   }
 
-  /// \brief Note that the body was skipped for this function.  Function body
+  /// Note that the body was skipped for this function.  Function body
   /// cannot be attached after this call.
   void setBodySkipped(SourceRange bodyRange) {
     assert(getBodyKind() == BodyKind::None);
@@ -5339,7 +5342,7 @@
     setBodyKind(BodyKind::Skipped);
   }
 
-  /// \brief Note that parsing for the body was delayed.
+  /// Note that parsing for the body was delayed.
   void setBodyDelayed(SourceRange bodyRange) {
     assert(getBodyKind() == BodyKind::None);
     BodyRange = bodyRange;
@@ -5552,7 +5555,7 @@
 
   TypeLoc FnRetType;
 
-  /// \brief If this FuncDecl is an accessor for a property, this indicates
+  /// If this FuncDecl is an accessor for a property, this indicates
   /// which property and what kind of accessor.
   BehaviorRecord *BehaviorParamDecl = nullptr;
   OperatorDecl *Operator = nullptr;
@@ -5748,7 +5751,7 @@
   bool isPotentialIBActionTarget() const;
 };
 
-/// \brief This represents an accessor function, such as a getter or setter.
+/// This represents an accessor function, such as a getter or setter.
 class AccessorDecl final : public FuncDecl {
   /// Location of the accessor keyword, e.g. 'set'.
   SourceLoc AccessorKeywordLoc;
@@ -5883,7 +5886,7 @@
   return nullptr;
 }
   
-/// \brief This represents a 'case' declaration in an 'enum', which may declare
+/// This represents a 'case' declaration in an 'enum', which may declare
 /// one or more individual comma-separated EnumElementDecls.
 class EnumCaseDecl final : public Decl,
     private llvm::TrailingObjects<EnumCaseDecl, EnumElementDecl *> {
@@ -5923,7 +5926,7 @@
   }
 };
 
-/// \brief This represents a single case of an 'enum' declaration.
+/// This represents a single case of an 'enum' declaration.
 ///
 /// For example, the X, Y, and Z in this enum:
 ///
@@ -6117,7 +6120,7 @@
   SourceLoc getStartLoc() const { return getConstructorLoc(); }
   SourceRange getSourceRange() const;
 
-  /// \brief Get the interface type of the constructed object.
+  /// Get the interface type of the constructed object.
   Type getResultInterfaceType() const;
 
   /// Get the interface type of the initializing constructor.
diff --git a/include/swift/AST/DeclContext.h b/include/swift/AST/DeclContext.h
index 9437de7..0e94a95 100644
--- a/include/swift/AST/DeclContext.h
+++ b/include/swift/AST/DeclContext.h
@@ -306,7 +306,7 @@
   LLVM_READONLY
   ProtocolDecl *getExtendedProtocolDecl() const;
 
-  /// \brief Retrieve the generic parameter 'Self' from a protocol or
+  /// Retrieve the generic parameter 'Self' from a protocol or
   /// protocol extension.
   ///
   /// Only valid if \c getSelfProtocolDecl().
@@ -336,17 +336,17 @@
   /// - Everything else falls back on getDeclaredInterfaceType().
   Type getSelfInterfaceType() const;
 
-  /// \brief Retrieve the innermost generic parameters of this context or any
+  /// Retrieve the innermost generic parameters of this context or any
   /// of its parents.
   ///
   /// FIXME: Remove this
   GenericParamList *getGenericParamsOfContext() const;
 
-  /// \brief Retrieve the innermost generic signature of this context or any
+  /// Retrieve the innermost generic signature of this context or any
   /// of its parents.
   GenericSignature *getGenericSignatureOfContext() const;
 
-  /// \brief Retrieve the innermost archetypes of this context or any
+  /// Retrieve the innermost archetypes of this context or any
   /// of its parents.
   GenericEnvironment *getGenericEnvironmentOfContext() const;
 
diff --git a/include/swift/AST/DiagnosticConsumer.h b/include/swift/AST/DiagnosticConsumer.h
index fe55b2f..49dc645 100644
--- a/include/swift/AST/DiagnosticConsumer.h
+++ b/include/swift/AST/DiagnosticConsumer.h
@@ -29,7 +29,7 @@
   class SourceManager;
   enum class DiagID : uint32_t;
 
-/// \brief Describes the kind of diagnostic.
+/// Describes the kind of diagnostic.
 ///
 enum class DiagnosticKind : uint8_t {
   Error,
@@ -38,7 +38,7 @@
   Note
 };
 
-/// \brief Extra information carried along with a diagnostic, which may or
+/// Extra information carried along with a diagnostic, which may or
 /// may not be of interest to a given diagnostic consumer.
 struct DiagnosticInfo {
   DiagID ID = DiagID(0);
@@ -56,14 +56,14 @@
     StringRef getText() const { return Text; }
   };
 
-  /// \brief Extra source ranges that are attached to the diagnostic.
+  /// Extra source ranges that are attached to the diagnostic.
   ArrayRef<CharSourceRange> Ranges;
 
-  /// \brief Extra source ranges that are attached to the diagnostic.
+  /// Extra source ranges that are attached to the diagnostic.
   ArrayRef<FixIt> FixIts;
 };
   
-/// \brief Abstract interface for classes that present diagnostics to the user.
+/// Abstract interface for classes that present diagnostics to the user.
 class DiagnosticConsumer {
 protected:
   static llvm::SMLoc getRawLoc(SourceLoc Loc);
@@ -80,7 +80,7 @@
 public:
   virtual ~DiagnosticConsumer();
   
-  /// \brief Invoked whenever the frontend emits a diagnostic.
+  /// Invoked whenever the frontend emits a diagnostic.
   ///
   /// \param SM The source manager associated with the source locations in
   /// this diagnostic.
@@ -113,7 +113,7 @@
   virtual void informDriverOfIncompleteBatchModeCompilation() {}
 };
   
-/// \brief DiagnosticConsumer that discards all diagnostics.
+/// DiagnosticConsumer that discards all diagnostics.
 class NullDiagnosticConsumer : public DiagnosticConsumer {
 public:
   void handleDiagnostic(SourceManager &SM, SourceLoc Loc,
@@ -123,7 +123,7 @@
                         const DiagnosticInfo &Info) override;
 };
 
-/// \brief DiagnosticConsumer that forwards diagnostics to the consumers of
+/// DiagnosticConsumer that forwards diagnostics to the consumers of
 // another DiagnosticEngine.
 class ForwardingDiagnosticConsumer : public DiagnosticConsumer {
   DiagnosticEngine &TargetEngine;
@@ -136,7 +136,7 @@
                         const DiagnosticInfo &Info) override;
 };
 
-/// \brief DiagnosticConsumer that funnels diagnostics in certain files to
+/// DiagnosticConsumer that funnels diagnostics in certain files to
 /// particular sub-consumers.
 ///
 /// The intended use case for such a consumer is "batch mode" compilations,
diff --git a/include/swift/AST/DiagnosticEngine.h b/include/swift/AST/DiagnosticEngine.h
index e5db126..3ce153f 100644
--- a/include/swift/AST/DiagnosticEngine.h
+++ b/include/swift/AST/DiagnosticEngine.h
@@ -35,13 +35,13 @@
   enum class DescriptiveDeclKind : uint8_t;
   enum DeclAttrKind : unsigned;
 
-  /// \brief Enumeration describing all of possible diagnostics.
+  /// Enumeration describing all of possible diagnostics.
   ///
   /// Each of the diagnostics described in Diagnostics.def has an entry in
   /// this enumeration type that uniquely identifies it.
   enum class DiagID : uint32_t;
 
-  /// \brief Describes a diagnostic along with its argument types.
+  /// Describes a diagnostic along with its argument types.
   ///
   /// The diagnostics header introduces instances of this type for each 
   /// diagnostic, which provide both the set of argument types (used to
@@ -49,12 +49,12 @@
   /// (for other information about the diagnostic).
   template<typename ...ArgTypes>
   struct Diag {
-    /// \brief The diagnostic ID corresponding to this diagnostic.
+    /// The diagnostic ID corresponding to this diagnostic.
     DiagID ID;
   };
 
   namespace detail {
-    /// \brief Describes how to pass a diagnostic argument of the given type.
+    /// Describes how to pass a diagnostic argument of the given type.
     ///
     /// By default, diagnostic arguments are passed by value, because they
     /// tend to be small. Larger diagnostic arguments
@@ -65,7 +65,7 @@
     };
   }
     
-  /// \brief Describes the kind of diagnostic argument we're storing.
+  /// Describes the kind of diagnostic argument we're storing.
   ///
   enum class DiagnosticArgumentKind {
     String,
@@ -89,7 +89,7 @@
     enum class RequirementKind : uint8_t;
   }
 
-  /// \brief Variant type that holds a single diagnostic argument of a known
+  /// Variant type that holds a single diagnostic argument of a known
   /// type.
   ///
   /// All diagnostic arguments are converted to an instance of this class.
@@ -352,7 +352,7 @@
     }
   };
   
-  /// \brief Describes an in-flight diagnostic, which is currently active
+  /// Describes an in-flight diagnostic, which is currently active
   /// within the diagnostic engine and can be augmented within additional
   /// information (source ranges, Fix-Its, etc.).
   ///
@@ -365,7 +365,7 @@
     DiagnosticEngine *Engine;
     bool IsActive;
     
-    /// \brief Create a new in-flight diagnostic. 
+    /// Create a new in-flight diagnostic. 
     ///
     /// This constructor is only available to the DiagnosticEngine.
     InFlightDiagnostic(DiagnosticEngine &Engine)
@@ -376,14 +376,14 @@
     InFlightDiagnostic &operator=(InFlightDiagnostic &&) = delete;
 
   public:
-    /// \brief Create an active but unattached in-flight diagnostic.
+    /// Create an active but unattached in-flight diagnostic.
     /// 
     /// The resulting diagnostic can be used as a dummy, accepting the
     /// syntax to add additional information to a diagnostic without
     /// actually emitting a diagnostic.
     InFlightDiagnostic() : Engine(0), IsActive(true) { }
     
-    /// \brief Transfer an in-flight diagnostic to a new object, which is
+    /// Transfer an in-flight diagnostic to a new object, which is
     /// typically used when returning in-flight diagnostics.
     InFlightDiagnostic(InFlightDiagnostic &&Other)
       : Engine(Other.Engine), IsActive(Other.IsActive) {
@@ -395,54 +395,54 @@
         flush();
     }
     
-    /// \brief Flush the active diagnostic to the diagnostic output engine.
+    /// Flush the active diagnostic to the diagnostic output engine.
     void flush();
 
-    /// \brief Add a token-based range to the currently-active diagnostic.
+    /// Add a token-based range to the currently-active diagnostic.
     InFlightDiagnostic &highlight(SourceRange R);
 
-    /// \brief Add a character-based range to the currently-active diagnostic.
+    /// Add a character-based range to the currently-active diagnostic.
     InFlightDiagnostic &highlightChars(SourceLoc Start, SourceLoc End);
 
-    /// \brief Add a token-based replacement fix-it to the currently-active
+    /// Add a token-based replacement fix-it to the currently-active
     /// diagnostic.
     InFlightDiagnostic &fixItReplace(SourceRange R, StringRef Str);
 
-    /// \brief Add a character-based replacement fix-it to the currently-active
+    /// Add a character-based replacement fix-it to the currently-active
     /// diagnostic.
     InFlightDiagnostic &fixItReplaceChars(SourceLoc Start, SourceLoc End,
                                           StringRef Str);
 
-    /// \brief Add an insertion fix-it to the currently-active diagnostic.
+    /// Add an insertion fix-it to the currently-active diagnostic.
     InFlightDiagnostic &fixItInsert(SourceLoc L, StringRef Str) {
       return fixItReplaceChars(L, L, Str);
     }
 
-    /// \brief Add an insertion fix-it to the currently-active diagnostic.  The
+    /// Add an insertion fix-it to the currently-active diagnostic.  The
     /// text is inserted immediately *after* the token specified.
     ///
     InFlightDiagnostic &fixItInsertAfter(SourceLoc L, StringRef);
 
-    /// \brief Add a token-based removal fix-it to the currently-active
+    /// Add a token-based removal fix-it to the currently-active
     /// diagnostic.
     InFlightDiagnostic &fixItRemove(SourceRange R);
     
-    /// \brief Add a character-based removal fix-it to the currently-active
+    /// Add a character-based removal fix-it to the currently-active
     /// diagnostic.
     InFlightDiagnostic &fixItRemoveChars(SourceLoc Start, SourceLoc End) {
       return fixItReplaceChars(Start, End, {});
     }
 
-    /// \brief Add two replacement fix-it exchanging source ranges to the
+    /// Add two replacement fix-it exchanging source ranges to the
     /// currently-active diagnostic.
     InFlightDiagnostic &fixItExchange(SourceRange R1, SourceRange R2);
   };
 
-  /// \brief Class to track, map, and remap diagnostic severity and fatality
+  /// Class to track, map, and remap diagnostic severity and fatality
   ///
   class DiagnosticState {
   public:
-    /// \brief Describes the current behavior to take with a diagnostic
+    /// Describes the current behavior to take with a diagnostic
     enum class Behavior : uint8_t {
       Unspecified,
       Ignore,
@@ -454,32 +454,32 @@
     };
 
   private:
-    /// \brief Whether we should continue to emit diagnostics, even after a
+    /// Whether we should continue to emit diagnostics, even after a
     /// fatal error
     bool showDiagnosticsAfterFatalError = false;
 
-    /// \brief Don't emit any warnings
+    /// Don't emit any warnings
     bool suppressWarnings = false;
 
-    /// \brief Emit all warnings as errors
+    /// Emit all warnings as errors
     bool warningsAsErrors = false;
 
-    /// \brief Whether a fatal error has occurred
+    /// Whether a fatal error has occurred
     bool fatalErrorOccurred = false;
 
-    /// \brief Whether any error diagnostics have been emitted.
+    /// Whether any error diagnostics have been emitted.
     bool anyErrorOccurred = false;
 
-    /// \brief Track the previous emitted Behavior, useful for notes
+    /// Track the previous emitted Behavior, useful for notes
     Behavior previousBehavior = Behavior::Unspecified;
 
-    /// \brief Track settable, per-diagnostic state that we store
+    /// Track settable, per-diagnostic state that we store
     std::vector<Behavior> perDiagnosticBehavior;
 
   public:
     DiagnosticState();
 
-    /// \brief Figure out the Behavior for the given diagnostic, taking current
+    /// Figure out the Behavior for the given diagnostic, taking current
     /// state such as fatality into account.
     Behavior determineBehavior(DiagID id);
 
@@ -493,11 +493,11 @@
       return showDiagnosticsAfterFatalError;
     }
 
-    /// \brief Whether to skip emitting warnings
+    /// Whether to skip emitting warnings
     void setSuppressWarnings(bool val) { suppressWarnings = val; }
     bool getSuppressWarnings() const { return suppressWarnings; }
 
-    /// \brief Whether to treat warnings as errors
+    /// Whether to treat warnings as errors
     void setWarningsAsErrors(bool val) { warningsAsErrors = val; }
     bool getWarningsAsErrors() const { return warningsAsErrors; }
 
@@ -520,32 +520,32 @@
     DiagnosticState &operator=(DiagnosticState &&) = default;
   };
     
-  /// \brief Class responsible for formatting diagnostics and presenting them
+  /// Class responsible for formatting diagnostics and presenting them
   /// to the user.
   class DiagnosticEngine {
-    /// \brief The source manager used to interpret source locations and
+    /// The source manager used to interpret source locations and
     /// display diagnostics.
     SourceManager &SourceMgr;
 
-    /// \brief The diagnostic consumer(s) that will be responsible for actually
+    /// The diagnostic consumer(s) that will be responsible for actually
     /// emitting diagnostics.
     SmallVector<DiagnosticConsumer *, 2> Consumers;
 
-    /// \brief Tracks diagnostic behaviors and state
+    /// Tracks diagnostic behaviors and state
     DiagnosticState state;
 
-    /// \brief The currently active diagnostic, if there is one.
+    /// The currently active diagnostic, if there is one.
     Optional<Diagnostic> ActiveDiagnostic;
 
-    /// \brief All diagnostics that have are no longer active but have not yet
+    /// All diagnostics that have are no longer active but have not yet
     /// been emitted due to an open transaction.
     SmallVector<Diagnostic, 4> TentativeDiagnostics;
 
-    /// \brief The set of declarations for which we have pretty-printed
+    /// The set of declarations for which we have pretty-printed
     /// results that we can point to on the command line.
     llvm::DenseMap<const Decl *, SourceLoc> PrettyPrintedDeclarations;
 
-    /// \brief The number of open diagnostic transactions. Diagnostics are only
+    /// The number of open diagnostic transactions. Diagnostics are only
     /// emitted once all transactions have closed.
     unsigned TransactionCount = 0;
 
@@ -571,13 +571,13 @@
       return state.getShowDiagnosticsAfterFatalError();
     }
 
-    /// \brief Whether to skip emitting warnings
+    /// Whether to skip emitting warnings
     void setSuppressWarnings(bool val) { state.setSuppressWarnings(val); }
     bool getSuppressWarnings() const {
       return state.getSuppressWarnings();
     }
 
-    /// \brief Whether to treat warnings as errors
+    /// Whether to treat warnings as errors
     void setWarningsAsErrors(bool val) { state.setWarningsAsErrors(val); }
     bool getWarningsAsErrors() const {
       return state.getWarningsAsErrors();
@@ -591,12 +591,12 @@
       state.resetHadAnyError();
     }
 
-    /// \brief Add an additional DiagnosticConsumer to receive diagnostics.
+    /// Add an additional DiagnosticConsumer to receive diagnostics.
     void addConsumer(DiagnosticConsumer &Consumer) {
       Consumers.push_back(&Consumer);
     }
 
-    /// \brief Remove and return all \c DiagnosticConsumers.
+    /// Remove and return all \c DiagnosticConsumers.
     std::vector<DiagnosticConsumer *> takeConsumers() {
       auto Result = std::vector<DiagnosticConsumer*>(Consumers.begin(),
                                                      Consumers.end());
@@ -604,12 +604,12 @@
       return Result;
     }
 
-    /// \brief Return all \c DiagnosticConsumers.
+    /// Return all \c DiagnosticConsumers.
     ArrayRef<DiagnosticConsumer *> getConsumers() {
       return Consumers;
     }
 
-    /// \brief Emit a diagnostic using a preformatted array of diagnostic
+    /// Emit a diagnostic using a preformatted array of diagnostic
     /// arguments.
     ///
     /// \param Loc The location to which the diagnostic refers in the source
@@ -627,7 +627,7 @@
       return diagnose(Loc, Diagnostic(ID, Args));
     }
 
-    /// \brief Emit a diagnostic using a preformatted array of diagnostic
+    /// Emit a diagnostic using a preformatted array of diagnostic
     /// arguments.
     ///
     /// \param Loc The declaration name location to which the
@@ -645,7 +645,7 @@
       return diagnose(Loc.getBaseNameLoc(), Diagnostic(ID, Args));
     }
 
-    /// \brief Emit an already-constructed diagnostic at the given location.
+    /// Emit an already-constructed diagnostic at the given location.
     ///
     /// \param Loc The location to which the diagnostic refers in the source
     /// code.
@@ -661,7 +661,7 @@
       return InFlightDiagnostic(*this);
     }
     
-    /// \brief Emit a diagnostic with the given set of diagnostic arguments.
+    /// Emit a diagnostic with the given set of diagnostic arguments.
     ///
     /// \param Loc The location to which the diagnostic refers in the source
     /// code.
@@ -683,7 +683,7 @@
     diagnose(Diag<ArgTypes...> ID,
              typename detail::PassArgument<ArgTypes>::type... Args) = delete;
 
-    /// \brief Emit a diagnostic with the given set of diagnostic arguments.
+    /// Emit a diagnostic with the given set of diagnostic arguments.
     ///
     /// \param Loc The declaration name location to which the
     /// diagnostic refers in the source code.
@@ -699,7 +699,7 @@
       return diagnose(Loc.getBaseNameLoc(), Diagnostic(ID, std::move(Args)...));
     }
 
-    /// \brief Emit a diagnostic using a preformatted array of diagnostic
+    /// Emit a diagnostic using a preformatted array of diagnostic
     /// arguments.
     ///
     /// \param decl The declaration to which this diagnostic refers, which
@@ -717,7 +717,7 @@
       return diagnose(decl, Diagnostic(id, args));
     }
 
-    /// \brief Emit an already-constructed diagnostic referencing the given
+    /// Emit an already-constructed diagnostic referencing the given
     /// declaration.
     ///
     /// \param decl The declaration to which this diagnostic refers, which
@@ -734,7 +734,7 @@
       return InFlightDiagnostic(*this);
     }
 
-    /// \brief Emit a diagnostic with the given set of diagnostic arguments.
+    /// Emit a diagnostic with the given set of diagnostic arguments.
     ///
     /// \param decl The declaration to which this diagnostic refers, which
     /// may or may not have associated source-location information.
@@ -758,7 +758,7 @@
     //// \c finishProcessing.
     bool finishProcessing();
 
-    /// \brief Format the given diagnostic text and place the result in the given
+    /// Format the given diagnostic text and place the result in the given
     /// buffer.
     static void formatDiagnosticText(
         llvm::raw_ostream &Out, StringRef InText,
@@ -766,16 +766,16 @@
         DiagnosticFormatOptions FormatOpts = DiagnosticFormatOptions());
 
   private:
-    /// \brief Flush the active diagnostic.
+    /// Flush the active diagnostic.
     void flushActiveDiagnostic();
     
-    /// \brief Retrieve the active diagnostic.
+    /// Retrieve the active diagnostic.
     Diagnostic &getActiveDiagnostic() { return *ActiveDiagnostic; }
 
-    /// \brief Send \c diag to all diagnostic consumers.
+    /// Send \c diag to all diagnostic consumers.
     void emitDiagnostic(const Diagnostic &diag);
 
-    /// \brief Send all tentative diagnostics to all diagnostic consumers and
+    /// Send all tentative diagnostics to all diagnostic consumers and
     /// delete them.
     void emitTentativeDiagnostics();
 
@@ -783,7 +783,7 @@
     static const char *diagnosticStringFor(const DiagID id);
   };
 
-  /// \brief Represents a diagnostic transaction. While a transaction is
+  /// Represents a diagnostic transaction. While a transaction is
   /// open, all recorded diagnostics are saved until the transaction commits,
   /// at which point they are emitted. If the transaction is instead aborted,
   /// the diagnostics are erased. Transactions may be nested but must be closed
@@ -792,15 +792,15 @@
   class DiagnosticTransaction {
     DiagnosticEngine &Engine;
 
-    /// \brief How many tentative diagnostics there were when the transaction
+    /// How many tentative diagnostics there were when the transaction
     /// was opened.
     unsigned PrevDiagnostics;
 
-    /// \brief How many other transactions were open when this transaction was
+    /// How many other transactions were open when this transaction was
     /// opened.
     unsigned Depth;
 
-    /// \brief Whether this transaction is currently open.
+    /// Whether this transaction is currently open.
     bool IsOpen = true;
 
   public:
@@ -820,7 +820,7 @@
       }
     }
 
-    /// \brief Abort and close this transaction and erase all diagnostics
+    /// Abort and close this transaction and erase all diagnostics
     /// record while it was open.
     void abort() {
       close();
@@ -829,7 +829,7 @@
         Engine.TentativeDiagnostics.end());
     }
 
-    /// \brief Commit and close this transaction. If this is the top-level
+    /// Commit and close this transaction. If this is the top-level
     /// transaction, emit any diagnostics that were recorded while it was open.
     void commit() {
       close();
diff --git a/include/swift/AST/DiagnosticsClangImporter.h b/include/swift/AST/DiagnosticsClangImporter.h
index 23e1fd0..0ff12e4 100644
--- a/include/swift/AST/DiagnosticsClangImporter.h
+++ b/include/swift/AST/DiagnosticsClangImporter.h
@@ -11,7 +11,7 @@
 //===----------------------------------------------------------------------===//
 //
 /// \file
-/// \brief This file defines diagnostics for the Clang importer.
+/// This file defines diagnostics for the Clang importer.
 //
 //===----------------------------------------------------------------------===//
 
diff --git a/include/swift/AST/DiagnosticsCommon.h b/include/swift/AST/DiagnosticsCommon.h
index acd3bc3..add253b 100644
--- a/include/swift/AST/DiagnosticsCommon.h
+++ b/include/swift/AST/DiagnosticsCommon.h
@@ -11,7 +11,7 @@
 //===----------------------------------------------------------------------===//
 //
 /// \file
-/// \brief This file defines common diagnostics for the whole compiler, as well
+/// This file defines common diagnostics for the whole compiler, as well
 /// as some diagnostic infrastructure.
 //
 //===----------------------------------------------------------------------===//
diff --git a/include/swift/AST/DiagnosticsDriver.h b/include/swift/AST/DiagnosticsDriver.h
index a41a33e..f80dd9c 100644
--- a/include/swift/AST/DiagnosticsDriver.h
+++ b/include/swift/AST/DiagnosticsDriver.h
@@ -11,7 +11,7 @@
 //===----------------------------------------------------------------------===//
 //
 /// \file
-/// \brief This file defines diagnostics for the driver.
+/// This file defines diagnostics for the driver.
 /// \note Diagnostics shared between the driver and frontend are defined in
 /// \ref DiagnosticsFrontend.h.
 //
diff --git a/include/swift/AST/DiagnosticsFrontend.h b/include/swift/AST/DiagnosticsFrontend.h
index c7a9dc3..a14d396 100644
--- a/include/swift/AST/DiagnosticsFrontend.h
+++ b/include/swift/AST/DiagnosticsFrontend.h
@@ -11,7 +11,7 @@
 //===----------------------------------------------------------------------===//
 //
 /// \file
-/// \brief This file defines diagnostics for the frontend.
+/// This file defines diagnostics for the frontend.
 //
 //===----------------------------------------------------------------------===//
 
diff --git a/include/swift/AST/DiagnosticsIRGen.h b/include/swift/AST/DiagnosticsIRGen.h
index bf97727..fb6901f 100644
--- a/include/swift/AST/DiagnosticsIRGen.h
+++ b/include/swift/AST/DiagnosticsIRGen.h
@@ -11,7 +11,7 @@
 //===----------------------------------------------------------------------===//
 //
 /// \file
-/// \brief This file defines diagnostics for IR generation.
+/// This file defines diagnostics for IR generation.
 //
 //===----------------------------------------------------------------------===//
 
diff --git a/include/swift/AST/DiagnosticsModuleDiffer.h b/include/swift/AST/DiagnosticsModuleDiffer.h
index 85c7d4d..2416194 100644
--- a/include/swift/AST/DiagnosticsModuleDiffer.h
+++ b/include/swift/AST/DiagnosticsModuleDiffer.h
@@ -11,7 +11,7 @@
 //===----------------------------------------------------------------------===//
 //
 /// \file
-/// \brief This file defines diagnostics for the Swift module differ.
+/// This file defines diagnostics for the Swift module differ.
 //
 //===----------------------------------------------------------------------===//
 
diff --git a/include/swift/AST/DiagnosticsParse.h b/include/swift/AST/DiagnosticsParse.h
index e046630..442392b 100644
--- a/include/swift/AST/DiagnosticsParse.h
+++ b/include/swift/AST/DiagnosticsParse.h
@@ -11,7 +11,7 @@
 //===----------------------------------------------------------------------===//
 //
 /// \file
-/// \brief This file defines diagnostics for lexing and parsing.
+/// This file defines diagnostics for lexing and parsing.
 //
 //===----------------------------------------------------------------------===//
 
diff --git a/include/swift/AST/DiagnosticsRefactoring.h b/include/swift/AST/DiagnosticsRefactoring.h
index 8226b9a..320c398 100644
--- a/include/swift/AST/DiagnosticsRefactoring.h
+++ b/include/swift/AST/DiagnosticsRefactoring.h
@@ -11,7 +11,7 @@
 //===----------------------------------------------------------------------===//
 //
 /// \file
-/// \brief This file defines diagnostics for refactoring.
+/// This file defines diagnostics for refactoring.
 //
 //===----------------------------------------------------------------------===//
 
diff --git a/include/swift/AST/DiagnosticsSIL.h b/include/swift/AST/DiagnosticsSIL.h
index 43c5d9d..177fa47 100644
--- a/include/swift/AST/DiagnosticsSIL.h
+++ b/include/swift/AST/DiagnosticsSIL.h
@@ -11,7 +11,7 @@
 //===----------------------------------------------------------------------===//
 //
 /// \file
-/// \brief This file defines diagnostics for SIL generation and analysis.
+/// This file defines diagnostics for SIL generation and analysis.
 //
 //===----------------------------------------------------------------------===//
 
diff --git a/include/swift/AST/DiagnosticsSema.h b/include/swift/AST/DiagnosticsSema.h
index 5b3e9fd..801ff6f 100644
--- a/include/swift/AST/DiagnosticsSema.h
+++ b/include/swift/AST/DiagnosticsSema.h
@@ -11,7 +11,7 @@
 //===----------------------------------------------------------------------===//
 //
 /// \file
-/// \brief This file defines diagnostics for semantic analysis.
+/// This file defines diagnostics for semantic analysis.
 //
 //===----------------------------------------------------------------------===//
 
diff --git a/include/swift/AST/Expr.h b/include/swift/AST/Expr.h
index 07b18ec..c16225a 100644
--- a/include/swift/AST/Expr.h
+++ b/include/swift/AST/Expr.h
@@ -158,7 +158,7 @@
   SWIFT_INLINE_BITFIELD_EMPTY(DynamicLookupExpr, LookupExpr);
 
   SWIFT_INLINE_BITFIELD(ParenExpr, IdentityExpr, 1,
-    /// \brief Whether we're wrapping a trailing closure expression.
+    /// Whether we're wrapping a trailing closure expression.
     HasTrailingClosure : 1
   );
 
@@ -391,7 +391,7 @@
   /// Return the kind of this expression.
   ExprKind getKind() const { return ExprKind(Bits.Expr.Kind); }
 
-  /// \brief Retrieve the name of the given expression kind.
+  /// Retrieve the name of the given expression kind.
   ///
   /// This name should only be used for debugging dumps and other
   /// developer aids, and should never be part of a diagnostic or exposed
@@ -404,13 +404,13 @@
   /// setType - Sets the type of this expression.
   void setType(Type T);
 
-  /// \brief Return the source range of the expression.
+  /// Return the source range of the expression.
   SourceRange getSourceRange() const;
   
   /// getStartLoc - Return the location of the start of the expression.
   SourceLoc getStartLoc() const;
 
-  /// \brief Retrieve the location of the last token of the expression.
+  /// Retrieve the location of the last token of the expression.
   SourceLoc getEndLoc() const;
   
   /// getLoc - Return the caret location of this expression.
@@ -712,7 +712,7 @@
   }
 };
 
-/// \brief The 'nil' literal.
+/// The 'nil' literal.
 ///
 class NilLiteralExpr : public LiteralExpr {
   SourceLoc Loc;
@@ -730,7 +730,7 @@
   }
 };
 
-/// \brief Abstract base class for numeric literals, potentially with a sign.
+/// Abstract base class for numeric literals, potentially with a sign.
 class NumberLiteralExpr : public LiteralExpr {
   /// The value of the literal as an ASTContext-owned string. Underscores must
   /// be stripped.
@@ -778,7 +778,7 @@
 };
 
   
-/// \brief Integer literal with a '+' or '-' sign, like '+4' or '- 2'.
+/// Integer literal with a '+' or '-' sign, like '+4' or '- 2'.
 ///
 /// After semantic analysis assigns types, this is guaranteed to only have
 /// a BuiltinIntegerType.
@@ -826,7 +826,7 @@
   }
 };
 
-/// \brief A Boolean literal ('true' or 'false')
+/// A Boolean literal ('true' or 'false')
 ///
 class BooleanLiteralExpr : public LiteralExpr {
   SourceLoc Loc;
@@ -923,7 +923,7 @@
   }
 };
 
-/// \brief Runs a series of statements which use or modify \c SubExpr
+/// Runs a series of statements which use or modify \c SubExpr
 /// before it is given to the rest of the expression.
 ///
 /// \c Body should begin with a \c VarDecl; this defines the variable
@@ -944,7 +944,7 @@
   Expr * getSubExpr() const { return SubExpr; }
   void setSubExpr(Expr * se) { SubExpr = se; }
 
-  /// \brief The variable which will be accessed and possibly modified by
+  /// The variable which will be accessed and possibly modified by
   /// the \c Body. This is the first \c ASTNode in the \c Body.
   VarDecl * getVar() const;
 
@@ -983,26 +983,26 @@
     Bits.InterpolatedStringLiteralExpr.LiteralCapacity = LiteralCapacity;
   }
 
-  /// \brief Retrieve the value of the literalCapacity parameter to the
+  /// Retrieve the value of the literalCapacity parameter to the
   /// initializer.
   unsigned getLiteralCapacity() const {
     return Bits.InterpolatedStringLiteralExpr.LiteralCapacity;
   }
 
-  /// \brief Retrieve the value of the interpolationCount parameter to the
+  /// Retrieve the value of the interpolationCount parameter to the
   /// initializer.
   unsigned getInterpolationCount() const {
     return Bits.InterpolatedStringLiteralExpr.InterpolationCount;
   }
 
-  /// \brief A block containing expressions which call
+  /// A block containing expressions which call
   /// \c StringInterpolationProtocol methods to append segments to the
   /// string interpolation. The first node in \c Body should be an uninitialized
   /// \c VarDecl; the other statements should append to it.
   TapExpr * getAppendingExpr() const { return AppendingExpr; }
   void setAppendingExpr(TapExpr * AE) { AppendingExpr = AE; }
   
-  /// \brief Retrieve the expression that actually evaluates the resulting
+  /// Retrieve the expression that actually evaluates the resulting
   /// string, typically with a series of '+' operations.
   Expr *getSemanticExpr() const { return SemanticExpr; }
   void setSemanticExpr(Expr *SE) { SemanticExpr = SE; }
@@ -1016,7 +1016,7 @@
     return Loc;
   }
 
-  /// \brief Call the \c callback with information about each segment in turn.
+  /// Call the \c callback with information about each segment in turn.
   void forEachSegment(ASTContext &Ctx,
                       llvm::function_ref<void(bool, CallExpr *)> callback);
   
@@ -1226,7 +1226,7 @@
 
 /// DeclRefExpr - A reference to a value, "x".
 class DeclRefExpr : public Expr {
-  /// \brief The declaration pointer.
+  /// The declaration pointer.
   ConcreteDeclRef D;
   DeclNameLoc Loc;
 
@@ -1986,7 +1986,7 @@
     return RParenLoc;
   }
 
-  /// \brief Whether this expression has a trailing closure as its argument.
+  /// Whether this expression has a trailing closure as its argument.
   bool hasTrailingClosure() const { return Bits.ParenExpr.HasTrailingClosure; }
 
   static bool classof(const Expr *E) { return E->getKind() == ExprKind::Paren; }
@@ -2057,7 +2057,7 @@
 
   SourceRange getSourceRange() const;
 
-  /// \brief Whether this expression has a trailing closure as its argument.
+  /// Whether this expression has a trailing closure as its argument.
   bool hasTrailingClosure() const { return Bits.TupleExpr.HasTrailingClosure; }
 
   /// Retrieve the elements of this tuple.
@@ -2115,7 +2115,7 @@
   static bool classof(const Expr *E) { return E->getKind() == ExprKind::Tuple; }
 };
 
-/// \brief A collection literal expression.
+/// A collection literal expression.
 ///
 /// The subexpression is represented as a TupleExpr or ParenExpr and
 /// passed on to the appropriate semantics-providing conversion
@@ -2201,7 +2201,7 @@
 
 };
  
-/// \brief An array literal expression [a, b, c].
+/// An array literal expression [a, b, c].
 class ArrayExpr final : public CollectionExpr,
     private llvm::TrailingObjects<ArrayExpr, Expr*, SourceLoc> {
   friend TrailingObjects;
@@ -2231,7 +2231,7 @@
   }
 };
 
-/// \brief A dictionary literal expression [a : x, b : y, c : z].
+/// A dictionary literal expression [a : x, b : y, c : z].
 class DictionaryExpr final : public CollectionExpr,
     private llvm::TrailingObjects<DictionaryExpr, Expr*, SourceLoc> {
   friend TrailingObjects;
@@ -2455,7 +2455,7 @@
   }
 };
 
-/// \brief Describes a monadic bind from T? to T.
+/// Describes a monadic bind from T? to T.
 ///
 /// In a ?-chain expression, this is the part that's spelled with a
 /// postfix ?.
@@ -2514,7 +2514,7 @@
   }
 };
 
-/// \brief Describes the outer limits of an operation containing
+/// Describes the outer limits of an operation containing
 /// monadic binds of T? to T.
 ///
 /// In a ?-chain expression, this is implicitly formed at the outer
@@ -2540,7 +2540,7 @@
   }
 };
 
-/// \brief An expression that forces an optional to its underlying value.
+/// An expression that forces an optional to its underlying value.
 ///
 /// \code
 /// func parseInt(s : String) -> Int? { ... }
@@ -2592,7 +2592,7 @@
   }
 };
 
-/// \brief An expression that grants temporary escapability to a nonescaping
+/// An expression that grants temporary escapability to a nonescaping
 /// closure value.
 ///
 /// This expression is formed by the type checker when a call to the
@@ -2664,7 +2664,7 @@
   }
 };
 
-/// \brief An expression that opens up a value of protocol or protocol
+/// An expression that opens up a value of protocol or protocol
 /// composition type and gives a name to its dynamic type.
 ///
 /// This expression is implicitly created by the type checker when
@@ -3213,7 +3213,7 @@
   static ErasureExpr *create(ASTContext &ctx, Expr *subExpr, Type type,
                              ArrayRef<ProtocolConformanceRef> conformances);
 
-  /// \brief Retrieve the mapping specifying how the type of the subexpression
+  /// Retrieve the mapping specifying how the type of the subexpression
   /// maps to the resulting existential type. If the resulting existential
   /// type involves several different protocols, there will be mappings for each
   /// of those protocols, in the order in which the existential type expands
@@ -3247,7 +3247,7 @@
     : ImplicitConversionExpr(ExprKind::AnyHashableErasure, subExpr, type),
       Conformance(conformance) {}
 
-  /// \brief Retrieve the mapping specifying how the type of the
+  /// Retrieve the mapping specifying how the type of the
   /// subexpression conforms to the Hashable protocol.
   ProtocolConformanceRef getConformance() const {
     return Conformance;
@@ -3270,7 +3270,7 @@
       Conversion(conversion) {
   }
 
-  /// \brief Retrieve the conversion function.
+  /// Retrieve the conversion function.
   ConcreteDeclRef getConversion() const {
     return Conversion;
   }
@@ -3331,7 +3331,7 @@
   Expr *getSubExpr() const { return SubExpr; }
   void setSubExpr(Expr *e) { SubExpr = e; }
   
-  /// \brief Retrieve the list of type parameters. These parameters have not yet
+  /// Retrieve the list of type parameters. These parameters have not yet
   /// been bound to archetypes of the entity to be specialized.
   ArrayRef<TypeLoc> getUnresolvedParams() const {
     return {getTrailingObjects<TypeLoc>(),
@@ -3354,7 +3354,7 @@
   }
 };
 
-/// \brief Describes an implicit conversion from a subclass to one of its
+/// Describes an implicit conversion from a subclass to one of its
 /// superclasses.
 class DerivedToBaseExpr : public ImplicitConversionExpr {
 public:
@@ -3366,7 +3366,7 @@
   }
 };
 
-/// \brief Describes an implicit conversion from a value of archetype type to
+/// Describes an implicit conversion from a value of archetype type to
 /// its concrete superclass.
 class ArchetypeToSuperExpr : public ImplicitConversionExpr {
 public:
@@ -3469,11 +3469,11 @@
 };
 
 
-/// \brief A base class for closure expressions.
+/// A base class for closure expressions.
 class AbstractClosureExpr : public DeclContext, public Expr {
   CaptureInfo Captures;
 
-  /// \brief The set of parameters.
+  /// The set of parameters.
   ParameterList *parameterList;
 
 public:
@@ -3488,7 +3488,7 @@
   CaptureInfo &getCaptureInfo() { return Captures; }
   const CaptureInfo &getCaptureInfo() const { return Captures; }
 
-  /// \brief Retrieve the parameters of this closure.
+  /// Retrieve the parameters of this closure.
   ParameterList *getParameters() { return parameterList; }
   const ParameterList *getParameters() const { return parameterList; }
   void setParameterList(ParameterList *P);
@@ -3521,13 +3521,13 @@
   }
   enum : unsigned { InvalidDiscriminator = 0xFFFF };
 
-  /// \brief Retrieve the result type of this closure.
+  /// Retrieve the result type of this closure.
   Type getResultType(llvm::function_ref<Type(const Expr *)> getType =
                          [](const Expr *E) -> Type {
     return E->getType();
   }) const;
 
-  /// \brief Return whether this closure is throwing when fully applied.
+  /// Return whether this closure is throwing when fully applied.
   bool isBodyThrowing() const;
 
   /// Whether this closure consists of a single expression.
@@ -3582,7 +3582,7 @@
   }
 };
 
-/// \brief An explicit unnamed function expression, which can optionally have
+/// An explicit unnamed function expression, which can optionally have
 /// named arguments.
 ///
 /// \code
@@ -3596,17 +3596,17 @@
   /// The location of the "throws", if present.
   SourceLoc ThrowsLoc;
   
-  /// \brief The location of the '->' denoting an explicit return type,
+  /// The location of the '->' denoting an explicit return type,
   /// if present.
   SourceLoc ArrowLoc;
 
   /// The location of the "in", if present.
   SourceLoc InLoc;
 
-  /// \brief The explicitly-specified result type.
+  /// The explicitly-specified result type.
   TypeLoc ExplicitResultType;
 
-  /// \brief The body of the closure, along with a bit indicating whether it
+  /// The body of the closure, along with a bit indicating whether it
   /// was originally just a single expression.
   llvm::PointerIntPair<BraceStmt *, 1, bool> Body;
   
@@ -3634,41 +3634,41 @@
     Body.setInt(isSingleExpression);
   }
 
-  /// \brief Determine whether the parameters of this closure are actually
+  /// Determine whether the parameters of this closure are actually
   /// anonymous closure variables.
   bool hasAnonymousClosureVars() const {
     return Bits.ClosureExpr.HasAnonymousClosureVars;
   }
 
-  /// \brief Set the parameters of this closure along with a flag indicating
+  /// Set the parameters of this closure along with a flag indicating
   /// whether these parameters are actually anonymous closure variables.
   void setHasAnonymousClosureVars() {
     Bits.ClosureExpr.HasAnonymousClosureVars = true;
   }
   
-  /// \brief Determine whether this closure expression has an
+  /// Determine whether this closure expression has an
   /// explicitly-specified result type.
   bool hasExplicitResultType() const { return ArrowLoc.isValid(); }
 
   
-  /// \brief Retrieve the location of the \c '->' for closures with an
+  /// Retrieve the location of the \c '->' for closures with an
   /// explicit result type.
   SourceLoc getArrowLoc() const {
     assert(hasExplicitResultType() && "No arrow location");
     return ArrowLoc;
   }
 
-  /// \brief Retrieve the location of the \c in for a closure that has it.
+  /// Retrieve the location of the \c in for a closure that has it.
   SourceLoc getInLoc() const {
     return InLoc;
   }
   
-  /// \brief Retrieve the location of the 'throws' for a closure that has it.
+  /// Retrieve the location of the 'throws' for a closure that has it.
   SourceLoc getThrowsLoc() const {
     return ThrowsLoc;
   }
 
-  /// \brief Retrieve the explicit result type location information.
+  /// Retrieve the explicit result type location information.
   TypeLoc &getExplicitResultTypeLoc() {
     assert(hasExplicitResultType() && "No explicit result type");
     return ExplicitResultType;
@@ -3679,7 +3679,7 @@
     ExplicitResultType = resultType;
   }
 
-  /// \brief Determine whether the closure has a single expression for its
+  /// Determine whether the closure has a single expression for its
   /// body.
   ///
   /// This will be true for closures such as, e.g.,
@@ -3699,20 +3699,20 @@
     return Body.getInt();
   }
 
-  /// \brief Retrieve the body for closure that has a single expression for
+  /// Retrieve the body for closure that has a single expression for
   /// its body.
   ///
   /// Only valid when \c hasSingleExpressionBody() is true.
   Expr *getSingleExpressionBody() const;
 
-  /// \brief Set the body for a closure that has a single expression as its
+  /// Set the body for a closure that has a single expression as its
   /// body.
   ///
   /// This routine cannot change whether a closure has a single expression as
   /// its body; it can only update that expression.
   void setSingleExpressionBody(Expr *NewBody);
 
-  /// \brief Is this a completely empty closure?
+  /// Is this a completely empty closure?
   bool hasEmptyBody() const;
 
   static bool classof(const Expr *E) {
@@ -3727,7 +3727,7 @@
 };
 
 
-/// \brief This is a closure of the contained subexpression that is formed
+/// This is a closure of the contained subexpression that is formed
 /// when a scalar expression is converted to @autoclosure function type.
 /// For example:
 /// \code
@@ -4208,7 +4208,7 @@
   }
 };
   
-/// \brief Represents an explicit cast, 'a as T' or 'a is T', where "T" is a
+/// Represents an explicit cast, 'a as T' or 'a is T', where "T" is a
 /// type, and "a" is the expression that will be converted to the type.
 class ExplicitCastExpr : public Expr {
   Expr *SubExpr;
@@ -4268,7 +4268,7 @@
 /// Return a string representation of a CheckedCastKind.
 StringRef getCheckedCastKindName(CheckedCastKind kind);
   
-/// \brief Abstract base class for checked casts 'as' and 'is'. These represent
+/// Abstract base class for checked casts 'as' and 'is'. These represent
 /// casts that can dynamically fail.
 class CheckedCastExpr : public ExplicitCastExpr {
 public:
@@ -4327,7 +4327,7 @@
   }
 };
 
-/// \brief Represents an explicit conditional checked cast, which converts
+/// Represents an explicit conditional checked cast, which converts
 /// from a type to some subtype and produces an Optional value, which will be
 /// .Some(x) if the cast succeeds, or .None if the cast fails.
 /// Spelled 'a as? T' and produces a value of type 'T?'.
@@ -4355,7 +4355,7 @@
   }
 };
 
-/// \brief Represents a runtime type check query, 'a is T', where 'T' is a type
+/// Represents a runtime type check query, 'a is T', where 'T' is a type
 /// and 'a' is a value of some related type. Evaluates to a Bool true if 'a' is
 /// of the type and 'a as T' would succeed, false otherwise.
 ///
@@ -4376,7 +4376,7 @@
   }
 };
 
-/// \brief Represents an explicit coercion from a value to a specific type.
+/// Represents an explicit coercion from a value to a specific type.
 ///
 /// Spelled 'a as T' and produces a value of type 'T'.
 class CoerceExpr : public ExplicitCastExpr {
@@ -4422,7 +4422,7 @@
   }
 };
 
-/// \brief Represents two expressions joined by the arrow operator '->', which
+/// Represents two expressions joined by the arrow operator '->', which
 /// may be preceded by the 'throws' keyword. Currently this only exists to be
 /// transformed into a FunctionTypeRepr by simplifyTypeExpr() in Sema.
 class ArrowExpr : public Expr {
@@ -4463,7 +4463,7 @@
   }
 };
 
-/// \brief Represents the rebinding of 'self' in a constructor that calls out
+/// Represents the rebinding of 'self' in a constructor that calls out
 /// to another constructor. The result of the subexpression is assigned to
 /// 'self', and the expression returns void.
 ///
@@ -4494,7 +4494,7 @@
   }
 };
   
-/// \brief The conditional expression 'x ? y : z'.
+/// The conditional expression 'x ? y : z'.
 class IfExpr : public Expr {
   Expr *CondExpr, *ThenExpr, *ElseExpr;
   SourceLoc QuestionLoc, ColonLoc;
@@ -4614,7 +4614,7 @@
   }
 };
 
-/// \brief A pattern production that has been parsed but hasn't been resolved
+/// A pattern production that has been parsed but hasn't been resolved
 /// into a complete pattern. Name binding converts these into standalone pattern
 /// nodes or raises an error if a pattern production appears in an invalid
 /// position.
diff --git a/include/swift/AST/GenericEnvironment.h b/include/swift/AST/GenericEnvironment.h
index 48dc309..2c435f1 100644
--- a/include/swift/AST/GenericEnvironment.h
+++ b/include/swift/AST/GenericEnvironment.h
@@ -143,7 +143,7 @@
   /// Map a generic parameter type to a contextual type.
   Type mapTypeIntoContext(GenericTypeParamType *type) const;
 
-  /// \brief Map the given SIL interface type to a contextual type.
+  /// Map the given SIL interface type to a contextual type.
   ///
   /// This operation will also reabstract dependent types according to the
   /// abstraction level of their associated type requirements.
diff --git a/include/swift/AST/GenericSignature.h b/include/swift/AST/GenericSignature.h
index db19336..d51a9c7 100644
--- a/include/swift/AST/GenericSignature.h
+++ b/include/swift/AST/GenericSignature.h
@@ -313,6 +313,7 @@
                       ArrayRef<Requirement> requirements);
   
   void print(raw_ostream &OS, PrintOptions Options = PrintOptions()) const;
+  void print(ASTPrinter &Printer, PrintOptions Opts = PrintOptions()) const;
   void dump() const;
   std::string getAsString() const;
 };
diff --git a/include/swift/AST/GenericSignatureBuilder.h b/include/swift/AST/GenericSignatureBuilder.h
index 0fe50ca..aaa8e6f 100644
--- a/include/swift/AST/GenericSignatureBuilder.h
+++ b/include/swift/AST/GenericSignatureBuilder.h
@@ -79,7 +79,7 @@
   WellFormed,
 };
 
-/// \brief Collects a set of requirements of generic parameters, both explicitly
+/// Collects a set of requirements of generic parameters, both explicitly
 /// stated and inferred, and determines the set of archetypes for each of
 /// the generic parameters.
 class GenericSignatureBuilder {
@@ -244,7 +244,7 @@
     Type getAnchor(GenericSignatureBuilder &builder,
                    TypeArrayView<GenericTypeParamType> genericParams);
 
-    /// \brief Retrieve (or build) the contextual type corresponding to
+    /// Retrieve (or build) the contextual type corresponding to
     /// this equivalence class within the given generic environment.
     Type getTypeInContext(GenericSignatureBuilder &builder,
                           GenericEnvironment *genericEnv);
@@ -365,7 +365,7 @@
                                                    ProtocolDecl *proto);
 
 public:
-  /// \brief Add a new conformance requirement specifying that the given
+  /// Add a new conformance requirement specifying that the given
   /// type conforms to the given protocol.
   ConstraintResult addConformanceRequirement(ResolvedType type,
                                              ProtocolDecl *proto,
@@ -380,7 +380,7 @@
                                       const RequirementSource *source,
                                       bool onlySameTypeConstraints);
 
-  /// \brief Add a new same-type requirement between two fully resolved types
+  /// Add a new same-type requirement between two fully resolved types
   /// (output of \c GenericSignatureBuilder::resolve).
   ///
   /// If the types refer to two concrete types that are fundamentally
@@ -393,7 +393,7 @@
                          FloatingRequirementSource Source,
                          llvm::function_ref<void(Type, Type)> diagnoseMismatch);
 
-  /// \brief Add a new same-type requirement between two unresolved types.
+  /// Add a new same-type requirement between two unresolved types.
   ///
   /// The types are resolved with \c GenericSignatureBuilder::resolve, and must
   /// not be incompatible concrete types.
@@ -403,7 +403,7 @@
                                     FloatingRequirementSource Source,
                                     UnresolvedHandlingKind unresolvedHandling);
 
-  /// \brief Add a new same-type requirement between two unresolved types.
+  /// Add a new same-type requirement between two unresolved types.
   ///
   /// The types are resolved with \c GenericSignatureBuilder::resolve. \c
   /// diagnoseMismatch is called if the two types refer to incompatible concrete
@@ -425,14 +425,14 @@
                         FloatingRequirementSource source);
 
 private:
-  /// \brief Add a new superclass requirement specifying that the given
+  /// Add a new superclass requirement specifying that the given
   /// potential archetype has the given type as an ancestor.
   ConstraintResult addSuperclassRequirementDirect(
                                               ResolvedType type,
                                               Type superclass,
                                               FloatingRequirementSource source);
 
-  /// \brief Add a new type requirement specifying that the given
+  /// Add a new type requirement specifying that the given
   /// type conforms-to or is a superclass of the second type.
   ///
   /// \param inferForModule Infer additional requirements from the types
@@ -451,19 +451,19 @@
   /// \returns true if a new rewrite rule was added, and false otherwise.
   bool addSameTypeRewriteRule(CanType type1, CanType type2);
 
-  /// \brief Add a same-type requirement between two types that are known to
+  /// Add a same-type requirement between two types that are known to
   /// refer to type parameters.
   ConstraintResult addSameTypeRequirementBetweenTypeParameters(
                                          ResolvedType type1, ResolvedType type2,
                                          const RequirementSource *source);
   
-  /// \brief Add a new conformance requirement specifying that the given
+  /// Add a new conformance requirement specifying that the given
   /// potential archetype is bound to a concrete type.
   ConstraintResult addSameTypeRequirementToConcrete(ResolvedType type,
                                         Type concrete,
                                         const RequirementSource *Source);
 
-  /// \brief Add a new same-type requirement specifying that the given two
+  /// Add a new same-type requirement specifying that the given two
   /// types should be the same.
   ///
   /// \param diagnoseMismatch Callback invoked when the types in the same-type
@@ -472,7 +472,7 @@
       Type T1, Type T2, FloatingRequirementSource Source,
       llvm::function_ref<void(Type, Type)> diagnoseMismatch);
 
-  /// \brief Add a new layout requirement directly on the potential archetype.
+  /// Add a new layout requirement directly on the potential archetype.
   ///
   /// \returns true if this requirement makes the set of requirements
   /// inconsistent, in which case a diagnostic will have been issued.
@@ -555,7 +555,7 @@
   /// signature being built.
   TypeArrayView<GenericTypeParamType> getGenericParams() const;
 
-  /// \brief Add a new generic parameter for which there may be requirements.
+  /// Add a new generic parameter for which there may be requirements.
   void addGenericParameter(GenericTypeParamDecl *GenericParam);
 
   /// Add the requirements placed on the given abstract type parameter
@@ -564,10 +564,10 @@
   /// \returns true if an error occurred, false otherwise.
   bool addGenericParameterRequirements(GenericTypeParamDecl *GenericParam);
 
-  /// \brief Add a new generic parameter for which there may be requirements.
+  /// Add a new generic parameter for which there may be requirements.
   void addGenericParameter(GenericTypeParamType *GenericParam);
   
-  /// \brief Add a new requirement.
+  /// Add a new requirement.
   ///
   /// \param inferForModule Infer additional requirements from the types
   /// relative to the given module.
@@ -578,7 +578,7 @@
                                   FloatingRequirementSource source,
                                   ModuleDecl *inferForModule);
 
-  /// \brief Add an already-checked requirement.
+  /// Add an already-checked requirement.
   ///
   /// Adding an already-checked requirement cannot fail. This is used to
   /// re-inject requirements from outer contexts.
@@ -594,7 +594,7 @@
                                   const SubstitutionMap *subMap,
                                   ModuleDecl *inferForModule);
 
-  /// \brief Add all of a generic signature's parameters and requirements.
+  /// Add all of a generic signature's parameters and requirements.
   void addGenericSignature(GenericSignature *sig);
 
   /// Infer requirements from the given type, recursively.
@@ -628,7 +628,7 @@
   /// because the type \c Dictionary<K,V> cannot be formed without it.
   void inferRequirements(ModuleDecl &module, ParameterList *params);
 
-  /// \brief Finalize the set of requirements and compute the generic
+  /// Finalize the set of requirements and compute the generic
   /// signature.
   ///
   /// After this point, one cannot introduce new requirements, and the
@@ -759,7 +759,7 @@
   PotentialArchetype *realizePotentialArchetype(UnresolvedType &type);
 
 public:
-  /// \brief Try to resolve the equivalence class of the given type.
+  /// Try to resolve the equivalence class of the given type.
   ///
   /// \param type The type to resolve.
   ///
@@ -773,7 +773,7 @@
                                       ArchetypeResolutionKind resolutionKind,
                                       bool wantExactPotentialArchetype);
 
-  /// \brief Resolve the equivalence class for the given type parameter,
+  /// Resolve the equivalence class for the given type parameter,
   /// which provides information about that type.
   ///
   /// The \c resolutionKind parameter describes how resolution should be
@@ -788,7 +788,7 @@
                       Type type,
                       ArchetypeResolutionKind resolutionKind);
 
-  /// \brief Resolve the given type as far as this Builder knows how.
+  /// Resolve the given type as far as this Builder knows how.
   ///
   /// If successful, this returns either a non-typealias potential archetype
   /// or a Type, if \c type is concrete.
@@ -813,7 +813,7 @@
   /// Verify all of the generic sigantures in the given module.
   static void verifyGenericSignaturesInModule(ModuleDecl *module);
 
-  /// \brief Dump all of the requirements, both specified and inferred.
+  /// Dump all of the requirements, both specified and inferred.
   LLVM_ATTRIBUTE_DEPRECATED(
       void dump(),
       "only for use within the debugger");
@@ -1515,7 +1515,7 @@
     PAIdentifier(GenericParamKey genericParam) : genericParam(genericParam) { }
   } identifier;
 
-  /// \brief The representative of the equivalence class of potential archetypes
+  /// The representative of the equivalence class of potential archetypes
   /// to which this potential archetype belongs, or (for the representative)
   /// the equivalence class itself.
   mutable llvm::PointerUnion<PotentialArchetype *, EquivalenceClass *>
@@ -1547,28 +1547,28 @@
     }
   };
 
-  /// \brief The set of nested types of this archetype.
+  /// The set of nested types of this archetype.
   ///
   /// For a given nested type name, there may be multiple potential archetypes
   /// corresponding to different associated types (from different protocols)
   /// that share a name.
   llvm::MapVector<Identifier, StoredNestedType> NestedTypes;
 
-  /// \brief Construct a new potential archetype for a concrete declaration.
+  /// Construct a new potential archetype for a concrete declaration.
   PotentialArchetype(PotentialArchetype *parent, AssociatedTypeDecl *assocType)
       : parentOrContext(parent), identifier(assocType) {
     assert(parent != nullptr && "Not a nested type?");
     assert(assocType->getOverriddenDecls().empty());
   }
 
-  /// \brief Construct a new potential archetype for a generic parameter.
+  /// Construct a new potential archetype for a generic parameter.
   PotentialArchetype(ASTContext &ctx, GenericParamKey genericParam)
     : parentOrContext(&ctx), identifier(genericParam)
   {
   }
 
 public:
-  /// \brief Retrieve the representative for this archetype, performing
+  /// Retrieve the representative for this archetype, performing
   /// path compression on the way.
   PotentialArchetype *getRepresentative() const;
 
@@ -1578,7 +1578,7 @@
 public:
   ~PotentialArchetype();
 
-  /// \brief Retrieve the debug name of this potential archetype.
+  /// Retrieve the debug name of this potential archetype.
   std::string getDebugName() const;
 
   /// Retrieve the parent of this potential archetype, which will be non-null
@@ -1627,7 +1627,7 @@
     return NestedTypes;
   }
 
-  /// \brief Determine the nesting depth of this potential archetype, e.g.,
+  /// Determine the nesting depth of this potential archetype, e.g.,
   /// the number of associated type references.
   unsigned getNestingDepth() const;
 
diff --git a/include/swift/AST/IRGenOptions.h b/include/swift/AST/IRGenOptions.h
index 3fd4d44..f77e4be 100644
--- a/include/swift/AST/IRGenOptions.h
+++ b/include/swift/AST/IRGenOptions.h
@@ -113,19 +113,19 @@
   /// Path prefixes that should be rewritten in debug info.
   PathRemapper DebugPrefixMap;
 
-  /// \brief Whether we're generating IR for the JIT.
+  /// Whether we're generating IR for the JIT.
   unsigned UseJIT : 1;
   
-  /// \brief Whether we're generating code for the integrated REPL.
+  /// Whether we're generating code for the integrated REPL.
   unsigned IntegratedREPL : 1;
   
-  /// \brief Whether we should run LLVM optimizations after IRGen.
+  /// Whether we should run LLVM optimizations after IRGen.
   unsigned DisableLLVMOptzns : 1;
 
   /// Whether we should run swift specific LLVM optimizations after IRGen.
   unsigned DisableSwiftSpecificLLVMOptzns : 1;
 
-  /// \brief Whether we should run LLVM SLP vectorizer.
+  /// Whether we should run LLVM SLP vectorizer.
   unsigned DisableLLVMSLPVectorizer : 1;
 
   /// Disable frame pointer elimination?
diff --git a/include/swift/AST/KnownProtocols.h b/include/swift/AST/KnownProtocols.h
index f70bc07..c6510c0 100644
--- a/include/swift/AST/KnownProtocols.h
+++ b/include/swift/AST/KnownProtocols.h
@@ -22,7 +22,7 @@
 
 namespace swift {
 
-/// \brief The set of known protocols.
+/// The set of known protocols.
 enum class KnownProtocolKind : uint8_t {
 #define PROTOCOL_WITH_NAME(Id, Name) Id,
 #include "swift/AST/KnownProtocols.def"
diff --git a/include/swift/AST/Module.h b/include/swift/AST/Module.h
index 1bfef4b..36850ba 100644
--- a/include/swift/AST/Module.h
+++ b/include/swift/AST/Module.h
@@ -94,6 +94,8 @@
   SerializedAST,
   /// An imported Clang module.
   ClangModule,
+  /// A Clang module imported from DWARF.
+  DWARFModule
 };
 
 enum class SourceFileKind {
@@ -514,7 +516,7 @@
   /// Source locations are ignored here.
   static bool isSameAccessPath(AccessPathTy lhs, AccessPathTy rhs);
 
-  /// \brief Get the path for the file that this module came from, or an empty
+  /// Get the path for the file that this module came from, or an empty
   /// string if this is not applicable.
   StringRef getModuleFilename() const;
 
@@ -923,7 +925,7 @@
   /// We only collect interface hash for primary input files.
   llvm::Optional<llvm::MD5> InterfaceHash;
 
-  /// \brief The ID for the memory buffer containing this file's source.
+  /// The ID for the memory buffer containing this file's source.
   ///
   /// May be -1, to indicate no association with a buffer.
   int BufferID;
@@ -1098,7 +1100,7 @@
 
   void createReferencedNameTracker();
 
-  /// \brief The buffer ID for the file that was imported, or None if there
+  /// The buffer ID for the file that was imported, or None if there
   /// is no associated buffer.
   Optional<unsigned> getBufferID() const {
     if (BufferID == -1)
@@ -1116,7 +1118,7 @@
   void dump() const;
   void dump(raw_ostream &os) const;
 
-  /// \brief Pretty-print the contents of this source file.
+  /// Pretty-print the contents of this source file.
   ///
   /// \param Printer The AST printer used for printing the contents.
   /// \param PO Options controlling the printing process.
@@ -1326,7 +1328,8 @@
 
   static bool classof(const FileUnit *file) {
     return file->getKind() == FileUnitKind::SerializedAST ||
-           file->getKind() == FileUnitKind::ClangModule;
+           file->getKind() == FileUnitKind::ClangModule ||
+           file->getKind() == FileUnitKind::DWARFModule;
   }
   static bool classof(const DeclContext *DC) {
     return isa<FileUnit>(DC) && classof(cast<FileUnit>(DC));
diff --git a/include/swift/AST/ModuleLoader.h b/include/swift/AST/ModuleLoader.h
index 4e6220f..b713d6b 100644
--- a/include/swift/AST/ModuleLoader.h
+++ b/include/swift/AST/ModuleLoader.h
@@ -71,7 +71,7 @@
   std::shared_ptr<clang::DependencyCollector> getClangCollector();
 };
 
-/// \brief Abstract interface that loads named modules into the AST.
+/// Abstract interface that loads named modules into the AST.
 class ModuleLoader {
   virtual void anchor();
 
@@ -82,14 +82,14 @@
 public:
   virtual ~ModuleLoader() = default;
 
-  /// \brief Check whether the module with a given name can be imported without
+  /// Check whether the module with a given name can be imported without
   /// importing it.
   ///
   /// Note that even if this check succeeds, errors may still occur if the
   /// module is loaded in full.
   virtual bool canImportModule(std::pair<Identifier, SourceLoc> named) = 0;
 
-  /// \brief Import a module with the given module path.
+  /// Import a module with the given module path.
   ///
   /// \param importLoc The location of the 'import' keyword.
   ///
@@ -102,7 +102,7 @@
   ModuleDecl *loadModule(SourceLoc importLoc,
                          ArrayRef<std::pair<Identifier, SourceLoc>> path) = 0;
 
-  /// \brief Load extensions to the given nominal type.
+  /// Load extensions to the given nominal type.
   ///
   /// \param nominal The nominal type whose extensions should be loaded.
   ///
@@ -112,7 +112,7 @@
   virtual void loadExtensions(NominalTypeDecl *nominal,
                               unsigned previousGeneration) { }
 
-  /// \brief Load the methods within the given class that produce
+  /// Load the methods within the given class that produce
   /// Objective-C class or instance methods with the given selector.
   ///
   /// \param classDecl The class in which we are searching for @objc methods.
@@ -138,7 +138,7 @@
                  unsigned previousGeneration,
                  llvm::TinyPtrVector<AbstractFunctionDecl *> &methods) = 0;
 
-  /// \brief Verify all modules loaded by this loader.
+  /// Verify all modules loaded by this loader.
   virtual void verifyAllModules() { }
 };
 
diff --git a/include/swift/AST/NameLookup.h b/include/swift/AST/NameLookup.h
index 23ad4ba..c713d80 100644
--- a/include/swift/AST/NameLookup.h
+++ b/include/swift/AST/NameLookup.h
@@ -83,7 +83,7 @@
   ValueDecl *getBaseDecl() const;
 };
 
-/// \brief This class implements and represents the result of performing
+/// This class implements and represents the result of performing
 /// unqualified lookup (i.e. lookup for a plain identifier).
 class UnqualifiedLookup {
 public:
@@ -103,7 +103,7 @@
   };
   using Options = OptionSet<Flags>;
 
-  /// \brief Lookup an unqualified identifier \p Name in the context.
+  /// Lookup an unqualified identifier \p Name in the context.
   ///
   /// If the current DeclContext is nested in a function body, the SourceLoc
   /// is used to determine which declarations in that body are visible.
@@ -111,7 +111,7 @@
                     SourceLoc Loc = SourceLoc(), Options options = Options());
 
   SmallVector<LookupResultEntry, 4> Results;
-  /// \brief The index of the first result that isn't from the innermost scope
+  /// The index of the first result that isn't from the innermost scope
   /// with results.
   ///
   /// That is, \c makeArrayRef(Results).take_front(IndexOfFirstOuterResults)
@@ -119,10 +119,10 @@
   /// remaining elements of Results will be from parent scopes of this one.
   size_t IndexOfFirstOuterResult;
 
-  /// \brief Return true if anything was found by the name lookup.
+  /// Return true if anything was found by the name lookup.
   bool isSuccess() const { return !Results.empty(); }
 
-  /// \brief Get the result as a single type, or a null type if that fails.
+  /// Get the result as a single type, or a null type if that fails.
   TypeDecl *getSingleTypeResult();
 };
 
@@ -277,13 +277,13 @@
   void foundDecl(ValueDecl *D, DeclVisibilityKind reason) override;
 };
 
-/// \brief Remove any declarations in the given set that were overridden by
+/// Remove any declarations in the given set that were overridden by
 /// other declarations in that set.
 ///
 /// \returns true if any declarations were removed, false otherwise.
 bool removeOverriddenDecls(SmallVectorImpl<ValueDecl*> &decls);
 
-/// \brief Remove any declarations in the given set that are shadowed by
+/// Remove any declarations in the given set that are shadowed by
 /// other declarations in that set.
 ///
 /// \param decls The set of declarations being considered.
diff --git a/include/swift/AST/Ownership.h b/include/swift/AST/Ownership.h
index c563ae3..ee8c2e2 100644
--- a/include/swift/AST/Ownership.h
+++ b/include/swift/AST/Ownership.h
@@ -33,7 +33,7 @@
 // This enum is used in diagnostics. If you add a case here, the diagnostics
 // must be updated as well.
 enum class ReferenceOwnership : uint8_t {
-  /// \brief a strong reference (the default semantics)
+  /// a strong reference (the default semantics)
   Strong,
 
 #define REF_STORAGE(Name, ...) Name,
@@ -122,14 +122,14 @@
 
 /// Different kinds of value ownership supported by Swift.
 enum class ValueOwnership : uint8_t {
-  /// \brief the context-dependent default ownership (sometimes shared,
+  /// the context-dependent default ownership (sometimes shared,
   /// sometimes owned)
   Default,
-  /// \brief an 'inout' mutating pointer-like value
+  /// an 'inout' mutating pointer-like value
   InOut,
-  /// \brief a '__shared' non-mutating pointer-like value
+  /// a '__shared' non-mutating pointer-like value
   Shared,
-  /// \brief an '__owned' value
+  /// an '__owned' value
   Owned,
 
   Last_Kind = Owned
diff --git a/include/swift/AST/Pattern.h b/include/swift/AST/Pattern.h
index 5579d8a..27397b1 100644
--- a/include/swift/AST/Pattern.h
+++ b/include/swift/AST/Pattern.h
@@ -96,7 +96,7 @@
 public:
   PatternKind getKind() const { return PatternKind(Bits.Pattern.Kind); }
 
-  /// \brief Retrieve the name of the given pattern kind.
+  /// Retrieve the name of the given pattern kind.
   ///
   /// This name should only be used for debugging dumps and other
   /// developer aids, and should never be part of a diagnostic or exposed
@@ -161,14 +161,14 @@
   SourceLoc getEndLoc() const { return getSourceRange().End; }
   SourceLoc getLoc() const;
 
-  /// \brief Collect the set of variables referenced in the given pattern.
+  /// Collect the set of variables referenced in the given pattern.
   void collectVariables(SmallVectorImpl<VarDecl *> &variables) const;
 
-  /// \brief apply the specified function to all variables referenced in this
+  /// apply the specified function to all variables referenced in this
   /// pattern.
   void forEachVariable(llvm::function_ref<void(VarDecl *)> f) const;
 
-  /// \brief apply the specified function to all pattern nodes recursively in
+  /// apply the specified function to all pattern nodes recursively in
   /// this pattern.  This is a pre-order traversal.
   void forEachNode(llvm::function_ref<void(Pattern *)> f);
 
@@ -182,7 +182,7 @@
 
   bool isNeverDefaultInitializable() const;
 
-  /// \brief Mark all vardecls in this pattern as having non-pattern initial
+  /// Mark all vardecls in this pattern as having non-pattern initial
   /// values bound into them.
   void markHasNonPatternBindingInit() {
     forEachVariable([&](VarDecl *VD) {
@@ -190,7 +190,7 @@
     });
   }
   
-  /// \brief Mark all vardecls in this pattern as having an owning statement for
+  /// Mark all vardecls in this pattern as having an owning statement for
   /// the pattern.
   void markOwnedByStatement(Stmt *S) {
     forEachVariable([&](VarDecl *VD) {
@@ -305,7 +305,7 @@
                               ArrayRef<TuplePatternElt> elements, SourceLoc rp,
                               Optional<bool> implicit = None);
 
-  /// \brief Create either a tuple pattern or a paren pattern, depending
+  /// Create either a tuple pattern or a paren pattern, depending
   /// on the elements.
   static Pattern *createSimple(ASTContext &C, SourceLoc lp,
                                ArrayRef<TuplePatternElt> elements, SourceLoc rp,
diff --git a/include/swift/AST/PrintOptions.h b/include/swift/AST/PrintOptions.h
index d986ede..c408a83 100644
--- a/include/swift/AST/PrintOptions.h
+++ b/include/swift/AST/PrintOptions.h
@@ -123,16 +123,16 @@
 /// A default-constructed PrintOptions is suitable for printing to users;
 /// there are also factory methods for specific use cases.
 struct PrintOptions {
-  /// \brief The indentation width.
+  /// The indentation width.
   unsigned Indent = 2;
 
-  /// \brief Whether to print function definitions.
+  /// Whether to print function definitions.
   bool FunctionDefinitions = false;
 
-  /// \brief Whether to print '{ get set }' on readwrite computed properties.
+  /// Whether to print '{ get set }' on readwrite computed properties.
   bool PrintGetSetOnRWProperties = true;
 
-  /// \brief Whether to print *any* accessors on properties.
+  /// Whether to print *any* accessors on properties.
   bool PrintPropertyAccessors = true;
 
   /// Whether to print the accessors of a property abstractly,
@@ -161,16 +161,16 @@
   /// Whether to print the bodies of accessors in protocol context.
   bool PrintAccessorBodiesInProtocols = false;
 
-  /// \brief Whether to print type definitions.
+  /// Whether to print type definitions.
   bool TypeDefinitions = false;
 
-  /// \brief Whether to print variable initializers.
+  /// Whether to print variable initializers.
   bool VarInitializers = false;
 
-  /// \brief Whether to print enum raw value expressions.
+  /// Whether to print enum raw value expressions.
   bool EnumRawValues = false;
 
-  /// \brief Whether to prefer printing TypeReprs instead of Types,
+  /// Whether to prefer printing TypeReprs instead of Types,
   /// if a TypeRepr is available.  This allows us to print the original
   /// spelling of the type name.
   ///
@@ -178,22 +178,22 @@
   /// it to the user.
   bool PreferTypeRepr = true;
 
-  /// \brief Whether to print fully qualified Types.
+  /// Whether to print fully qualified Types.
   bool FullyQualifiedTypes = false;
 
-  /// \brief Print fully qualified types if our heuristics say that a certain
+  /// Print fully qualified types if our heuristics say that a certain
   /// type might be ambiguous.
   bool FullyQualifiedTypesIfAmbiguous = false;
 
-  /// \brief Print Swift.Array and Swift.Optional with sugared syntax
+  /// Print Swift.Array and Swift.Optional with sugared syntax
   /// ([] and ?), even if there are no sugar type nodes.
   bool SynthesizeSugarOnTypes = false;
 
-  /// \brief If true, null types in the AST will be printed as "<null>". If
+  /// If true, null types in the AST will be printed as "<null>". If
   /// false, the compiler will trap.
   bool AllowNullTypes = true;
 
-  /// \brief If true, the printer will explode a pattern like this:
+  /// If true, the printer will explode a pattern like this:
   /// \code
   ///   var (a, b) = f()
   /// \endcode
@@ -210,10 +210,10 @@
   /// into multiple case declarations.
   bool ExplodeEnumCaseDecls = false;
 
-  /// \brief Whether to print implicit parts of the AST.
+  /// Whether to print implicit parts of the AST.
   bool SkipImplicit = false;
 
-  /// \brief Whether to print unavailable parts of the AST.
+  /// Whether to print unavailable parts of the AST.
   bool SkipUnavailable = false;
 
   /// Whether to skip internal stdlib declarations.
@@ -238,7 +238,7 @@
   /// Whether to skip printing 'import' declarations.
   bool SkipImports = false;
 
-  /// \brief Whether to skip printing overrides and witnesses for
+  /// Whether to skip printing overrides and witnesses for
   /// protocol requirements.
   bool SkipOverrides = false;
 
@@ -322,12 +322,12 @@
   ArgAndParamPrintingMode ArgAndParamPrinting =
       ArgAndParamPrintingMode::MatchSource;
 
-  /// \brief Whether to print documentation comments attached to declarations.
+  /// Whether to print documentation comments attached to declarations.
   /// Note that this may print documentation comments from related declarations
   /// (e.g. the overridden method in the superclass) if such comment is found.
   bool PrintDocumentationComments = false;
 
-  /// \brief Whether to print regular comments from clang module headers.
+  /// Whether to print regular comments from clang module headers.
   bool PrintRegularClangComments = false;
 
   /// When true, printing interface from a source file will print the original
@@ -349,17 +349,17 @@
   /// Replaces the name of private and internal properties of types with '_'.
   bool OmitNameOfInaccessibleProperties = false;
 
-  /// \brief Print dependent types as references into this generic environment.
+  /// Print dependent types as references into this generic environment.
   GenericEnvironment *GenericEnv = nullptr;
 
-  /// \brief Print types with alternative names from their canonical names.
+  /// Print types with alternative names from their canonical names.
   llvm::DenseMap<CanType, Identifier> *AlternativeTypeNames = nullptr;
 
-  /// \brief The module in which the printer is used. Determines if the module
+  /// The module in which the printer is used. Determines if the module
   /// name should be printed when printing a type.
   ModuleDecl *CurrentModule = nullptr;
 
-  /// \brief The information for converting archetypes to specialized types.
+  /// The information for converting archetypes to specialized types.
   llvm::Optional<TypeTransformContext> TransformContext;
 
   bool PrintAsMember = false;
@@ -380,7 +380,7 @@
   QualifyNestedDeclarations ShouldQualifyNestedDeclarations =
       QualifyNestedDeclarations::Never;
 
-  /// \brief If this is not \c nullptr then function bodies (including accessors
+  /// If this is not \c nullptr then function bodies (including accessors
   /// and constructors) will be printed by this function.
   std::function<void(const ValueDecl *, ASTPrinter &)> FunctionBody;
 
@@ -512,7 +512,7 @@
     return result;
   }
 
-  /// \brief Retrieve the set of options that prints everything.
+  /// Retrieve the set of options that prints everything.
   ///
   /// This is only intended for debug output.
   static PrintOptions printEverything() {
diff --git a/include/swift/AST/ProtocolConformance.h b/include/swift/AST/ProtocolConformance.h
index f358644..71f3977 100644
--- a/include/swift/AST/ProtocolConformance.h
+++ b/include/swift/AST/ProtocolConformance.h
@@ -41,7 +41,7 @@
 class SubstitutableType;
 enum class AllocationArena;
 
-/// \brief Type substitution mapping from substitutable types to their
+/// Type substitution mapping from substitutable types to their
 /// replacements.
 typedef llvm::DenseMap<SubstitutableType *, Type> TypeSubstitutionMap;
 
@@ -82,7 +82,7 @@
   Checking,
 };
 
-/// \brief Describes how a particular type conforms to a given protocol,
+/// Describes how a particular type conforms to a given protocol,
 /// providing the mapping from the protocol members to the type (or extension)
 /// members that provide the functionality for the concrete type.
 ///
@@ -92,7 +92,7 @@
   /// The kind of protocol conformance.
   ProtocolConformanceKind Kind;
 
-  /// \brief The type that conforms to the protocol, in the context of the
+  /// The type that conforms to the protocol, in the context of the
   /// conformance definition.
   Type ConformingType;
 
@@ -418,7 +418,7 @@
 class NormalProtocolConformance : public RootProtocolConformance,
                                   public llvm::FoldingSetNode
 {
-  /// \brief The protocol being conformed to and its current state.
+  /// The protocol being conformed to and its current state.
   llvm::PointerIntPair<ProtocolDecl *, 2, ProtocolConformanceState>
     ProtocolAndState;
 
@@ -434,7 +434,7 @@
   /// Also stores the "invalid" bit.
   llvm::PointerIntPair<Context, 1, bool> ContextAndInvalid;
 
-  /// \brief The reason that this conformance exists.
+  /// The reason that this conformance exists.
   ///
   /// Either Explicit (e.g. 'struct Foo: Protocol {}' or 'extension Foo:
   /// Protocol {}'), Synthesized (e.g. RawRepresentable for 'enum Foo: Int {}')
@@ -448,7 +448,7 @@
       SourceKindAndImplyingConformance = {nullptr,
                                           ConformanceEntryKind::Explicit};
 
-  /// \brief The mapping of individual requirements in the protocol over to
+  /// The mapping of individual requirements in the protocol over to
   /// the declarations that satisfy those requirements.
   mutable WitnessMap Mapping;
 
diff --git a/include/swift/AST/Requirement.h b/include/swift/AST/Requirement.h
index 987bf9f..63ec489 100644
--- a/include/swift/AST/Requirement.h
+++ b/include/swift/AST/Requirement.h
@@ -44,7 +44,7 @@
   // when adding enumerators.
 };
 
-/// \brief A single requirement placed on the type parameters (or associated
+/// A single requirement placed on the type parameters (or associated
 /// types thereof) of a
 class Requirement {
   llvm::PointerIntPair<Type, 3, RequirementKind> FirstTypeAndKind;
@@ -73,21 +73,21 @@
     assert(second);
   }
 
-  /// \brief Determine the kind of requirement.
+  /// Determine the kind of requirement.
   RequirementKind getKind() const { return FirstTypeAndKind.getInt(); }
 
-  /// \brief Retrieve the first type.
+  /// Retrieve the first type.
   Type getFirstType() const {
     return FirstTypeAndKind.getPointer();
   }
 
-  /// \brief Retrieve the second type.
+  /// Retrieve the second type.
   Type getSecondType() const {
     assert(getKind() != RequirementKind::Layout);
     return SecondType;
   }
 
-  /// \brief Subst the types involved in this requirement.
+  /// Subst the types involved in this requirement.
   ///
   /// The \c args arguments are passed through to Type::subst. This doesn't
   /// touch the superclasses, protocols or layout constraints.
@@ -113,7 +113,7 @@
     llvm_unreachable("Unhandled RequirementKind in switch.");
   }
 
-  /// \brief Retrieve the layout constraint.
+  /// Retrieve the layout constraint.
   LayoutConstraint getLayoutConstraint() const {
     assert(getKind() == RequirementKind::Layout);
     return SecondLayout;
diff --git a/include/swift/AST/SILLayout.h b/include/swift/AST/SILLayout.h
index 5d1e4ac..a613942 100644
--- a/include/swift/AST/SILLayout.h
+++ b/include/swift/AST/SILLayout.h
@@ -139,7 +139,7 @@
                       CanGenericSignature Generics,
                       ArrayRef<SILField> Fields);
   
-  /// \brief Produce a profile of this locator, for use in a folding set.
+  /// Produce a profile of this locator, for use in a folding set.
   void Profile(llvm::FoldingSetNodeID &id) {
     Profile(id, getGenericSignature(), getFields());
   }
diff --git a/include/swift/AST/SILOptions.h b/include/swift/AST/SILOptions.h
index b49cf57..d5b81a9 100644
--- a/include/swift/AST/SILOptions.h
+++ b/include/swift/AST/SILOptions.h
@@ -132,7 +132,7 @@
   /// Enable the mandatory semantic arc optimizer.
   bool EnableMandatorySemanticARCOpts = false;
 
-  /// \brief Enable large loadable types IRGen pass.
+  /// Enable large loadable types IRGen pass.
   bool EnableLargeLoadableTypes = true;
 
   /// The name of the file to which the backend should save YAML optimization
diff --git a/include/swift/AST/Stmt.h b/include/swift/AST/Stmt.h
index fbf68ed..e6089f6 100644
--- a/include/swift/AST/Stmt.h
+++ b/include/swift/AST/Stmt.h
@@ -106,17 +106,17 @@
 
   StmtKind getKind() const { return StmtKind(Bits.Stmt.Kind); }
 
-  /// \brief Retrieve the name of the given statement kind.
+  /// Retrieve the name of the given statement kind.
   ///
   /// This name should only be used for debugging dumps and other
   /// developer aids, and should never be part of a diagnostic or exposed
   /// to the user of the compiler in any way.
   static StringRef getKindName(StmtKind kind);
 
-  /// \brief Return the location of the start of the statement.
+  /// Return the location of the start of the statement.
   SourceLoc getStartLoc() const;
   
-  /// \brief Return the location of the end of the statement.
+  /// Return the location of the end of the statement.
   SourceLoc getEndLoc() const;
   
   SourceRange getSourceRange() const;
@@ -307,7 +307,7 @@
 };
 
   
-/// \brief An expression that guards execution based on whether the run-time
+/// An expression that guards execution based on whether the run-time
 /// configuration supports a given API, e.g.,
 /// #available(OSX >= 10.9, iOS >= 7.0).
 class alignas(8) PoundAvailableInfo final :
diff --git a/include/swift/AST/Type.h b/include/swift/AST/Type.h
index c8253a2..0d4c16a 100644
--- a/include/swift/AST/Type.h
+++ b/include/swift/AST/Type.h
@@ -54,7 +54,7 @@
 class TypeWalker;
 struct ExistentialLayout;
 
-/// \brief Type substitution mapping from substitutable types to their
+/// Type substitution mapping from substitutable types to their
 /// replacements.
 typedef llvm::DenseMap<SubstitutableType *, Type> TypeSubstitutionMap;
 
diff --git a/include/swift/AST/TypeCheckerDebugConsumer.h b/include/swift/AST/TypeCheckerDebugConsumer.h
index f00fb8c..9b34da6 100644
--- a/include/swift/AST/TypeCheckerDebugConsumer.h
+++ b/include/swift/AST/TypeCheckerDebugConsumer.h
@@ -18,7 +18,7 @@
 
 namespace swift {
 
-/// \brief A consumer of type checker debug output.
+/// A consumer of type checker debug output.
 class TypeCheckerDebugConsumer {
 public:
   virtual ~TypeCheckerDebugConsumer();
@@ -26,7 +26,7 @@
   virtual raw_ostream &getStream() = 0;
 };
 
-/// \brief A consumer of type checker debug output that dumps the information
+/// A consumer of type checker debug output that dumps the information
 /// to stderr.
 class StderrTypeCheckerDebugConsumer : public TypeCheckerDebugConsumer {
 public:
@@ -35,7 +35,7 @@
   }
 };
 
-/// \brief A base class for a custom consumer of type checker debug output.
+/// A base class for a custom consumer of type checker debug output.
 class CapturingTypeCheckerDebugConsumer : public TypeCheckerDebugConsumer {
   std::unique_ptr<raw_ostream> Log;
 
diff --git a/include/swift/AST/TypeOrExtensionDecl.h b/include/swift/AST/TypeOrExtensionDecl.h
index 12c7c7c..67961c0 100644
--- a/include/swift/AST/TypeOrExtensionDecl.h
+++ b/include/swift/AST/TypeOrExtensionDecl.h
@@ -23,7 +23,7 @@
 
 namespace swift {
 
-/// \brief Describes either a nominal type declaration or an extension
+/// Describes either a nominal type declaration or an extension
 /// declaration.
 struct TypeOrExtensionDecl {
   // (The definitions are in Decl.cpp.)
@@ -34,15 +34,15 @@
   TypeOrExtensionDecl(NominalTypeDecl *D);
   TypeOrExtensionDecl(ExtensionDecl *D);
 
-  /// \brief Return the contained *Decl as the Decl superclass.
+  /// Return the contained *Decl as the Decl superclass.
   class Decl *getAsDecl() const;
-  /// \brief Return the contained *Decl as the DeclContext superclass.
+  /// Return the contained *Decl as the DeclContext superclass.
   DeclContext *getAsDeclContext() const;
-  /// \brief Return the contained NominalTypeDecl or that of the extended type
+  /// Return the contained NominalTypeDecl or that of the extended type
   /// in the ExtensionDecl.
   NominalTypeDecl *getBaseNominal() const;
 
-  /// \brief Is the contained pointer null?
+  /// Is the contained pointer null?
   bool isNull() const;
   explicit operator bool() const { return !isNull(); }
 
diff --git a/include/swift/AST/TypeRepr.h b/include/swift/AST/TypeRepr.h
index 4bcc7eb..188dc2f 100644
--- a/include/swift/AST/TypeRepr.h
+++ b/include/swift/AST/TypeRepr.h
@@ -45,7 +45,7 @@
 enum : unsigned { NumTypeReprKindBits =
   countBitsUsed(static_cast<unsigned>(TypeReprKind::Last_TypeRepr)) };
 
-/// \brief Representation of a type as written in source.
+/// Representation of a type as written in source.
 class alignas(8) TypeRepr {
   TypeRepr(const TypeRepr&) = delete;
   void operator=(const TypeRepr&) = delete;
@@ -166,7 +166,7 @@
   TypeRepr *clone(const ASTContext &ctx) const;
 };
 
-/// \brief A TypeRepr for a type with a syntax error.  Can be used both as a
+/// A TypeRepr for a type with a syntax error.  Can be used both as a
 /// top-level TypeRepr and as a part of other TypeRepr.
 ///
 /// The client should make sure to emit a diagnostic at the construction time
@@ -193,7 +193,7 @@
   friend class TypeRepr;
 };
 
-/// \brief A type with attributes.
+/// A type with attributes.
 /// \code
 ///   @convention(thin) Foo
 /// \endcode
@@ -229,7 +229,7 @@
 
 class ComponentIdentTypeRepr;
 
-/// \brief This is the abstract base class for types with identifier components.
+/// This is the abstract base class for types with identifier components.
 /// \code
 ///   Foo.Bar<Gen>
 /// \endcode
@@ -308,7 +308,7 @@
   friend class TypeRepr;
 };
 
-/// \brief A simple identifier type like "Int".
+/// A simple identifier type like "Int".
 class SimpleIdentTypeRepr : public ComponentIdentTypeRepr {
 public:
   SimpleIdentTypeRepr(SourceLoc Loc, Identifier Id)
@@ -332,7 +332,7 @@
   friend class TypeRepr;
 };
 
-/// \brief An identifier type with generic arguments.
+/// An identifier type with generic arguments.
 /// \code
 ///   Bar<Gen>
 /// \endcode
@@ -380,7 +380,7 @@
   friend class TypeRepr;
 };
 
-/// \brief A type with identifier components.
+/// A type with identifier components.
 /// \code
 ///   Foo.Bar<Gen>
 /// \endcode
@@ -459,7 +459,7 @@
   return ComponentRange(this);
 }
 
-/// \brief A function type.
+/// A function type.
 /// \code
 ///   (Foo) -> Bar
 ///   (Foo, Bar) -> Baz
@@ -515,7 +515,7 @@
   friend class TypeRepr;
 };
 
-/// \brief An array type.
+/// An array type.
 /// \code
 ///   [Foo]
 /// \endcode
@@ -542,7 +542,7 @@
   friend class TypeRepr;
 };
 
-/// \brief A dictionary type.
+/// A dictionary type.
 /// \code
 ///   [K : V]
 /// \endcode
@@ -575,7 +575,7 @@
   friend class TypeRepr;
 };
 
-/// \brief An optional type.
+/// An optional type.
 /// \code
 ///   Foo?
 /// \endcode
@@ -607,7 +607,7 @@
   friend class TypeRepr;
 };
 
-/// \brief An implicitly unwrapped optional type.
+/// An implicitly unwrapped optional type.
 /// \code
 ///   Foo!
 /// \endcode
@@ -636,7 +636,7 @@
   friend class TypeRepr;
 };
 
-/// \brief A parsed element within a tuple type.
+/// A parsed element within a tuple type.
 struct TupleTypeReprElement {
   Identifier Name;
   SourceLoc NameLoc;
@@ -651,7 +651,7 @@
   TupleTypeReprElement(TypeRepr *Type): Type(Type) {}
 };
 
-/// \brief A tuple type.
+/// A tuple type.
 /// \code
 ///   (Foo, Bar)
 ///   (x: Foo)
@@ -781,7 +781,7 @@
   friend class TypeRepr;
 };
 
-/// \brief A type composite type.
+/// A type composite type.
 /// \code
 ///   Foo & Bar
 /// \endcode
@@ -831,7 +831,7 @@
   friend class TypeRepr;
 };
 
-/// \brief A 'metatype' type.
+/// A 'metatype' type.
 /// \code
 ///   Foo.Type
 /// \endcode
@@ -860,7 +860,7 @@
   friend class TypeRepr;
 };
 
-/// \brief A 'protocol' type.
+/// A 'protocol' type.
 /// \code
 ///   Foo.Protocol
 /// \endcode
@@ -915,7 +915,7 @@
   friend class TypeRepr;
 };
   
-/// \brief An 'inout' type.
+/// An 'inout' type.
 /// \code
 ///   x : inout Int
 /// \endcode
@@ -930,7 +930,7 @@
   static bool classof(const InOutTypeRepr *T) { return true; }
 };
   
-/// \brief A 'shared' type.
+/// A 'shared' type.
 /// \code
 ///   x : shared Int
 /// \endcode
@@ -945,7 +945,7 @@
   static bool classof(const SharedTypeRepr *T) { return true; }
 };
 
-/// \brief A 'owned' type.
+/// A 'owned' type.
 /// \code
 ///   x : owned Int
 /// \endcode
@@ -960,7 +960,7 @@
   static bool classof(const OwnedTypeRepr *T) { return true; }
 };
 
-/// \brief A TypeRepr for a known, fixed type.
+/// A TypeRepr for a known, fixed type.
 ///
 /// Fixed type representations should be used sparingly, in places
 /// where we need to specify some type (usually some built-in type)
diff --git a/include/swift/AST/TypeWalker.h b/include/swift/AST/TypeWalker.h
index 3ca1b3a..784fbe5 100644
--- a/include/swift/AST/TypeWalker.h
+++ b/include/swift/AST/TypeWalker.h
@@ -17,7 +17,7 @@
 
 namespace swift {
 
-/// \brief An abstract class used to traverse a Type.
+/// An abstract class used to traverse a Type.
 class TypeWalker {
 public:
   enum class Action {
diff --git a/include/swift/AST/Types.h b/include/swift/AST/Types.h
index d3f0857..e489dbf 100644
--- a/include/swift/AST/Types.h
+++ b/include/swift/AST/Types.h
@@ -324,7 +324,7 @@
   );
 
   SWIFT_INLINE_BITFIELD_FULL(TypeVariableType, TypeBase, 64-NumTypeBaseBits,
-    /// \brief The unique number assigned to this type variable.
+    /// The unique number assigned to this type variable.
     ID : 32 - NumTypeBaseBits,
 
     /// Type variable options.
@@ -522,21 +522,21 @@
   /// ownership attributes?
   bool allowsOwnership();  
 
-  /// \brief Determine whether this type involves a type variable.
+  /// Determine whether this type involves a type variable.
   bool hasTypeVariable() const {
     return getRecursiveProperties().hasTypeVariable();
   }
 
-  /// \brief Determine where this type is a type variable or a dependent
+  /// Determine where this type is a type variable or a dependent
   /// member root in a type variable.
   bool isTypeVariableOrMember();
 
-  /// \brief Determine whether this type involves a UnresolvedType.
+  /// Determine whether this type involves a UnresolvedType.
   bool hasUnresolvedType() const {
     return getRecursiveProperties().hasUnresolvedType();
   }
   
-  /// \brief Determine whether the type involves an archetype.
+  /// Determine whether the type involves an archetype.
   bool hasArchetype() const {
     return getRecursiveProperties().hasArchetype();
   }
@@ -579,7 +579,7 @@
   /// Map a contextual type to an interface type.
   Type mapTypeOutOfContext();
 
-  /// \brief Compute and return the set of type variables that occur within this
+  /// Compute and return the set of type variables that occur within this
   /// type.
   ///
   /// \param typeVariables This vector is populated with the set of
@@ -595,7 +595,7 @@
   /// whether a type parameter exists at any position.
   bool isTypeParameter();
 
-  /// \brief Determine whether this type can dynamically be an optional type.
+  /// Determine whether this type can dynamically be an optional type.
   ///
   /// \param includeExistential Whether an existential type should be considered
   /// such a type.
@@ -646,7 +646,7 @@
     return getRecursiveProperties().hasDependentMember();
   }
 
-  /// \brief Check if this type is a valid type for the LHS of an assignment.
+  /// Check if this type is a valid type for the LHS of an assignment.
   /// This mainly means hasLValueType(), but empty tuples and tuples of empty
   /// tuples also qualify.
   bool isAssignableType();
@@ -686,13 +686,13 @@
     return getAnyPointerElementType(Ignore);
   }
   
-  /// \brief Determine whether the given type is "specialized", meaning that
+  /// Determine whether the given type is "specialized", meaning that
   /// it involves generic types for which generic arguments have been provided.
   /// For example, the types Vector<Int> and Vector<Int>.Element are both
   /// specialized, but the type Vector is not.
   bool isSpecialized();
 
-  /// \brief Determine whether this type is a legal, lowered SIL type.
+  /// Determine whether this type is a legal, lowered SIL type.
   ///
   /// A type is SIL-illegal if it is:
   ///   - an l-value type,
@@ -702,7 +702,7 @@
   ///   - a tuple type with a SIL-illegal element type.
   bool isLegalSILType();
 
-  /// \brief Determine whether this type is a legal formal type.
+  /// Determine whether this type is a legal formal type.
   ///
   /// A type is illegal as a formal type if it is:
   ///   - an l-value type,
@@ -715,28 +715,28 @@
   /// These are the types of the Swift type system.
   bool isLegalFormalType();
 
-  /// \brief Check if this type is equal to the empty tuple type.
+  /// Check if this type is equal to the empty tuple type.
   bool isVoid();
 
-  /// \brief Check if this type is equal to Swift.Bool.
+  /// Check if this type is equal to Swift.Bool.
   bool isBool();
 
-  /// \brief Check if this type is equal to Builtin.IntN.
+  /// Check if this type is equal to Builtin.IntN.
   bool isBuiltinIntegerType(unsigned bitWidth);
 
-  /// \brief If this is a class type or a bound generic class type, returns the
+  /// If this is a class type or a bound generic class type, returns the
   /// (possibly generic) class.
   ClassDecl *getClassOrBoundGenericClass();
   
-  /// \brief If this is a struct type or a bound generic struct type, returns
+  /// If this is a struct type or a bound generic struct type, returns
   /// the (possibly generic) class.
   StructDecl *getStructOrBoundGenericStruct();
   
-  /// \brief If this is an enum or a bound generic enum type, returns the
+  /// If this is an enum or a bound generic enum type, returns the
   /// (possibly generic) enum.
   EnumDecl *getEnumOrBoundGenericEnum();
   
-  /// \brief Determine whether this type may have a superclass, which holds for
+  /// Determine whether this type may have a superclass, which holds for
   /// classes, bound generic classes, and archetypes that are only instantiable
   /// with a class type.
   bool mayHaveSuperclass();
@@ -751,7 +751,7 @@
   /// - classes
   bool satisfiesClassConstraint();
 
-  /// \brief Determine whether this type can be used as a base type for AST
+  /// Determine whether this type can be used as a base type for AST
   /// name lookup, which is the case for nominal types, protocol compositions
   /// and archetypes.
   ///
@@ -768,7 +768,7 @@
             getAnyNominal());
   }
 
-  /// \brief Retrieve the superclass of this type.
+  /// Retrieve the superclass of this type.
   ///
   /// \param useArchetypes Whether to use context archetypes for outer generic
   /// parameters if the class is nested inside a generic function.
@@ -777,7 +777,7 @@
   ///          superclass.
   Type getSuperclass(bool useArchetypes = true);
   
-  /// \brief True if this type is the exact superclass of another type.
+  /// True if this type is the exact superclass of another type.
   ///
   /// \param ty       The potential subclass.
   ///
@@ -792,7 +792,7 @@
   /// a type's subclass.
   bool isExactSuperclassOf(Type ty);
 
-  /// \brief Get the substituted base class type, starting from a base class
+  /// Get the substituted base class type, starting from a base class
   /// declaration and a substituted derived class type.
   ///
   /// For example, given the following declarations:
@@ -809,7 +809,7 @@
   Type getSuperclassForDecl(const ClassDecl *classDecl,
                             bool useArchetypes = true);
 
-  /// \brief True if this type is the superclass of another type, or a generic
+  /// True if this type is the superclass of another type, or a generic
   /// type that could be bound to the superclass.
   ///
   /// \param ty       The potential subclass.
@@ -823,20 +823,20 @@
   /// concrete types to form the argument type.
   bool isBindableTo(Type ty);
 
-  /// \brief Determines whether this type is similar to \p other as defined by
+  /// Determines whether this type is similar to \p other as defined by
   /// \p matchOptions.
   bool matches(Type other, TypeMatchOptions matchOptions);
 
   bool matchesParameter(Type other, TypeMatchOptions matchMode);
 
-  /// \brief Determines whether this function type is similar to \p
+  /// Determines whether this function type is similar to \p
   /// other as defined by \p matchOptions and the callback \p
   /// paramsAndResultMatch which determines in a client-specific way
   /// whether the parameters and result of the types match.
   bool matchesFunctionType(Type other, TypeMatchOptions matchOptions,
                            llvm::function_ref<bool()> paramsAndResultMatch);
 
-  /// \brief Determines whether this type has a retainable pointer
+  /// Determines whether this type has a retainable pointer
   /// representation, i.e. whether it is representable as a single,
   /// possibly nil pointer that can be unknown-retained and
   /// unknown-released.
@@ -864,11 +864,11 @@
   /// conceivably be bridged to an Objective-C class type.
   bool isPotentiallyBridgedValueType();
 
-  /// \brief If this is a nominal type or a bound generic nominal type,
+  /// If this is a nominal type or a bound generic nominal type,
   /// returns the (possibly generic) nominal type declaration.
   NominalTypeDecl *getNominalOrBoundGenericNominal();
 
-  /// \brief If this is a nominal type, bound generic nominal type, or
+  /// If this is a nominal type, bound generic nominal type, or
   /// unbound generic nominal type, return the (possibly generic) nominal type
   /// declaration.
   NominalTypeDecl *getAnyNominal();
@@ -893,12 +893,12 @@
   bool isTriviallyRepresentableIn(ForeignLanguage language,
                                   const DeclContext *dc);
 
-  /// \brief Given that this is a nominal type or bound generic nominal
+  /// Given that this is a nominal type or bound generic nominal
   /// type, return its parent type; this will be a null type if the type
   /// is not a nested type.
   Type getNominalParent();
 
-  /// \brief If this is a GenericType, bound generic nominal type, or
+  /// If this is a GenericType, bound generic nominal type, or
   /// unbound generic nominal type, return the (possibly generic) nominal type
   /// declaration.
   GenericTypeDecl *getAnyGeneric();
@@ -1098,7 +1098,7 @@
     NominalTypeDecl *NomDecl;
   };
 
-  /// \brief The type of the parent, in which this type is nested.
+  /// The type of the parent, in which this type is nested.
   Type Parent;
 
   template <typename... Args>
@@ -1112,10 +1112,10 @@
 
 public:
 
-  /// \brief Returns the declaration that declares this type.
+  /// Returns the declaration that declares this type.
   GenericTypeDecl *getDecl() const { return GenDecl; }
 
-  /// \brief Returns the type of the parent of this type. This will
+  /// Returns the type of the parent of this type. This will
   /// be null for top-level types or local types, and for non-generic types
   /// will simply be the same as the declared type of the declaration context
   /// of TheDecl. For types nested within generic types, however, this will
@@ -1144,7 +1144,7 @@
   NominalOrBoundGenericNominalType(Args &&...args)
     : AnyGenericType(std::forward<Args>(args)...) {}
 
-  /// \brief Returns the declaration that declares this type.
+  /// Returns the declaration that declares this type.
   NominalTypeDecl *getDecl() const { return NomDecl; }
 
   // Implement isa/cast/dyncast/etc.
@@ -1302,7 +1302,7 @@
 };
 DEFINE_EMPTY_CAN_TYPE_WRAPPER(BuiltinUnsafeValueBufferType, BuiltinType);
 
-/// \brief A builtin vector type.
+/// A builtin vector type.
 class BuiltinVectorType : public BuiltinType, public llvm::FoldingSetNode {
   Type elementType;
   unsigned numElements;
@@ -1318,10 +1318,10 @@
   static BuiltinVectorType *get(const ASTContext &context, Type elementType,
                                 unsigned numElements);
 
-  /// \brief Retrieve the type of this vector's elements.
+  /// Retrieve the type of this vector's elements.
   Type getElementType() const { return elementType; }
 
-  /// \brief Retrieve the number of elements in this vector.
+  /// Retrieve the number of elements in this vector.
   unsigned getNumElements() const { return numElements; }
 
   void Profile(llvm::FoldingSetNodeID &ID) {
@@ -1663,7 +1663,7 @@
   static NameAliasType *get(TypeAliasDecl *typealias, Type parent,
                             SubstitutionMap substitutions, Type underlying);
 
-  /// \brief Returns the declaration that declares this type.
+  /// Returns the declaration that declares this type.
   TypeAliasDecl *getDecl() const {
     // Avoid requiring the definition of TypeAliasDecl.
     return typealias;
@@ -1904,7 +1904,7 @@
   /// An optional name for the field.
   Identifier Name;
 
-  /// \brief This is the type of the field.
+  /// This is the type of the field.
   Type ElementType;
 
   /// Flags that are specific to and relevant for parameter types
@@ -2138,7 +2138,7 @@
                                    parent, genericArgs));
   }
 
-  /// \brief Returns the declaration that declares this type.
+  /// Returns the declaration that declares this type.
   ClassDecl *getDecl() const {
     return reinterpret_cast<ClassDecl*>(BoundGenericType::getDecl());
   }
@@ -2172,7 +2172,7 @@
                                    parent, genericArgs));
   }
 
-  /// \brief Returns the declaration that declares this type.
+  /// Returns the declaration that declares this type.
   EnumDecl *getDecl() const {
     return reinterpret_cast<EnumDecl*>(BoundGenericType::getDecl());
   }
@@ -2206,7 +2206,7 @@
                                    parent, genericArgs));
   }
 
-  /// \brief Returns the declaration that declares this type.
+  /// Returns the declaration that declares this type.
   StructDecl *getDecl() const {
     return reinterpret_cast<StructDecl*>(BoundGenericType::getDecl());
   }
@@ -2247,7 +2247,7 @@
     return reinterpret_cast<EnumDecl *>(NominalType::getDecl());
   }
 
-  /// \brief Retrieve the type when we're referencing the given enum
+  /// Retrieve the type when we're referencing the given enum
   /// declaration in the parent type \c Parent.
   static EnumType *get(EnumDecl *D, Type Parent, const ASTContext &C);
 
@@ -2275,7 +2275,7 @@
     return reinterpret_cast<StructDecl *>(NominalType::getDecl());
   }
 
-  /// \brief Retrieve the type when we're referencing the given struct
+  /// Retrieve the type when we're referencing the given struct
   /// declaration in the parent type \c Parent.
   static StructType *get(StructDecl *D, Type Parent, const ASTContext &C);
 
@@ -2303,7 +2303,7 @@
     return reinterpret_cast<ClassDecl *>(NominalType::getDecl());
   }
 
-  /// \brief Retrieve the type when we're referencing the given class
+  /// Retrieve the type when we're referencing the given class
   /// declaration in the parent type \c Parent.
   static ClassType *get(ClassDecl *D, Type Parent, const ASTContext &C);
 
@@ -2407,7 +2407,7 @@
                            const ASTContext &C);
 
 public:
-  /// \brief Return the MetatypeType for the specified type declaration.
+  /// Return the MetatypeType for the specified type declaration.
   ///
   /// This leaves the 'representation' property unavailable.
   static MetatypeType *get(Type T, const ASTContext &C) {
@@ -2534,7 +2534,7 @@
   Type SelfType;
 
 public:
-  /// \brief Return the DynamicSelf for the specified self type.
+  /// Return the DynamicSelf for the specified self type.
   static DynamicSelfType *get(Type selfType, const ASTContext &ctx);
 
   /// Retrieve the (static) self type for this dynamic self type.
@@ -2830,7 +2830,7 @@
     }
   };
 
-  /// \brief A class which abstracts out some details necessary for
+  /// A class which abstracts out some details necessary for
   /// making a call.
   class ExtInfo {
     // If bits are added or removed, then TypeBase::AnyFunctionTypeBits
@@ -2979,11 +2979,11 @@
   }
 
 public:
-  /// \brief Break an input type into an array of \c AnyFunctionType::Params.
+  /// Break an input type into an array of \c AnyFunctionType::Params.
   static void decomposeInput(Type type,
                              SmallVectorImpl<Param> &result);
 
-  /// \brief Take an array of parameters and turn it into an input type.
+  /// Take an array of parameters and turn it into an input type.
   ///
   /// The result type is only there as a way to extract the ASTContext when
   /// needed.
@@ -2994,13 +2994,13 @@
     return composeInput(ctx, params.getOriginalArray(), canonicalVararg);
   }
 
-  /// \brief Given two arrays of parameters determine if they are equal.
+  /// Given two arrays of parameters determine if they are equal.
   static bool equalParams(ArrayRef<Param> a, ArrayRef<Param> b);
 
-  /// \brief Given two arrays of parameters determine if they are equal.
+  /// Given two arrays of parameters determine if they are equal.
   static bool equalParams(CanParamArrayRef a, CanParamArrayRef b);
 
-  /// \brief Given an array of parameters and an array of labels of the
+  /// Given an array of parameters and an array of labels of the
   /// same length, update each parameter to have the corresponding label.
   static void relabelParams(MutableArrayRef<Param> params,
                             ArrayRef<Identifier> labels);
@@ -3015,12 +3015,12 @@
     return ExtInfo(Bits.AnyFunctionType.ExtInfo);
   }
 
-  /// \brief Get the representation of the function type.
+  /// Get the representation of the function type.
   Representation getRepresentation() const {
     return getExtInfo().getRepresentation();
   }
 
-  /// \brief True if the parameter declaration it is attached to is guaranteed
+  /// True if the parameter declaration it is attached to is guaranteed
   /// to not persist the closure for longer than the duration of the call.
   bool isNoEscape() const {
     return getExtInfo().isNoEscape();
@@ -3622,7 +3622,7 @@
   using Language = SILFunctionLanguage;
   using Representation = SILFunctionTypeRepresentation;
 
-  /// \brief A class which abstracts out some details necessary for
+  /// A class which abstracts out some details necessary for
   /// making a call.
   class ExtInfo {
     // If bits are added or removed, then TypeBase::SILFunctionTypeBits
@@ -4030,7 +4030,7 @@
 
   ExtInfo getExtInfo() const { return ExtInfo(Bits.SILFunctionType.ExtInfo); }
 
-  /// \brief Returns the language-level calling convention of the function.
+  /// Returns the language-level calling convention of the function.
   Language getLanguage() const {
     return getExtInfo().getLanguage();
   }
@@ -4039,7 +4039,7 @@
     return getExtInfo().hasSelfParam();
   }
 
-  /// \brief Get the representation of the function type.
+  /// Get the representation of the function type.
   Representation getRepresentation() const {
     return getExtInfo().getRepresentation();
   }
@@ -4175,7 +4175,7 @@
                       SILLayout *Layout,
                       SubstitutionMap Args);
   
-  /// \brief Produce a profile of this box, for use in a folding set.
+  /// Produce a profile of this box, for use in a folding set.
   void Profile(llvm::FoldingSetNodeID &id) {
     Profile(id, getLayout(), getSubstitutions());
   }
@@ -4345,7 +4345,7 @@
 /// by another type.
 class ProtocolType : public NominalType, public llvm::FoldingSetNode {
 public:
-  /// \brief Retrieve the type when we're referencing the given protocol.
+  /// Retrieve the type when we're referencing the given protocol.
   /// declaration.
   static ProtocolType *get(ProtocolDecl *D, Type Parent, const ASTContext &C);
 
@@ -4411,12 +4411,12 @@
   friend TrailingObjects;
   
 public:
-  /// \brief Retrieve an instance of a protocol composition type with the
+  /// Retrieve an instance of a protocol composition type with the
   /// given set of members.
   static Type get(const ASTContext &C, ArrayRef<Type> Members,
                   bool HasExplicitAnyObject);
   
-  /// \brief Retrieve the set of members composed to create this type.
+  /// Retrieve the set of members composed to create this type.
   ///
   /// For non-canonical types, this can contain classes, protocols and
   /// protocol compositions in any order. There can be at most one unique
@@ -4639,14 +4639,14 @@
   /// \param existential The existential type or existential metatype to open.
   static CanType getAnyOpened(Type existential);
 
-  /// \brief Retrieve the name of this archetype.
+  /// Retrieve the name of this archetype.
   Identifier getName() const;
 
-  /// \brief Retrieve the fully-dotted name that should be used to display this
+  /// Retrieve the fully-dotted name that should be used to display this
   /// archetype.
   std::string getFullName() const;
 
-  /// \brief Retrieve the parent of this archetype, or null if this is a
+  /// Retrieve the parent of this archetype, or null if this is a
   /// primary archetype.
   ArchetypeType *getParent() const { 
     return ParentOrOpenedOrEnvironment.dyn_cast<ArchetypeType *>();
@@ -4686,38 +4686,38 @@
   /// a superclass constraint.
   bool requiresClass() const;
 
-  /// \brief Retrieve the superclass of this type, if such a requirement exists.
+  /// Retrieve the superclass of this type, if such a requirement exists.
   Type getSuperclass() const {
     if (!Bits.ArchetypeType.HasSuperclass) return Type();
 
     return *getTrailingObjects<Type>();
   }
 
-  /// \brief Retrieve the layout constraint of this type, if such a requirement exists.
+  /// Retrieve the layout constraint of this type, if such a requirement exists.
   LayoutConstraint getLayoutConstraint() const {
     if (!Bits.ArchetypeType.HasLayoutConstraint) return LayoutConstraint();
 
     return *getTrailingObjects<LayoutConstraint>();
   }
 
-  /// \brief Return true if the archetype has any requirements at all.
+  /// Return true if the archetype has any requirements at all.
   bool hasRequirements() const {
     return !getConformsTo().empty() || getSuperclass();
   }
 
-  /// \brief Retrieve the nested type with the given name.
+  /// Retrieve the nested type with the given name.
   Type getNestedType(Identifier Name) const;
 
-  /// \brief Retrieve the nested type with the given name, if it's already
+  /// Retrieve the nested type with the given name, if it's already
   /// known.
   ///
   /// This is an implementation detail used by the generic signature builder.
   Optional<Type> getNestedTypeIfKnown(Identifier Name) const;
 
-  /// \brief Check if the archetype contains a nested type with the given name.
+  /// Check if the archetype contains a nested type with the given name.
   bool hasNestedType(Identifier Name) const;
 
-  /// \brief Retrieve the known nested types of this archetype.
+  /// Retrieve the known nested types of this archetype.
   ///
   /// Useful only for debugging dumps; all other queries should attempt to
   /// find a particular nested type by name, directly, or look at the
@@ -4727,7 +4727,7 @@
     return getAllNestedTypes(/*resolveTypes=*/false);
   }
 
-  /// \brief Retrieve the nested types of this archetype.
+  /// Retrieve the nested types of this archetype.
   ///
   /// \param resolveTypes Whether to eagerly resolve the nested types
   /// (defaults to \c true). Otherwise, the nested types might be
@@ -4738,7 +4738,7 @@
   ArrayRef<std::pair<Identifier, Type>>
   getAllNestedTypes(bool resolveTypes = true) const;
 
-  /// \brief Set the nested types to a copy of the given array of
+  /// Set the nested types to a copy of the given array of
   /// archetypes.
   void setNestedTypes(ASTContext &Ctx,
                       ArrayRef<std::pair<Identifier, Type>> Nested);
@@ -4929,7 +4929,7 @@
 END_CAN_TYPE_WRAPPER(DependentMemberType, Type)
 
 
-/// \brief The storage type of a variable with non-strong reference
+/// The storage type of a variable with non-strong reference
 /// ownership semantics.
 ///
 /// The referent type always satisfies allowsOwnership().
@@ -5010,7 +5010,7 @@
 #include "swift/AST/ReferenceStorage.def"
 #undef REF_STORAGE_HELPER
 
-/// \brief A type variable used during type checking.
+/// A type variable used during type checking.
 class TypeVariableType : public TypeBase {
   // Note: We can't use llvm::TrailingObjects here because the trailing object
   // type is opaque.
@@ -5025,13 +5025,13 @@
   
 public:
  
-  /// \brief Create a new type variable whose implementation is constructed
+  /// Create a new type variable whose implementation is constructed
   /// with the given arguments.
   template<typename ...Args>
   static TypeVariableType *getNew(const ASTContext &C, unsigned ID,
                                   Args &&...args);
   
-  /// \brief Retrieve the implementation data corresponding to this type
+  /// Retrieve the implementation data corresponding to this type
   /// variable.
   ///
   /// The contents of the implementation data for this type are hidden in the
@@ -5040,7 +5040,7 @@
     return *reinterpret_cast<Implementation *>(this + 1);
   }
 
-  /// \brief Retrieve the implementation data corresponding to this type
+  /// Retrieve the implementation data corresponding to this type
   /// variable.
   ///
   /// The contents of the implementation data for this type are hidden in the
@@ -5049,7 +5049,7 @@
     return *reinterpret_cast<const Implementation *>(this + 1);
   }
 
-  /// \brief Access the implementation object for this type variable.
+  /// Access the implementation object for this type variable.
   Implementation *operator->() {
     return reinterpret_cast<Implementation *>(this + 1);
   }
@@ -5347,7 +5347,7 @@
   }
 }
   
-/// \brief If this is a method in a type or extension thereof, compute
+/// If this is a method in a type or extension thereof, compute
 /// and return a parameter to be used for the 'self' argument.  The type of
 /// the parameter is the empty Type() if no 'self' argument should exist. This
 /// can only be used after name binding has resolved types.
diff --git a/include/swift/ASTSectionImporter/ASTSectionImporter.h b/include/swift/ASTSectionImporter/ASTSectionImporter.h
index a6d610d..7f42c14 100644
--- a/include/swift/ASTSectionImporter/ASTSectionImporter.h
+++ b/include/swift/ASTSectionImporter/ASTSectionImporter.h
@@ -23,7 +23,7 @@
 namespace swift {
   class SerializedModuleLoader;
 
-  /// \brief Provided a memory buffer with an entire Mach-O __apple_ast
+  /// Provided a memory buffer with an entire Mach-O __apple_ast
   /// section, this function makes memory buffer copies of all swift
   /// modules found in it and registers them using
   /// registerMemoryBuffer() so they can be found by loadModule(). The
diff --git a/include/swift/Basic/BlotMapVector.h b/include/swift/Basic/BlotMapVector.h
index bd72214..9d3d11d 100644
--- a/include/swift/Basic/BlotMapVector.h
+++ b/include/swift/Basic/BlotMapVector.h
@@ -25,7 +25,7 @@
   return Pair.first == KeyT();
 }
 
-/// \brief An associative container with fast insertion-order (deterministic)
+/// An associative container with fast insertion-order (deterministic)
 /// iteration over its elements. Plus the special blot operation.
 template <typename KeyT, typename ValueT,
           typename MapT = llvm::DenseMap<KeyT, size_t>,
diff --git a/include/swift/Basic/BlotSetVector.h b/include/swift/Basic/BlotSetVector.h
index fa565f5..0efca56 100644
--- a/include/swift/Basic/BlotSetVector.h
+++ b/include/swift/Basic/BlotSetVector.h
@@ -51,7 +51,7 @@
   MapT Map;
 
 public:
-  /// \brief Construct an empty BlotSetVector.
+  /// Construct an empty BlotSetVector.
   BlotSetVector() {}
 
   bool empty() const { return Vector.empty(); }
diff --git a/include/swift/Basic/ByteTreeSerialization.h b/include/swift/Basic/ByteTreeSerialization.h
index 36a3f86..357075f 100644
--- a/include/swift/Basic/ByteTreeSerialization.h
+++ b/include/swift/Basic/ByteTreeSerialization.h
@@ -11,7 +11,7 @@
 //===----------------------------------------------------------------------===//
 //
 /// \file
-/// \brief Provides an interface for serializing an object tree to a custom
+/// Provides an interface for serializing an object tree to a custom
 /// binary format called ByteTree.
 ///
 //===----------------------------------------------------------------------===//
diff --git a/include/swift/Basic/ExponentialGrowthAppendingBinaryByteStream.h b/include/swift/Basic/ExponentialGrowthAppendingBinaryByteStream.h
index 87b20ca..64cfeb5 100644
--- a/include/swift/Basic/ExponentialGrowthAppendingBinaryByteStream.h
+++ b/include/swift/Basic/ExponentialGrowthAppendingBinaryByteStream.h
@@ -26,7 +26,7 @@
 
 namespace swift {
 
-/// \brief An implementation of WritableBinaryStream which can write at its end
+/// An implementation of WritableBinaryStream which can write at its end
 /// causing the underlying data to grow.  This class owns the underlying data.
 class ExponentialGrowthAppendingBinaryByteStream
     : public llvm::WritableBinaryStream {
diff --git a/include/swift/Basic/JSONSerialization.h b/include/swift/Basic/JSONSerialization.h
index 4f5a365..9f95825 100644
--- a/include/swift/Basic/JSONSerialization.h
+++ b/include/swift/Basic/JSONSerialization.h
@@ -11,7 +11,7 @@
 //===----------------------------------------------------------------------===//
 //
 /// \file
-/// \brief Provides an interface for serializing to JSON.
+/// Provides an interface for serializing to JSON.
 /// \note This does not include support for deserializing JSON; since JSON is
 /// a subset of YAML, use LLVM's YAML parsing support instead.
 ///
diff --git a/include/swift/Basic/LangOptions.h b/include/swift/Basic/LangOptions.h
index ab8c18a..da71b7e 100644
--- a/include/swift/Basic/LangOptions.h
+++ b/include/swift/Basic/LangOptions.h
@@ -65,12 +65,12 @@
     Complete,
   };
 
-  /// \brief A collection of options that affect the language dialect and
+  /// A collection of options that affect the language dialect and
   /// provide compiler debugging facilities.
   class LangOptions {
   public:
 
-    /// \brief The target we are building for.
+    /// The target we are building for.
     ///
     /// This represents the minimum deployment target.
     llvm::Triple Target;
@@ -79,13 +79,13 @@
     /// Language features
     ///
 
-    /// \brief User-overridable language version to compile for.
+    /// User-overridable language version to compile for.
     version::Version EffectiveLanguageVersion = version::Version::getCurrentLanguageVersion();
 
-    /// \brief Disable API availability checking.
+    /// Disable API availability checking.
     bool DisableAvailabilityChecking = false;
 
-    /// \brief Maximum number of typo corrections we are allowed to perform.
+    /// Maximum number of typo corrections we are allowed to perform.
     unsigned TypoCorrectionLimit = 10;
     
     /// Should access control be respected?
@@ -98,20 +98,23 @@
     /// Support for alternate usage modes
     ///
 
-    /// \brief Enable features useful for running in the debugger.
+    /// Enable features useful for running in the debugger.
     bool DebuggerSupport = false;
 
+    /// Enable the DWARFImporter. Only used by lldb-moduleimport-test.
+    bool EnableDWARFImporter = false;
+    
     /// Allows using identifiers with a leading dollar.
     bool EnableDollarIdentifiers = false;
 
-    /// \brief Allow throwing call expressions without annotation with 'try'.
+    /// Allow throwing call expressions without annotation with 'try'.
     bool EnableThrowWithoutTry = false;
 
-    /// \brief Enable features useful for running playgrounds.
+    /// Enable features useful for running playgrounds.
     // FIXME: This should probably be limited to the particular SourceFile.
     bool Playground = false;
 
-    /// \brief Keep comments during lexing and attach them to declarations.
+    /// Keep comments during lexing and attach them to declarations.
     bool AttachCommentsToDecls = false;
 
     /// Whether to include initializers when code-completing a postfix
@@ -148,17 +151,17 @@
     /// Flags for developers
     ///
 
-    /// \brief Whether we are debugging the constraint solver.
+    /// Whether we are debugging the constraint solver.
     ///
     /// This option enables verbose debugging output from the constraint
     /// solver.
     bool DebugConstraintSolver = false;
 
-    /// \brief Specific solution attempt for which the constraint
+    /// Specific solution attempt for which the constraint
     /// solver should be debugged.
     unsigned DebugConstraintSolverAttempt = 0;
 
-    /// \brief Enable named lazy member loading.
+    /// Enable named lazy member loading.
     bool NamedLazyMemberLoading = true;
 
     /// Debug the generic signatures computed by the generic signature builder.
@@ -169,21 +172,21 @@
     /// This is for testing purposes.
     std::string DebugForbidTypecheckPrefix;
 
-    /// \brief How to diagnose cycles encountered
+    /// How to diagnose cycles encountered
     CycleDiagnosticKind EvaluatorCycleDiagnostics =
         CycleDiagnosticKind::NoDiagnose;
 
-    /// \brief The path to which we should emit GraphViz output for the complete
+    /// The path to which we should emit GraphViz output for the complete
     /// request-evaluator graph.
     std::string RequestEvaluatorGraphVizPath;
 
-    /// \brief The upper bound, in bytes, of temporary data that can be
+    /// The upper bound, in bytes, of temporary data that can be
     /// allocated by the constraint solver.
     unsigned SolverMemoryThreshold = 512 * 1024 * 1024;
 
     unsigned SolverBindingThreshold = 1024 * 1024;
 
-    /// \brief The upper bound to number of sub-expressions unsolved
+    /// The upper bound to number of sub-expressions unsolved
     /// before termination of the shrink phrase of the constraint solver.
     unsigned SolverShrinkUnsolvedThreshold = 10;
 
@@ -193,27 +196,27 @@
     /// Disable constraint system performance hacks.
     bool DisableConstraintSolverPerformanceHacks = false;
 
-    /// \brief Enable experimental operator designated types feature.
+    /// Enable experimental operator designated types feature.
     bool EnableOperatorDesignatedTypes = false;
 
-    /// \brief Enable constraint solver support for experimental
+    /// Enable constraint solver support for experimental
     ///        operator protocol designator feature.
     bool SolverEnableOperatorDesignatedTypes = false;
 
     /// The maximum depth to which to test decl circularity.
     unsigned MaxCircularityDepth = 500;
 
-    /// \brief Perform all dynamic allocations using malloc/free instead of
+    /// Perform all dynamic allocations using malloc/free instead of
     /// optimized custom allocator, so that memory debugging tools can be used.
     bool UseMalloc = false;
 
-    /// \brief Enable experimental #assert feature.
+    /// Enable experimental #assert feature.
     bool EnableExperimentalStaticAssert = false;
 
-    /// \brief Enable experimental property behavior feature.
+    /// Enable experimental property behavior feature.
     bool EnableExperimentalPropertyBehaviors = false;
 
-    /// \brief Staging flag for treating inout parameters as Thread Sanitizer
+    /// Staging flag for treating inout parameters as Thread Sanitizer
     /// accesses.
     bool DisableTsanInoutInstrumentation = false;
 
diff --git a/include/swift/Basic/OutputFileMap.h b/include/swift/Basic/OutputFileMap.h
index 59d4da4..a0fcb8f 100644
--- a/include/swift/Basic/OutputFileMap.h
+++ b/include/swift/Basic/OutputFileMap.h
@@ -85,7 +85,7 @@
   void write(llvm::raw_ostream &os, ArrayRef<StringRef> inputs) const;
 
 private:
-  /// \brief Parses the given \p Buffer and returns either an OutputFileMap or
+  /// Parses the given \p Buffer and returns either an OutputFileMap or
   /// error, taking ownership of \p Buffer in the process.
   static llvm::Expected<OutputFileMap>
   parse(std::unique_ptr<llvm::MemoryBuffer> Buffer, StringRef workingDirectory);
diff --git a/include/swift/Basic/Program.h b/include/swift/Basic/Program.h
index 9e2b18c..84d4bdf 100644
--- a/include/swift/Basic/Program.h
+++ b/include/swift/Basic/Program.h
@@ -15,7 +15,7 @@
 
 namespace swift {
 
-/// \brief This function executes the program using the arguments provided,
+/// This function executes the program using the arguments provided,
 /// preferring to reexecute the current process, if supported.
 ///
 /// \param Program Path of the program to be executed
diff --git a/include/swift/Basic/SourceLoc.h b/include/swift/Basic/SourceLoc.h
index b073525..eaae86c 100644
--- a/include/swift/Basic/SourceLoc.h
+++ b/include/swift/Basic/SourceLoc.h
@@ -129,13 +129,13 @@
   unsigned ByteLength;
 
 public:
-  /// \brief Constructs an invalid range.
+  /// Constructs an invalid range.
   CharSourceRange() = default;
 
   CharSourceRange(SourceLoc Start, unsigned ByteLength)
     : Start(Start), ByteLength(ByteLength) {}
 
-  /// \brief Constructs a character range which starts and ends at the
+  /// Constructs a character range which starts and ends at the
   /// specified character locations.
   CharSourceRange(const SourceManager &SM, SourceLoc Start, SourceLoc End);
 
@@ -169,7 +169,7 @@
      less_equal(Other.getEnd().Value.getPointer(), getEnd().Value.getPointer());
   }
 
-  /// \brief expands *this to cover Other
+  /// expands *this to cover Other
   void widen(CharSourceRange Other) {
     auto Diff = Other.getEnd().Value.getPointer() - getEnd().Value.getPointer();
     if (Diff > 0) {
@@ -192,7 +192,7 @@
     return StringRef(Start.Value.getPointer(), ByteLength);
   }
 
-  /// \brief Return the length of this valid range in bytes.  Can be zero.
+  /// Return the length of this valid range in bytes.  Can be zero.
   unsigned getByteLength() const {
     assert(isValid() && "length does not make sense for an invalid range");
     return ByteLength;
diff --git a/include/swift/Basic/SourceManager.h b/include/swift/Basic/SourceManager.h
index f952efd..abb244c 100644
--- a/include/swift/Basic/SourceManager.h
+++ b/include/swift/Basic/SourceManager.h
@@ -23,7 +23,7 @@
 
 namespace swift {
 
-/// \brief This class manages and owns source buffers.
+/// This class manages and owns source buffers.
 class SourceManager {
   llvm::SourceMgr LLVMSourceMgr;
   llvm::IntrusiveRefCntPtr<clang::vfs::FileSystem> FileSystem;
@@ -150,7 +150,7 @@
   /// in that case.
   StringRef getIdentifierForBuffer(unsigned BufferID) const;
 
-  /// \brief Returns a SourceRange covering the entire specified buffer.
+  /// Returns a SourceRange covering the entire specified buffer.
   ///
   /// Note that the start location might not point at the first token: it
   /// might point at whitespace or a comment.
@@ -165,10 +165,10 @@
     return getRangeForBuffer(BufferID).getStart();
   }
 
-  /// \brief Returns the offset in bytes for the given valid source location.
+  /// Returns the offset in bytes for the given valid source location.
   unsigned getLocOffsetInBuffer(SourceLoc Loc, unsigned BufferID) const;
 
-  /// \brief Returns the distance in bytes between the given valid source
+  /// Returns the distance in bytes between the given valid source
   /// locations.
   unsigned getByteDistance(SourceLoc Start, SourceLoc End) const;
 
diff --git a/include/swift/Basic/TaskQueue.h b/include/swift/Basic/TaskQueue.h
index 7336b0b..9c5fa5c 100644
--- a/include/swift/Basic/TaskQueue.h
+++ b/include/swift/Basic/TaskQueue.h
@@ -35,7 +35,7 @@
 
 using ProcessId = llvm::sys::procid_t;
 
-/// \brief Indicates how a TaskQueue should respond to the task finished event.
+/// Indicates how a TaskQueue should respond to the task finished event.
 enum class TaskFinishedResponse {
   /// Indicates that execution should continue.
   ContinueExecution,
@@ -100,7 +100,7 @@
   virtual void provideMapping(json::Output &out);
 };
 
-/// \brief A class encapsulating the execution of multiple tasks in parallel.
+/// A class encapsulating the execution of multiple tasks in parallel.
 class TaskQueue {
   /// Tasks which have not begun execution.
   std::queue<std::unique_ptr<Task>> QueuedTasks;
@@ -112,7 +112,7 @@
   UnifiedStatsReporter *Stats;
 
 public:
-  /// \brief Create a new TaskQueue instance.
+  /// Create a new TaskQueue instance.
   ///
   /// \param NumberOfParallelTasks indicates the number of tasks which should
   /// be run in parallel. If 0, the TaskQueue will choose the most appropriate
@@ -126,13 +126,13 @@
   // std::function (<rdar://problem/15665132>).
 #pragma clang diagnostic push
 #pragma clang diagnostic ignored "-Wdocumentation"
-  /// \brief A callback which will be executed when each task begins execution
+  /// A callback which will be executed when each task begins execution
   ///
   /// \param Pid the ProcessId of the task which just began execution.
   /// \param Context the context which was passed when the task was added
   using TaskBeganCallback = std::function<void(ProcessId Pid, void *Context)>;
 
-  /// \brief A callback which will be executed after each task finishes
+  /// A callback which will be executed after each task finishes
   /// execution.
   ///
   /// \param Pid the ProcessId of the task which finished execution.
@@ -152,7 +152,7 @@
       ProcessId Pid, int ReturnCode, StringRef Output, StringRef Errors,
       TaskProcessInformation ProcInfo, void *Context)>;
 
-  /// \brief A callback which will be executed if a task exited abnormally due
+  /// A callback which will be executed if a task exited abnormally due
   /// to a signal.
   ///
   /// \param Pid the ProcessId of the task which exited abnormally.
@@ -177,7 +177,7 @@
       void *Context, Optional<int> Signal, TaskProcessInformation ProcInfo)>;
 #pragma clang diagnostic pop
 
-  /// \brief Indicates whether TaskQueue supports buffering output on the
+  /// Indicates whether TaskQueue supports buffering output on the
   /// current system.
   ///
   /// \note If this returns false, the TaskFinishedCallback passed
@@ -185,7 +185,7 @@
   /// if the task actually generated output.
   static bool supportsBufferingOutput();
 
-  /// \brief Indicates whether TaskQueue supports parallel execution on the
+  /// Indicates whether TaskQueue supports parallel execution on the
   /// current system.
   static bool supportsParallelExecution();
 
@@ -193,7 +193,7 @@
   /// parallel
   unsigned getNumberOfParallelTasks() const;
 
-  /// \brief Adds a task to the TaskQueue.
+  /// Adds a task to the TaskQueue.
   ///
   /// \param ExecPath the path to the executable which the task should execute
   /// \param Args the arguments which should be passed to the task
@@ -205,7 +205,7 @@
                        ArrayRef<const char *> Env = llvm::None,
                        void *Context = nullptr, bool SeparateErrors = false);
 
-  /// \brief Synchronously executes the tasks in the TaskQueue.
+  /// Synchronously executes the tasks in the TaskQueue.
   ///
   /// \param Began a callback which will be called when a task begins
   /// \param Finished a callback which will be called when a task finishes
@@ -225,7 +225,7 @@
   }
 };
 
-/// \brief A class which simulates execution of tasks with behavior similar to
+/// A class which simulates execution of tasks with behavior similar to
 /// TaskQueue.
 class DummyTaskQueue : public TaskQueue {
   class DummyTask {
@@ -246,7 +246,7 @@
   std::queue<std::unique_ptr<DummyTask>> QueuedTasks;
 
 public:
-  /// \brief Create a new DummyTaskQueue instance.
+  /// Create a new DummyTaskQueue instance.
   DummyTaskQueue(unsigned NumberOfParallelTasks = 0);
   virtual ~DummyTaskQueue();
 
diff --git a/include/swift/Basic/TreeScopedHashTable.h b/include/swift/Basic/TreeScopedHashTable.h
index fdd3ff9..2b3040e 100644
--- a/include/swift/Basic/TreeScopedHashTable.h
+++ b/include/swift/Basic/TreeScopedHashTable.h
@@ -72,7 +72,7 @@
   }
 };
 
-/// \brief A reference-counted scope that actually owns the data in the
+/// A reference-counted scope that actually owns the data in the
 /// hashtable.
 template <typename K, typename V, typename AllocatorTy = llvm::MallocAllocator>
 class TreeScopedHashTableScopeImpl {
@@ -130,7 +130,7 @@
   ~TreeScopedHashTableScopeImpl();
 };
 
-/// \brief A scope that was detached from the stack to heap.
+/// A scope that was detached from the stack to heap.
 template <typename K, typename V, typename AllocatorTy = llvm::MallocAllocator>
 class TreeScopedHashTableDetachedScope {
   friend class TreeScopedHashTableScope<K, V, AllocatorTy>;
@@ -166,7 +166,7 @@
   }
 };
 
-/// \brief A normal hashtable scope.  Objects of this class should be created only
+/// A normal hashtable scope.  Objects of this class should be created only
 /// on stack.  A normal scope is faster to create than a detached scope because
 /// it does not do heap allocation for the reference counted
 /// \c TreeScopedHashTableScopeImpl.
@@ -213,7 +213,7 @@
       DetachedImpl->release();
   }
 
-  /// \brief Detach this scope to the heap.
+  /// Detach this scope to the heap.
   TreeScopedHashTableDetachedScope<K, V, AllocatorTy> detach() {
     if (DetachedImpl)
       return TreeScopedHashTableDetachedScope<K, V, AllocatorTy>(DetachedImpl);
@@ -266,7 +266,7 @@
   }
 };
 
-/// \brief A scoped hashtable that can have multiple active scopes.
+/// A scoped hashtable that can have multiple active scopes.
 ///
 /// There are two kinds of scopes:
 ///
diff --git a/include/swift/Basic/Varint.h b/include/swift/Basic/Varint.h
index 85586c1..47b9f7f 100644
--- a/include/swift/Basic/Varint.h
+++ b/include/swift/Basic/Varint.h
@@ -11,7 +11,7 @@
 //===----------------------------------------------------------------------===//
 ///
 /// \file Varint.h
-/// \brief Defines transformations of integral types to/from variable length
+/// Defines transformations of integral types to/from variable length
 ///        7-bit encoding.
 //===----------------------------------------------------------------------===//
 
diff --git a/include/swift/Basic/Version.h b/include/swift/Basic/Version.h
index 944da60..b93ea6c 100644
--- a/include/swift/Basic/Version.h
+++ b/include/swift/Basic/Version.h
@@ -11,7 +11,7 @@
 //===----------------------------------------------------------------------===//
 ///
 /// \file
-/// \brief Defines version macros and version-related utility functions
+/// Defines version macros and version-related utility functions
 /// for Swift.
 ///
 //===----------------------------------------------------------------------===//
diff --git a/include/swift/ClangImporter/ClangImporter.h b/include/swift/ClangImporter/ClangImporter.h
index aa5ed16..9a939b6 100644
--- a/include/swift/ClangImporter/ClangImporter.h
+++ b/include/swift/ClangImporter/ClangImporter.h
@@ -71,7 +71,7 @@
   ObjCProtocol,
 };
 
-/// \brief Class that imports Clang modules into Swift, mapping directly
+/// Class that imports Clang modules into Swift, mapping directly
 /// from Clang ASTs over to Swift ASTs.
 class ClangImporter final : public ClangModuleLoader {
   friend class ClangModuleUnit;
@@ -86,7 +86,7 @@
                 DependencyTracker *tracker);
 
 public:
-  /// \brief Create a new Clang importer that can import a suitable Clang
+  /// Create a new Clang importer that can import a suitable Clang
   /// module into the given ASTContext.
   ///
   /// \param ctx The ASTContext into which the module will be imported.
@@ -114,19 +114,19 @@
 
   ~ClangImporter();
 
-  /// \brief Create a new clang::DependencyCollector customized to
+  /// Create a new clang::DependencyCollector customized to
   /// ClangImporter's specific uses.
   static std::shared_ptr<clang::DependencyCollector>
   createDependencyCollector(bool TrackSystemDeps);
 
-  /// \brief Check whether the module with a given name can be imported without
+  /// Check whether the module with a given name can be imported without
   /// importing it.
   ///
   /// Note that even if this check succeeds, errors may still occur if the
   /// module is loaded in full.
   virtual bool canImportModule(std::pair<Identifier, SourceLoc> named) override;
 
-  /// \brief Import a module with the given module path.
+  /// Import a module with the given module path.
   ///
   /// Clang modules will be imported using the Objective-C ARC dialect,
   /// with all warnings disabled.
@@ -152,7 +152,7 @@
                                       const DeclContext *overlayDC,
                                       const DeclContext *importedDC) override;
 
-  /// \brief Look for declarations associated with the given name.
+  /// Look for declarations associated with the given name.
   ///
   /// \param name The name we're searching for.
   void lookupValue(DeclName name, VisibleDeclConsumer &consumer);
@@ -204,7 +204,7 @@
                              llvm::function_ref<bool(ClangNode)> filter,
                              llvm::function_ref<void(Decl*)> receiver) const;
 
-  /// \brief Load extensions to the given nominal type.
+  /// Load extensions to the given nominal type.
   ///
   /// \param nominal The nominal type whose extensions should be loaded.
   ///
diff --git a/include/swift/ClangImporter/ClangModule.h b/include/swift/ClangImporter/ClangModule.h
index 003ec24..b77c232 100644
--- a/include/swift/ClangImporter/ClangModule.h
+++ b/include/swift/ClangImporter/ClangModule.h
@@ -29,7 +29,7 @@
 class ASTContext;
 class ModuleLoader;
 
-/// \brief Represents a Clang module that has been imported into Swift.
+/// Represents a Clang module that has been imported into Swift.
 class ClangModuleUnit final : public LoadedFile {
   ClangImporter::Implementation &owner;
   const clang::Module *clangModule;
@@ -45,7 +45,7 @@
   ClangModuleUnit(ModuleDecl &M, ClangImporter::Implementation &owner,
                   const clang::Module *clangModule);
 
-  /// \brief Retrieve the underlying Clang module.
+  /// Retrieve the underlying Clang module.
   ///
   /// This will be null if the module unit represents the imported headers.
   const clang::Module *getClangModule() const { return clangModule; }
diff --git a/include/swift/DWARFImporter/DWARFImporter.h b/include/swift/DWARFImporter/DWARFImporter.h
new file mode 100644
index 0000000..2329e7d
--- /dev/null
+++ b/include/swift/DWARFImporter/DWARFImporter.h
@@ -0,0 +1,101 @@
+//===--- DWARFImporter.h - Import Clang Modules -----------------*- C++ -*-===//
+//
+// This source file is part of the Swift.org open source project
+//
+// Copyright (c) 2014 - 2018 Apple Inc. and the Swift project authors
+// Licensed under Apache License v2.0 with Runtime Library Exception
+//
+// See https://swift.org/LICENSE.txt for license information
+// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors
+//
+//===----------------------------------------------------------------------===//
+//
+// \file This file implements support for loading Clang modules that were
+//       reconstructed from DWARF into Swift.
+//
+//===----------------------------------------------------------------------===//
+#ifndef SWIFT_DWARF_IMPORTER_H
+#define SWIFT_DWARF_IMPORTER_H
+
+#include "swift/AST/ClangModuleLoader.h"
+
+namespace llvm {
+}
+
+namespace clang {
+}
+
+namespace swift {
+
+/// Class that imports Clang modules into Swift, mapping directly
+/// from Clang ASTs over to Swift ASTs.
+class DWARFImporter final : public ClangModuleLoader {
+  friend class ClangModuleUnit;
+
+public:
+  class Implementation;
+
+private:
+  Implementation &Impl;
+
+  DWARFImporter(ASTContext &ctx, const ClangImporterOptions &clangImporterOpts,
+                DependencyTracker *tracker);
+
+public:
+  /// Create a new DWARF importer that can import a Clang Modules from DWARF
+  /// into the given ASTContext.
+  ///
+  /// \param ctx The ASTContext into which the module will be imported.
+  /// The ASTContext's SearchPathOptions will be used for the DWARF importer.
+  ///
+  /// \param importerOpts The options to use for the DWARF importer.
+  ///
+  /// \param tracker The object tracking files this compilation depends on.
+  ///
+  /// \returns a new DWARF module importer, or null (with a diagnostic) if
+  /// an error occurred.
+  static std::unique_ptr<DWARFImporter>
+  create(ASTContext &ctx,
+         const ClangImporterOptions &importerOpts,
+         DependencyTracker *tracker = nullptr);
+
+  DWARFImporter(const DWARFImporter &) = delete;
+  DWARFImporter(DWARFImporter &&) = delete;
+  DWARFImporter &operator=(const DWARFImporter &) = delete;
+  DWARFImporter &operator=(DWARFImporter &&) = delete;
+
+  ~DWARFImporter();
+
+  /// Check whether the module with a given name can be imported without
+  /// importing it.
+  ///
+  /// Note that even if this check succeeds, errors may still occur if the
+  /// module is loaded in full.
+  bool canImportModule(std::pair<Identifier, SourceLoc> named) override;
+  bool addSearchPath(StringRef newSearchPath, bool isFramework,
+                     bool isSystem) override;
+  ModuleDecl *
+  loadModule(SourceLoc importLoc,
+             ArrayRef<std::pair<Identifier, SourceLoc>> path) override;
+  bool
+  isInOverlayModuleForImportedModule(const DeclContext *overlayDC,
+                                     const DeclContext *importedDC) override;
+  void loadExtensions(NominalTypeDecl *nominal,
+                      unsigned previousGeneration) override;
+  void loadObjCMethods(
+      ClassDecl *classDecl, ObjCSelector selector, bool isInstanceMethod,
+      unsigned previousGeneration,
+      llvm::TinyPtrVector<AbstractFunctionDecl *> &methods) override;
+  ModuleDecl *getImportedHeaderModule() const override;
+  void verifyAllModules() override;
+  clang::ASTContext &getClangASTContext() const override;
+  clang::Preprocessor &getClangPreprocessor() const override;
+  clang::Sema &getClangSema() const override;
+  const clang::CompilerInstance &getClangInstance() const override;
+
+  void printStatistics() const override;
+};
+
+} // end namespace swift
+
+#endif
diff --git a/include/swift/Demangling/Demangle.h b/include/swift/Demangling/Demangle.h
index 7621fae..0f84fb2 100644
--- a/include/swift/Demangling/Demangle.h
+++ b/include/swift/Demangling/Demangle.h
@@ -465,12 +465,12 @@
   Infix,
 };
 
-/// \brief Mangle an identifier using Swift's mangling rules.
+/// Mangle an identifier using Swift's mangling rules.
 void mangleIdentifier(const char *data, size_t length,
                       OperatorKind operatorKind, std::string &out,
                       bool usePunycode = true);
 
-/// \brief Remangle a demangled parse tree.
+/// Remangle a demangled parse tree.
 ///
 /// This should always round-trip perfectly with demangleSymbolAsNode.
 std::string mangleNode(const NodePointer &root);
@@ -479,7 +479,7 @@
   llvm::function_ref<Demangle::NodePointer (SymbolicReferenceKind,
                                             const void *)>;
 
-/// \brief Remangle a demangled parse tree, using a callback to resolve
+/// Remangle a demangled parse tree, using a callback to resolve
 /// symbolic references.
 ///
 /// This should always round-trip perfectly with demangleSymbolAsNode.
@@ -491,7 +491,7 @@
 /// we switch to the new mangling for those names as well.
 std::string mangleNodeOld(const NodePointer &root);
 
-/// \brief Transform the node structure to a string.
+/// Transform the node structure to a string.
 ///
 /// Typical usage:
 /// \code
diff --git a/include/swift/Driver/Compilation.h b/include/swift/Driver/Compilation.h
index 3e3a813..ecd4b9d 100644
--- a/include/swift/Driver/Compilation.h
+++ b/include/swift/Driver/Compilation.h
@@ -389,7 +389,7 @@
   }
 
 private:
-  /// \brief Perform all jobs.
+  /// Perform all jobs.
   ///
   /// \param[out] abnormalExit Set to true if any job exits abnormally (i.e.
   /// crashes).
@@ -399,7 +399,7 @@
   /// crashes during execution, a negative value will be returned.
   int performJobsImpl(bool &abnormalExit, std::unique_ptr<sys::TaskQueue> &&TQ);
 
-  /// \brief Performs a single Job by executing in place, if possible.
+  /// Performs a single Job by executing in place, if possible.
   ///
   /// \param Cmd the Job which should be performed.
   ///
diff --git a/include/swift/Driver/Driver.h b/include/swift/Driver/Driver.h
index 0547850..39c7cab 100644
--- a/include/swift/Driver/Driver.h
+++ b/include/swift/Driver/Driver.h
@@ -55,7 +55,7 @@
   class JobAction;
   class ToolChain;
 
-/// \brief A class encapsulating information about the outputs the driver
+/// A class encapsulating information about the outputs the driver
 /// is expected to generate.
 class OutputInfo {
 public:
diff --git a/include/swift/Driver/ParseableOutput.h b/include/swift/Driver/ParseableOutput.h
index 34467f0..fe36d74 100644
--- a/include/swift/Driver/ParseableOutput.h
+++ b/include/swift/Driver/ParseableOutput.h
@@ -11,7 +11,7 @@
 //===----------------------------------------------------------------------===//
 ///
 /// \file
-/// \brief Helpers for emitting the driver's parseable output.
+/// Helpers for emitting the driver's parseable output.
 ///
 //===----------------------------------------------------------------------===//
 
@@ -28,22 +28,22 @@
 
 namespace parseable_output {
 
-/// \brief Emits a "began" message to the given stream.
+/// Emits a "began" message to the given stream.
 void emitBeganMessage(raw_ostream &os, const Job &Cmd, int64_t Pid,
                       sys::TaskProcessInformation ProcInfo);
 
-/// \brief Emits a "finished" message to the given stream.
+/// Emits a "finished" message to the given stream.
 void emitFinishedMessage(raw_ostream &os, const Job &Cmd, int64_t Pid,
                          int ExitStatus, StringRef Output,
                          sys::TaskProcessInformation ProcInfo);
 
-/// \brief Emits a "signalled" message to the given stream.
+/// Emits a "signalled" message to the given stream.
 void emitSignalledMessage(raw_ostream &os, const Job &Cmd, int64_t Pid,
                           StringRef ErrorMsg, StringRef Output,
                           Optional<int> Signal,
                           sys::TaskProcessInformation ProcInfo);
 
-/// \brief Emits a "skipped" message to the given stream.
+/// Emits a "skipped" message to the given stream.
 void emitSkippedMessage(raw_ostream &os, const Job &Cmd);
 
 } // end namespace parseable_output
diff --git a/include/swift/Frontend/Frontend.h b/include/swift/Frontend/Frontend.h
index 8fd4d4d..ccabc6f 100644
--- a/include/swift/Frontend/Frontend.h
+++ b/include/swift/Frontend/Frontend.h
@@ -80,7 +80,7 @@
 
   llvm::MemoryBuffer *CodeCompletionBuffer = nullptr;
 
-  /// \brief Code completion offset in bytes from the beginning of the main
+  /// Code completion offset in bytes from the beginning of the main
   /// source file.  Valid only if \c isCodeCompletion() == true.
   unsigned CodeCompletionOffset = ~0U;
 
@@ -512,7 +512,7 @@
     }
   }
 
-  /// \brief Returns true if there was an error during setup.
+  /// Returns true if there was an error during setup.
   bool setup(const CompilerInvocation &Invocation);
 
 private:
diff --git a/include/swift/Frontend/FrontendOptions.h b/include/swift/Frontend/FrontendOptions.h
index da019ad..3c9a0d4 100644
--- a/include/swift/Frontend/FrontendOptions.h
+++ b/include/swift/Frontend/FrontendOptions.h
@@ -59,7 +59,7 @@
   /// Arguments which should be passed in immediate mode.
   std::vector<std::string> ImmediateArgv;
 
-  /// \brief A list of arguments to forward to LLVM's option processing; this
+  /// A list of arguments to forward to LLVM's option processing; this
   /// should only be used for debugging and experimental features.
   std::vector<std::string> LLVMArgs;
 
diff --git a/include/swift/Frontend/PrintingDiagnosticConsumer.h b/include/swift/Frontend/PrintingDiagnosticConsumer.h
index 8415ede..d13ea2f 100644
--- a/include/swift/Frontend/PrintingDiagnosticConsumer.h
+++ b/include/swift/Frontend/PrintingDiagnosticConsumer.h
@@ -25,7 +25,7 @@
 
 namespace swift {
 
-/// \brief Diagnostic consumer that displays diagnostics to standard error.
+/// Diagnostic consumer that displays diagnostics to standard error.
 class PrintingDiagnosticConsumer : public DiagnosticConsumer {
   llvm::raw_ostream &Stream;
   bool ForceColors = false;
diff --git a/include/swift/IDE/CodeCompletion.h b/include/swift/IDE/CodeCompletion.h
index 293e2d4..b9b8e7c 100644
--- a/include/swift/IDE/CodeCompletion.h
+++ b/include/swift/IDE/CodeCompletion.h
@@ -37,7 +37,7 @@
 class CodeCompletionResultBuilder;
 struct RequestedCachedModule;
 
-/// \brief A routine to remove code completion tokens from code completion
+/// A routine to remove code completion tokens from code completion
 /// tests.
 ///
 /// \code
@@ -211,7 +211,7 @@
   unsigned Kind : 8;
   unsigned NestingLevel : 8;
 
-  /// \brief If true, then this chunk is an annotation that is included only
+  /// If true, then this chunk is an annotation that is included only
   /// for exposition and may not be inserted in the editor buffer.
   unsigned IsAnnotation : 1;
 
@@ -278,7 +278,7 @@
 
 } // end namespace detail
 
-/// \brief A structured representation of a code completion string.
+/// A structured representation of a code completion string.
 class alignas(detail::CodeCompletionStringChunk) CodeCompletionString final :
     private llvm::TrailingObjects<CodeCompletionString,
                                   detail::CodeCompletionStringChunk> {
@@ -317,7 +317,7 @@
   void dump() const;
 };
 
-/// \brief Describes the origin of the code completion result.
+/// Describes the origin of the code completion result.
 ///
 /// This enum is ordered from the contexts that are "nearest" to the code
 /// completion point to "outside" contexts.
@@ -325,7 +325,7 @@
   /// Used in cases when the concept of semantic context is not applicable.
   None,
 
-  /// \brief This is a highly-likely expression-context-specific completion
+  /// This is a highly-likely expression-context-specific completion
   /// result.  This description is intentionally vague: this is a catch-all
   /// category for all heuristics for highly-likely results.
   ///
@@ -512,7 +512,7 @@
   PrecedenceGroup,
 };
 
-/// \brief A single code completion result.
+/// A single code completion result.
 class CodeCompletionResult {
   friend class CodeCompletionResultBuilder;
 
@@ -797,7 +797,7 @@
 class CodeCompletionContext {
   friend class CodeCompletionResultBuilder;
 
-  /// \brief A set of current completion results, not yet delivered to the
+  /// A set of current completion results, not yet delivered to the
   /// consumer.
   CodeCompletionResultSink CurrentResults;
 
@@ -813,13 +813,13 @@
   CodeCompletionContext(CodeCompletionCache &Cache)
       : Cache(Cache) {}
 
-  /// \brief Allocate a string owned by the code completion context.
+  /// Allocate a string owned by the code completion context.
   StringRef copyString(StringRef Str);
 
-  /// \brief Return current code completion results.
+  /// Return current code completion results.
   MutableArrayRef<CodeCompletionResult *> takeResults();
 
-  /// \brief Sort code completion results in an implementation-defined order
+  /// Sort code completion results in an implementation-defined order
   /// in place.
   static void sortCompletionResults(
       MutableArrayRef<CodeCompletionResult *> Results);
@@ -829,7 +829,7 @@
   }
 };
 
-/// \brief An abstract base class for consumers of code completion results.
+/// An abstract base class for consumers of code completion results.
 /// \see \c SimpleCachingCodeCompletionConsumer.
 class CodeCompletionConsumer {
 public:
@@ -855,7 +855,7 @@
       MutableArrayRef<CodeCompletionResult *> Results) = 0;
 };
 
-/// \brief A code completion result consumer that prints the results to a
+/// A code completion result consumer that prints the results to a
 /// \c raw_ostream.
 class PrintingCodeCompletionConsumer
     : public SimpleCachingCodeCompletionConsumer {
@@ -874,7 +874,7 @@
  void handleResults(MutableArrayRef<CodeCompletionResult *> Results) override;
 };
 
-/// \brief Create a factory for code completion callbacks.
+/// Create a factory for code completion callbacks.
 CodeCompletionCallbacksFactory *
 makeCodeCompletionCallbacksFactory(CodeCompletionContext &CompletionContext,
                                    CodeCompletionConsumer &Consumer);
diff --git a/include/swift/IDE/CodeCompletionCache.h b/include/swift/IDE/CodeCompletionCache.h
index d274d27..38237a9 100644
--- a/include/swift/IDE/CodeCompletionCache.h
+++ b/include/swift/IDE/CodeCompletionCache.h
@@ -25,7 +25,7 @@
 struct CodeCompletionCacheImpl;
 class OnDiskCodeCompletionCache;
 
-/// \brief In-memory per-module code completion result cache.
+/// In-memory per-module code completion result cache.
 ///
 /// These results persist between multiple code completion requests and can be
 /// used with different ASTContexts.
@@ -34,7 +34,7 @@
   OnDiskCodeCompletionCache *nextCache;
 
 public:
-  /// \brief Cache key.
+  /// Cache key.
   struct Key {
     std::string ModuleFilename;
     std::string ModuleName;
@@ -72,7 +72,7 @@
   void setImpl(const Key &K, ValueRefCntPtr V, bool setChain);
 };
 
-/// \brief On-disk per-module code completion result cache.
+/// On-disk per-module code completion result cache.
 ///
 /// These results persist between multiple code completion requests and can be
 /// used with different ASTContexts.
diff --git a/include/swift/IDE/Formatting.h b/include/swift/IDE/Formatting.h
index 03feb00..f30789a 100644
--- a/include/swift/IDE/Formatting.h
+++ b/include/swift/IDE/Formatting.h
@@ -24,18 +24,18 @@
   unsigned TabWidth = 4;
 };
 
-/// \brief Returns the offset (in bytes) to the start of \p LineIndex
+/// Returns the offset (in bytes) to the start of \p LineIndex
 size_t getOffsetOfLine(unsigned LineIndex, StringRef Text);
 
-/// \brief Returns the offset to the first Character. If \p Trim is true, the
+/// Returns the offset to the first Character. If \p Trim is true, the
 ///    first character is Non-WhiteSpace.
 size_t getOffsetOfLine(unsigned LineIndex, StringRef Text, bool Trim);
 
-/// \brief Returns the Text on \p LineIndex, excluding Leading WS if \p Trim is
+/// Returns the Text on \p LineIndex, excluding Leading WS if \p Trim is
 ///   true.
 StringRef getTextForLine(unsigned LineIndex, StringRef Text, bool Trim);
 
-/// \brief Returns the number of spaces at the beginning of \p LineIndex
+/// Returns the number of spaces at the beginning of \p LineIndex
 /// or if indenting is done by Tabs, the number of Tabs * TabWidthp
 size_t getExpandedIndentForLine(unsigned LineIndex, CodeFormatOptions Options,
                                 StringRef Text);
diff --git a/include/swift/IDE/SyntaxModel.h b/include/swift/IDE/SyntaxModel.h
index a80b181..c304900 100644
--- a/include/swift/IDE/SyntaxModel.h
+++ b/include/swift/IDE/SyntaxModel.h
@@ -169,21 +169,21 @@
 public:
   virtual ~SyntaxModelWalker() {}
 
-  /// \brief Called when first visiting a syntax node, before walking into its
+  /// Called when first visiting a syntax node, before walking into its
   /// children.  If it returns false, the subtree is skipped.
   ///
   virtual bool walkToNodePre(SyntaxNode Node) { return true; }
 
-  /// \brief Called after visiting the children of a syntax node. If it returns
+  /// Called after visiting the children of a syntax node. If it returns
   /// false, the remaining traversal is terminated and returns failure.
   virtual bool walkToNodePost(SyntaxNode Node) { return true; }
 
-  /// \brief Called when first visiting a sub-structure node, before walking
+  /// Called when first visiting a sub-structure node, before walking
   /// into its children. If it returns false, the subtree is skipped.
   ///
   virtual bool walkToSubStructurePre(SyntaxStructureNode Node) { return true; }
 
-  /// \brief Called after visiting the children of a sub-structure node. If it
+  /// Called after visiting the children of a sub-structure node. If it
   /// returns false, the remaining traversal is terminated and returns failure.
   ///
   virtual bool walkToSubStructurePost(SyntaxStructureNode Node) { return true; }
diff --git a/include/swift/Index/Utils.h b/include/swift/Index/Utils.h
index 0069489..00a590f 100644
--- a/include/swift/Index/Utils.h
+++ b/include/swift/Index/Utils.h
@@ -20,7 +20,7 @@
 namespace swift {
 class ValueDecl;
 
-/// \brief Collect all the protocol requirements that a given declaration can
+/// Collect all the protocol requirements that a given declaration can
 ///   provide default implementations for. VD is a declaration in extension
 ///   declaration. Scratch is the buffer to collect those protocol
 ///   requirements.
@@ -30,7 +30,7 @@
 canDeclProvideDefaultImplementationFor(ValueDecl* VD,
                                        llvm::SmallVectorImpl<ValueDecl*> &Scratch);
 
-/// \brief Get decls that the given decl overrides, protocol requirements that
+/// Get decls that the given decl overrides, protocol requirements that
 ///   it serves as a default implementation of, and optionally protocol
 ///   requirements it satisfies in a conforming class
 std::vector<ValueDecl*>
diff --git a/include/swift/Option/SanitizerOptions.h b/include/swift/Option/SanitizerOptions.h
index 8454584..b8991cc 100644
--- a/include/swift/Option/SanitizerOptions.h
+++ b/include/swift/Option/SanitizerOptions.h
@@ -25,7 +25,7 @@
 namespace swift {
 class DiagnosticEngine;
 
-/// \brief Parses a -sanitize= argument's values.
+/// Parses a -sanitize= argument's values.
 ///
 /// \param Diag If non null, the argument is used to diagnose invalid values.
 /// \param sanitizerRuntimeLibExists Function which checks for existence of a
@@ -36,7 +36,7 @@
     const llvm::Triple &Triple, DiagnosticEngine &Diag,
     llvm::function_ref<bool(llvm::StringRef, bool)> sanitizerRuntimeLibExists);
 
-/// \brief Parses a -sanitize-coverage= argument's value.
+/// Parses a -sanitize-coverage= argument's value.
 llvm::SanitizerCoverageOptions parseSanitizerCoverageArgValue(
         const llvm::opt::Arg *A,
         const llvm::Triple &Triple,
diff --git a/include/swift/Parse/CodeCompletionCallbacks.h b/include/swift/Parse/CodeCompletionCallbacks.h
index 9e400f5..33a021c 100644
--- a/include/swift/Parse/CodeCompletionCallbacks.h
+++ b/include/swift/Parse/CodeCompletionCallbacks.h
@@ -29,7 +29,7 @@
   SetterSelector
 };
 
-/// \brief Parser's interface to code completion.
+/// Parser's interface to code completion.
 class CodeCompletionCallbacks {
 protected:
   Parser &P;
@@ -115,39 +115,39 @@
     }
   };
 
-  /// \brief Complete the whole expression.  This is a fallback that should
+  /// Complete the whole expression.  This is a fallback that should
   /// produce results when more specific completion methods failed.
   virtual void completeExpr() = 0;
 
-  /// \brief Complete expr-dot after we have consumed the dot.
+  /// Complete expr-dot after we have consumed the dot.
   virtual void completeDotExpr(Expr *E, SourceLoc DotLoc) = 0;
 
-  /// \brief Complete the beginning of a statement or expression.
+  /// Complete the beginning of a statement or expression.
   virtual void completeStmtOrExpr() = 0;
 
-  /// \brief Complete the beginning of expr-postfix -- no tokens provided
+  /// Complete the beginning of expr-postfix -- no tokens provided
   /// by user.
   virtual void completePostfixExprBeginning(CodeCompletionExpr *E) = 0;
 
-  /// \brief Complete the beginning of expr-postfix in a for-each loop sequqence
+  /// Complete the beginning of expr-postfix in a for-each loop sequqence
   /// -- no tokens provided by user.
   virtual void completeForEachSequenceBeginning(CodeCompletionExpr *E) = 0;
 
-  /// \brief Complete a given expr-postfix.
+  /// Complete a given expr-postfix.
   virtual void completePostfixExpr(Expr *E, bool hasSpace) = 0;
 
-  /// \brief Complete a given expr-postfix, given that there is a following
+  /// Complete a given expr-postfix, given that there is a following
   /// left parenthesis.
   virtual void completePostfixExprParen(Expr *E, Expr *CodeCompletionE) = 0;
 
-  /// \brief Complete expr-super after we have consumed the 'super' keyword.
+  /// Complete expr-super after we have consumed the 'super' keyword.
   virtual void completeExprSuper(SuperRefExpr *SRE) = 0;
 
-  /// \brief Complete expr-super after we have consumed the 'super' keyword and
+  /// Complete expr-super after we have consumed the 'super' keyword and
   /// a dot.
   virtual void completeExprSuperDot(SuperRefExpr *SRE) = 0;
 
-  /// \brief Complete the argument to an Objective-C #keyPath
+  /// Complete the argument to an Objective-C #keyPath
   /// expression.
   ///
   /// \param KPE A partial #keyPath expression that can be used to
@@ -155,20 +155,20 @@
   /// #keyPath argument have been parsed yet.
   virtual void completeExprKeyPath(KeyPathExpr *KPE, SourceLoc DotLoc) = 0;
 
-  /// \brief Complete the beginning of type-simple -- no tokens provided
+  /// Complete the beginning of type-simple -- no tokens provided
   /// by user.
   virtual void completeTypeSimpleBeginning() = 0;
 
-  /// \brief Complete a given type-identifier after we have consumed the dot.
+  /// Complete a given type-identifier after we have consumed the dot.
   virtual void completeTypeIdentifierWithDot(IdentTypeRepr *ITR) = 0;
 
-  /// \brief Complete a given type-identifier when there is no trailing dot.
+  /// Complete a given type-identifier when there is no trailing dot.
   virtual void completeTypeIdentifierWithoutDot(IdentTypeRepr *ITR) = 0;
 
-  /// \brief Complete at the beginning of a case stmt pattern.
+  /// Complete at the beginning of a case stmt pattern.
   virtual void completeCaseStmtBeginning() = 0;
 
-  /// \brief Complete a case stmt pattern that starts with a dot.
+  /// Complete a case stmt pattern that starts with a dot.
   virtual void completeCaseStmtDotPrefix() = 0;
 
   /// Complete at the beginning of member of a nominal decl member -- no tokens
@@ -226,17 +226,17 @@
 
   virtual void completeGenericParams(TypeLoc TL) = 0;
 
-  /// \brief Signals that the AST for the all the delayed-parsed code was
+  /// Signals that the AST for the all the delayed-parsed code was
   /// constructed.  No \c complete*() callbacks will be done after this.
   virtual void doneParsing() = 0;
 };
 
-/// \brief A factory to create instances of \c CodeCompletionCallbacks.
+/// A factory to create instances of \c CodeCompletionCallbacks.
 class CodeCompletionCallbacksFactory {
 public:
   virtual ~CodeCompletionCallbacksFactory() {}
 
-  /// \brief Create an instance of \c CodeCompletionCallbacks.  The result
+  /// Create an instance of \c CodeCompletionCallbacks.  The result
   /// should be deallocated with 'delete'.
   virtual CodeCompletionCallbacks *createCodeCompletionCallbacks(Parser &P) = 0;
 };
diff --git a/include/swift/Parse/DelayedParsingCallbacks.h b/include/swift/Parse/DelayedParsingCallbacks.h
index 87bd8d0..b8dfc04 100644
--- a/include/swift/Parse/DelayedParsingCallbacks.h
+++ b/include/swift/Parse/DelayedParsingCallbacks.h
@@ -21,7 +21,7 @@
   class DeclAttributes;
   class AbstractFunctionDecl;
 
-/// \brief Callbacks for Parser's delayed parsing.
+/// Callbacks for Parser's delayed parsing.
 class DelayedParsingCallbacks {
   virtual void anchor();
 
@@ -44,7 +44,7 @@
   }
 };
 
-/// \brief Implementation of callbacks that guide the parser in delayed
+/// Implementation of callbacks that guide the parser in delayed
 /// parsing for code completion.
 class CodeCompleteDelayedCallbacks : public DelayedParsingCallbacks {
   SourceLoc CodeCompleteLoc;
diff --git a/include/swift/Parse/Lexer.h b/include/swift/Parse/Lexer.h
index 35f172e..5cf9b20 100644
--- a/include/swift/Parse/Lexer.h
+++ b/include/swift/Parse/Lexer.h
@@ -99,7 +99,7 @@
 
   Token NextToken;
   
-  /// \brief This is true if we're lexing a .sil file instead of a .swift
+  /// This is true if we're lexing a .sil file instead of a .swift
   /// file.  This enables the 'sil' keyword.
   const bool InSILMode;
 
@@ -143,7 +143,7 @@
   void initialize(unsigned Offset, unsigned EndOffset);
 
 public:
-  /// \brief Create a normal lexer that scans the whole source buffer.
+  /// Create a normal lexer that scans the whole source buffer.
   ///
   /// \param Options - the language options under which to lex.  By
   ///   design, language options only affect whether a token is valid
@@ -163,14 +163,14 @@
       CommentRetentionMode RetainComments = CommentRetentionMode::None,
       TriviaRetentionMode TriviaRetention = TriviaRetentionMode::WithoutTrivia);
 
-  /// \brief Create a lexer that scans a subrange of the source buffer.
+  /// Create a lexer that scans a subrange of the source buffer.
   Lexer(const LangOptions &Options, const SourceManager &SourceMgr,
         unsigned BufferID, DiagnosticEngine *Diags, bool InSILMode,
         HashbangMode HashbangAllowed, CommentRetentionMode RetainComments,
         TriviaRetentionMode TriviaRetention, unsigned Offset,
         unsigned EndOffset);
 
-  /// \brief Create a sub-lexer that lexes from the same buffer, but scans
+  /// Create a sub-lexer that lexes from the same buffer, but scans
   /// a subrange of the buffer.
   ///
   /// \param Parent the parent lexer that scans the whole buffer
@@ -178,7 +178,7 @@
   /// \param EndState end of the subrange
   Lexer(Lexer &Parent, State BeginState, State EndState);
 
-  /// \brief Returns true if this lexer will produce a code completion token.
+  /// Returns true if this lexer will produce a code completion token.
   bool isCodeCompletion() const {
     return CodeCompletionPtr != nullptr;
   }
@@ -220,12 +220,12 @@
   /// actually lexing it.
   const Token &peekNextToken() const { return NextToken; }
 
-  /// \brief Returns the lexer state for the beginning of the given token
+  /// Returns the lexer state for the beginning of the given token
   /// location. After restoring the state, lexer will return this token and
   /// continue from there.
   State getStateForBeginningOfTokenLoc(SourceLoc Loc) const;
 
-  /// \brief Returns the lexer state for the beginning of the given token.
+  /// Returns the lexer state for the beginning of the given token.
   /// After restoring the state, lexer will return this token and continue from
   /// there.
   State getStateForBeginningOfToken(const Token &Tok,
@@ -251,7 +251,7 @@
     return SourceMgr.findBufferContainingLoc(State.Loc) == getBufferID();
   }
 
-  /// \brief Restore the lexer state to a given one, that can be located either
+  /// Restore the lexer state to a given one, that can be located either
   /// before or after the current position.
   void restoreState(State S, bool enableDiagnostics = false) {
     assert(S.isValid());
@@ -268,7 +268,7 @@
         LeadingTrivia = std::move(*LTrivia);
   }
 
-  /// \brief Restore the lexer state to a given state that is located before
+  /// Restore the lexer state to a given state that is located before
   /// current position.
   void backtrackToState(State S) {
     assert(getBufferPtrForSourceLoc(S.Loc) <= CurPtr &&
@@ -276,7 +276,7 @@
     restoreState(S);
   }
 
-  /// \brief Retrieve the Token referred to by \c Loc.
+  /// Retrieve the Token referred to by \c Loc.
   ///
   /// \param SM The source manager in which the given source location
   /// resides.
@@ -285,7 +285,7 @@
   static Token getTokenAtLocation(const SourceManager &SM, SourceLoc Loc);
 
 
-  /// \brief Retrieve the source location that points just past the
+  /// Retrieve the source location that points just past the
   /// end of the token referred to by \c Loc.
   ///
   /// \param SM The source manager in which the given source location
@@ -294,7 +294,7 @@
   /// \param Loc The source location of the beginning of a token.
   static SourceLoc getLocForEndOfToken(const SourceManager &SM, SourceLoc Loc);
 
-  /// \brief Convert a SourceRange to the equivalent CharSourceRange
+  /// Convert a SourceRange to the equivalent CharSourceRange
   ///
   /// \param SM The source manager in which the given source range
   /// resides.
@@ -342,16 +342,16 @@
   static StringRef getIndentationForLine(SourceManager &SM, SourceLoc Loc,
                                          StringRef *ExtraIndentation = nullptr);
 
-  /// \brief Determines if the given string is a valid non-operator
+  /// Determines if the given string is a valid non-operator
   /// identifier, without escaping characters.
   static bool isIdentifier(StringRef identifier);
 
-  /// \brief Determine the token kind of the string, given that it is a valid
+  /// Determine the token kind of the string, given that it is a valid
   /// non-operator identifier. Return tok::identifier if the string is not a
   /// reserved word.
   static tok kindOfIdentifier(StringRef Str, bool InSILMode);
 
-  /// \brief Determines if the given string is a valid operator identifier,
+  /// Determines if the given string is a valid operator identifier,
   /// without escaping characters.
   static bool isOperator(StringRef string);
 
@@ -409,7 +409,7 @@
                                                unsigned IndentToStrip,
                                                unsigned CustomDelimiterLen);
 
-  /// \brief Compute the bytes that the actual string literal should codegen to.
+  /// Compute the bytes that the actual string literal should codegen to.
   /// If a copy needs to be made, it will be allocated out of the provided
   /// \p Buffer.
   StringRef getEncodedStringSegment(StringSegment Segment,
@@ -420,7 +420,7 @@
         Segment.IndentToStrip, Segment.CustomDelimiterLen);
   }
 
-  /// \brief Given a string encoded with escapes like a string literal, compute
+  /// Given a string encoded with escapes like a string literal, compute
   /// the byte content.
   ///
   /// If a copy needs to be made, it will be allocated out of the provided
@@ -445,7 +445,7 @@
     return Result;
   }
 
-  /// \brief Given a string literal token, separate it into string/expr segments
+  /// Given a string literal token, separate it into string/expr segments
   /// of a potentially interpolated string.
   static void getStringLiteralSegments(
       const Token &Str,
diff --git a/include/swift/Parse/LexerState.h b/include/swift/Parse/LexerState.h
index 5151d2b..5ce65d3 100644
--- a/include/swift/Parse/LexerState.h
+++ b/include/swift/Parse/LexerState.h
@@ -24,7 +24,7 @@
 namespace swift {
 class Lexer;
 
-/// \brief Lexer state can be saved/restored to/from objects of this class.
+/// Lexer state can be saved/restored to/from objects of this class.
 class LexerState {
 public:
   LexerState() {}
diff --git a/include/swift/Parse/Parser.h b/include/swift/Parse/Parser.h
index 414ee24..7a25f52 100644
--- a/include/swift/Parse/Parser.h
+++ b/include/swift/Parse/Parser.h
@@ -195,21 +195,21 @@
       (Tok.is(tok::eof) && Tok.getText() != ")");
   }
 
-  /// \brief This is the current token being considered by the parser.
+  /// This is the current token being considered by the parser.
   Token Tok;
 
-  /// \brief leading trivias for \c Tok.
+  /// leading trivias for \c Tok.
   /// Always empty if !SF.shouldBuildSyntaxTree().
   syntax::Trivia LeadingTrivia;
 
-  /// \brief trailing trivias for \c Tok.
+  /// trailing trivias for \c Tok.
   /// Always empty if !SF.shouldBuildSyntaxTree().
   syntax::Trivia TrailingTrivia;
 
-  /// \brief The receiver to collect all consumed tokens.
+  /// The receiver to collect all consumed tokens.
   ConsumeTokenReceiver *TokReceiver;
 
-  /// \brief The location of the previous token.
+  /// The location of the previous token.
   SourceLoc PreviousLoc;
 
   /// Stop parsing immediately.
@@ -443,7 +443,7 @@
   //===--------------------------------------------------------------------===//
   // Utilities
 
-  /// \brief Return the next token that will be installed by \c consumeToken.
+  /// Return the next token that will be installed by \c consumeToken.
   const Token &peekToken();
 
   /// Consume a token that we created on the fly to correct the original token
@@ -473,11 +473,11 @@
     return consumeToken();
   }
 
-  /// \brief Retrieve the location just past the end of the previous
+  /// Retrieve the location just past the end of the previous
   /// source location.
   SourceLoc getEndOfPreviousLoc();
 
-  /// \brief If the current token is the specified kind, consume it and
+  /// If the current token is the specified kind, consume it and
   /// return true.  Otherwise, return false without consuming it.
   bool consumeIf(tok K) {
     if (Tok.isNot(K)) return false;
@@ -485,7 +485,7 @@
     return true;
   }
 
-  /// \brief If the current token is the specified kind, consume it and
+  /// If the current token is the specified kind, consume it and
   /// return true.  Otherwise, return false without consuming it.
   bool consumeIf(tok K, SourceLoc &consumedLoc) {
     if (Tok.isNot(K)) return false;
@@ -504,13 +504,13 @@
             cast<AccessorDecl>(CurDeclContext)->isCoroutine());
   }
   
-  /// \brief Read tokens until we get to one of the specified tokens, then
+  /// Read tokens until we get to one of the specified tokens, then
   /// return without consuming it.  Because we cannot guarantee that the token
   /// will ever occur, this skips to some likely good stopping point.
   void skipUntil(tok T1, tok T2 = tok::NUM_TOKENS);
   void skipUntilAnyOperator();
 
-  /// \brief Skip until a token that starts with '>', and consume it if found.
+  /// Skip until a token that starts with '>', and consume it if found.
   /// Applies heuristics that are suitable when trying to find the end of a list
   /// of generic parameters, generic arguments, or list of types in a protocol
   /// composition.
@@ -531,10 +531,10 @@
   /// but not when used as comparison operators.
   void skipSingle();
 
-  /// \brief Skip until the next '#else', '#endif' or until eof.
+  /// Skip until the next '#else', '#endif' or until eof.
   void skipUntilConditionalBlockClose();
 
-  /// \brief Skip until either finding \c T1 or reaching the end of the line.
+  /// Skip until either finding \c T1 or reaching the end of the line.
   ///
   /// This uses \c skipSingle and so matches parens etc. After calling, one or
   /// more of the following will be true: Tok.is(T1), Tok.isStartOfLine(),
@@ -601,23 +601,23 @@
     return (Tok.isAnyOperator() || Tok.isPunctuation()) &&
            Tok.getText()[0] == symbol;
   }
-  /// \brief Check whether the current token starts with '<'.
+  /// Check whether the current token starts with '<'.
   bool startsWithLess(Token Tok) { return startsWithSymbol(Tok, '<'); }
 
-  /// \brief Check whether the current token starts with '>'.
+  /// Check whether the current token starts with '>'.
   bool startsWithGreater(Token Tok) { return startsWithSymbol(Tok, '>'); }
 
-  /// \brief Consume the starting '<' of the current token, which may either
+  /// Consume the starting '<' of the current token, which may either
   /// be a complete '<' token or some kind of operator token starting with '<',
   /// e.g., '<>'.
   SourceLoc consumeStartingLess();
 
-  /// \brief Consume the starting '>' of the current token, which may either
+  /// Consume the starting '>' of the current token, which may either
   /// be a complete '>' token or some kind of operator token starting with '>',
   /// e.g., '>>'.
   SourceLoc consumeStartingGreater();
 
-  /// \brief Consume the starting character of the current token, and split the
+  /// Consume the starting character of the current token, and split the
   /// remainder of the token into a new token (or tokens).
   SourceLoc
   consumeStartingCharacterOfCurrentToken(tok Kind = tok::oper_binary_unspaced,
@@ -625,7 +625,7 @@
 
   swift::ScopeInfo &getScopeInfo() { return State->getScopeInfo(); }
 
-  /// \brief Add the given Decl to the current scope.
+  /// Add the given Decl to the current scope.
   void addToScope(ValueDecl *D) {
     getScopeInfo().addToScope(D, *this);
   }
@@ -640,7 +640,7 @@
   //===--------------------------------------------------------------------===//
   // Primitive Parsing
 
-  /// \brief Consume an identifier (but not an operator) if present and return
+  /// Consume an identifier (but not an operator) if present and return
   /// its name in \p Result.  Otherwise, emit an error.
   ///
   /// \returns false on success, true on error.
@@ -671,7 +671,7 @@
     return parseSpecificIdentifier(expected, L, Diagnostic(ID, Args...));
   }
 
-  /// \brief Consume an identifier or operator if present and return its name
+  /// Consume an identifier or operator if present and return its name
   /// in \p Result.  Otherwise, emit an error and return true.
   bool parseAnyIdentifier(Identifier &Result, SourceLoc &Loc,
                           const Diagnostic &D);
@@ -689,7 +689,7 @@
     return parseAnyIdentifier(Result, L, Diagnostic(ID, Args...));
   }
 
-  /// \brief The parser expects that \p K is next token in the input.  If so,
+  /// The parser expects that \p K is next token in the input.  If so,
   /// it is consumed and false is returned.
   ///
   /// If the input is malformed, this emits the specified error diagnostic.
@@ -706,13 +706,13 @@
     return parseToken(K, L, Diagnostic(ID, Args...));
   }
   
-  /// \brief Parse the specified expected token and return its location
+  /// Parse the specified expected token and return its location
   /// on success.  On failure, emit the specified error diagnostic, and
   /// a note at the specified note location.
   bool parseMatchingToken(tok K, SourceLoc &TokLoc, Diag<> ErrorDiag,
                           SourceLoc OtherLoc);
 
-  /// \brief Parse a comma separated list of some elements.
+  /// Parse a comma separated list of some elements.
   ParserStatus parseList(tok RightK, SourceLoc LeftLoc, SourceLoc &RightLoc,
                          bool AllowSepAfterLast, Diag<> ErrorDiag,
                          syntax::SyntaxKind Kind,
@@ -969,7 +969,7 @@
   ParserResult<TypeRepr> parseTypeSimple(Diag<> MessageID,
                                          bool HandleCodeCompletion = true);
 
-  /// \brief Parse layout constraint.
+  /// Parse layout constraint.
   LayoutConstraint parseLayoutConstraint(Identifier LayoutConstraintID);
 
   ParserStatus parseGenericArguments(SmallVectorImpl<TypeRepr *> &Args,
@@ -1137,7 +1137,7 @@
   ParserResult<Pattern> parseTypedPattern();
   ParserResult<Pattern> parsePattern();
   
-  /// \brief Parse a tuple pattern element.
+  /// Parse a tuple pattern element.
   ///
   /// \code
   ///   pattern-tuple-element:
@@ -1162,7 +1162,7 @@
                                     VarDecl::Specifier specifier);
   
 
-  /// \brief Determine whether this token can only start a matching pattern
+  /// Determine whether this token can only start a matching pattern
   /// production and not an expression.
   bool isOnlyStartOfMatchingPattern();
 
@@ -1263,7 +1263,7 @@
   Expr *parseExprEditorPlaceholder(Token PlaceholderTok,
                                    Identifier PlaceholderId);
 
-  /// \brief Parse a closure expression after the opening brace.
+  /// Parse a closure expression after the opening brace.
   ///
   /// \verbatim
   ///   expr-closure:
@@ -1280,7 +1280,7 @@
   /// \endverbatim
   ParserResult<Expr> parseExprClosure();
 
-  /// \brief Parse the closure signature, if present.
+  /// Parse the closure signature, if present.
   ///
   /// \verbatim
   ///   closure-signature:
@@ -1491,7 +1491,7 @@
 /// Whether a given token can be the start of a decl.
 bool isKeywordPossibleDeclStart(const Token &Tok);
 
-/// \brief Lex and return a vector of `TokenSyntax` tokens, which include
+/// Lex and return a vector of `TokenSyntax` tokens, which include
 /// leading and trailing trivia.
 std::vector<std::pair<RC<syntax::RawSyntax>,
                                  syntax::AbsolutePosition>>
diff --git a/include/swift/Parse/ParserResult.h b/include/swift/Parse/ParserResult.h
index 6b18d86..696f581 100644
--- a/include/swift/Parse/ParserResult.h
+++ b/include/swift/Parse/ParserResult.h
@@ -21,7 +21,7 @@
 
 class ParserStatus;
 
-/// \brief A wrapper for a parser AST node result (Decl, Stmt, Expr, Pattern,
+/// A wrapper for a parser AST node result (Decl, Stmt, Expr, Pattern,
 /// etc.)
 ///
 /// Contains the pointer to the AST node itself (or null) and additional bits
@@ -123,7 +123,7 @@
   return PR;
 }
 
-/// \brief Same as \c ParserResult, but just the status bits without the AST
+/// Same as \c ParserResult, but just the status bits without the AST
 /// node.
 ///
 /// Useful when the AST node is returned by some other means (for example, in
diff --git a/include/swift/Parse/PersistentParserState.h b/include/swift/Parse/PersistentParserState.h
index 7c6d52a..7b7c7ed 100644
--- a/include/swift/Parse/PersistentParserState.h
+++ b/include/swift/Parse/PersistentParserState.h
@@ -29,7 +29,7 @@
   class LazyMemberParser;
   class ASTContext;
 
-/// \brief Parser state persistent across multiple parses.
+/// Parser state persistent across multiple parses.
 class PersistentParserState: public LazyMemberParser {
 public:
   struct ParserPos {
@@ -118,7 +118,7 @@
                      std::unique_ptr<FunctionBodyState>>;
   DelayedFunctionBodiesTy DelayedFunctionBodies;
 
-  /// \brief Parser sets this if it stopped parsing before the buffer ended.
+  /// Parser sets this if it stopped parsing before the buffer ended.
   ParserPosition MarkedPos;
 
   std::unique_ptr<DelayedDeclState> CodeCompletionDelayedDeclState;
@@ -190,7 +190,7 @@
     this->InPoundLineEnvironment = InPoundLineEnvironment;
   }
 
-  /// \brief Returns the marked parser position and resets it.
+  /// Returns the marked parser position and resets it.
   ParserPosition takeParserPosition() {
     ParserPosition Pos = MarkedPos;
     MarkedPos = ParserPosition();
diff --git a/include/swift/Parse/Scope.h b/include/swift/Parse/Scope.h
index 8662134..c21f141 100644
--- a/include/swift/Parse/Scope.h
+++ b/include/swift/Parse/Scope.h
@@ -80,7 +80,7 @@
   ClosureParams,
 };
 
-/// \brief An opaque object that owns the scope frame.  The scope frame can be
+/// An opaque object that owns the scope frame.  The scope frame can be
 /// re-entered later.
 class SavedScope {
   friend class Scope;
@@ -124,7 +124,7 @@
   ScopeKind Kind;
   bool IsInactiveConfigBlock;
 
-  /// \brief Save this scope so that it can be re-entered later.  Transfers the
+  /// Save this scope so that it can be re-entered later.  Transfers the
   /// ownership of the scope frame to returned object.
   SavedScope saveScope() {
     return SavedScope(HTScope.detach(), Depth, Kind, IsInactiveConfigBlock);
@@ -137,10 +137,10 @@
   bool isResolvable() const;
 
 public:
-  /// \brief Create a lexical scope of the specified kind.
+  /// Create a lexical scope of the specified kind.
   Scope(Parser *P, ScopeKind SC, bool isInactiveConfigBlock = false);
 
-  /// \brief Re-enter the specified scope, transferring the ownership of the
+  /// Re-enter the specified scope, transferring the ownership of the
   /// scope frame to the new object.
   Scope(Parser *P, SavedScope &&SS);
 
diff --git a/include/swift/Parse/Token.h b/include/swift/Parse/Token.h
index 59e3e45..c13f585 100644
--- a/include/swift/Parse/Token.h
+++ b/include/swift/Parse/Token.h
@@ -36,10 +36,10 @@
   ///
   tok Kind;
 
-  /// \brief Whether this token is the first token on the line.
+  /// Whether this token is the first token on the line.
   unsigned AtStartOfLine : 1;
 
-  /// \brief Whether this token is an escaped `identifier` token.
+  /// Whether this token is an escaped `identifier` token.
   unsigned EscapedIdentifier : 1;
   
   /// Modifiers for string literals
@@ -50,7 +50,7 @@
 
   // Padding bits == 32 - 11;
 
-  /// \brief The length of the comment that precedes the token.
+  /// The length of the comment that precedes the token.
   unsigned CommentLength;
 
   /// Text - The actual string covered by the token in the source buffer.
@@ -114,15 +114,15 @@
     return !isEllipsis();
   }
 
-  /// \brief Determine whether this token occurred at the start of a line.
+  /// Determine whether this token occurred at the start of a line.
   bool isAtStartOfLine() const { return AtStartOfLine; }
 
-  /// \brief Set whether this token occurred at the start of a line.
+  /// Set whether this token occurred at the start of a line.
   void setAtStartOfLine(bool value) { AtStartOfLine = value; }
   
-  /// \brief True if this token is an escaped identifier token.
+  /// True if this token is an escaped identifier token.
   bool isEscapedIdentifier() const { return EscapedIdentifier; }
-  /// \brief Set whether this token is an escaped identifier token.
+  /// Set whether this token is an escaped identifier token.
   void setEscapedIdentifier(bool value) {
     assert((!value || Kind == tok::identifier) &&
            "only identifiers can be escaped identifiers");
@@ -221,15 +221,15 @@
     }
   }
 
-  /// \brief True if the string literal token is multiline.
+  /// True if the string literal token is multiline.
   bool isMultilineString() const {
     return MultilineString;
   }
-  /// \brief Count of extending escaping '#'.
+  /// Count of extending escaping '#'.
   unsigned getCustomDelimiterLen() const {
     return CustomDelimiterLen;
   }
-  /// \brief Set characteristics of string literal token.
+  /// Set characteristics of string literal token.
   void setStringLiteral(bool IsMultilineString, unsigned CustomDelimiterLen) {
     assert(Kind == tok::string_literal);
     this->MultilineString = IsMultilineString;
@@ -282,7 +282,7 @@
 
   void setText(StringRef T) { Text = T; }
 
-  /// \brief Set the token to the specified kind and source range.
+  /// Set the token to the specified kind and source range.
   void setToken(tok K, StringRef T, unsigned CommentLength = 0) {
     Kind = K;
     Text = T;
diff --git a/include/swift/Runtime/Casting.h b/include/swift/Runtime/Casting.h
index f634a07..d41f6c8 100644
--- a/include/swift/Runtime/Casting.h
+++ b/include/swift/Runtime/Casting.h
@@ -21,7 +21,7 @@
 
 namespace swift {
 
-/// \brief Perform a checked dynamic cast of a value to a target type.
+/// Perform a checked dynamic cast of a value to a target type.
 ///
 /// \param dest A buffer into which to write the destination value.
 /// In all cases, this will be left uninitialized if the cast fails.
@@ -44,7 +44,7 @@
                   const Metadata *targetType,
                   DynamicCastFlags flags);
 
-/// \brief Checked dynamic cast to a Swift class type.
+/// Checked dynamic cast to a Swift class type.
 ///
 /// \param object The object to cast.
 /// \param targetType The type to which we are casting, which is known to be
@@ -55,7 +55,7 @@
 const void *
 swift_dynamicCastClass(const void *object, const ClassMetadata *targetType);
 
-/// \brief Unconditional, checked dynamic cast to a Swift class type.
+/// Unconditional, checked dynamic cast to a Swift class type.
 ///
 /// Aborts if the object isn't of the target type.
 ///
@@ -70,7 +70,7 @@
                                     const ClassMetadata *targetType);
 
 #if SWIFT_OBJC_INTEROP
-/// \brief Checked Objective-C-style dynamic cast to a class type.
+/// Checked Objective-C-style dynamic cast to a class type.
 ///
 /// \param object The object to cast, or nil.
 /// \param targetType The type to which we are casting, which is known to be
@@ -81,7 +81,7 @@
 const void *
 swift_dynamicCastObjCClass(const void *object, const ClassMetadata *targetType);
 
-/// \brief Checked dynamic cast to a foreign class type.
+/// Checked dynamic cast to a foreign class type.
 ///
 /// \param object The object to cast, or nil.
 /// \param targetType The type to which we are casting, which is known to be
@@ -93,7 +93,7 @@
 swift_dynamicCastForeignClass(const void *object,
                               const ForeignClassMetadata *targetType);
 
-/// \brief Unconditional, checked, Objective-C-style dynamic cast to a class
+/// Unconditional, checked, Objective-C-style dynamic cast to a class
 /// type.
 ///
 /// Aborts if the object isn't of the target type.
@@ -110,7 +110,7 @@
 swift_dynamicCastObjCClassUnconditional(const void *object,
                                         const ClassMetadata *targetType);
 
-/// \brief Unconditional, checked dynamic cast to a foreign class type.
+/// Unconditional, checked dynamic cast to a foreign class type.
 ///
 /// \param object The object to cast, or nil.
 /// \param targetType The type to which we are casting, which is known to be
@@ -124,7 +124,7 @@
   const ForeignClassMetadata *targetType);
 #endif
 
-/// \brief Checked dynamic cast of a class instance pointer to the given type.
+/// Checked dynamic cast of a class instance pointer to the given type.
 ///
 /// \param object The class instance to cast.
 ///
@@ -136,7 +136,7 @@
 const void *
 swift_dynamicCastUnknownClass(const void *object, const Metadata *targetType);
 
-/// \brief Unconditional checked dynamic cast of a class instance pointer to
+/// Unconditional checked dynamic cast of a class instance pointer to
 /// the given type.
 ///
 /// Aborts if the object isn't of the target type.
@@ -181,7 +181,7 @@
   const ClassMetadata *sourceType,
   const ClassMetadata *targetType);
 
-/// \brief Return the dynamic type of an opaque value.
+/// Return the dynamic type of an opaque value.
 ///
 /// \param value An opaque value.
 /// \param self  The static type metadata for the opaque value and the result
@@ -201,7 +201,7 @@
 swift_getDynamicType(OpaqueValue *value, const Metadata *self,
                      bool existentialMetatype);
 
-/// \brief Fetch the type metadata associated with the formal dynamic
+/// Fetch the type metadata associated with the formal dynamic
 /// type of the given (possibly Objective-C) object.  The formal
 /// dynamic type ignores dynamic subclasses such as those introduced
 /// by KVO.
@@ -210,7 +210,7 @@
 SWIFT_RUNTIME_EXPORT
 const Metadata *swift_getObjectType(HeapObject *object);
 
-/// \brief Check whether a type conforms to a given native Swift protocol,
+/// Check whether a type conforms to a given native Swift protocol,
 /// visible from the named module.
 ///
 /// If so, returns a pointer to the witness table for its conformance.
diff --git a/include/swift/Runtime/Enum.h b/include/swift/Runtime/Enum.h
index aba2436..507d1a4 100644
--- a/include/swift/Runtime/Enum.h
+++ b/include/swift/Runtime/Enum.h
@@ -34,7 +34,7 @@
 using EnumMetadata = TargetEnumMetadata<InProcess>;
 struct TypeLayout;
 
-/// \brief Initialize the type metadata for a single-case enum type.
+/// Initialize the type metadata for a single-case enum type.
 ///
 /// \param enumType - pointer to the instantiated but uninitialized metadata
 ///                   for the enum.
@@ -45,7 +45,7 @@
                                       EnumLayoutFlags flags,
                                       const TypeLayout *payload);
 
-/// \brief Initialize the type metadata for a single-payload enum type.
+/// Initialize the type metadata for a single-payload enum type.
 ///
 /// \param enumType - pointer to the instantiated but uninitialized metadata
 ///                   for the enum.
@@ -58,7 +58,7 @@
                                          const TypeLayout *payload,
                                          unsigned emptyCases);
 
-/// \brief Faster variant of the above which avoids digging into the enum type
+/// Faster variant of the above which avoids digging into the enum type
 /// metadata when the caller already has the payload information handy.
 ///
 /// \param value - pointer to the enum value.
@@ -73,7 +73,7 @@
                                         const Metadata *payload,
                                         unsigned emptyCases);
 
-/// \brief Store the tag value for the given case into a single-payload enum,
+/// Store the tag value for the given case into a single-payload enum,
 ///        whose associated payload (if any) has already been initialized.
 ///
 /// \param value - pointer to the enum value. If the case being initialized is
@@ -90,7 +90,7 @@
                                      unsigned whichCase,
                                      unsigned emptyCases);
 
-/// \brief Initialize the type metadata for a generic, multi-payload
+/// Initialize the type metadata for a generic, multi-payload
 ///        enum instance.
 SWIFT_RUNTIME_EXPORT
 void swift_initEnumMetadataMultiPayload(EnumMetadata *enumType,
@@ -98,7 +98,7 @@
                                         unsigned numPayloads,
                                         const TypeLayout * const *payloadTypes);
 
-/// \brief Return an integer value representing which case of a multi-payload
+/// Return an integer value representing which case of a multi-payload
 ///        enum is inhabited.
 ///
 /// \param value - pointer to the enum value.
@@ -109,7 +109,7 @@
 unsigned swift_getEnumCaseMultiPayload(const OpaqueValue *value,
                                        const EnumMetadata *enumType);
   
-/// \brief Store the tag value for the given case into a multi-payload enum,
+/// Store the tag value for the given case into a multi-payload enum,
 ///        whose associated payload (if any) has already been initialized.
 SWIFT_RUNTIME_EXPORT
 void swift_storeEnumTagMultiPayload(OpaqueValue *value,
diff --git a/include/swift/Runtime/Metadata.h b/include/swift/Runtime/Metadata.h
index 0aec2af..8824de7 100644
--- a/include/swift/Runtime/Metadata.h
+++ b/include/swift/Runtime/Metadata.h
@@ -332,14 +332,14 @@
                                            const ClassDescriptor *descriptor);
 int32_t getResilientImmediateMembersOffset(const ClassDescriptor *descriptor);
 
-/// \brief Fetch a uniqued metadata object for a nominal type which requires
+/// Fetch a uniqued metadata object for a nominal type which requires
 /// singleton metadata initialization.
 SWIFT_RUNTIME_EXPORT SWIFT_CC(swift)
 MetadataResponse
 swift_getSingletonMetadata(MetadataRequest request,
                            const TypeContextDescriptor *description);
 
-/// \brief Fetch a uniqued metadata object for a generic nominal type.
+/// Fetch a uniqued metadata object for a generic nominal type.
 SWIFT_RUNTIME_EXPORT SWIFT_CC(swift)
 MetadataResponse
 swift_getGenericMetadata(MetadataRequest request,
@@ -383,7 +383,7 @@
                                    const GenericValueMetadataPattern *pattern,
                                    size_t extraDataSize);
 
-/// \brief Check that the given metadata has the right state.
+/// Check that the given metadata has the right state.
 SWIFT_RUNTIME_EXPORT SWIFT_CC(swift)
 MetadataResponse swift_checkMetadataState(MetadataRequest request,
                                           const Metadata *type);
@@ -442,7 +442,7 @@
                                   const ProtocolRequirement *reqBase,
                                   const ProtocolRequirement *assocConformance);
 
-/// \brief Fetch a uniqued metadata for a function type.
+/// Fetch a uniqued metadata for a function type.
 SWIFT_RUNTIME_EXPORT
 const FunctionTypeMetadata *
 swift_getFunctionTypeMetadata(FunctionTypeFlags flags,
@@ -485,12 +485,12 @@
 Class
 swift_getInitializedObjCClass(Class c);
 
-/// \brief Fetch a uniqued type metadata for an ObjC class.
+/// Fetch a uniqued type metadata for an ObjC class.
 SWIFT_RUNTIME_EXPORT
 const Metadata *
 swift_getObjCClassMetadata(const ClassMetadata *theClass);
 
-/// \brief Get the ObjC class object from class type metadata.
+/// Get the ObjC class object from class type metadata.
 SWIFT_RUNTIME_EXPORT
 const ClassMetadata *
 swift_getObjCClassFromMetadata(const Metadata *theClass);
@@ -505,13 +505,13 @@
 swift_getObjCClassFromObject(HeapObject *object);
 #endif
 
-/// \brief Fetch a unique type metadata object for a foreign type.
+/// Fetch a unique type metadata object for a foreign type.
 SWIFT_RUNTIME_EXPORT SWIFT_CC(swift)
 MetadataResponse
 swift_getForeignTypeMetadata(MetadataRequest request,
                              ForeignTypeMetadata *nonUnique);
 
-/// \brief Fetch a uniqued metadata for a tuple type.
+/// Fetch a uniqued metadata for a tuple type.
 ///
 /// The labels argument is null if and only if there are no element
 /// labels in the tuple.  Otherwise, it is a null-terminated
@@ -676,17 +676,17 @@
                         const MethodDescriptor *method,
                         const ClassDescriptor *description);
 
-/// \brief Fetch a uniqued metadata for a metatype type.
+/// Fetch a uniqued metadata for a metatype type.
 SWIFT_RUNTIME_EXPORT
 const MetatypeMetadata *
 swift_getMetatypeMetadata(const Metadata *instanceType);
 
-/// \brief Fetch a uniqued metadata for an existential metatype type.
+/// Fetch a uniqued metadata for an existential metatype type.
 SWIFT_RUNTIME_EXPORT
 const ExistentialMetatypeMetadata *
 swift_getExistentialMetatypeMetadata(const Metadata *instanceType);
 
-/// \brief Fetch a uniqued metadata for an existential type. The array
+/// Fetch a uniqued metadata for an existential type. The array
 /// referenced by \c protocols will be sorted in-place.
 SWIFT_RUNTIME_EXPORT
 const ExistentialTypeMetadata *
@@ -695,7 +695,7 @@
                                  size_t numProtocols,
                                  const ProtocolDescriptorRef *protocols);
 
-/// \brief Perform a copy-assignment from one existential container to another.
+/// Perform a copy-assignment from one existential container to another.
 /// Both containers must be of the same existential type representable with the
 /// same number of witness tables.
 SWIFT_RUNTIME_EXPORT
@@ -703,14 +703,14 @@
                                              const OpaqueValue *src,
                                              const Metadata *type);
 
-/// \brief Perform a copy-assignment from one existential container to another.
+/// Perform a copy-assignment from one existential container to another.
 /// Both containers must be of the same existential type representable with no
 /// witness tables.
 OpaqueValue *swift_assignExistentialWithCopy0(OpaqueValue *dest,
                                               const OpaqueValue *src,
                                               const Metadata *type);
 
-/// \brief Perform a copy-assignment from one existential container to another.
+/// Perform a copy-assignment from one existential container to another.
 /// Both containers must be of the same existential type representable with one
 /// witness table.
 OpaqueValue *swift_assignExistentialWithCopy1(OpaqueValue *dest,
diff --git a/include/swift/SIL/BasicBlockUtils.h b/include/swift/SIL/BasicBlockUtils.h
index fe40616..a8c1499 100644
--- a/include/swift/SIL/BasicBlockUtils.h
+++ b/include/swift/SIL/BasicBlockUtils.h
@@ -25,7 +25,7 @@
 class DominanceInfo;
 class SILLoopInfo;
 
-/// \brief Replace a branch target.
+/// Replace a branch target.
 ///
 /// \param T The terminating instruction to modify.
 /// \param edgeIdx The successor edges index that will be replaced.
@@ -39,7 +39,7 @@
 void getEdgeArgs(TermInst *T, unsigned edgeIdx, SILBasicBlock *newEdgeBB,
                  llvm::SmallVectorImpl<SILValue> &args);
 
-/// \brief Splits the edge from terminator.
+/// Splits the edge from terminator.
 ///
 /// Also updates dominance and loop information if not null.
 ///
@@ -48,7 +48,7 @@
                          DominanceInfo *DT = nullptr,
                          SILLoopInfo *LI = nullptr);
 
-/// \brief Merge a basic block ending in a branch with its successor
+/// Merge a basic block ending in a branch with its successor
 /// if possible.
 void mergeBasicBlockWithSingleSuccessor(SILBasicBlock *BB,
                                         SILBasicBlock *succBB);
diff --git a/include/swift/SIL/DynamicCasts.h b/include/swift/SIL/DynamicCasts.h
index aa46086..5d799c1 100644
--- a/include/swift/SIL/DynamicCasts.h
+++ b/include/swift/SIL/DynamicCasts.h
@@ -85,14 +85,14 @@
     SILBasicBlock *falseBB, ProfileCounter TrueCount = ProfileCounter(),
     ProfileCounter FalseCount = ProfileCounter());
 
-/// \brief Does the type conform to the _ObjectiveCBridgeable protocol.
+/// Does the type conform to the _ObjectiveCBridgeable protocol.
 bool isObjectiveCBridgeable(ModuleDecl *M, CanType Ty);
 
-/// \brief Get the bridged NS class of a CF class if it exists. Returns
+/// Get the bridged NS class of a CF class if it exists. Returns
 /// an empty CanType if such class does not exist.
 CanType getNSBridgedClassOfCFClass(ModuleDecl *M, CanType type);
 
-/// \brief Does the type conform to Error.
+/// Does the type conform to Error.
 bool isError(ModuleDecl *M, CanType Ty);
 } // end namespace swift
 
diff --git a/include/swift/SIL/OptimizationRemark.h b/include/swift/SIL/OptimizationRemark.h
index f60e0e5..8d213be 100644
--- a/include/swift/SIL/OptimizationRemark.h
+++ b/include/swift/SIL/OptimizationRemark.h
@@ -31,7 +31,7 @@
 
 namespace OptRemark {
 
-/// \brief Used in the streaming interface as the general argument type.  It
+/// Used in the streaming interface as the general argument type.  It
 /// internally converts everything into a key-value pair.
 struct Argument {
   std::string Key;
@@ -148,7 +148,7 @@
 public:
   Emitter(StringRef PassName, SILModule &M);
 
-  /// \brief Take a lambda that returns a remark which will be emitted.  The
+  /// Take a lambda that returns a remark which will be emitted.  The
   /// lambda is not evaluated unless remarks are enabled.  Second argument is
   /// only used to restrict this to functions.
   template <typename T>
diff --git a/include/swift/SIL/SILBasicBlock.h b/include/swift/SIL/SILBasicBlock.h
index 2a12d9b..c27f9d1 100644
--- a/include/swift/SIL/SILBasicBlock.h
+++ b/include/swift/SIL/SILBasicBlock.h
@@ -132,20 +132,20 @@
     return const_cast<SILBasicBlock *>(this)->getTerminator();
   }
 
-  /// \brief Splits a basic block into two at the specified instruction.
+  /// Splits a basic block into two at the specified instruction.
   ///
   /// Note that all the instructions BEFORE the specified iterator
   /// stay as part of the original basic block. The old basic block is left
   /// without a terminator.
   SILBasicBlock *split(iterator I);
 
-  /// \brief Move the basic block to after the specified basic block in the IR.
+  /// Move the basic block to after the specified basic block in the IR.
   ///
   /// Assumes that the basic blocks must reside in the same function. In asserts
   /// builds, an assert verifies that this is true.
   void moveAfter(SILBasicBlock *After);
 
-  /// \brief Moves the instruction to the iterator in this basic block.
+  /// Moves the instruction to the iterator in this basic block.
   void moveTo(SILBasicBlock::iterator To, SILInstruction *I);
 
   //===--------------------------------------------------------------------===//
@@ -257,7 +257,7 @@
     return insertPhiArgument(Pos, Ty, Kind, D);
   }
 
-  /// \brief Remove all block arguments.
+  /// Remove all block arguments.
   void dropAllArguments() { ArgumentList.clear(); }
 
   //===--------------------------------------------------------------------===//
@@ -311,7 +311,7 @@
     return getTerminator()->getSingleSuccessorBlock();
   }
 
-  /// \brief Returns true if \p BB is a successor of this block.
+  /// Returns true if \p BB is a successor of this block.
   bool isSuccessorBlock(SILBasicBlock *Block) const {
     return getTerminator()->isSuccessorBlock(Block);
   }
@@ -403,7 +403,7 @@
     return &SILBasicBlock::InstList;
   }
 
-  /// \brief Drops all uses that belong to this basic block.
+  /// Drops all uses that belong to this basic block.
   void dropAllReferences() {
     dropAllArguments();
     for (SILInstruction &I : *this)
diff --git a/include/swift/SIL/SILBuilder.h b/include/swift/SIL/SILBuilder.h
index bb13196..75766d9 100644
--- a/include/swift/SIL/SILBuilder.h
+++ b/include/swift/SIL/SILBuilder.h
@@ -380,7 +380,7 @@
     moveBlockTo(BB, BB->getParent()->end());
   }
 
-  /// \brief Move the insertion point to the end of the given block.
+  /// Move the insertion point to the end of the given block.
   ///
   /// Assumes that no insertion point is currently active.
   void emitBlock(SILBasicBlock *BB) {
@@ -388,7 +388,7 @@
     setInsertionPoint(BB);
   }
 
-  /// \brief Branch to the given block if there's an active insertion point,
+  /// Branch to the given block if there's an active insertion point,
   /// then move the insertion point to the end of that block.
   void emitBlock(SILBasicBlock *BB, SILLocation BranchLoc);
 
@@ -2095,7 +2095,8 @@
   /// lowering for the non-address value.
   void emitDestroyValueOperation(SILLocation Loc, SILValue v) {
     assert(!v->getType().isAddress());
-    if (v.getOwnershipKind() == ValueOwnershipKind::Trivial)
+    if (F->hasQualifiedOwnership() &&
+        v.getOwnershipKind() == ValueOwnershipKind::Any)
       return;
     auto &lowering = getTypeLowering(v->getType());
     lowering.emitDestroyValue(*this, Loc, v);
diff --git a/include/swift/SIL/SILCloner.h b/include/swift/SIL/SILCloner.h
index adfef30..9451e1e 100644
--- a/include/swift/SIL/SILCloner.h
+++ b/include/swift/SIL/SILCloner.h
@@ -398,7 +398,7 @@
   void doFixUp(SILFunction *F);
 };
 
-/// \brief A SILBuilder that automatically invokes postprocess on each
+/// A SILBuilder that automatically invokes postprocess on each
 /// inserted instruction.
 template<class SomeSILCloner, unsigned N = 4>
 class SILBuilderWithPostProcess : public SILBuilder {
@@ -711,7 +711,7 @@
   }
 }
 
-/// \brief Clean-up after cloning.
+/// Clean-up after cloning.
 template<typename ImplClass>
 void
 SILCloner<ImplClass>::doFixUp(SILFunction *F) {
@@ -2130,8 +2130,8 @@
   getBuilder().setCurrentDebugScope(getOpScope(Inst->getDebugScope()));
   ValueOwnershipKind Kind = SILValue(Inst).getOwnershipKind();
   if (getOpValue(Inst->getOperand()).getOwnershipKind() ==
-      ValueOwnershipKind::Trivial) {
-    Kind = ValueOwnershipKind::Trivial;
+      ValueOwnershipKind::Any) {
+    Kind = ValueOwnershipKind::Any;
   }
   recordClonedInstruction(Inst, getBuilder().createUncheckedOwnershipConversion(
                                     getOpLocation(Inst->getLoc()),
diff --git a/include/swift/SIL/SILDeclRef.h b/include/swift/SIL/SILDeclRef.h
index b513fac..ba0d151 100644
--- a/include/swift/SIL/SILDeclRef.h
+++ b/include/swift/SIL/SILDeclRef.h
@@ -70,7 +70,7 @@
   ForDefinition = true
 };
 
-/// \brief A key for referencing a Swift declaration in SIL.
+/// A key for referencing a Swift declaration in SIL.
 ///
 /// This can currently be either a reference to a ValueDecl for functions,
 /// methods, constructors, and other named entities, or a reference to a
@@ -85,7 +85,7 @@
   /// Represents the "kind" of the SILDeclRef. For some Swift decls there
   /// are multiple SIL entry points, and the kind is used to distinguish them.
   enum class Kind : unsigned {
-    /// \brief This constant references the FuncDecl or AbstractClosureExpr
+    /// This constant references the FuncDecl or AbstractClosureExpr
     /// in loc.
     Func,
 
@@ -258,13 +258,13 @@
     return kind == Kind::Initializer || kind == Kind::Destroyer;
   }
 
-  /// \brief True if the function should be treated as transparent.
+  /// True if the function should be treated as transparent.
   bool isTransparent() const;
-  /// \brief True if the function should have its body serialized.
+  /// True if the function should have its body serialized.
   IsSerialized_t isSerialized() const;
-  /// \brief True if the function has noinline attribute.
+  /// True if the function has noinline attribute.
   bool isNoinline() const;
-  /// \brief True if the function has __always inline attribute.
+  /// True if the function has __always inline attribute.
   bool isAlwaysInline() const;
   
   /// \return True if the function has an effects attribute.
@@ -273,10 +273,10 @@
   /// \return the effects kind of the function.
   EffectsKind getEffectsAttribute() const;
 
-  /// \brief Return the expected linkage of this declaration.
+  /// Return the expected linkage of this declaration.
   SILLinkage getLinkage(ForDefinition_t forDefinition) const;
 
-  /// \brief Return the hash code for the SIL declaration.
+  /// Return the hash code for the SIL declaration.
   llvm::hash_code getHashCode() const {
     return llvm::hash_combine(loc.getOpaqueValue(),
                               static_cast<int>(kind),
diff --git a/include/swift/SIL/SILFunction.h b/include/swift/SIL/SILFunction.h
index 9157fb4..47fcde4 100644
--- a/include/swift/SIL/SILFunction.h
+++ b/include/swift/SIL/SILFunction.h
@@ -713,7 +713,7 @@
     return EffectsKindAttr != EffectsKind::Unspecified;
   }
 
-  /// \brief Set the function side effect information.
+  /// Set the function side effect information.
   void setEffectsKind(EffectsKind E) {
     EffectsKindAttr = E;
   }
diff --git a/include/swift/SIL/SILInstruction.h b/include/swift/SIL/SILInstruction.h
index b7b1a98..667f4f4 100644
--- a/include/swift/SIL/SILInstruction.h
+++ b/include/swift/SIL/SILInstruction.h
@@ -370,11 +370,11 @@
     None,
     /// The instruction may read memory.
     MayRead,
-    /// \brief The instruction may write to memory.
+    /// The instruction may write to memory.
     MayWrite,
     /// The instruction may read or write memory.
     MayReadWrite,
-    /// \brief The instruction may have side effects not captured
+    /// The instruction may have side effects not captured
     ///        solely by its users. Specifically, it can return,
     ///        release memory, or store. Note, alloc is not considered
     ///        to have side effects because its result/users represent
@@ -430,22 +430,22 @@
   /// the basic block that Earlier lives in, right after Earlier.
   void moveAfter(SILInstruction *Earlier);
 
-  /// \brief Drops all uses that belong to this instruction.
+  /// Drops all uses that belong to this instruction.
   void dropAllReferences();
 
-  /// \brief Replace all uses of all results of this instruction with undef.
+  /// Replace all uses of all results of this instruction with undef.
   void replaceAllUsesOfAllResultsWithUndef();
 
-  /// \brief Replace all uses of all results of this instruction
+  /// Replace all uses of all results of this instruction
   /// with the parwise-corresponding results of the given instruction.
   void replaceAllUsesPairwiseWith(SILInstruction *other);
 
-  /// \brief Replace all uses of all results of this instruction with the
+  /// Replace all uses of all results of this instruction with the
   /// parwise-corresponding results of the passed in array.
   void
   replaceAllUsesPairwiseWith(const llvm::SmallVectorImpl<SILValue> &NewValues);
 
-  /// \brief Are there uses of any of the results of this instruction?
+  /// Are there uses of any of the results of this instruction?
   bool hasUsesOfAnyResult() const {
     for (auto result : getResults()) {
       if (!result->use_empty())
@@ -567,7 +567,7 @@
     return hasIdenticalState(RHS);
   }
 
-  /// \brief Returns true if the instruction may have side effects.
+  /// Returns true if the instruction may have side effects.
   ///
   /// Instructions that store into memory or change retain counts as well as
   /// calls and deallocation instructions are considered to have side effects
@@ -2841,17 +2841,17 @@
   Identifier getName() const { return Name; }
   void setName(Identifier I) { Name = I; }
   
-  /// \brief Looks up the llvm intrinsic ID and type for the builtin function.
+  /// Looks up the llvm intrinsic ID and type for the builtin function.
   ///
   /// \returns Returns llvm::Intrinsic::not_intrinsic if the function is not an
   /// intrinsic. The particular intrinsic functions which correspond to the
   /// returned value are defined in llvm/Intrinsics.h.
   const IntrinsicInfo &getIntrinsicInfo() const;
   
-  /// \brief Looks up the lazily cached identification for the builtin function.
+  /// Looks up the lazily cached identification for the builtin function.
   const BuiltinInfo &getBuiltinInfo() const;
 
-  /// \brief Looks up the llvm intrinsic ID of this builtin. Returns None if
+  /// Looks up the llvm intrinsic ID of this builtin. Returns None if
   /// this is not an intrinsic.
   llvm::Optional<llvm::Intrinsic::ID> getIntrinsicID() const {
     auto I = getIntrinsicInfo();
@@ -2860,7 +2860,7 @@
     return I.ID;
   }
 
-  /// \brief Looks up the BuiltinKind of this builtin. Returns None if this is
+  /// Looks up the BuiltinKind of this builtin. Returns None if this is
   /// not a builtin.
   llvm::Optional<BuiltinValueKind> getBuiltinKind() const {
     auto I = getBuiltinInfo();
@@ -2996,10 +2996,10 @@
                                   const APFloat &Value, SILModule &M);
 
 public:
-  /// \brief Return the APFloat for the underlying FP literal.
+  /// Return the APFloat for the underlying FP literal.
   APFloat getValue() const;
 
-  /// \brief Return the bitcast representation of the FP literal as an APInt.
+  /// Return the bitcast representation of the FP literal as an APInt.
   APInt getBits() const;
 
   ArrayRef<Operand> getAllOperands() const { return {}; }
@@ -5023,7 +5023,7 @@
       : InstructionBase(DebugLoc, ResultTy,
                         Operand
                             ? Operand.getOwnershipKind()
-                            : ValueOwnershipKind(ValueOwnershipKind::Trivial)),
+                            : ValueOwnershipKind(ValueOwnershipKind::Any)),
         Element(Element) {
     if (Operand) {
       OptionalOperand.emplace(this, Operand);
@@ -5252,7 +5252,7 @@
     return getDefaultResult();
   }
   
-  /// \brief If the default refers to exactly one case decl, return it.
+  /// If the default refers to exactly one case decl, return it.
   NullablePtr<EnumElementDecl> getUniqueCaseForDefault();
 
   bool hasDefault() const {
@@ -6723,7 +6723,7 @@
     return const_cast<TermInst *>(this)->getSingleSuccessorBlock();
   }
 
-  /// \brief Returns true if \p BB is a successor of this block.
+  /// Returns true if \p BB is a successor of this block.
   bool isSuccessorBlock(SILBasicBlock *BB) const {
     auto Range = getSuccessorBlocks();
     return any_of(Range, [&BB](const SILBasicBlock *SuccBB) -> bool {
@@ -6940,7 +6940,7 @@
                             ArrayRef<SILValue> Args, SILFunction &F);
 
 public:
-  /// \brief returns jump target for the branch.
+  /// returns jump target for the branch.
   SILBasicBlock *getDestBB() const { return DestBB; }
 
   /// The arguments for the destination BB.
@@ -7249,7 +7249,7 @@
   // Swap the cases at indices \p i and \p j.
   void swapCase(unsigned i, unsigned j);
 
-  /// \brief Return the block that will be branched to on the specified enum
+  /// Return the block that will be branched to on the specified enum
   /// case.
   SILBasicBlock *getCaseDestination(EnumElementDecl *D) {
     for (unsigned i = 0, e = getNumCases(); i != e; ++i) {
@@ -7261,10 +7261,10 @@
     return getDefaultBB();
   }
 
-  /// \brief If the default refers to exactly one case decl, return it.
+  /// If the default refers to exactly one case decl, return it.
   NullablePtr<EnumElementDecl> getUniqueCaseForDefault();
 
-  /// \brief If the given block only has one enum element decl matched to it,
+  /// If the given block only has one enum element decl matched to it,
   /// return it.
   NullablePtr<EnumElementDecl> getUniqueCaseForDestination(SILBasicBlock *BB);
 
diff --git a/include/swift/SIL/SILModule.h b/include/swift/SIL/SILModule.h
index 540407e..97ede7c 100644
--- a/include/swift/SIL/SILModule.h
+++ b/include/swift/SIL/SILModule.h
@@ -73,14 +73,14 @@
 
 /// A stage of SIL processing.
 enum class SILStage {
-  /// \brief "Raw" SIL, emitted by SILGen, but not yet run through guaranteed
+  /// "Raw" SIL, emitted by SILGen, but not yet run through guaranteed
   /// optimization and diagnostic passes.
   ///
   /// Raw SIL does not have fully-constructed SSA and may contain undiagnosed
   /// dataflow errors.
   Raw,
 
-  /// \brief Canonical SIL, which has been run through at least the guaranteed
+  /// Canonical SIL, which has been run through at least the guaranteed
   /// optimization and diagnostic passes.
   ///
   /// Canonical SIL has stricter invariants than raw SIL. It must not contain
@@ -88,7 +88,7 @@
   /// forms.
   Canonical,
 
-  /// \brief Lowered SIL, which has been prepared for IRGen and will no longer
+  /// Lowered SIL, which has been prepared for IRGen and will no longer
   /// be passed to canonical SIL transform passes.
   ///
   /// In lowered SIL, the SILType of all SILValues is its SIL storage
@@ -101,7 +101,7 @@
   Lowered,
 };
 
-/// \brief A SIL module. The SIL module owns all of the SILFunctions generated
+/// A SIL module. The SIL module owns all of the SILFunctions generated
 /// when a Swift compilation context is lowered to SIL.
 class SILModule {
   friend class SILFunctionBuilder;
@@ -312,7 +312,7 @@
   /// Serialize a SIL module using the configured SerializeSILAction.
   void serialize();
 
-  /// \brief This converts Swift types to SILTypes.
+  /// This converts Swift types to SILTypes.
   mutable Lowering::TypeConverter Types;
 
   /// Look up the TypeLowering for a SILType.
@@ -347,7 +347,7 @@
   static std::unique_ptr<SILModule>
   constructSIL(ModuleDecl *M, SILOptions &Options, FileUnit *sf = nullptr);
 
-  /// \brief Create and return an empty SIL module that we can
+  /// Create and return an empty SIL module that we can
   /// later parse SIL bodies directly into, without converting from an AST.
   static std::unique_ptr<SILModule>
   createEmptyModule(ModuleDecl *M, SILOptions &Options,
@@ -584,10 +584,10 @@
   /// Deletes a dead witness table.
   void deleteWitnessTable(SILWitnessTable *Wt);
 
-  /// \brief Return the stage of processing this module is at.
+  /// Return the stage of processing this module is at.
   SILStage getStage() const { return Stage; }
 
-  /// \brief Advance the module to a further stage of processing.
+  /// Advance the module to a further stage of processing.
   void setStage(SILStage s) {
     assert(s >= Stage && "regressing stage?!");
     Stage = s;
@@ -607,7 +607,7 @@
   /// the given module?
   bool isTypeMetadataAccessible(CanType type);
 
-  /// \brief Run the SIL verifier to make sure that all Functions follow
+  /// Run the SIL verifier to make sure that all Functions follow
   /// invariants.
   void verify() const;
 
@@ -671,14 +671,14 @@
   /// Deallocate memory of an instruction.
   void deallocateInst(SILInstruction *I);
 
-  /// \brief Looks up the llvm intrinsic ID and type for the builtin function.
+  /// Looks up the llvm intrinsic ID and type for the builtin function.
   ///
   /// \returns Returns llvm::Intrinsic::not_intrinsic if the function is not an
   /// intrinsic. The particular intrinsic functions which correspond to the
   /// returned value are defined in llvm/Intrinsics.h.
   const IntrinsicInfo &getIntrinsicInfo(Identifier ID);
 
-  /// \brief Looks up the lazily cached identification for the builtin function.
+  /// Looks up the lazily cached identification for the builtin function.
   ///
   /// \returns Returns builtin info of BuiltinValueKind::None kind if the
   /// declaration is not a builtin.
diff --git a/include/swift/SIL/SILSuccessor.h b/include/swift/SIL/SILSuccessor.h
index cab1f58..f0e14af 100644
--- a/include/swift/SIL/SILSuccessor.h
+++ b/include/swift/SIL/SILSuccessor.h
@@ -23,7 +23,7 @@
 class SILBasicBlock;
 class TermInst;
 
-/// \brief An edge in the control flow graph.
+/// An edge in the control flow graph.
 ///
 /// A SILSuccessor is stored in the terminator instruction of the tail block of
 /// the CFG edge. Internally it has a back reference to the terminator that
diff --git a/include/swift/SIL/SILValue.h b/include/swift/SIL/SILValue.h
index 2037dde..29b351a 100644
--- a/include/swift/SIL/SILValue.h
+++ b/include/swift/SIL/SILValue.h
@@ -19,6 +19,7 @@
 
 #include "swift/Basic/Range.h"
 #include "swift/Basic/ArrayRefView.h"
+#include "swift/Basic/STLExtras.h"
 #include "swift/SIL/SILNode.h"
 #include "swift/SIL/SILType.h"
 #include "llvm/ADT/ArrayRef.h"
@@ -86,17 +87,6 @@
 /// have.
 struct ValueOwnershipKind {
   enum innerty : uint8_t {
-    /// A SILValue with Trivial ownership kind is an independent value that can
-    /// not be owned. Ownership does not place any constraints on how a SILValue
-    /// with Trivial ownership kind can be used. Other side effects (e.g. Memory
-    /// dependencies) must still be respected. A SILValue with Trivial ownership
-    /// kind must be of Trivial SILType (i.e. SILType::isTrivial(SILModule &)
-    /// must return true).
-    ///
-    /// Some examples of SIL types with Trivial ownership are: Builtin.Int32,
-    /// Builtin.RawPointer, aggregates containing all trivial types.
-    Trivial,
-
     /// A SILValue with `Unowned` ownership kind is an independent value that
     /// has a lifetime that is only guaranteed to last until the next program
     /// visible side-effect. To maintain the lifetime of an unowned value, it
@@ -127,10 +117,11 @@
     /// instruction exactly once along any path through the program.
     Guaranteed,
 
-    /// A SILValue with undefined ownership. It can pair with /Any/ ownership
-    /// kinds. This means that it could take on /any/ ownership semantics. This
-    /// is meant only to model SILUndef and to express certain situations where
-    /// we use unqualified ownership. Expected to tighten over time.
+    /// A SILValue with Any ownership kind is an independent value outside of
+    /// the ownership system. It is used to model trivially typed values as well
+    /// as trivial cases of non-trivial enums. Naturally Any can be merged with
+    /// any ValueOwnershipKind allowing us to naturally model merge and branch
+    /// points in the SSA graph.
     Any,
 
     LastValueOwnershipKind = Any,
@@ -162,10 +153,6 @@
 
   Optional<ValueOwnershipKind> merge(ValueOwnershipKind RHS) const;
 
-  bool isTrivialOr(ValueOwnershipKind Kind) const {
-    return Value == Trivial || Value == Kind;
-  }
-
   /// Given that there is an aggregate value (like a struct or enum) with this
   /// ownership kind, and a subobject of type Proj is being projected from the
   /// aggregate, return Trivial if Proj has trivial type and the aggregate's
@@ -180,7 +167,6 @@
   /// kinds.
   UseLifetimeConstraint getForwardingLifetimeConstraint() const {
     switch (Value) {
-    case ValueOwnershipKind::Trivial:
     case ValueOwnershipKind::Any:
     case ValueOwnershipKind::Guaranteed:
     case ValueOwnershipKind::Unowned:
@@ -199,12 +185,16 @@
     return merge(other).hasValue();
   }
 
-  /// Returns true if \p Other is compatible with ValueOwnershipKind::Trivial or
-  /// this. See isCompatibleWith for more information on what "compatibility"
-  /// means.
-  bool isTrivialOrCompatibleWith(ValueOwnershipKind other) const {
-    return isCompatibleWith(ValueOwnershipKind::Trivial) ||
-           isCompatibleWith(other);
+  template <typename RangeTy>
+  static Optional<ValueOwnershipKind> merge(RangeTy &&r) {
+    auto initial = Optional<ValueOwnershipKind>(ValueOwnershipKind::Any);
+    return accumulate(
+        std::forward<RangeTy>(r), initial,
+        [](Optional<ValueOwnershipKind> acc, ValueOwnershipKind x) {
+          if (!acc)
+            return acc;
+          return acc.getValue().merge(x);
+        });
   }
 };
 
@@ -247,7 +237,7 @@
   /// results. To replace just one result use SILValue::replaceAllUsesWith.
   void replaceAllUsesWith(ValueBase *RHS);
 
-  /// \brief Replace all uses of this instruction with an undef value of the
+  /// Replace all uses of this instruction with an undef value of the
   /// same type as the result of this instruction.
   void replaceAllUsesWithUndef();
 
@@ -580,7 +570,7 @@
     set(OtherV);
   }
 
-  /// \brief Remove this use of the operand.
+  /// Remove this use of the operand.
   void drop() {
     removeFromCurrent();
     TheValue = SILValue();
diff --git a/include/swift/SIL/TypeLowering.h b/include/swift/SIL/TypeLowering.h
index a64ee94..759243d 100644
--- a/include/swift/SIL/TypeLowering.h
+++ b/include/swift/SIL/TypeLowering.h
@@ -218,13 +218,13 @@
 
   virtual ~TypeLowering() {}
 
-  /// \brief Are r-values of this type passed as arguments indirectly by formal
+  /// Are r-values of this type passed as arguments indirectly by formal
   /// convention?
   ///
   /// This is independent of whether the SIL argument is address type.
   bool isFormallyPassedIndirectly() const { return isAddressOnly(); }
 
-  /// \brief Are r-values of this type returned indirectly by formal convention?
+  /// Are r-values of this type returned indirectly by formal convention?
   ///
   /// This is independent of whether the SIL result is address type.
   bool isFormallyReturnedIndirectly() const { return isAddressOnly(); }
@@ -934,7 +934,7 @@
     NeedsThunk
   };
   
-  /// \brief Test if type1 is ABI compatible with type2, and can be converted
+  /// Test if type1 is ABI compatible with type2, and can be converted
   /// with a trivial bitcast.
   ///
   /// Note that type1 and type2 must be lowered types, and type1 must be a
@@ -946,7 +946,7 @@
   ABIDifference checkForABIDifferences(SILType type1, SILType type2,
                                        bool thunkOptionals = true);
 
-  /// \brief Same as above but for SIL function types.
+  /// Same as above but for SIL function types.
   ABIDifference checkFunctionForABIDifferences(SILFunctionType *fnTy1,
                                                SILFunctionType *fnTy2);
 
diff --git a/include/swift/SIL/TypeSubstCloner.h b/include/swift/SIL/TypeSubstCloner.h
index 22adf0c..13ef594 100644
--- a/include/swift/SIL/TypeSubstCloner.h
+++ b/include/swift/SIL/TypeSubstCloner.h
@@ -30,7 +30,7 @@
 
 namespace swift {
 
-/// \brief A utility class for cloning code while remapping types.
+/// A utility class for cloning code while remapping types.
 ///
 /// \tparam FunctionBuilderTy Function builder type injected by
 /// subclasses. Used to break a circular dependency from SIL <=>
diff --git a/include/swift/SILOptimizer/Analysis/CallerAnalysis.h b/include/swift/SILOptimizer/Analysis/CallerAnalysis.h
index 9b392a3..35ea773 100644
--- a/include/swift/SILOptimizer/Analysis/CallerAnalysis.h
+++ b/include/swift/SILOptimizer/Analysis/CallerAnalysis.h
@@ -25,7 +25,7 @@
 
 namespace swift {
 
-/// \brief A lazy caller analysis that works by only recomputing its state upon
+/// A lazy caller analysis that works by only recomputing its state upon
 /// an ask for information.
 ///
 /// This laziness is implemented by the pass invalidating its internal state for
diff --git a/include/swift/SILOptimizer/Analysis/SimplifyInstruction.h b/include/swift/SILOptimizer/Analysis/SimplifyInstruction.h
index 145e6c9..19ccdd9 100644
--- a/include/swift/SILOptimizer/Analysis/SimplifyInstruction.h
+++ b/include/swift/SILOptimizer/Analysis/SimplifyInstruction.h
@@ -26,7 +26,7 @@
 
 class SILInstruction;
 
-/// \brief Try to simplify the specified instruction, performing local
+/// Try to simplify the specified instruction, performing local
 /// analysis of the operands of the instruction, without looking at its uses
 /// (e.g. constant folding).  If a simpler result can be found, it is
 /// returned, otherwise a null SILValue is returned.
diff --git a/include/swift/SILOptimizer/PassManager/PassManager.h b/include/swift/SILOptimizer/PassManager/PassManager.h
index 3e47268..971d8512 100644
--- a/include/swift/SILOptimizer/PassManager/PassManager.h
+++ b/include/swift/SILOptimizer/PassManager/PassManager.h
@@ -37,7 +37,7 @@
 class IRGenModule;
 }
 
-/// \brief The SIL pass manager.
+/// The SIL pass manager.
 class SILPassManager {
   /// The module that the pass manager will transform.
   SILModule *Mod;
@@ -127,7 +127,7 @@
 
   const SILOptions &getOptions() const;
 
-  /// \brief Searches for an analysis of type T in the list of registered
+  /// Searches for an analysis of type T in the list of registered
   /// analysis. If the analysis is not found, the program terminates.
   template<typename T>
   T *getAnalysis() {
@@ -145,13 +145,13 @@
   /// pass manager.
   irgen::IRGenModule *getIRGenModule() { return IRMod; }
 
-  /// \brief Restart the function pass pipeline on the same function
+  /// Restart the function pass pipeline on the same function
   /// that is currently being processed.
   void restartWithCurrentFunction(SILTransform *T);
   void clearRestartPipeline() { RestartPipeline = false; }
   bool shouldRestartPipeline() { return RestartPipeline; }
 
-  /// \brief Iterate over all analysis and invalidate them.
+  /// Iterate over all analysis and invalidate them.
   void invalidateAllAnalysis() {
     // Invalidate the analysis (unless they are locked)
     for (auto AP : Analyses)
@@ -164,16 +164,16 @@
     CompletedPassesMap.clear();
   }
 
-  /// \brief Notify the pass manager of a newly create function for tracing.
+  /// Notify the pass manager of a newly create function for tracing.
   void notifyOfNewFunction(SILFunction *F, SILTransform *T);
 
-  /// \brief Add the function \p F to the function pass worklist.
+  /// Add the function \p F to the function pass worklist.
   /// If not null, the function \p DerivedFrom is the function from which \p F
   /// is derived. This is used to avoid an infinite amount of functions pushed
   /// on the worklist (e.g. caused by a bug in a specializing optimization).
   void addFunctionToWorklist(SILFunction *F, SILFunction *DerivedFrom);
 
-  /// \brief Iterate over all analysis and notify them of the function.
+  /// Iterate over all analysis and notify them of the function.
   ///
   /// This function does not necessarily have to be newly created function. It
   /// is the job of the analysis to make sure no extra work is done if the
@@ -184,7 +184,7 @@
     }
   }
 
-  /// \brief Broadcast the invalidation of the function to all analysis.
+  /// Broadcast the invalidation of the function to all analysis.
   void invalidateAnalysis(SILFunction *F,
                           SILAnalysis::InvalidationKind K) {
     // Invalidate the analysis (unless they are locked)
@@ -197,7 +197,7 @@
     CompletedPassesMap[F].reset();
   }
 
-  /// \brief Iterate over all analysis and notify them of a change in witness-
+  /// Iterate over all analysis and notify them of a change in witness-
   /// or vtables.
   void invalidateFunctionTables() {
     // Invalidate the analysis (unless they are locked)
@@ -211,7 +211,7 @@
     CompletedPassesMap.clear();
   }
 
-  /// \brief Iterate over all analysis and notify them of a deleted function.
+  /// Iterate over all analysis and notify them of a deleted function.
   void notifyWillDeleteFunction(SILFunction *F) {
     // Invalidate the analysis (unless they are locked)
     for (auto AP : Analyses)
@@ -223,16 +223,16 @@
     CompletedPassesMap[F].reset();
   }
 
-  /// \brief Reset the state of the pass manager and remove all transformation
+  /// Reset the state of the pass manager and remove all transformation
   /// owned by the pass manager. Analysis passes will be kept.
   void resetAndRemoveTransformations();
 
-  /// \brief Set the name of the current optimization stage.
+  /// Set the name of the current optimization stage.
   ///
   /// This is useful for debugging.
   void setStageName(llvm::StringRef NextStage = "");
 
-  /// \brief Get the name of the current optimization stage.
+  /// Get the name of the current optimization stage.
   ///
   /// This is useful for debugging.
   StringRef getStageName() const;
diff --git a/include/swift/SILOptimizer/PassManager/Passes.h b/include/swift/SILOptimizer/PassManager/Passes.h
index 74a55bd..6e92759 100644
--- a/include/swift/SILOptimizer/PassManager/Passes.h
+++ b/include/swift/SILOptimizer/PassManager/Passes.h
@@ -28,40 +28,40 @@
     class IRGenModule;
   }
 
-  /// \brief Run all the SIL diagnostic passes on \p M.
+  /// Run all the SIL diagnostic passes on \p M.
   ///
   /// \returns true if the diagnostic passes produced an error
   bool runSILDiagnosticPasses(SILModule &M);
 
-  /// \brief Prepare SIL for the -O pipeline.
+  /// Prepare SIL for the -O pipeline.
   void runSILOptPreparePasses(SILModule &Module);
 
-  /// \brief Run all the SIL performance optimization passes on \p M.
+  /// Run all the SIL performance optimization passes on \p M.
   void runSILOptimizationPasses(SILModule &M);
 
-  /// \brief Run all SIL passes for -Onone on module \p M.
+  /// Run all SIL passes for -Onone on module \p M.
   void runSILPassesForOnone(SILModule &M);
 
-  /// \brief Run the SIL ownership eliminator pass on \p M.
+  /// Run the SIL ownership eliminator pass on \p M.
   bool runSILOwnershipEliminatorPass(SILModule &M);
 
   void runSILOptimizationPassesWithFileSpecification(SILModule &Module,
                                                      StringRef FileName);
 
-  /// \brief Detect and remove unreachable code. Diagnose provably unreachable
+  /// Detect and remove unreachable code. Diagnose provably unreachable
   /// user code.
   void performSILDiagnoseUnreachable(SILModule *M);
 
-  /// \brief Remove dead functions from \p M.
+  /// Remove dead functions from \p M.
   void performSILDeadFunctionElimination(SILModule *M);
 
-  /// \brief Convert SIL to a lowered form suitable for IRGen.
+  /// Convert SIL to a lowered form suitable for IRGen.
   void runSILLoweringPasses(SILModule &M);
 
-  /// \brief Perform SIL Inst Count on M if needed.
+  /// Perform SIL Inst Count on M if needed.
   void performSILInstCountIfNeeded(SILModule *M);
 
-  /// \brief Identifiers for all passes. Used to procedurally create passes from
+  /// Identifiers for all passes. Used to procedurally create passes from
   /// lists of passes.
   enum class PassKind {
 #define PASS(ID, TAG, NAME) ID,
diff --git a/include/swift/SILOptimizer/PassManager/Transforms.h b/include/swift/SILOptimizer/PassManager/Transforms.h
index 1ad36aa..edc9177 100644
--- a/include/swift/SILOptimizer/PassManager/Transforms.h
+++ b/include/swift/SILOptimizer/PassManager/Transforms.h
@@ -81,7 +81,7 @@
     llvm::StringRef getID() { return PassKindID(getPassKind()); }
 
   protected:
-    /// \brief Searches for an analysis of type T in the list of registered
+    /// Searches for an analysis of type T in the list of registered
     /// analysis. If the analysis is not found, the program terminates.
     template<typename T>
     T* getAnalysis() { return PM->getAnalysis<T>(); }
@@ -107,7 +107,7 @@
 
     void injectFunction(SILFunction *Func) { F = Func; }
 
-    /// \brief Notify the pass manager of a function \p F that needs to be
+    /// Notify the pass manager of a function \p F that needs to be
     /// processed by the function passes and the analyses.
     ///
     /// If not null, the function \p DerivedFrom is the function from which \p F
@@ -120,7 +120,7 @@
       PM->addFunctionToWorklist(F, DerivedFrom);
     }
 
-    /// \brief Reoptimize the current function by restarting the pass
+    /// Reoptimize the current function by restarting the pass
     /// pipeline on it.
     void restartPassPipeline() { PM->restartWithCurrentFunction(this); }
 
diff --git a/include/swift/SILOptimizer/Utils/CFG.h b/include/swift/SILOptimizer/Utils/CFG.h
index fe3581a..13e2532 100644
--- a/include/swift/SILOptimizer/Utils/CFG.h
+++ b/include/swift/SILOptimizer/Utils/CFG.h
@@ -22,7 +22,7 @@
 class SILLoop;
 class SILLoopInfo;
 
-/// \brief Adds a new argument to an edge between a branch and a destination
+/// Adds a new argument to an edge between a branch and a destination
 /// block.
 ///
 /// \param Branch The terminator to add the argument to.
@@ -33,7 +33,7 @@
 TermInst *addNewEdgeValueToBranch(TermInst *Branch, SILBasicBlock *Dest,
                                   SILValue Val);
 
-/// \brief Changes the edge value between a branch and destination basic block
+/// Changes the edge value between a branch and destination basic block
 /// at the specified index. Changes all edges from \p Branch to \p Dest to carry
 /// the value.
 ///
@@ -45,7 +45,7 @@
 TermInst *changeEdgeValue(TermInst *Branch, SILBasicBlock *Dest, size_t Idx,
                           SILValue Val);
 
-/// \brief Replace a branch target.
+/// Replace a branch target.
 ///
 /// \param T The terminating instruction to modify.
 /// \param OldDest The successor block that will be replaced.
@@ -54,10 +54,10 @@
 void replaceBranchTarget(TermInst *T, SILBasicBlock *OldDest,
                          SILBasicBlock *NewDest, bool PreserveArgs);
 
-/// \brief Check if the edge from the terminator is critical.
+/// Check if the edge from the terminator is critical.
 bool isCriticalEdge(TermInst *T, unsigned EdgeIdx);
 
-/// \brief Splits the edge from terminator if it is critical.
+/// Splits the edge from terminator if it is critical.
 ///
 /// Updates dominance information and loop information if not null.
 /// Returns the newly created basic block on success or nullptr otherwise (if
@@ -80,13 +80,13 @@
 bool splitCriticalEdgesFrom(SILBasicBlock *fromBB, DominanceInfo *DT = nullptr,
                             SILLoopInfo *LI = nullptr);
 
-/// \brief Splits the edges between two basic blocks.
+/// Splits the edges between two basic blocks.
 ///
 /// Updates dominance information and loop information if not null.
 void splitEdgesFromTo(SILBasicBlock *From, SILBasicBlock *To,
                       DominanceInfo *DT = nullptr, SILLoopInfo *LI = nullptr);
 
-/// \brief Rotate a loop's header as long as it is exiting and not equal to the
+/// Rotate a loop's header as long as it is exiting and not equal to the
 /// passed basic block.
 /// If \p RotateSingleBlockLoops is true a single basic block loop will be
 /// rotated once. ShouldVerify specifies whether to perform verification after
@@ -96,22 +96,22 @@
                 bool RotateSingleBlockLoops, SILBasicBlock *UpTo,
                 bool ShouldVerify);
 
-/// \brief Splits the basic block before the instruction with an unconditional
+/// Splits the basic block before the instruction with an unconditional
 /// branch and updates the dominator tree and loop info.
 SILBasicBlock *splitBasicBlockAndBranch(SILBuilder &B,
                                         SILInstruction *SplitBeforeInst,
                                         DominanceInfo *DT, SILLoopInfo *LI);
 
-/// \brief Return true if the function has a critical edge, false otherwise.
+/// Return true if the function has a critical edge, false otherwise.
 bool hasCriticalEdges(SILFunction &F, bool OnlyNonCondBr);
 
-/// \brief Split all critical edges in the given function, updating the
+/// Split all critical edges in the given function, updating the
 /// dominator tree and loop information if they are provided.
 ///
 /// FIXME: This should never be called! Fix passes that create critical edges.
 bool splitAllCriticalEdges(SILFunction &F, DominanceInfo *DT, SILLoopInfo *LI);
 
-/// \brief Split all cond_br critical edges with non-trivial arguments in the
+/// Split all cond_br critical edges with non-trivial arguments in the
 /// function updating the dominator tree and loop information (if they are not
 /// set to null).
 ///
@@ -121,7 +121,7 @@
                                                    DominanceInfo *DT,
                                                    SILLoopInfo *LI);
 
-/// \brief Merge a basic block ending in a branch with its successor
+/// Merge a basic block ending in a branch with its successor
 /// if possible. If dominance information or loop info is non null update it.
 /// Return true if block was merged.
 bool mergeBasicBlockWithSuccessor(SILBasicBlock *BB, DominanceInfo *DT,
@@ -167,7 +167,7 @@
     ArrayRef<SILBasicBlock *> UserBlocks, ArrayRef<SILBasicBlock *> DefBlocks,
     llvm::SmallVectorImpl<SILBasicBlock *> &Completion);
 
-/// \brief Remove all unreachable blocks in a function.
+/// Remove all unreachable blocks in a function.
 bool removeUnreachableBlocks(SILFunction &Fn);
 
 } // end namespace swift
diff --git a/include/swift/SILOptimizer/Utils/CastOptimizer.h b/include/swift/SILOptimizer/Utils/CastOptimizer.h
index 49f73711..c8d37ad 100644
--- a/include/swift/SILOptimizer/Utils/CastOptimizer.h
+++ b/include/swift/SILOptimizer/Utils/CastOptimizer.h
@@ -30,7 +30,7 @@
 
 class SILOptFunctionBuilder;
 
-/// \brief This is a helper class used to optimize casts.
+/// This is a helper class used to optimize casts.
 class CastOptimizer {
   SILOptFunctionBuilder &FunctionBuilder;
 
diff --git a/include/swift/SILOptimizer/Utils/Local.h b/include/swift/SILOptimizer/Utils/Local.h
index f0348a0..358bc36 100644
--- a/include/swift/SILOptimizer/Utils/Local.h
+++ b/include/swift/SILOptimizer/Utils/Local.h
@@ -44,15 +44,15 @@
 
 using DeadInstructionSet = llvm::SmallSetVector<SILInstruction *, 8>;
 
-/// \brief Create a retain of \p Ptr before the \p InsertPt.
+/// Create a retain of \p Ptr before the \p InsertPt.
 NullablePtr<SILInstruction> createIncrementBefore(SILValue Ptr,
                                                   SILInstruction *InsertPt);
 
-/// \brief Create a release of \p Ptr before the \p InsertPt.
+/// Create a release of \p Ptr before the \p InsertPt.
 NullablePtr<SILInstruction> createDecrementBefore(SILValue Ptr,
                                                   SILInstruction *InsertPt);
 
-/// \brief For each of the given instructions, if they are dead delete them
+/// For each of the given instructions, if they are dead delete them
 /// along with their dead operands.
 ///
 /// \param I The ArrayRef of instructions to be deleted.
@@ -64,7 +64,7 @@
   ArrayRef<SILInstruction*> I, bool Force = false,
   llvm::function_ref<void(SILInstruction *)> C = [](SILInstruction *){});
 
-/// \brief For each of the given instructions, if they are dead delete them
+/// For each of the given instructions, if they are dead delete them
 /// along with their dead operands.
 ///
 /// \param I The ArrayRef of instructions to be deleted.
@@ -78,7 +78,7 @@
     bool Force = false,
     llvm::function_ref<void(SILInstruction *)> C = [](SILInstruction *) {});
 
-/// \brief If the given instruction is dead, delete it along with its dead
+/// If the given instruction is dead, delete it along with its dead
 /// operands.
 ///
 /// \param I The instruction to be deleted.
@@ -92,27 +92,27 @@
     SILInstruction *I, bool Force = false,
     llvm::function_ref<void(SILInstruction *)> C = [](SILInstruction *) {});
 
-/// \brief Perform a fast local check to see if the instruction is dead.
+/// Perform a fast local check to see if the instruction is dead.
 ///
 /// This routine only examines the state of the instruction at hand.
 bool isInstructionTriviallyDead(SILInstruction *I);
 
-/// \brief Return true if this is a release instruction that's not going to
+/// Return true if this is a release instruction that's not going to
 /// free the object.
 bool isIntermediateRelease(SILInstruction *I, EpilogueARCFunctionInfo *ERFI);
 
-/// \brief Recursively collect all the uses and transitive uses of the
+/// Recursively collect all the uses and transitive uses of the
 /// instruction.
 void
 collectUsesOfValue(SILValue V, llvm::SmallPtrSetImpl<SILInstruction *> &Insts);
 
-/// \brief Recursively erase all of the uses of the instruction (but not the
+/// Recursively erase all of the uses of the instruction (but not the
 /// instruction itself)
 void eraseUsesOfInstruction(
     SILInstruction *Inst,
     llvm::function_ref<void(SILInstruction *)> C = [](SILInstruction *){});
 
-/// \brief Recursively erase all of the uses of the value (but not the
+/// Recursively erase all of the uses of the value (but not the
 /// value itself)
 void eraseUsesOfValue(SILValue V);
 
@@ -140,17 +140,17 @@
 /// after \p ABI and returns it.
 ProjectBoxInst *getOrCreateProjectBox(AllocBoxInst *ABI, unsigned Index);
 
-/// \brief Return true if any call inside the given function may bind dynamic
+/// Return true if any call inside the given function may bind dynamic
 /// 'Self' to a generic argument of the callee.
 bool mayBindDynamicSelf(SILFunction *F);
 
 /// Check whether the \p addr is an address of a tail-allocated array element.
 bool isAddressOfArrayElement(SILValue addr);
 
-/// \brief Move an ApplyInst's FuncRef so that it dominates the call site.
+/// Move an ApplyInst's FuncRef so that it dominates the call site.
 void placeFuncRef(ApplyInst *AI, DominanceInfo *DT);
 
-/// \brief Add an argument, \p val, to the branch-edge that is pointing into
+/// Add an argument, \p val, to the branch-edge that is pointing into
 /// block \p Dest. Return a new instruction and do not erase the old
 /// instruction.
 TermInst *addArgumentToBranch(SILValue Val, SILBasicBlock *Dest,
@@ -163,7 +163,7 @@
 /// undef.
 void clearBlockBody(SILBasicBlock *BB);
 
-/// \brief Get the linkage to be used for specializations of a function with
+/// Get the linkage to be used for specializations of a function with
 /// the given linkage.
 SILLinkage getSpecializedLinkage(SILFunction *F, SILLinkage L);
 
diff --git a/include/swift/SILOptimizer/Utils/SILSSAUpdater.h b/include/swift/SILOptimizer/Utils/SILSSAUpdater.h
index 695d12e..bff40e2 100644
--- a/include/swift/SILOptimizer/Utils/SILSSAUpdater.h
+++ b/include/swift/SILOptimizer/Utils/SILSSAUpdater.h
@@ -63,16 +63,16 @@
       SmallVectorImpl<SILPhiArgument *> *InsertedPHIs = nullptr);
   ~SILSSAUpdater();
 
-  /// \brief Initialize for a use of a value of type.
+  /// Initialize for a use of a value of type.
   void Initialize(SILType T);
 
   bool HasValueForBlock(SILBasicBlock *BB) const;
   void AddAvailableValue(SILBasicBlock *BB, SILValue V);
 
-  /// \brief Construct SSA for a value that is live at the *end* of a basic block.
+  /// Construct SSA for a value that is live at the *end* of a basic block.
   SILValue GetValueAtEndOfBlock(SILBasicBlock *BB);
 
-  /// \brief Construct SSA for a value that is live in the middle of a block.
+  /// Construct SSA for a value that is live in the middle of a block.
   /// This handles the case where the use is before a definition of the value.
   ///  BB1:
   ///    val_1 = def
@@ -95,7 +95,7 @@
   SILValue GetValueAtEndOfBlockInternal(SILBasicBlock *BB);
 };
 
-/// \brief Utility to wrap 'Operand's to deal with invalidation of
+/// Utility to wrap 'Operand's to deal with invalidation of
 /// ValueUseIterators during SSA construction.
 ///
 /// Uses in branches change under us - we need to identify them by an
@@ -123,7 +123,7 @@
 
 public:
 
-  /// \brief Construct a use wrapper. For branches we store information so that
+  /// Construct a use wrapper. For branches we store information so that
   /// we can reconstruct the use after the branch has been modified.
   ///
   /// When a branch is modified existing pointers to the operand
diff --git a/include/swift/Sema/IDETypeChecking.h b/include/swift/Sema/IDETypeChecking.h
index c55dbce..4665320 100644
--- a/include/swift/Sema/IDETypeChecking.h
+++ b/include/swift/Sema/IDETypeChecking.h
@@ -11,7 +11,7 @@
 //===----------------------------------------------------------------------===//
 //
 /// \file
-/// \brief Provides extra type-checking entry points for use during code
+/// Provides extra type-checking entry points for use during code
 /// completion, which happens *without* type-checking an entire file at once.
 //
 //===----------------------------------------------------------------------===//
@@ -36,10 +36,10 @@
   class ValueDecl;
   class DeclName;
 
-  /// \brief Typecheck a declaration parsed during code completion.
+  /// Typecheck a declaration parsed during code completion.
   void typeCheckCompletionDecl(Decl *D);
 
-  /// \brief Check if T1 is convertible to T2.
+  /// Check if T1 is convertible to T2.
   ///
   /// \returns true on convertible, false on not.
   bool isConvertibleTo(Type T1, Type T2, DeclContext &DC);
@@ -74,7 +74,7 @@
   ResolvedMemberResult resolveValueMember(DeclContext &DC, Type BaseTy,
                                          DeclName Name);
 
-  /// \brief Given a type and an extension to the original type decl of that type,
+  /// Given a type and an extension to the original type decl of that type,
   /// decide if the extension has been applied, i.e. if the requirements of the
   /// extension have been fulfilled.
   /// \returns True on applied, false on not applied.
@@ -89,7 +89,7 @@
     KeyPath,
   };
 
-  /// \brief Return the type of an expression parsed during code completion, or
+  /// Return the type of an expression parsed during code completion, or
   /// None on error.
   Optional<Type> getTypeOfCompletionContextExpr(
                    ASTContext &Ctx,
@@ -116,7 +116,7 @@
   bool typeCheckAbstractFunctionBodyUntil(AbstractFunctionDecl *AFD,
                                           SourceLoc EndTypeCheckLoc);
 
-  /// \brief Typecheck top-level code parsed during code completion.
+  /// Typecheck top-level code parsed during code completion.
   ///
   /// \returns true on success, false on error.
   bool typeCheckTopLevelCodeDecl(TopLevelCodeDecl *TLCD);
diff --git a/include/swift/Sema/SourceLoader.h b/include/swift/Sema/SourceLoader.h
index 87047e2..715bc9f 100644
--- a/include/swift/Sema/SourceLoader.h
+++ b/include/swift/Sema/SourceLoader.h
@@ -20,7 +20,7 @@
 class ASTContext;
 class ModuleDecl;
   
-/// \brief Imports serialized Swift modules into an ASTContext.
+/// Imports serialized Swift modules into an ASTContext.
 class SourceLoader : public ModuleLoader {
 private:
   ASTContext &Ctx;
@@ -48,14 +48,14 @@
   SourceLoader &operator=(const SourceLoader &) = delete;
   SourceLoader &operator=(SourceLoader &&) = delete;
 
-  /// \brief Check whether the module with a given name can be imported without
+  /// Check whether the module with a given name can be imported without
   /// importing it.
   ///
   /// Note that even if this check succeeds, errors may still occur if the
   /// module is loaded in full.
   virtual bool canImportModule(std::pair<Identifier, SourceLoc> named) override;
 
-  /// \brief Import a module with the given module path.
+  /// Import a module with the given module path.
   ///
   /// \param importLoc The location of the 'import' keyword.
   ///
@@ -68,7 +68,7 @@
   loadModule(SourceLoc importLoc,
              ArrayRef<std::pair<Identifier, SourceLoc>> path) override;
 
-  /// \brief Load extensions to the given nominal type.
+  /// Load extensions to the given nominal type.
   ///
   /// \param nominal The nominal type whose extensions should be loaded.
   ///
diff --git a/include/swift/Serialization/DeclTypeRecordNodes.def b/include/swift/Serialization/DeclTypeRecordNodes.def
index cb4ba52..8754c5f 100644
--- a/include/swift/Serialization/DeclTypeRecordNodes.def
+++ b/include/swift/Serialization/DeclTypeRecordNodes.def
@@ -11,7 +11,7 @@
 //===----------------------------------------------------------------------===//
 //
 /// \file
-/// \brief Defines macros used for metaprogramming with the serialized records
+/// Defines macros used for metaprogramming with the serialized records
 /// in the "decls-and-types" block of serialized ASTs.
 ///
 /// You should define one of the following sets of macros:
diff --git a/include/swift/Serialization/ModuleFile.h b/include/swift/Serialization/ModuleFile.h
index bcb382b..e0d934b 100644
--- a/include/swift/Serialization/ModuleFile.h
+++ b/include/swift/Serialization/ModuleFile.h
@@ -703,7 +703,7 @@
   /// Note that this may cause other decls to load as well.
   void loadExtensions(NominalTypeDecl *nominal);
 
-  /// \brief Load the methods within the given class that produce
+  /// Load the methods within the given class that produce
   /// Objective-C class or instance methods with the given selector.
   ///
   /// \param classDecl The class in which we are searching for @objc methods.
diff --git a/include/swift/Serialization/ModuleFormat.h b/include/swift/Serialization/ModuleFormat.h
index 4cbb719..4aac6a6 100644
--- a/include/swift/Serialization/ModuleFormat.h
+++ b/include/swift/Serialization/ModuleFormat.h
@@ -11,7 +11,7 @@
 //===----------------------------------------------------------------------===//
 ///
 /// \file
-/// \brief Contains various constants and helper types to deal with serialized
+/// Contains various constants and helper types to deal with serialized
 /// modules.
 ///
 //===----------------------------------------------------------------------===//
@@ -52,7 +52,7 @@
 /// describe what change you made. The content of this comment isn't important;
 /// it just ensures a conflict if two people change the module format.
 /// Don't worry about adhering to the 80-column limit for this line.
-const uint16_t SWIFTMODULE_VERSION_MINOR = 469; // @_hasStorage
+const uint16_t SWIFTMODULE_VERSION_MINOR = 470; // Last change: Remove @trivial
 
 using DeclIDField = BCFixed<31>;
 
diff --git a/include/swift/Subsystems.h b/include/swift/Subsystems.h
index 488f7bb..75be094 100644
--- a/include/swift/Subsystems.h
+++ b/include/swift/Subsystems.h
@@ -86,7 +86,7 @@
   /// compilation.
   bool shouldVerify(const Decl *D, const ASTContext &Context);
 
-  /// \brief Check that the source file is well-formed, aborting and spewing
+  /// Check that the source file is well-formed, aborting and spewing
   /// errors if not.
   ///
   /// "Well-formed" here means following the invariants of the AST, not that the
@@ -96,7 +96,7 @@
 
   /// @}
 
-  /// \brief Parse a single buffer into the given source file.
+  /// Parse a single buffer into the given source file.
   ///
   /// If the source file is the main file, stop parsing after the next
   /// stmt-brace-item with side-effects.
@@ -121,13 +121,13 @@
                            PersistentParserState *PersistentState = nullptr,
                            DelayedParsingCallbacks *DelayedParseCB = nullptr);
 
-  /// \brief Finish the parsing by going over the nodes that were delayed
+  /// Finish the parsing by going over the nodes that were delayed
   /// during the first parsing pass.
   void performDelayedParsing(DeclContext *DC,
                              PersistentParserState &PersistentState,
                              CodeCompletionCallbacksFactory *Factory);
 
-  /// \brief Lex and return a vector of tokens for the given buffer.
+  /// Lex and return a vector of tokens for the given buffer.
   std::vector<Token> tokenize(const LangOptions &LangOpts,
                               const SourceManager &SM, unsigned BufferID,
                               unsigned Offset = 0, unsigned EndOffset = 0,
@@ -207,7 +207,7 @@
   /// Incrementally type-check only added external definitions.
   void typeCheckExternalDefinitions(SourceFile &SF);
 
-  /// \brief Recursively validate the specified type.
+  /// Recursively validate the specified type.
   ///
   /// This is used when dealing with partial source files (e.g. SIL parsing,
   /// code completion).
@@ -217,7 +217,7 @@
                               DeclContext *DC,
                               bool ProduceDiagnostics = true);
 
-  /// \brief Recursively validate the specified type.
+  /// Recursively validate the specified type.
   ///
   /// This is used when dealing with partial source files (e.g. SIL parsing,
   /// code completion).
diff --git a/include/swift/SwiftDemangle/SwiftDemangle.h b/include/swift/SwiftDemangle/SwiftDemangle.h
index fefc9d6..a53b1f4 100644
--- a/include/swift/SwiftDemangle/SwiftDemangle.h
+++ b/include/swift/SwiftDemangle/SwiftDemangle.h
@@ -37,7 +37,7 @@
 extern "C" {
 #endif
 
-/// \brief Demangle Swift function names.
+/// Demangle Swift function names.
 ///
 /// \returns the length of the demangled function name (even if greater than the
 /// size of the output buffer) or 0 if the input is not a Swift-mangled function
@@ -46,7 +46,7 @@
 size_t swift_demangle_getDemangledName(const char *MangledName,
                                        char *OutputBuffer, size_t Length);
 
-/// \brief Demangle Swift function names with module names and implicit self
+/// Demangle Swift function names with module names and implicit self
 /// and metatype type names in function signatures stripped.
 ///
 /// \returns the length of the demangled function name (even if greater than the
@@ -57,7 +57,7 @@
                                                  char *OutputBuffer,
                                                  size_t Length);
 
-/// \brief Demangles a Swift function name and returns true if the function
+/// Demangles a Swift function name and returns true if the function
 /// conforms to the Swift calling convention.
 ///
 /// \returns true if the function conforms to the Swift calling convention.
@@ -88,7 +88,7 @@
 extern "C" {
 #endif
 
-/// \brief Demangle Swift function names.
+/// Demangle Swift function names.
 ///
 /// Note that this function has a generic name because it is called from
 /// contexts where it is not appropriate to use code names.
diff --git a/include/swift/SwiftRemoteMirror/SwiftRemoteMirrorTypes.h b/include/swift/SwiftRemoteMirror/SwiftRemoteMirrorTypes.h
index ef720b8..83e9daa 100644
--- a/include/swift/SwiftRemoteMirror/SwiftRemoteMirrorTypes.h
+++ b/include/swift/SwiftRemoteMirror/SwiftRemoteMirrorTypes.h
@@ -26,13 +26,13 @@
 
 typedef uintptr_t swift_typeref_t;
 
-/// \brief Represents one of the Swift reflection sections of an image.
+/// Represents one of the Swift reflection sections of an image.
 typedef struct swift_reflection_section {
   void *Begin;
   void *End;
 } swift_reflection_section_t;
 
-/// \brief Represents the set of Swift reflection sections of an image.
+/// Represents the set of Swift reflection sections of an image.
 /// Not all sections may be present.
 typedef struct swift_reflection_info {
   struct {
@@ -140,7 +140,7 @@
   swift_typeref_t TR;
 } swift_childinfo_t;
 
-/// \brief An opaque pointer to a context which maintains state and
+/// An opaque pointer to a context which maintains state and
 /// caching of reflection structure for heap instances.
 typedef struct SwiftReflectionContext *SwiftReflectionContextRef;
 
diff --git a/lib/AST/ASTContext.cpp b/lib/AST/ASTContext.cpp
index 1589086..4675171 100644
--- a/lib/AST/ASTContext.cpp
+++ b/lib/AST/ASTContext.cpp
@@ -219,23 +219,23 @@
   //    -> Builtin.Int1
   FuncDecl *IsOSVersionAtLeastDecl = nullptr;
   
-  /// \brief The set of known protocols, lazily populated as needed.
+  /// The set of known protocols, lazily populated as needed.
   ProtocolDecl *KnownProtocols[NumKnownProtocols] = { };
 
-  /// \brief The various module loaders that import external modules into this
+  /// The various module loaders that import external modules into this
   /// ASTContext.
   SmallVector<std::unique_ptr<swift::ModuleLoader>, 4> ModuleLoaders;
 
-  /// \brief The module loader used to load Clang modules.
+  /// The module loader used to load Clang modules.
   ClangModuleLoader *TheClangModuleLoader = nullptr;
 
-  /// \brief Map from Swift declarations to raw comments.
+  /// Map from Swift declarations to raw comments.
   llvm::DenseMap<const Decl *, RawComment> RawComments;
 
-  /// \brief Map from Swift declarations to brief comments.
+  /// Map from Swift declarations to brief comments.
   llvm::DenseMap<const Decl *, StringRef> BriefComments;
 
-  /// \brief Map from declarations to foreign error conventions.
+  /// Map from declarations to foreign error conventions.
   /// This applies to both actual imported functions and to @objc functions.
   llvm::DenseMap<const AbstractFunctionDecl *,
                  ForeignErrorConvention> ForeignErrorConventions;
@@ -290,7 +290,7 @@
                  ProtocolConformanceRef>
     DefaultAssociatedConformanceWitnesses;
 
-  /// \brief Structure that captures data that is segregated into different
+  /// Structure that captures data that is segregated into different
   /// arenas.
   struct Arena {
     llvm::DenseMap<Type, ErrorType *> ErrorTypesWithOriginal;
@@ -391,7 +391,7 @@
 
   llvm::StringMap<OptionSet<SearchPathKind>> SearchPathsSet;
 
-  /// \brief The permanent arena.
+  /// The permanent arena.
   Arena Permanent;
 
   /// Temporary arena used for a constraint solver.
@@ -408,7 +408,7 @@
     ConstraintSolverArena &operator=(ConstraintSolverArena &&) = delete;
   };
 
-  /// \brief The current constraint solver arena, if any.
+  /// The current constraint solver arena, if any.
   std::unique_ptr<ConstraintSolverArena> CurrentConstraintSolverArena;
 
   Arena &getArena(AllocationArena arena) {
@@ -1380,6 +1380,7 @@
 void ASTContext::addSynthesizedDecl(Decl *decl) {
   auto *mod = cast<FileUnit>(decl->getDeclContext()->getModuleScopeContext());
   if (mod->getKind() == FileUnitKind::ClangModule ||
+      mod->getKind() == FileUnitKind::DWARFModule ||
       mod->getKind() == FileUnitKind::SerializedAST) {
     ExternalDefinitions.insert(decl);
     return;
@@ -1396,7 +1397,7 @@
   return Diags.hadAnyError();
 }
 
-/// \brief Retrieve the arena from which we should allocate storage for a type.
+/// Retrieve the arena from which we should allocate storage for a type.
 static AllocationArena getArena(RecursiveTypeProperties properties) {
   bool hasTypeVariable = properties.hasTypeVariable();
   return hasTypeVariable? AllocationArena::ConstraintSolver
@@ -1422,11 +1423,10 @@
 
 void ASTContext::addModuleLoader(std::unique_ptr<ModuleLoader> loader,
                                  bool IsClang) {
-  if (IsClang) {
-    assert(!getImpl().TheClangModuleLoader && "Already have a Clang module loader");
+  if (IsClang && !getImpl().TheClangModuleLoader)
     getImpl().TheClangModuleLoader =
-      static_cast<ClangModuleLoader *>(loader.get());
-  }
+        static_cast<ClangModuleLoader *>(loader.get());
+
   getImpl().ModuleLoaders.push_back(std::move(loader));
 }
 
diff --git a/lib/AST/ASTMangler.cpp b/lib/AST/ASTMangler.cpp
index e621748..12d74ed 100644
--- a/lib/AST/ASTMangler.cpp
+++ b/lib/AST/ASTMangler.cpp
@@ -1309,7 +1309,8 @@
   // Clang decls. Check getKind() directly to avoid a layering dependency.
   //   known-context ::= 'SC'
   if (auto file = dyn_cast<FileUnit>(decl->getDeclContext())) {
-    if (file->getKind() == FileUnitKind::ClangModule) {
+    if (file->getKind() == FileUnitKind::ClangModule ||
+        file->getKind() == FileUnitKind::DWARFModule) {
       if (decl->getClangDecl())
         return ASTMangler::ObjCContext;
       return ASTMangler::ClangImporterContext;
@@ -2273,7 +2274,8 @@
 
     bool needsModule = true;
     if (auto *file = dyn_cast<FileUnit>(topLevelContext)) {
-      if (file->getKind() == FileUnitKind::ClangModule) {
+      if (file->getKind() == FileUnitKind::ClangModule ||
+          file->getKind() == FileUnitKind::DWARFModule) {
         if (conformance->getProtocol()->hasClangNode())
           appendOperator("So");
         else
diff --git a/lib/AST/ASTNode.cpp b/lib/AST/ASTNode.cpp
index f182f01..b5af788 100644
--- a/lib/AST/ASTNode.cpp
+++ b/lib/AST/ASTNode.cpp
@@ -32,12 +32,12 @@
   llvm_unreachable("unsupported AST node");
 }
 
-/// \brief Return the location of the start of the statement.
+/// Return the location of the start of the statement.
 SourceLoc ASTNode::getStartLoc() const {
   return getSourceRange().Start;
 }
 
-/// \brief Return the location of the end of the statement.
+/// Return the location of the end of the statement.
 SourceLoc ASTNode::getEndLoc() const {
   return getSourceRange().End;
 }
diff --git a/lib/AST/ASTPrinter.cpp b/lib/AST/ASTPrinter.cpp
index 1c6f0b7..50bc61f 100644
--- a/lib/AST/ASTPrinter.cpp
+++ b/lib/AST/ASTPrinter.cpp
@@ -418,7 +418,7 @@
 }
 
 namespace {
-/// \brief AST pretty-printer.
+/// AST pretty-printer.
 class PrintAST : public ASTVisitor<PrintAST> {
   ASTPrinter &Printer;
   PrintOptions Options;
@@ -428,7 +428,7 @@
 
   friend DeclVisitor<PrintAST>;
 
-  /// \brief RAII object that increases the indentation level.
+  /// RAII object that increases the indentation level.
   class IndentRAII {
     PrintAST &Self;
     bool DoIndent;
@@ -446,12 +446,12 @@
     }
   };
 
-  /// \brief Indent the current number of indentation spaces.
+  /// Indent the current number of indentation spaces.
   void indent() {
     Printer.setIndent(IndentLevel);
   }
 
-  /// \brief Record the location of this declaration, which is about to
+  /// Record the location of this declaration, which is about to
   /// be printed, marking the name and signature end locations.
   template<typename FnTy>
   void recordDeclLoc(Decl *decl, const FnTy &NameFn,
@@ -758,7 +758,7 @@
                           ArrayRef<AnyFunctionType::Param> params,
                           bool isAPINameByDefault);
 
-  /// \brief Print the function parameters in curried or selector style,
+  /// Print the function parameters in curried or selector style,
   /// to match the original function declaration.
   void printFunctionParameters(AbstractFunctionDecl *AFD);
 
@@ -1406,13 +1406,10 @@
         }
       } else {
         Printer.callPrintStructurePre(PrintStructureKind::GenericRequirement);
-        if (second) {
-          Requirement substReq(req.getKind(), first, second);
-          printRequirement(substReq);
-        } else {
-          Requirement substReq(req.getKind(), first, req.getLayoutConstraint());
-          printRequirement(substReq);
-        }
+
+        // We don't substitute type for the printed requirement so that the
+        // printed requirement agrees with separately reported generic parameters.
+        printRequirement(req);
         Printer.printStructurePost(PrintStructureKind::GenericRequirement);
       }
     }
@@ -3354,7 +3351,8 @@
 
     // Don't print qualifiers for imported types.
     for (auto File : M->getFiles()) {
-      if (File->getKind() == FileUnitKind::ClangModule)
+      if (File->getKind() == FileUnitKind::ClangModule ||
+          File->getKind() == FileUnitKind::DWARFModule)
         return false;
     }
 
@@ -4160,11 +4158,15 @@
 
 void GenericSignature::print(raw_ostream &OS, PrintOptions Opts) const {
   StreamPrinter Printer(OS);
-  PrintAST(Printer, Opts)
-      .printGenericSignature(this,
-                             PrintAST::PrintParams |
-                             PrintAST::PrintRequirements);
+  print(Printer, Opts);
 }
+
+void GenericSignature::print(ASTPrinter &Printer, PrintOptions Opts) const {
+  PrintAST(Printer, Opts).printGenericSignature(this,
+                                                PrintAST::PrintParams |
+                                                PrintAST::PrintRequirements);
+}
+
 void GenericSignature::dump() const {
   print(llvm::errs());
   llvm::errs() << '\n';
diff --git a/lib/AST/ASTVerifier.cpp b/lib/AST/ASTVerifier.cpp
index e989eb2..496d6aa 100644
--- a/lib/AST/ASTVerifier.cpp
+++ b/lib/AST/ASTVerifier.cpp
@@ -222,20 +222,20 @@
   const bool HadError;
   SmallVector<bool, 8> InImplicitBraceStmt;
 
-  /// \brief The stack of functions we're visiting.
+  /// The stack of functions we're visiting.
   SmallVector<DeclContext *, 4> Functions;
 
-  /// \brief The stack of scopes we're visiting.
+  /// The stack of scopes we're visiting.
   using ScopeLike = llvm::PointerUnion<DeclContext *, BraceStmt *>;
   SmallVector<ScopeLike, 4> Scopes;
 
   /// The stack of generic environments.
   SmallVector<LazyGenericEnvironment, 2> GenericEnv;
 
-  /// \brief The stack of optional evaluations active at this point.
+  /// The stack of optional evaluations active at this point.
   SmallVector<OptionalEvaluationExpr *, 4> OptionalEvaluations;
 
-  /// \brief The set of opaque value expressions active at this point.
+  /// The set of opaque value expressions active at this point.
   llvm::DenseMap<OpaqueValueExpr *, unsigned> OpaqueValues;
 
   /// The set of opened existential archetypes that are currently
@@ -3580,7 +3580,7 @@
                         [&]{ D->print(Out); });
     }
 
-    /// \brief Verify that the given source ranges is contained within the
+    /// Verify that the given source ranges is contained within the
     /// parent's source range.
     void checkSourceRanges(SourceRange Current, ASTWalker::ParentTy Parent,
                            llvm::function_ref<void()> printEntity) {
diff --git a/lib/AST/ASTWalker.cpp b/lib/AST/ASTWalker.cpp
index c9b0610..a7f391d 100644
--- a/lib/AST/ASTWalker.cpp
+++ b/lib/AST/ASTWalker.cpp
@@ -75,7 +75,7 @@
 
   ASTWalker &Walker;
   
-  /// \brief RAII object that sets the parent of the walk context 
+  /// RAII object that sets the parent of the walk context 
   /// appropriately.
   class SetParentRAII {
     ASTWalker &Walker;
diff --git a/lib/AST/Decl.cpp b/lib/AST/Decl.cpp
index 3fc2e04..a727882 100644
--- a/lib/AST/Decl.cpp
+++ b/lib/AST/Decl.cpp
@@ -3910,15 +3910,22 @@
   return Bits.ProtocolDecl.RequiresClass;
 }
 
+bool ProtocolDecl::requiresSelfConformanceWitnessTable() const {
+  return isSpecificProtocol(KnownProtocolKind::Error);
+}
+
 bool ProtocolDecl::existentialConformsToSelfSlow() {
   // Assume for now that the existential conforms to itself; this
   // prevents circularity issues.
   Bits.ProtocolDecl.ExistentialConformsToSelfValid = true;
   Bits.ProtocolDecl.ExistentialConformsToSelf = true;
 
+  // If it's not @objc, it conforms to itself only if it has a
+  // self-conformance witness table.
   if (!isObjC()) {
-    Bits.ProtocolDecl.ExistentialConformsToSelf = false;
-    return false;
+    bool hasSelfConformance = requiresSelfConformanceWitnessTable();
+    Bits.ProtocolDecl.ExistentialConformsToSelf = hasSelfConformance;
+    return hasSelfConformance;
   }
 
   // Check whether this protocol conforms to itself.
@@ -4567,7 +4574,7 @@
   setInterfaceType(ErrorType::get(Ctx));
 }
 
-/// \brief Returns whether the var is settable in the specified context: this
+/// Returns whether the var is settable in the specified context: this
 /// is either because it is a stored var, because it has a custom setter, or
 /// is a let member in an initializer.
 bool VarDecl::isSettable(const DeclContext *UseDC,
@@ -4898,7 +4905,7 @@
 }
 
 
-/// \brief Retrieve the type of 'self' for the given context.
+/// Retrieve the type of 'self' for the given context.
 Type DeclContext::getSelfTypeInContext() const {
   assert(isTypeContext());
 
@@ -4912,7 +4919,7 @@
   return getDeclaredTypeInContext();
 }
 
-/// \brief Retrieve the interface type of 'self' for the given context.
+/// Retrieve the interface type of 'self' for the given context.
 Type DeclContext::getSelfInterfaceType() const {
   assert(isTypeContext());
 
diff --git a/lib/AST/DeclContext.cpp b/lib/AST/DeclContext.cpp
index 07d3223..05be882 100644
--- a/lib/AST/DeclContext.cpp
+++ b/lib/AST/DeclContext.cpp
@@ -537,6 +537,7 @@
       break;
     case FileUnitKind::SerializedAST:
     case FileUnitKind::ClangModule:
+    case FileUnitKind::DWARFModule:
       OS << " file=\"" << cast<LoadedFile>(this)->getFilename() << "\"";
       break;
     }
diff --git a/lib/AST/DiagnosticEngine.cpp b/lib/AST/DiagnosticEngine.cpp
index 0d84111..61d031b 100644
--- a/lib/AST/DiagnosticEngine.cpp
+++ b/lib/AST/DiagnosticEngine.cpp
@@ -113,14 +113,14 @@
   return CharSourceRange(SM, Start, End);
 }
 
-/// \brief Extract a character at \p Loc. If \p Loc is the end of the buffer,
+/// Extract a character at \p Loc. If \p Loc is the end of the buffer,
 /// return '\f'.
 static char extractCharAfter(SourceManager &SM, SourceLoc Loc) {
   auto chars = SM.extractText({Loc, 1});
   return chars.empty() ? '\f' : chars[0];
 }
 
-/// \brief Extract a character immediately before \p Loc. If \p Loc is the
+/// Extract a character immediately before \p Loc. If \p Loc is the
 /// start of the buffer, return '\f'.
 static char extractCharBefore(SourceManager &SM, SourceLoc Loc) {
   // We have to be careful not to go off the front of the buffer.
@@ -150,7 +150,7 @@
   return *this;
 }
 
-/// \brief Add an insertion fix-it to the currently-active diagnostic.  The
+/// Add an insertion fix-it to the currently-active diagnostic.  The
 /// text is inserted immediately *after* the token specified.
 ///
 InFlightDiagnostic &InFlightDiagnostic::fixItInsertAfter(SourceLoc L,
@@ -159,7 +159,7 @@
   return fixItInsert(L, Str);
 }
 
-/// \brief Add a token-based removal fix-it to the currently-active
+/// Add a token-based removal fix-it to the currently-active
 /// diagnostic.
 InFlightDiagnostic &InFlightDiagnostic::fixItRemove(SourceRange R) {
   assert(IsActive && "Cannot modify an inactive diagnostic");
@@ -261,7 +261,7 @@
   return hadError;
 }
 
-/// \brief Skip forward to one of the given delimiters.
+/// Skip forward to one of the given delimiters.
 ///
 /// \param Text The text to search through, which will be updated to point
 /// just after the delimiter.
@@ -385,7 +385,7 @@
   return true;
 }
 
-/// \brief Format a single diagnostic argument and write it to the given
+/// Format a single diagnostic argument and write it to the given
 /// stream.
 static void formatDiagnosticArgument(StringRef Modifier, 
                                      StringRef ModifierArguments,
@@ -529,7 +529,7 @@
   }
 }
 
-/// \brief Format the given diagnostic text and place the result in the given
+/// Format the given diagnostic text and place the result in the given
 /// buffer.
 void DiagnosticEngine::formatDiagnosticText(
     llvm::raw_ostream &Out, StringRef InText, ArrayRef<DiagnosticArgument> Args,
diff --git a/lib/AST/LookupVisibleDecls.cpp b/lib/AST/LookupVisibleDecls.cpp
index 8acde2c..b227443 100644
--- a/lib/AST/LookupVisibleDecls.cpp
+++ b/lib/AST/LookupVisibleDecls.cpp
@@ -216,7 +216,7 @@
   removeShadowedDecls(FoundDecls, CurrDC->getParentModule());
 }
 
-/// \brief Enumerate immediate members of the type \c LookupType and its
+/// Enumerate immediate members of the type \c LookupType and its
 /// extensions, as seen from the context \c CurrDC.
 ///
 /// Don't do lookup into superclasses or implemented protocols.  Uses
@@ -920,7 +920,7 @@
 };
 } // end anonymous namespace
 
-/// \brief Enumerate all members in \c BaseTy (including members of extensions,
+/// Enumerate all members in \c BaseTy (including members of extensions,
 /// superclasses and implemented protocols), as seen from the context \c CurrDC.
 ///
 /// This operation corresponds to a standard "dot" lookup operation like "a.b"
diff --git a/lib/AST/Module.cpp b/lib/AST/Module.cpp
index 53c091d..a76b32e 100644
--- a/lib/AST/Module.cpp
+++ b/lib/AST/Module.cpp
@@ -585,6 +585,15 @@
   // existential to an archetype parameter, so for now we restrict this to
   // @objc protocols.
   if (!layout.isObjC()) {
+    // There's a specific exception for protocols with self-conforming
+    // witness tables, but the existential has to be *exactly* that type.
+    // TODO: synthesize witness tables on-demand for protocol compositions
+    // that can satisfy the requirement.
+    if (protocol->requiresSelfConformanceWitnessTable() &&
+        type->is<ProtocolType>() &&
+        type->castTo<ProtocolType>()->getDecl() == protocol)
+      return ProtocolConformanceRef(protocol);
+
     return None;
   }
 
@@ -676,7 +685,7 @@
   auto nominal = type->getAnyNominal();
 
   // If we don't have a nominal type, there are no conformances.
-  if (!nominal) return None;
+  if (!nominal || isa<ProtocolDecl>(nominal)) return None;
 
   // Find the (unspecialized) conformance.
   SmallVector<ProtocolConformance *, 2> conformances;
@@ -876,6 +885,7 @@
     break;
   case FileUnitKind::SerializedAST:
   case FileUnitKind::ClangModule:
+  case FileUnitKind::DWARFModule:
     return OperatorLookup<OP_DECL>::lookup(cast<LoadedFile>(File), Name);
   }
 
diff --git a/lib/AST/NameLookup.cpp b/lib/AST/NameLookup.cpp
index 6f46836..f2a4629 100644
--- a/lib/AST/NameLookup.cpp
+++ b/lib/AST/NameLookup.cpp
@@ -1250,10 +1250,10 @@
   /// Update a lookup table with members from newly-added extensions.
   void updateLookupTable(NominalTypeDecl *nominal);
 
-  /// \brief Add the given member to the lookup table.
+  /// Add the given member to the lookup table.
   void addMember(Decl *members);
 
-  /// \brief Add the given members to the lookup table.
+  /// Add the given members to the lookup table.
   void addMembers(DeclRange members);
 
   /// Iterator into the lookup table.
@@ -1290,7 +1290,7 @@
     dump(llvm::errs());
   }
 
-  // \brief Mark all Decls in this table as not-resident in a table, drop
+  // Mark all Decls in this table as not-resident in a table, drop
   // references to them. Should only be called when this was not fully-populated
   // from an IterableDeclContext.
   void clear() {
diff --git a/lib/AST/Pattern.cpp b/lib/AST/Pattern.cpp
index 94c0f8d..81a2ad4 100644
--- a/lib/AST/Pattern.cpp
+++ b/lib/AST/Pattern.cpp
@@ -194,7 +194,7 @@
 } // end anonymous namespace
 
 
-/// \brief apply the specified function to all variables referenced in this
+/// apply the specified function to all variables referenced in this
 /// pattern.
 void Pattern::forEachVariable(llvm::function_ref<void(VarDecl *)> fn) const {
   switch (getKind()) {
@@ -239,7 +239,7 @@
   }
 }
 
-/// \brief apply the specified function to all pattern nodes recursively in
+/// apply the specified function to all pattern nodes recursively in
 /// this pattern.  This is a pre-order traversal.
 void Pattern::forEachNode(llvm::function_ref<void(Pattern*)> f) {
   f(this);
diff --git a/lib/AST/ProtocolConformance.cpp b/lib/AST/ProtocolConformance.cpp
index d40616d..3d61508 100644
--- a/lib/AST/ProtocolConformance.cpp
+++ b/lib/AST/ProtocolConformance.cpp
@@ -1297,7 +1297,8 @@
   // via the Clang importer, don't add any synthesized conformances.
   auto *file = cast<FileUnit>(getModuleScopeContext());
   if (file->getKind() != FileUnitKind::Source &&
-      file->getKind() != FileUnitKind::ClangModule) {
+      file->getKind() != FileUnitKind::ClangModule &&
+      file->getKind() != FileUnitKind::DWARFModule) {
     return;
   }
 
@@ -1432,9 +1433,12 @@
   if (!nominal)
     return result;
 
-  // Protocols don't have conformances.
-  if (isa<ProtocolDecl>(nominal))
+  // Protocols only have self-conformances.
+  if (auto protocol = dyn_cast<ProtocolDecl>(nominal)) {
+    if (protocol->requiresSelfConformanceWitnessTable())
+      return { protocol->getASTContext().getSelfConformance(protocol) };
     return { };
+  }
 
   // Update to record all potential conformances.
   nominal->prepareConformanceTable();
diff --git a/lib/AST/Type.cpp b/lib/AST/Type.cpp
index 9406e42..1f40279 100644
--- a/lib/AST/Type.cpp
+++ b/lib/AST/Type.cpp
@@ -542,7 +542,7 @@
   return false;
 }
 
-/// \brief Check if this type is equal to Swift.Bool.
+/// Check if this type is equal to Swift.Bool.
 bool TypeBase::isBool() {
   if (auto NTD = getAnyNominal())
     if (isa<StructDecl>(NTD))
@@ -864,7 +864,7 @@
   return this;
 }
 
-/// \brief Collect the protocols in the existential type T into the given
+/// Collect the protocols in the existential type T into the given
 /// vector.
 static void addProtocols(Type T,
                          SmallVectorImpl<ProtocolDecl *> &Protocols,
@@ -890,7 +890,7 @@
   Superclass = T;
 }
 
-/// \brief Add the protocol (or protocols) in the type T to the stack of
+/// Add the protocol (or protocols) in the type T to the stack of
 /// protocols, checking whether any of the protocols had already been seen and
 /// zapping those in the original list that we find again.
 static void
@@ -2474,7 +2474,7 @@
 }
 
 namespace {
-  /// \brief Function object that orders archetypes by name.
+  /// Function object that orders archetypes by name.
   struct OrderArchetypeByName {
     bool operator()(std::pair<Identifier, Type> X,
                     std::pair<Identifier, Type> Y) const {
diff --git a/lib/Basic/Default/TaskQueue.inc b/lib/Basic/Default/TaskQueue.inc
index a01843e..a9e4a75 100644
--- a/lib/Basic/Default/TaskQueue.inc
+++ b/lib/Basic/Default/TaskQueue.inc
@@ -11,7 +11,7 @@
 //===----------------------------------------------------------------------===//
 ///
 /// \file
-/// \brief This file contains a platform-agnostic implementation of TaskQueue
+/// This file contains a platform-agnostic implementation of TaskQueue
 /// using the functions from llvm/Support/Program.h.
 ///
 /// \note The default implementation of TaskQueue does not support parallel
diff --git a/lib/Basic/TaskQueue.cpp b/lib/Basic/TaskQueue.cpp
index 4573d2c..6f18d0f 100644
--- a/lib/Basic/TaskQueue.cpp
+++ b/lib/Basic/TaskQueue.cpp
@@ -11,7 +11,7 @@
 //===----------------------------------------------------------------------===//
 ///
 /// \file
-/// \brief This file includes the appropriate platform-specific TaskQueue
+/// This file includes the appropriate platform-specific TaskQueue
 /// implementation (or the default serial fallback if one is not available),
 /// as well as any platform-agnostic TaskQueue functionality.
 ///
diff --git a/lib/Basic/Unix/TaskQueue.inc b/lib/Basic/Unix/TaskQueue.inc
index 07410f9..9afe1eb 100644
--- a/lib/Basic/Unix/TaskQueue.inc
+++ b/lib/Basic/Unix/TaskQueue.inc
@@ -123,18 +123,18 @@
   int getPipe() const { return Pipe; }
   int getErrorPipe() const { return ErrorPipe; }
 
-  /// \brief Begins execution of this Task.
+  /// Begins execution of this Task.
   /// \returns true on error.
   bool execute();
 
-  /// \brief Reads data from the pipes, if any is available.
+  /// Reads data from the pipes, if any is available.
   ///
   /// If \p UntilEnd is true, reads until the end of the stream; otherwise reads
   /// once (possibly with a retry on EINTR), and returns.
   /// \returns true on error.
   bool readFromPipes(bool UntilEnd);
 
-  /// \brief Performs any post-execution work for this Task, such as reading
+  /// Performs any post-execution work for this Task, such as reading
   /// piped output and closing the pipe.
   void finishExecution();
 };
diff --git a/lib/CMakeLists.txt b/lib/CMakeLists.txt
index 5a66ddb..4f25fbb 100644
--- a/lib/CMakeLists.txt
+++ b/lib/CMakeLists.txt
@@ -19,6 +19,7 @@
 add_subdirectory(ClangImporter)
 add_subdirectory(Demangling)
 add_subdirectory(Driver)
+add_subdirectory(DWARFImporter)
 add_subdirectory(Frontend)
 add_subdirectory(FrontendTool)
 add_subdirectory(Index)
diff --git a/lib/ClangImporter/ImportDecl.cpp b/lib/ClangImporter/ImportDecl.cpp
index c601288..efb58c1 100644
--- a/lib/ClangImporter/ImportDecl.cpp
+++ b/lib/ClangImporter/ImportDecl.cpp
@@ -203,7 +203,7 @@
 }
 #endif
 
-/// \brief Map a well-known C type to a swift type from the standard library.
+/// Map a well-known C type to a swift type from the standard library.
 ///
 /// \param IsError set to true when we know the corresponding swift type name,
 /// but we could not find it.  (For example, the type was not defined in the
@@ -1187,7 +1187,7 @@
   return constructor;
 }
 
-/// \brief Create a constructor that initializes a struct from its members.
+/// Create a constructor that initializes a struct from its members.
 static ConstructorDecl *
 createValueConstructor(ClangImporter::Implementation &Impl,
                        StructDecl *structDecl, ArrayRef<VarDecl *> members,
@@ -2005,7 +2005,7 @@
     }
   };
 
-  /// \brief Convert Clang declarations into the corresponding Swift
+  /// Convert Clang declarations into the corresponding Swift
   /// declarations.
   class SwiftDeclConverter
     : public clang::ConstDeclVisitor<SwiftDeclConverter, Decl *>
@@ -2093,7 +2093,7 @@
       return alternateName;
     }
 
-    /// \brief Create a declaration name for anonymous enums, unions and
+    /// Create a declaration name for anonymous enums, unions and
     /// structs.
     ///
     /// Since Swift does not natively support these features, we fake them by
@@ -4110,7 +4110,7 @@
     /// Record the function or initializer overridden by the given Swift method.
     void recordObjCOverride(AbstractFunctionDecl *decl);
 
-    /// \brief Given an imported method, try to import it as a constructor.
+    /// Given an imported method, try to import it as a constructor.
     ///
     /// Objective-C methods in the 'init' family are imported as
     /// constructors in Swift, enabling object construction syntax, e.g.,
@@ -4136,7 +4136,7 @@
                                const clang::ObjCMethodDecl *objcMethod,
                                CtorInitializerKind kind);
 
-    /// \brief Given an imported method, try to import it as a constructor.
+    /// Given an imported method, try to import it as a constructor.
     ///
     /// Objective-C methods in the 'init' family are imported as
     /// constructors in Swift, enabling object construction syntax, e.g.,
@@ -4161,7 +4161,7 @@
 
     void recordObjCOverride(SubscriptDecl *subscript);
 
-    /// \brief Given either the getter or setter for a subscript operation,
+    /// Given either the getter or setter for a subscript operation,
     /// create the Swift subscript declaration.
     SubscriptDecl *importSubscript(Decl *decl,
                                    const clang::ObjCMethodDecl *objcMethod);
@@ -4199,7 +4199,7 @@
     importObjCGenericParams(const clang::ObjCInterfaceDecl *decl,
                             DeclContext *dc);
 
-    /// \brief Import the members of all of the protocols to which the given
+    /// Import the members of all of the protocols to which the given
     /// Objective-C class, category, or extension explicitly conforms into
     /// the given list of members, so long as the method was not already
     /// declared in the class.
@@ -4220,7 +4220,7 @@
                                   MutableArrayRef<MirroredMethodEntry> entries,
                                   SmallVectorImpl<Decl *> &newMembers);
 
-    /// \brief Import constructors from our superclasses (and their
+    /// Import constructors from our superclasses (and their
     /// categories/extensions), effectively "inheriting" constructors.
     void importInheritedConstructors(ClassDecl *classDecl,
                                      SmallVectorImpl<Decl *> &newMembers);
@@ -6005,7 +6005,7 @@
   return false;
 }
 
-/// \brief Given an imported method, try to import it as a constructor.
+/// Given an imported method, try to import it as a constructor.
 ///
 /// Objective-C methods in the 'init' family are imported as
 /// constructors in Swift, enabling object construction syntax, e.g.,
@@ -6363,7 +6363,7 @@
   }
 }
 
-/// \brief Given either the getter or setter for a subscript operation,
+/// Given either the getter or setter for a subscript operation,
 /// create the Swift subscript declaration.
 SubscriptDecl *
 SwiftDeclConverter::importSubscript(Decl *decl,
@@ -8246,7 +8246,7 @@
   return var;
 }
 
-/// \brief Create a decl with error type and an "unavailable" attribute on it
+/// Create a decl with error type and an "unavailable" attribute on it
 /// with the specified message.
 void ClangImporter::Implementation::
 markUnavailable(ValueDecl *decl, StringRef unavailabilityMsgRef) {
@@ -8257,7 +8257,7 @@
   decl->getAttrs().add(ua);
 }
 
-/// \brief Create a decl with error type and an "unavailable" attribute on it
+/// Create a decl with error type and an "unavailable" attribute on it
 /// with the specified message.
 ValueDecl *ClangImporter::Implementation::
 createUnavailableDecl(Identifier name, DeclContext *dc, Type type,
diff --git a/lib/ClangImporter/ImportName.cpp b/lib/ClangImporter/ImportName.cpp
index c12904a..ce7faf3 100644
--- a/lib/ClangImporter/ImportName.cpp
+++ b/lib/ClangImporter/ImportName.cpp
@@ -265,7 +265,7 @@
   return OTK_ImplicitlyUnwrappedOptional;
 }
 
-/// \brief Determine whether the given name is reserved for Swift.
+/// Determine whether the given name is reserved for Swift.
 static bool isSwiftReservedName(StringRef name) {
   tok kind = Lexer::kindOfIdentifier(name, /*InSILMode=*/false);
   return (kind != tok::identifier);
diff --git a/lib/ClangImporter/ImporterImpl.h b/lib/ClangImporter/ImporterImpl.h
index ec93cf0..c0eb95c 100644
--- a/lib/ClangImporter/ImporterImpl.h
+++ b/lib/ClangImporter/ImporterImpl.h
@@ -82,60 +82,60 @@
 class SubscriptDecl;
 class ValueDecl;
 
-/// \brief Describes the kind of conversion to apply to a constant value.
+/// Describes the kind of conversion to apply to a constant value.
 enum class ConstantConvertKind {
-  /// \brief No conversion required.
+  /// No conversion required.
   None,
-  /// \brief Coerce the constant to the given type.
+  /// Coerce the constant to the given type.
   Coerce,
-  /// \brief Construct the given type from the constant value.
+  /// Construct the given type from the constant value.
   Construction,
-  /// \brief Construct the given type from the constant value, using an
+  /// Construct the given type from the constant value, using an
   /// optional initializer.
   ConstructionWithUnwrap,
-  /// \brief Perform an unchecked downcast to the given type.
+  /// Perform an unchecked downcast to the given type.
   Downcast
 };
 
-/// \brief Describes the kind of type import we're performing.
+/// Describes the kind of type import we're performing.
 enum class ImportTypeKind {
-  /// \brief Import a type in its most abstract form, without any adjustment.
+  /// Import a type in its most abstract form, without any adjustment.
   Abstract,
 
-  /// \brief Import the underlying type of a typedef.
+  /// Import the underlying type of a typedef.
   Typedef,
 
-  /// \brief Import the type of a literal value.
+  /// Import the type of a literal value.
   Value,
 
-  /// \brief Import the type of an Objective-C generic argument.
+  /// Import the type of an Objective-C generic argument.
   ObjCCollectionElement,
 
-  /// \brief Import the declared type of a variable.
+  /// Import the declared type of a variable.
   Variable,
   
-  /// \brief Import the declared type of an audited variable.
+  /// Import the declared type of an audited variable.
   ///
   /// This is exactly like ImportTypeKind::Variable, except it
   /// disables wrapping CF class types in Unmanaged.
   AuditedVariable,
 
-  /// \brief Import the declared type of a struct or union field.
+  /// Import the declared type of a struct or union field.
   RecordField,
   
-  /// \brief Import the result type of a function.
+  /// Import the result type of a function.
   ///
   /// This provides special treatment for 'void', among other things, and
   /// enables the conversion of bridged types.
   Result,
 
-  /// \brief Import the result type of an audited function.
+  /// Import the result type of an audited function.
   ///
   /// This is exactly like ImportTypeKind::Result, except it
   /// disables wrapping CF class types in Unmanaged.
   AuditedResult,
 
-  /// \brief Import the type of a function parameter.
+  /// Import the type of a function parameter.
   ///
   /// This provides special treatment for C++ references (which become
   /// [inout] parameters) and C pointers (which become magic [inout]-able types),
@@ -143,39 +143,39 @@
   /// Parameters are always considered CF-audited.
   Parameter,
 
-  /// \brief Import the type of a parameter declared with
+  /// Import the type of a parameter declared with
   /// \c CF_RETURNS_RETAINED.
   ///
   /// This ensures that the parameter is not marked as Unmanaged.
   CFRetainedOutParameter,
 
-  /// \brief Import the type of a parameter declared with
+  /// Import the type of a parameter declared with
   /// \c CF_RETURNS_NON_RETAINED.
   ///
   /// This ensures that the parameter is not marked as Unmanaged.
   CFUnretainedOutParameter,
 
-  /// \brief Import the type pointed to by a pointer or reference.
+  /// Import the type pointed to by a pointer or reference.
   ///
   /// This provides special treatment for pointer-to-ObjC-pointer
   /// types, which get imported as pointers to *checked* optional,
   /// *Pointer<NSFoo?>, instead of implicitly unwrapped optional as usual.
   Pointee,
 
-  /// \brief Import the type of an ObjC property.
+  /// Import the type of an ObjC property.
   ///
   /// This enables the conversion of bridged types. Properties are always
   /// considered CF-audited.
   Property,
 
-  /// \brief Import the type of an ObjC property accessor marked 'weak',
+  /// Import the type of an ObjC property accessor marked 'weak',
   /// 'assign', or 'unsafe_unretained'.
   ///
   /// Like Property, but doesn't allow bridging to a value type, since that
   /// would discard the ownership.
   PropertyWithReferenceSemantics,
 
-  /// \brief Import the underlying type of an enum.
+  /// Import the underlying type of an enum.
   ///
   /// This provides special treatment for 'NSUInteger'.
   Enum
@@ -196,7 +196,7 @@
           : Bridgeability::None;
 }
 
-/// \brief Describes the kind of the C type that can be mapped to a stdlib
+/// Describes the kind of the C type that can be mapped to a stdlib
 /// swift type.
 enum class MappedCTypeKind {
   UnsignedInt,
@@ -215,7 +215,7 @@
   Block,
 };
 
-/// \brief Describes what to do with the C name of a type that can be mapped to
+/// Describes what to do with the C name of a type that can be mapped to
 /// a Swift standard library type.
 enum class MappedTypeNameKind {
   DoNothing,
@@ -223,7 +223,7 @@
   DefineAndUse
 };
 
-/// \brief Describes certain kinds of methods that need to be specially
+/// Describes certain kinds of methods that need to be specially
 /// handled by the importer.
 enum class SpecialMethodKind {
   Regular,
@@ -310,7 +310,7 @@
   explicit operator bool() const { return type.getPointer() != nullptr; }
 };
 
-/// \brief Implementation of the Clang importer.
+/// Implementation of the Clang importer.
 class LLVM_LIBRARY_VISIBILITY ClangImporter::Implementation 
   : public LazyMemberLoader,
     public LazyConformanceLoader
@@ -322,7 +322,7 @@
   Implementation(ASTContext &ctx, const ClangImporterOptions &opts);
   ~Implementation();
 
-  /// \brief Swift AST context.
+  /// Swift AST context.
   ASTContext &SwiftContext;
 
   const bool ImportForwardDeclarations;
@@ -352,12 +352,12 @@
   /// (through the Swift name lookup module file extension).
   LookupTableMap LookupTables;
 
-  /// \brief The fake buffer used to import modules.
+  /// The fake buffer used to import modules.
   ///
   /// \see getNextIncludeLoc
   clang::FileID DummyIncludeBuffer;
 
-  /// \brief A count of the number of load module operations.
+  /// A count of the number of load module operations.
   ///
   /// \see getNextIncludeLoc
   unsigned IncludeCounter = 0;
@@ -368,24 +368,24 @@
   /// These have to be unique and valid or Clang gets very confused.
   clang::SourceLocation getNextIncludeLoc();
 
-  /// \brief Used to avoid running the AST verifier over the same declarations.
+  /// Used to avoid running the AST verifier over the same declarations.
   size_t VerifiedDeclsCounter = 0;
 
-  /// \brief Clang compiler invocation.
+  /// Clang compiler invocation.
   std::shared_ptr<clang::CompilerInvocation> Invocation;
 
-  /// \brief Clang compiler instance, which is used to actually load Clang
+  /// Clang compiler instance, which is used to actually load Clang
   /// modules.
   std::unique_ptr<clang::CompilerInstance> Instance;
 
-  /// \brief Clang compiler action, which is used to actually run the
+  /// Clang compiler action, which is used to actually run the
   /// parser.
   std::unique_ptr<clang::FrontendAction> Action;
 
-  /// \brief Clang parser, which is used to load textual headers.
+  /// Clang parser, which is used to load textual headers.
   std::unique_ptr<clang::Parser> Parser;
 
-  /// \brief Clang parser, which is used to load textual headers.
+  /// Clang parser, which is used to load textual headers.
   std::unique_ptr<clang::MangleContext> Mangler;
 
   /// The active type checker, or null if there is no active type checker.
@@ -395,10 +395,10 @@
   llvm::PointerIntPair<LazyResolver *, 1, bool> typeResolver;
 
 public:
-  /// \brief Mapping of already-imported declarations.
+  /// Mapping of already-imported declarations.
   llvm::DenseMap<std::pair<const clang::Decl *, Version>, Decl *> ImportedDecls;
 
-  /// \brief The set of "special" typedef-name declarations, which are
+  /// The set of "special" typedef-name declarations, which are
   /// mapped to specific Swift types.
   ///
   /// Normal typedef-name declarations imported into Swift will maintain
@@ -410,12 +410,12 @@
   llvm::SmallDenseMap<const clang::TypedefNameDecl *, MappedTypeNameKind, 16>
     SpecialTypedefNames;
 
-  /// \brief Provide a single extension point for any given type per clang
+  /// Provide a single extension point for any given type per clang
   /// submodule
   llvm::DenseMap<std::pair<NominalTypeDecl *, const clang::Module *>,
                  ExtensionDecl *> extensionPoints;
 
-  /// \brief Typedefs that we should not be importing.  We should be importing
+  /// Typedefs that we should not be importing.  We should be importing
   /// underlying decls instead.
   llvm::DenseSet<const clang::Decl *> SuperfluousTypedefs;
 
@@ -424,7 +424,7 @@
   /// \sa SuperfluousTypedefs
   llvm::DenseSet<const clang::Decl *> DeclsWithSuperfluousTypedefs;
 
-  /// \brief Mapping of already-imported declarations from protocols, which
+  /// Mapping of already-imported declarations from protocols, which
   /// can (and do) get replicated into classes.
   llvm::DenseMap<std::tuple<const clang::Decl *, DeclContext *, Version>,
                  Decl *> ImportedProtocolDecls;
@@ -454,7 +454,7 @@
   }
 
 private:
-  /// \brief Generation number that is used for crude versioning.
+  /// Generation number that is used for crude versioning.
   ///
   /// This value is incremented every time a new module is imported.
   unsigned Generation = 1;
@@ -465,7 +465,7 @@
   }
 
 public:
-  /// \brief Keep track of subscript declarations based on getter/setter
+  /// Keep track of subscript declarations based on getter/setter
   /// pairs.
   llvm::DenseMap<std::pair<FuncDecl *, FuncDecl *>, SubscriptDecl *> Subscripts;
 
@@ -487,7 +487,7 @@
   llvm::DenseMap<Decl *, TinyPtrVector<ValueDecl *>> AlternateDecls;
 
 public:
-  /// \brief Keep track of initializer declarations that correspond to
+  /// Keep track of initializer declarations that correspond to
   /// imported methods.
   llvm::DenseMap<
       std::tuple<const clang::ObjCMethodDecl *, DeclContext *, Version>,
@@ -511,7 +511,7 @@
   }
 
 private:
-  /// \brief NSObject, imported into Swift.
+  /// NSObject, imported into Swift.
   Type NSObjectTy;
 
   /// A pair containing a ClangModuleUnit,
@@ -534,16 +534,16 @@
   /// These are used to look up Swift classes forward-declared with \@class.
   TinyPtrVector<ModuleDecl *> ImportedHeaderOwners;
 
-  /// \brief Clang's objectAtIndexedSubscript: selector.
+  /// Clang's objectAtIndexedSubscript: selector.
   clang::Selector objectAtIndexedSubscript;
 
-  /// \brief Clang's setObjectAt:indexedSubscript: selector.
+  /// Clang's setObjectAt:indexedSubscript: selector.
   clang::Selector setObjectAtIndexedSubscript;
 
-  /// \brief Clang's objectForKeyedSubscript: selector.
+  /// Clang's objectForKeyedSubscript: selector.
   clang::Selector objectForKeyedSubscript;
 
-  /// \brief Clang's setObject:forKeyedSubscript: selector.
+  /// Clang's setObject:forKeyedSubscript: selector.
   clang::Selector setObjectForKeyedSubscript;
 
 private:
@@ -627,17 +627,17 @@
     decl->getAttrs().add(IUOAttr);
   }
 
-  /// \brief Retrieve the Clang AST context.
+  /// Retrieve the Clang AST context.
   clang::ASTContext &getClangASTContext() const {
     return Instance->getASTContext();
   }
 
-  /// \brief Retrieve the Clang Sema object.
+  /// Retrieve the Clang Sema object.
   clang::Sema &getClangSema() const {
     return Instance->getSema();
   }
 
-  /// \brief Retrieve the Clang AST context.
+  /// Retrieve the Clang AST context.
   clang::Preprocessor &getClangPreprocessor() const {
     return Instance->getPreprocessor();
   }
@@ -652,7 +652,7 @@
                     std::unique_ptr<llvm::MemoryBuffer> contents,
                     bool implicitImport);
 
-  /// \brief Retrieve the imported module that should contain the given
+  /// Retrieve the imported module that should contain the given
   /// Clang decl.
   ClangModuleUnit *getClangModuleForDecl(const clang::Decl *D,
                                          bool allowForwardDeclaration = false);
@@ -669,7 +669,7 @@
   static bool shouldAllowNSUIntegerAsInt(bool isFromSystemModule,
                                          const clang::NamedDecl *decl);
 
-  /// \brief Converts the given Swift identifier for Clang.
+  /// Converts the given Swift identifier for Clang.
   clang::DeclarationName exportName(Identifier name);
 
   /// Imports the full name of the given Clang declaration into Swift.
@@ -692,7 +692,7 @@
                       bool fullyQualified,
                       llvm::raw_ostream &os);
 
-  /// \brief Import the given Clang identifier into Swift.
+  /// Import the given Clang identifier into Swift.
   ///
   /// \param identifier The Clang identifier to map into Swift.
   ///
@@ -711,16 +711,16 @@
   /// Export a Swift Objective-C selector as a Clang Objective-C selector.
   clang::Selector exportSelector(ObjCSelector selector);
 
-  /// \brief Import the given Swift source location into Clang.
+  /// Import the given Swift source location into Clang.
   clang::SourceLocation exportSourceLoc(SourceLoc loc);
 
-  /// \brief Import the given Clang source location into Swift.
+  /// Import the given Clang source location into Swift.
   SourceLoc importSourceLoc(clang::SourceLocation loc);
 
-  /// \brief Import the given Clang source range into Swift.
+  /// Import the given Clang source range into Swift.
   SourceRange importSourceRange(clang::SourceRange loc);
 
-  /// \brief Import the given Clang preprocessor macro as a Swift value decl.
+  /// Import the given Clang preprocessor macro as a Swift value decl.
   ///
   /// \p macroNode must be a MacroInfo or a ModuleMacro.
   ///
@@ -752,7 +752,7 @@
                                Version version,
                                bool SuperfluousTypedefsAreTransparent);
 
-  /// \brief Same as \c importDeclReal, but for use inside importer
+  /// Same as \c importDeclReal, but for use inside importer
   /// implementation.
   ///
   /// Unlike \c importDeclReal, this function for convenience transparently
@@ -763,7 +763,7 @@
                                   /*SuperfluousTypedefsAreTransparent=*/true);
   }
 
-  /// \brief Import the given Clang declaration into Swift.  Use this function
+  /// Import the given Clang declaration into Swift.  Use this function
   /// outside of the importer implementation, when importing a decl requested by
   /// Swift code.
   ///
@@ -774,7 +774,7 @@
                                   /*SuperfluousTypedefsAreTransparent=*/false);
   }
 
-  /// \brief Import a cloned version of the given declaration, which is part of
+  /// Import a cloned version of the given declaration, which is part of
   /// an Objective-C protocol and currently must be a method or property, into
   /// the given declaration context.
   ///
@@ -783,15 +783,15 @@
   Decl *importMirroredDecl(const clang::NamedDecl *decl, DeclContext *dc,
                            Version version, ProtocolDecl *proto);
 
-  /// \brief Utility function for building simple generic signatures.
+  /// Utility function for building simple generic signatures.
   GenericSignature *buildGenericSignature(GenericParamList *genericParams,
                                           DeclContext *dc);
 
-  /// \brief Utility function for building simple generic environments.
+  /// Utility function for building simple generic environments.
   GenericEnvironment *buildGenericEnvironment(GenericParamList *genericParams,
                                               DeclContext *dc);
 
-  /// \brief Import the given Clang declaration context into Swift.
+  /// Import the given Clang declaration context into Swift.
   ///
   /// Usually one will use \c importDeclContextOf instead.
   ///
@@ -799,7 +799,7 @@
   /// be converted.
   DeclContext *importDeclContextImpl(const clang::DeclContext *dc);
 
-  /// \brief Import the declaration context of a given Clang declaration into
+  /// Import the declaration context of a given Clang declaration into
   /// Swift.
   ///
   /// \param context The effective context as determined by importFullName.
@@ -809,7 +809,7 @@
   DeclContext *importDeclContextOf(const clang::Decl *D,
                                    EffectiveClangContext context);
 
-  /// \brief Create a new named constant with the given value.
+  /// Create a new named constant with the given value.
   ///
   /// \param name The name of the constant.
   /// \param dc The declaration context into which the name will be introduced.
@@ -823,7 +823,7 @@
                             bool isStatic,
                             ClangNode ClangN);
 
-  /// \brief Create a new named constant with the given value.
+  /// Create a new named constant with the given value.
   ///
   /// \param name The name of the constant.
   /// \param dc The declaration context into which the name will be introduced.
@@ -837,7 +837,7 @@
                             bool isStatic,
                             ClangNode ClangN);
 
-  /// \brief Create a new named constant using the given expression.
+  /// Create a new named constant using the given expression.
   ///
   /// \param name The name of the constant.
   /// \param dc The declaration context into which the name will be introduced.
@@ -858,50 +858,50 @@
         decl, platformAvailability, SwiftContext.LangOpts.EnableObjCInterop);
   }
 
-  /// \brief Add "Unavailable" annotation to the swift declaration.
+  /// Add "Unavailable" annotation to the swift declaration.
   void markUnavailable(ValueDecl *decl, StringRef unavailabilityMsg);
 
-  /// \brief Create a decl with error type and an "unavailable" attribute on it
+  /// Create a decl with error type and an "unavailable" attribute on it
   /// with the specified message.
   ValueDecl *createUnavailableDecl(Identifier name, DeclContext *dc,
                                    Type type, StringRef UnavailableMessage,
                                    bool isStatic, ClangNode ClangN);
 
-  /// \brief Retrieve the standard library module.
+  /// Retrieve the standard library module.
   ModuleDecl *getStdlibModule();
 
-  /// \brief Retrieve the named module.
+  /// Retrieve the named module.
   ///
   /// \param name The name of the module.
   ///
   /// \returns The named module, or null if the module has not been imported.
   ModuleDecl *getNamedModule(StringRef name);
 
-  /// \brief Returns the "Foundation" module, if it can be loaded.
+  /// Returns the "Foundation" module, if it can be loaded.
   ///
   /// After this has been called, the Foundation module will or won't be loaded
   /// into the ASTContext.
   ModuleDecl *tryLoadFoundationModule();
 
-  /// \brief Returns the "SIMD" module, if it can be loaded.
+  /// Returns the "SIMD" module, if it can be loaded.
   ///
   /// After this has been called, the SIMD module will or won't be loaded
   /// into the ASTContext.
   ModuleDecl *tryLoadSIMDModule();
 
-  /// \brief Retrieves the Swift wrapper for the given Clang module, creating
+  /// Retrieves the Swift wrapper for the given Clang module, creating
   /// it if necessary.
   ClangModuleUnit *getWrapperForModule(const clang::Module *underlying);
 
-  /// \brief Constructs a Swift module for the given Clang module.
+  /// Constructs a Swift module for the given Clang module.
   ModuleDecl *finishLoadingClangModule(const clang::Module *clangModule,
                                        bool preferAdapter);
 
-  /// \brief Call finishLoadingClangModule on each deferred import collected
+  /// Call finishLoadingClangModule on each deferred import collected
   /// while scanning a bridging header or PCH.
   void handleDeferredImports();
 
-  /// \brief Retrieve the named Swift type, e.g., Int32.
+  /// Retrieve the named Swift type, e.g., Int32.
   ///
   /// \param moduleName The name of the module in which the type should occur.
   ///
@@ -910,7 +910,7 @@
   /// \returns The named type, or null if the type could not be found.
   Type getNamedSwiftType(StringRef moduleName, StringRef name);
 
-  /// \brief Retrieve the named Swift type, e.g., Int32.
+  /// Retrieve the named Swift type, e.g., Int32.
   ///
   /// \param module The module in which the type should occur.
   ///
@@ -919,7 +919,7 @@
   /// \returns The named type, or null if the type could not be found.
   Type getNamedSwiftType(ModuleDecl *module, StringRef name);
 
-  /// \brief Retrieve a specialization of the named Swift type, e.g.,
+  /// Retrieve a specialization of the named Swift type, e.g.,
   /// UnsafeMutablePointer<T>.
   ///
   /// \param module The name of the module in which the type should occur.
@@ -932,32 +932,32 @@
   Type getNamedSwiftTypeSpecialization(ModuleDecl *module, StringRef name,
                                        ArrayRef<Type> args);
 
-  /// \brief Retrieve the NSObject type.
+  /// Retrieve the NSObject type.
   Type getNSObjectType();
 
-  /// \brief Retrieve the NSObject protocol type.
+  /// Retrieve the NSObject protocol type.
   Type getNSObjectProtocolType();
 
-  /// \brief Retrieve the NSCopying protocol type.
+  /// Retrieve the NSCopying protocol type.
   Type getNSCopyingType();
 
-  /// \brief Retrieve a sugared referenece to the given (imported) type.
+  /// Retrieve a sugared referenece to the given (imported) type.
   Type getSugaredTypeReference(TypeDecl *type);
 
-  /// \brief Determines whether the given type matches an implicit type
+  /// Determines whether the given type matches an implicit type
   /// bound of "Hashable", which is used to validate NSDictionary/NSSet.
   bool matchesHashableBound(Type type);
 
-  /// \brief Determines whether the type declared by the given declaration
+  /// Determines whether the type declared by the given declaration
   /// is over-aligned.
   bool isOverAligned(const clang::TypeDecl *typeDecl);
   bool isOverAligned(clang::QualType type);
 
-  /// \brief Look up and attempt to import a Clang declaration with
+  /// Look up and attempt to import a Clang declaration with
   /// the given name.
   Decl *importDeclByName(StringRef name);
 
-  /// \brief Import the given Clang type into Swift.
+  /// Import the given Clang type into Swift.
   ///
   /// \param type The Clang type to import.
   ///
@@ -1005,7 +1005,7 @@
              OptionalTypeKind optional = OTK_ImplicitlyUnwrappedOptional,
              bool resugarNSErrorPointer = true);
 
-  /// \brief Import the given Clang type into Swift.
+  /// Import the given Clang type into Swift.
   ///
   /// For a description of parameters, see importType(). This differs
   /// only in that it returns a Type rather than ImportedType, which
@@ -1020,7 +1020,7 @@
       OptionalTypeKind optional = OTK_ImplicitlyUnwrappedOptional,
       bool resugarNSErrorPointer = true);
 
-  /// \brief Import the given Clang type into Swift, returning the
+  /// Import the given Clang type into Swift, returning the
   /// Swift parameters and result type and whether we should treat it
   /// as an optional that is implicitly unwrapped.
   ///
@@ -1031,7 +1031,7 @@
   /// it as an optional that is implicitly unwrapped. The returned
   /// type is null if it cannot be represented in Swift.
 
-  /// \brief Import the given function type.
+  /// Import the given function type.
   ///
   /// This routine should be preferred when importing function types for
   /// which we have actual function parameters, e.g., when dealing with a
@@ -1053,7 +1053,7 @@
                                   bool isVariadic, bool isFromSystemModule,
                                   DeclName name, ParameterList *&parameterList);
 
-  /// \brief Import the given function return type.
+  /// Import the given function return type.
   ///
   /// \param dc The context the function is being imported into.
   /// \param clangDecl The underlying declaration, if any; should only be
@@ -1067,7 +1067,7 @@
                                         const clang::FunctionDecl *clangDecl,
                                         bool allowNSUIntegerAsInt);
 
-  /// \brief Import the parameter list for a function
+  /// Import the parameter list for a function
   ///
   /// \param clangDecl The underlying declaration, if any; should only be
   ///   considered for any attributes it might carry.
@@ -1153,16 +1153,16 @@
                                         importer::ImportedName importedName,
                                         ParameterList **params);
 
-  /// \brief Determine whether the given typedef-name is "special", meaning
+  /// Determine whether the given typedef-name is "special", meaning
   /// that it has performed some non-trivial mapping of its underlying type
   /// based on the name of the typedef.
   Optional<MappedTypeNameKind>
   getSpecialTypedefKind(clang::TypedefNameDecl *decl);
 
-  /// \brief Look up a name, accepting only typedef results.
+  /// Look up a name, accepting only typedef results.
   const clang::TypedefNameDecl *lookupTypedef(clang::DeclarationName);
 
-  /// \brief Return whether a global of the given type should be imported as a
+  /// Return whether a global of the given type should be imported as a
   /// 'let' declaration as opposed to 'var'.
   bool shouldImportGlobalAsLet(clang::QualType type);
 
diff --git a/lib/DWARFImporter/CMakeLists.txt b/lib/DWARFImporter/CMakeLists.txt
new file mode 100644
index 0000000..1c941dc
--- /dev/null
+++ b/lib/DWARFImporter/CMakeLists.txt
@@ -0,0 +1,8 @@
+add_swift_host_library(swiftDWARFImporter STATIC
+  DWARFImporter.cpp
+  LINK_LIBRARIES
+    swiftAST
+    swiftParse
+)
+
+#add_dependencies(swiftDWARFImporter )
diff --git a/lib/DWARFImporter/DWARFImporter.cpp b/lib/DWARFImporter/DWARFImporter.cpp
new file mode 100644
index 0000000..1219e5b
--- /dev/null
+++ b/lib/DWARFImporter/DWARFImporter.cpp
@@ -0,0 +1,188 @@
+//===--- DWARFImporter.cpp - Import Clang modules from DWARF --------------===//
+//
+// This source file is part of the Swift.org open source project
+//
+// Copyright (c) 2014 - 2018 Apple Inc. and the Swift project authors
+// Licensed under Apache License v2.0 with Runtime Library Exception
+//
+// See https://swift.org/LICENSE.txt for license information
+// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors
+//
+//===----------------------------------------------------------------------===//
+
+#include "swift/DWARFImporter/DWARFImporter.h"
+#include "swift/AST/ASTContext.h"
+#include "swift/AST/Module.h"
+
+using namespace swift;
+
+std::unique_ptr<DWARFImporter>
+DWARFImporter::create(ASTContext &ctx,
+                      const ClangImporterOptions &importerOpts,
+                      DependencyTracker *tracker) {
+  std::unique_ptr<DWARFImporter> importer{
+    new DWARFImporter(ctx, importerOpts, tracker)
+  };
+  return importer;
+}
+
+class DWARFModuleUnit final : public LoadedFile {
+
+  ~DWARFModuleUnit() = default;
+
+public:
+  DWARFModuleUnit(ModuleDecl &M)
+      : LoadedFile(FileUnitKind::DWARFModule, M) {}
+
+  virtual bool isSystemModule() const override { return false; }
+
+  virtual void
+  lookupValue(ModuleDecl::AccessPathTy accessPath, DeclName name,
+              NLKind lookupKind,
+              SmallVectorImpl<ValueDecl *> &results) const override {}
+
+  virtual TypeDecl *
+  lookupNestedType(Identifier name,
+                   const NominalTypeDecl *baseType) const override {
+    return nullptr;
+  }
+
+  virtual void lookupVisibleDecls(ModuleDecl::AccessPathTy accessPath,
+                                  VisibleDeclConsumer &consumer,
+                                  NLKind lookupKind) const override {}
+
+  virtual void
+  lookupClassMembers(ModuleDecl::AccessPathTy accessPath,
+                     VisibleDeclConsumer &consumer) const override {}
+
+  virtual void
+  lookupClassMember(ModuleDecl::AccessPathTy accessPath, DeclName name,
+                    SmallVectorImpl<ValueDecl *> &decls) const override {}
+
+  void lookupObjCMethods(
+      ObjCSelector selector,
+      SmallVectorImpl<AbstractFunctionDecl *> &results) const override {}
+
+  virtual void
+  getTopLevelDecls(SmallVectorImpl<Decl *> &results) const override {}
+
+  virtual void
+  getDisplayDecls(SmallVectorImpl<Decl *> &results) const override {}
+
+  virtual void
+  getImportedModules(SmallVectorImpl<ModuleDecl::ImportedModule> &imports,
+                     ModuleDecl::ImportFilter filter) const override {}
+
+  virtual void getImportedModulesForLookup(
+      SmallVectorImpl<ModuleDecl::ImportedModule> &imports) const override {};
+
+  virtual void collectLinkLibraries(
+      ModuleDecl::LinkLibraryCallback callback) const override {};
+
+  Identifier
+  getDiscriminatorForPrivateValue(const ValueDecl *D) const override {
+    llvm_unreachable("no private decls in Clang modules");
+  }
+
+  virtual StringRef getFilename() const override { return ""; }
+
+  virtual const clang::Module *getUnderlyingClangModule() const override {
+    return nullptr;
+  }
+
+  static bool classof(const FileUnit *file) {
+    return file->getKind() == FileUnitKind::DWARFModule;
+  }
+  static bool classof(const DeclContext *DC) {
+    return isa<FileUnit>(DC) && classof(cast<FileUnit>(DC));
+  }
+};
+
+class DWARFImporter::Implementation {
+public:
+  ASTContext &SwiftContext;
+  clang::ASTContext *ClangASTContext = nullptr;
+  clang::CompilerInstance *Instance = nullptr;
+  clang::Preprocessor *PP = nullptr;
+  clang::Sema *Sema = nullptr;
+
+  llvm::DenseMap<Identifier, DWARFModuleUnit *> ModuleWrappers;
+  Implementation(ASTContext &ctx, const ClangImporterOptions &clangImporterOpts)
+      : SwiftContext(ctx) {}
+
+  ModuleDecl *loadModule(SourceLoc importLoc,
+                         ArrayRef<std::pair<Identifier, SourceLoc>> path) {
+    // FIXME: Implement submodule support!
+    Identifier name = path[0].first;
+
+    auto it = ModuleWrappers.find(name);
+    if (it != ModuleWrappers.end())
+      return it->second->getParentModule();
+
+    auto *decl = ModuleDecl::create(name, SwiftContext);
+    // Silence error messages about testably importing a Clang module.
+    decl->setTestingEnabled();
+    decl->setHasResolvedImports();
+    auto wrapperUnit = new (SwiftContext) DWARFModuleUnit(*decl);
+    ModuleWrappers.insert({name, wrapperUnit});
+    decl->addFile(*wrapperUnit);
+
+    // Force load adapter modules for all imported modules.
+    decl->forAllVisibleModules({}, [](ModuleDecl::ImportedModule import) {});
+
+    return decl;
+  }
+};
+
+DWARFImporter::DWARFImporter(ASTContext &ctx,
+                             const ClangImporterOptions &clangImporterOpts,
+                             DependencyTracker *tracker)
+    : ClangModuleLoader(tracker),
+      Impl(*new Implementation(ctx, clangImporterOpts)) {}
+
+DWARFImporter::~DWARFImporter() { delete &Impl; }
+
+bool DWARFImporter::canImportModule(std::pair<Identifier, SourceLoc> named) {
+  return false;
+}
+
+bool DWARFImporter::addSearchPath(StringRef newSearchPath, bool isFramework,
+                                  bool isSystem) {
+  return false;
+}
+
+ModuleDecl *
+DWARFImporter::loadModule(SourceLoc importLoc,
+                          ArrayRef<std::pair<Identifier, SourceLoc>> path) {
+  return Impl.loadModule(importLoc, path);
+}
+
+bool DWARFImporter::isInOverlayModuleForImportedModule(
+    const DeclContext *overlayDC, const DeclContext *importedDC) {
+  return false;
+}
+
+void DWARFImporter::loadExtensions(NominalTypeDecl *nominal,
+                                   unsigned previousGeneration) {}
+
+void DWARFImporter::loadObjCMethods(
+    ClassDecl *classDecl, ObjCSelector selector, bool isInstanceMethod,
+    unsigned previousGeneration,
+    llvm::TinyPtrVector<AbstractFunctionDecl *> &methods) {}
+
+ModuleDecl *DWARFImporter::getImportedHeaderModule() const { return nullptr; }
+
+void DWARFImporter::verifyAllModules() {};
+
+clang::ASTContext &DWARFImporter::getClangASTContext() const {
+  return *Impl.ClangASTContext;
+}
+clang::Preprocessor &DWARFImporter::getClangPreprocessor() const {
+  return *Impl.PP;
+}
+clang::Sema &DWARFImporter::getClangSema() const { return *Impl.Sema; }
+const clang::CompilerInstance &DWARFImporter::getClangInstance() const {
+  return *Impl.Instance;
+}
+
+void DWARFImporter::printStatistics() const {}
diff --git a/lib/Driver/Driver.cpp b/lib/Driver/Driver.cpp
index d69785e..3b74ee2 100644
--- a/lib/Driver/Driver.cpp
+++ b/lib/Driver/Driver.cpp
@@ -1171,7 +1171,7 @@
   return DAL;
 }
 
-/// \brief Check that the file referenced by \p Input exists. If it doesn't,
+/// Check that the file referenced by \p Input exists. If it doesn't,
 /// issue a diagnostic and return false.
 static bool checkInputExistence(const Driver &D, const DerivedArgList &Args,
                                 DiagnosticEngine &Diags, StringRef Input) {
diff --git a/lib/Frontend/CompilerInvocation.cpp b/lib/Frontend/CompilerInvocation.cpp
index fc21d7b..219d682 100644
--- a/lib/Frontend/CompilerInvocation.cpp
+++ b/lib/Frontend/CompilerInvocation.cpp
@@ -114,7 +114,7 @@
   }
 }
 
-/// \brief Create a new Regex instance out of the string value in \p RpassArg.
+/// Create a new Regex instance out of the string value in \p RpassArg.
 /// It returns a pointer to the newly generated Regex instance.
 static std::shared_ptr<llvm::Regex>
 generateOptimizationRemarkRegex(DiagnosticEngine &Diags, ArgList &Args,
diff --git a/lib/Frontend/DiagnosticVerifier.cpp b/lib/Frontend/DiagnosticVerifier.cpp
index e43fc97..37f8c6d 100644
--- a/lib/Frontend/DiagnosticVerifier.cpp
+++ b/lib/Frontend/DiagnosticVerifier.cpp
@@ -199,7 +199,7 @@
   return OS.str();
 }
 
-/// \brief After the file has been processed, check to see if we got all of
+/// After the file has been processed, check to see if we got all of
 /// the expected diagnostics and check to see if there were any unexpected
 /// ones.
 bool DiagnosticVerifier::verifyFile(unsigned BufferID,
diff --git a/lib/Frontend/Frontend.cpp b/lib/Frontend/Frontend.cpp
index a8e4de8..175417e 100644
--- a/lib/Frontend/Frontend.cpp
+++ b/lib/Frontend/Frontend.cpp
@@ -23,6 +23,7 @@
 #include "swift/Basic/FileTypes.h"
 #include "swift/Basic/SourceManager.h"
 #include "swift/Basic/Statistic.h"
+#include "swift/DWARFImporter/DWARFImporter.h"
 #include "swift/Parse/DelayedParsingCallbacks.h"
 #include "swift/Parse/Lexer.h"
 #include "swift/SIL/SILModule.h"
@@ -338,6 +339,18 @@
   }
   Context->addModuleLoader(std::move(SML));
   Context->addModuleLoader(std::move(clangImporter), /*isClang*/ true);
+
+  if (Invocation.getLangOptions().EnableDWARFImporter) {
+    auto dwarfImporter =
+        DWARFImporter::create(*Context, Invocation.getClangImporterOptions(),
+                              getDependencyTracker());
+    if (!dwarfImporter) {
+      Diagnostics.diagnose(SourceLoc(), diag::error_clang_importer_create_fail);
+      return true;
+    }
+    Context->addModuleLoader(std::move(dwarfImporter));
+  }
+
   return false;
 }
 
diff --git a/lib/Frontend/SerializedDiagnosticConsumer.cpp b/lib/Frontend/SerializedDiagnosticConsumer.cpp
index 65dc0e8..12478fe 100644
--- a/lib/Frontend/SerializedDiagnosticConsumer.cpp
+++ b/lib/Frontend/SerializedDiagnosticConsumer.cpp
@@ -41,11 +41,11 @@
 //===----------------------------------------------------------------------===//
 
 enum BlockIDs {
-  /// \brief A top-level block which represents any meta data associated
+  /// A top-level block which represents any meta data associated
   /// with the diagnostics, including versioning of the format.
   BLOCK_META = llvm::bitc::FIRST_APPLICATION_BLOCKID,
 
-  /// \brief The this block acts as a container for all the information
+  /// The this block acts as a container for all the information
   /// for a specific diagnostic.
   BLOCK_DIAG
 };
@@ -92,42 +92,42 @@
         SerializedDiagnosticsPath(serializedDiagnosticsPath),
         EmittedAnyDiagBlocks(false) {}
 
-  /// \brief The byte buffer for the serialized content.
+  /// The byte buffer for the serialized content.
   llvm::SmallString<1024> Buffer;
 
-  /// \brief The BitStreamWriter for the serialized diagnostics.
+  /// The BitStreamWriter for the serialized diagnostics.
   llvm::BitstreamWriter Stream;
 
-  /// \brief The path of the diagnostics file.
+  /// The path of the diagnostics file.
   std::string SerializedDiagnosticsPath;
 
-  /// \brief The set of constructed record abbreviations.
+  /// The set of constructed record abbreviations.
   AbbreviationMap Abbrevs;
 
-  /// \brief A utility buffer for constructing record content.
+  /// A utility buffer for constructing record content.
   RecordData Record;
 
-  /// \brief A text buffer for rendering diagnostic text.
+  /// A text buffer for rendering diagnostic text.
   llvm::SmallString<256> diagBuf;
 
-  /// \brief The collection of files used.
+  /// The collection of files used.
   llvm::DenseMap<const char *, unsigned> Files;
 
   using DiagFlagsTy =
       llvm::DenseMap<const void *, std::pair<unsigned, StringRef>>;
 
-  /// \brief Map for uniquing strings.
+  /// Map for uniquing strings.
   DiagFlagsTy DiagFlags;
 
-  /// \brief Whether we have already started emission of any DIAG blocks. Once
+  /// Whether we have already started emission of any DIAG blocks. Once
   /// this becomes \c true, we never close a DIAG block until we know that we're
   /// starting another one or we're done.
   bool EmittedAnyDiagBlocks;
 };
 
-/// \brief Diagnostic consumer that serializes diagnostics to a stream.
+/// Diagnostic consumer that serializes diagnostics to a stream.
 class SerializedDiagnosticConsumer : public DiagnosticConsumer {
-  /// \brief State shared among the various clones of this diagnostic consumer.
+  /// State shared among the various clones of this diagnostic consumer.
   llvm::IntrusiveRefCntPtr<SharedState> State;
   bool CalledFinishProcessing = false;
   bool CompilationWasComplete = true;
@@ -197,25 +197,25 @@
                                 ArrayRef<DiagnosticArgument> FormatArgs,
                                 const DiagnosticInfo &Info) override;
 
-  /// \brief The version of the diagnostics file.
+  /// The version of the diagnostics file.
   enum { Version = 1 };
 
 private:
-  /// \brief Emit bitcode for the preamble.
+  /// Emit bitcode for the preamble.
   void emitPreamble();
 
-  /// \brief Emit bitcode for the BlockInfoBlock (part of the preamble).
+  /// Emit bitcode for the BlockInfoBlock (part of the preamble).
   void emitBlockInfoBlock();
 
-  /// \brief Emit bitcode for metadata block (part of preamble).
+  /// Emit bitcode for metadata block (part of preamble).
   void emitMetaBlock();
 
-  /// \brief Emit bitcode to enter a block for a diagnostic.
+  /// Emit bitcode to enter a block for a diagnostic.
   void enterDiagBlock() {
     State->Stream.EnterSubblock(BLOCK_DIAG, 4);
   }
 
-  /// \brief Emit bitcode to exit a block for a diagnostic.
+  /// Emit bitcode to exit a block for a diagnostic.
   void exitDiagBlock() {
     State->Stream.ExitBlock();
   }
@@ -223,7 +223,7 @@
   // Record identifier for the file.
   unsigned getEmitFile(StringRef Filename);
 
-  /// \brief Add a source location to a record.
+  /// Add a source location to a record.
   void addLocToRecord(SourceLoc Loc,
                       SourceManager &SM,
                       StringRef Filename,
@@ -232,7 +232,7 @@
   void addRangeToRecord(CharSourceRange Range, SourceManager &SM,
                         StringRef Filename, RecordDataImpl &Record);
 
-  /// \brief Emit the message payload of a diagnostic to bitcode.
+  /// Emit the message payload of a diagnostic to bitcode.
   void emitDiagnosticMessage(SourceManager &SM, SourceLoc Loc,
                              DiagnosticKind Kind,
                              StringRef Text, const DiagnosticInfo &Info);
@@ -303,7 +303,7 @@
   addLocToRecord(Range.getEnd(), SM, Filename, Record);
 }
 
-/// \brief Map a Swift DiagnosticKind to the diagnostic level expected
+/// Map a Swift DiagnosticKind to the diagnostic level expected
 /// for serialized diagnostics.
 static clang::serialized_diags::Level getDiagnosticLevel(DiagnosticKind Kind) {
   switch (Kind) {
@@ -344,7 +344,7 @@
 }
 
 
-/// \brief Emits a block ID in the BLOCKINFO block.
+/// Emits a block ID in the BLOCKINFO block.
 static void emitBlockID(unsigned ID, const char *Name,
                         llvm::BitstreamWriter &Stream,
                         RecordDataImpl &Record) {
@@ -364,7 +364,7 @@
   Stream.EmitRecord(llvm::bitc::BLOCKINFO_CODE_BLOCKNAME, Record);
 }
 
-/// \brief Emits a record ID in the BLOCKINFO block.
+/// Emits a record ID in the BLOCKINFO block.
 static void emitRecordID(unsigned ID, const char *Name,
                          llvm::BitstreamWriter &Stream,
                          RecordDataImpl &Record) {
@@ -377,7 +377,7 @@
   Stream.EmitRecord(llvm::bitc::BLOCKINFO_CODE_SETRECORDNAME, Record);
 }
 
-/// \brief Emit bitcode for abbreviation for source locations.
+/// Emit bitcode for abbreviation for source locations.
 static void
 addSourceLocationAbbrev(std::shared_ptr<llvm::BitCodeAbbrev> Abbrev) {
   using namespace llvm;
@@ -387,7 +387,7 @@
   Abbrev->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 32)); // Offset;
 }
 
-/// \brief Emit bitcode for abbreviation for source ranges.
+/// Emit bitcode for abbreviation for source ranges.
 static void
 addRangeLocationAbbrev(std::shared_ptr<llvm::BitCodeAbbrev> Abbrev) {
   addSourceLocationAbbrev(Abbrev);
diff --git a/lib/FrontendTool/CMakeLists.txt b/lib/FrontendTool/CMakeLists.txt
index 727bd01..f55afe0 100644
--- a/lib/FrontendTool/CMakeLists.txt
+++ b/lib/FrontendTool/CMakeLists.txt
@@ -15,6 +15,7 @@
     swiftPrintAsObjC
     swiftFrontend
     swiftClangImporter
+    swiftDWARFImporter
     swiftOption
     clangAPINotes
     clangBasic
diff --git a/lib/FrontendTool/FrontendTool.cpp b/lib/FrontendTool/FrontendTool.cpp
index 7cd757f..cc8997c 100644
--- a/lib/FrontendTool/FrontendTool.cpp
+++ b/lib/FrontendTool/FrontendTool.cpp
@@ -11,7 +11,7 @@
 //===----------------------------------------------------------------------===//
 ///
 /// \file
-/// \brief This is the entry point to the swift -frontend functionality, which
+/// This is the entry point to the swift -frontend functionality, which
 /// implements the core compiler functionality along with a number of additional
 /// tools for demonstration and testing purposes.
 ///
diff --git a/lib/IDE/CMakeLists.txt b/lib/IDE/CMakeLists.txt
index 0b50e7c..a20a4cc 100644
--- a/lib/IDE/CMakeLists.txt
+++ b/lib/IDE/CMakeLists.txt
@@ -16,6 +16,7 @@
   LINK_LIBRARIES
     swiftFrontend
     swiftClangImporter
+    swiftDWARFImporter
     swiftParse
     swiftSema
     swiftIndex)
diff --git a/lib/IDE/CodeCompletion.cpp b/lib/IDE/CodeCompletion.cpp
index 415e6c3..54291b6 100644
--- a/lib/IDE/CodeCompletion.cpp
+++ b/lib/IDE/CodeCompletion.cpp
@@ -1339,7 +1339,7 @@
     Builder.addTypeAnnotation(ST.getString());
   }
 
-  /// \brief Set to true when we have delivered code completion results
+  /// Set to true when we have delivered code completion results
   /// to the \c Consumer.
   bool DeliveredResults = false;
 
@@ -1636,10 +1636,10 @@
 
   bool IncludeInstanceMembers = false;
 
-  /// \brief True if we are code completing inside a static method.
+  /// True if we are code completing inside a static method.
   bool InsideStaticMethod = false;
 
-  /// \brief Innermost method that the code completion point is in.
+  /// Innermost method that the code completion point is in.
   const AbstractFunctionDecl *CurrentMethod = nullptr;
 
   Optional<SemanticContextKind> ForcedSemanticContext = None;
@@ -3248,6 +3248,7 @@
         switch (fileUnit->getKind()) {
         case FileUnitKind::Builtin:
         case FileUnitKind::ClangModule:
+        case FileUnitKind::DWARFModule:
           continue;
         case FileUnitKind::Source:
           collectOperatorsFrom(cast<SourceFile>(fileUnit), results);
diff --git a/lib/IDE/Utils.cpp b/lib/IDE/Utils.cpp
index 627a41d..288aa3e 100644
--- a/lib/IDE/Utils.cpp
+++ b/lib/IDE/Utils.cpp
@@ -227,6 +227,8 @@
     break;
   }
   OS << '-' << Triple.getVendorName() << '-' << Triple.getOSName();
+  if (Triple.hasEnvironment())
+    OS << '-' << Triple.getEnvironmentName();
   OS.flush();
   return Result;
 }
diff --git a/lib/IRGen/EnumPayload.cpp b/lib/IRGen/EnumPayload.cpp
index 82bd130..c3c455f 100644
--- a/lib/IRGen/EnumPayload.cpp
+++ b/lib/IRGen/EnumPayload.cpp
@@ -719,9 +719,10 @@
     llvm::Value *newBits;
     if (u > usedBits)
       newBits = IGF.Builder.CreateLShr(spareBits, u - usedBits);
-    else if (u < usedBits)
-      newBits = IGF.Builder.CreateShl(spareBits, usedBits - u);
-    else
+    else if (u < usedBits) {
+      newBits = IGF.Builder.CreateZExtOrTrunc(spareBits, destTy);
+      newBits = IGF.Builder.CreateShl(newBits, usedBits - u);
+    } else
       newBits = spareBits;
     newBits = IGF.Builder.CreateZExtOrTrunc(newBits, destTy);
 
diff --git a/lib/IRGen/GenCast.h b/lib/IRGen/GenCast.h
index 1043674..db29099 100644
--- a/lib/IRGen/GenCast.h
+++ b/lib/IRGen/GenCast.h
@@ -51,7 +51,7 @@
                              SILType valueType, SILType loweredTargetType,
                              CheckedCastMode mode, Explosion &out);
 
-  /// \brief Convert a class object to the given destination type,
+  /// Convert a class object to the given destination type,
   /// using a runtime-checked cast.
   ///
   /// FIXME: toType should be an AST CanType.
@@ -68,7 +68,7 @@
     llvm::Value *casted;
   };
 
-  /// \brief Convert the given value to the exact destination type.
+  /// Convert the given value to the exact destination type.
   FailableCastResult emitClassIdenticalCast(IRGenFunction &IGF,
                                                   llvm::Value *from,
                                                   SILType fromType,
diff --git a/lib/IRGen/GenEnum.h b/lib/IRGen/GenEnum.h
index 50f56e0..29a2665 100644
--- a/lib/IRGen/GenEnum.h
+++ b/lib/IRGen/GenEnum.h
@@ -44,7 +44,7 @@
   class TypeConverter;
   using clang::CodeGen::swiftcall::SwiftAggLowering;
 
-/// \brief Emit the dispatch branch(es) for an address-only enum.
+/// Emit the dispatch branch(es) for an address-only enum.
 void emitSwitchAddressOnlyEnumDispatch(IRGenFunction &IGF,
                                         SILType enumTy,
                                         Address enumAddr,
@@ -52,7 +52,7 @@
                                                            llvm::BasicBlock*>> dests,
                                         llvm::BasicBlock *defaultDest);
 
-/// \brief Injects a case and its associated data, if any, into a loadable enum
+/// Injects a case and its associated data, if any, into a loadable enum
 /// value.
 void emitInjectLoadableEnum(IRGenFunction &IGF,
                              SILType enumTy,
@@ -60,7 +60,7 @@
                              Explosion &data,
                              Explosion &out);
   
-/// \brief Extracts the associated data for an enum case. This is an unchecked
+/// Extracts the associated data for an enum case. This is an unchecked
 /// operation; the input enum value must be of the given case.
 void emitProjectLoadableEnum(IRGenFunction &IGF,
                               SILType enumTy,
@@ -68,14 +68,14 @@
                               EnumElementDecl *theCase,
                               Explosion &out);
 
-/// \brief Projects the address of the associated data for a case inside a
+/// Projects the address of the associated data for a case inside a
 /// enum, to which a new data value can be stored.
 Address emitProjectEnumAddressForStore(IRGenFunction &IGF,
                                         SILType enumTy,
                                         Address enumAddr,
                                         EnumElementDecl *theCase);
 
-/// \brief Projects the address of the associated data for a case inside a
+/// Projects the address of the associated data for a case inside a
 /// enum, clearing any tag bits interleaved into the data area, so that the
 /// value inside can be loaded. Does not check that the enum has a value of the
 /// given case.
@@ -84,7 +84,7 @@
                                                   Address enumAddr,
                                                   EnumElementDecl *theCase);
 
-/// \brief Stores the tag bits for an enum case to the given address, overlaying
+/// Stores the tag bits for an enum case to the given address, overlaying
 /// the data (if any) stored there.
 void emitStoreEnumTagToAddress(IRGenFunction &IGF,
                                 SILType enumTy,
@@ -221,7 +221,7 @@
   /// Emit field names for enum reflection.
   virtual bool isReflectable() const;
 
-  /// \brief Return the bits used for discriminators for payload cases.
+  /// Return the bits used for discriminators for payload cases.
   ///
   /// These bits are populated in increasing value according to the order of
   /// the getElementsWithPayload() array, starting from zero for the first
diff --git a/lib/IRGen/GenProto.cpp b/lib/IRGen/GenProto.cpp
index 0fa6a26..4c018ac 100644
--- a/lib/IRGen/GenProto.cpp
+++ b/lib/IRGen/GenProto.cpp
@@ -2876,16 +2876,23 @@
   // If we don't have concrete conformance information, the type must be
   // an archetype and the conformance must be via one of the protocol
   // requirements of the archetype. Look at what's locally bound.
+  ProtocolConformance *concreteConformance;
   if (conformance.isAbstract()) {
-    auto archetype = cast<ArchetypeType>(srcType);
-    return emitArchetypeWitnessTableRef(IGF, archetype, proto);
-  }
+    if (auto archetype = dyn_cast<ArchetypeType>(srcType))
+      return emitArchetypeWitnessTableRef(IGF, archetype, proto);
+
+    // Otherwise, this must be a self-conformance.
+    assert(proto->requiresSelfConformanceWitnessTable());
+    assert(cast<ProtocolType>(srcType)->getDecl() == proto);
+    concreteConformance = IGF.IGM.Context.getSelfConformance(proto);
 
   // All other source types should be concrete enough that we have
   // conformance info for them.  However, that conformance info might be
   // more concrete than we're expecting.
   // TODO: make a best effort to devirtualize, maybe?
-  auto concreteConformance = conformance.getConcrete();
+  } else {
+    concreteConformance = conformance.getConcrete();
+  }
   assert(concreteConformance->getProtocol() == proto);
 
   auto cacheKind =
@@ -3423,7 +3430,7 @@
   return Signature(fnType, attrs, SwiftCC);
 }
 
-/// \brief Load a reference to the protocol descriptor for the given protocol.
+/// Load a reference to the protocol descriptor for the given protocol.
 ///
 /// For Swift protocols, this is a constant reference to the protocol descriptor
 /// symbol.
diff --git a/lib/IRGen/GenProto.h b/lib/IRGen/GenProto.h
index 96e2c41..82d6da8 100644
--- a/lib/IRGen/GenProto.h
+++ b/lib/IRGen/GenProto.h
@@ -157,7 +157,7 @@
                                 CanSILFunctionType &SubstFnType,
                                 Explosion &nativeParam, unsigned paramIndex);
 
-  /// \brief Load a reference to the protocol descriptor for the given protocol.
+  /// Load a reference to the protocol descriptor for the given protocol.
   ///
   /// For Swift protocols, this is a constant reference to the protocol
   /// descriptor symbol.
diff --git a/lib/IRGen/GenType.cpp b/lib/IRGen/GenType.cpp
index cedca45..5b3b1f5 100644
--- a/lib/IRGen/GenType.cpp
+++ b/lib/IRGen/GenType.cpp
@@ -1562,7 +1562,7 @@
   return *type;
 }
 
-/// \brief Convert a primitive builtin type to its LLVM type, size, and
+/// Convert a primitive builtin type to its LLVM type, size, and
 /// alignment.
 static std::tuple<llvm::Type *, Size, Alignment>
 convertPrimitiveBuiltin(IRGenModule &IGM, CanType canTy) {
diff --git a/lib/IRGen/IRGen.cpp b/lib/IRGen/IRGen.cpp
index 589edae..e7f67eb 100644
--- a/lib/IRGen/IRGen.cpp
+++ b/lib/IRGen/IRGen.cpp
@@ -740,7 +740,7 @@
   delete IRGenPair.first;
 }
 
-/// \brief Run the IRGen preparation SIL pipeline. Passes have access to the
+/// Run the IRGen preparation SIL pipeline. Passes have access to the
 /// IRGenModule.
 static void runIRGenPreparePasses(SILModule &Module,
                                   irgen::IRGenModule &IRModule) {
diff --git a/lib/IRGen/LoadableByAddress.cpp b/lib/IRGen/LoadableByAddress.cpp
index 5a91e73..bd18ddc 100644
--- a/lib/IRGen/LoadableByAddress.cpp
+++ b/lib/IRGen/LoadableByAddress.cpp
@@ -1326,7 +1326,7 @@
                    arg) == pass.largeLoadableArgs.end());
 
   arg = arg->getParent()->replaceFunctionArgument(
-      arg->getIndex(), newSILType, ValueOwnershipKind::Trivial, arg->getDecl());
+      arg->getIndex(), newSILType, ValueOwnershipKind::Any, arg->getDecl());
 
   copyArg->replaceAllUsesWith(arg);
   copyArg->eraseFromParent();
@@ -1352,7 +1352,7 @@
       ctx.getIdentifier("$return_value"),
       pass.F->getDeclContext());
   pass.F->begin()->insertFunctionArgument(0, resultStorageType.getAddressType(),
-                                          ValueOwnershipKind::Trivial, var);
+                                          ValueOwnershipKind::Any, var);
 }
 
 void LoadableStorageAllocation::convertIndirectFunctionArgs() {
diff --git a/lib/IRGen/ReferenceTypeInfo.h b/lib/IRGen/ReferenceTypeInfo.h
index cb091a4..0595b85 100644
--- a/lib/IRGen/ReferenceTypeInfo.h
+++ b/lib/IRGen/ReferenceTypeInfo.h
@@ -25,7 +25,7 @@
 
 class TypeConverter;
   
-/// \brief An abstract class designed for use when implementing a type
+/// An abstract class designed for use when implementing a type
 /// that has reference semantics.
 class ReferenceTypeInfo : public LoadableTypeInfo {
 protected:
diff --git a/lib/Index/Index.cpp b/lib/Index/Index.cpp
index 023d0cd..a19a2c7 100644
--- a/lib/Index/Index.cpp
+++ b/lib/Index/Index.cpp
@@ -664,6 +664,7 @@
         IsClangModuleOpt = false;
         break;
       case FileUnitKind::ClangModule:
+      case FileUnitKind::DWARFModule:
         assert(!IsClangModuleOpt.hasValue() &&
                "cannot handle multi-file modules");
         IsClangModuleOpt = true;
@@ -1462,6 +1463,7 @@
             Info += "\"";
             break;
           case FileUnitKind::ClangModule:
+          case FileUnitKind::DWARFModule:
             Info += "clang module, file=\"";
             Info += cast<LoadedFile>(FU)->getFilename();
             Info += "\"";
@@ -1498,7 +1500,8 @@
   // need to hash the clang module.
   // FIXME: This is a bit of a hack.
   if (TopMod.getFiles().size() == 1)
-    if (TopMod.getFiles().front()->getKind() == FileUnitKind::ClangModule)
+    if (TopMod.getFiles().front()->getKind() == FileUnitKind::ClangModule ||
+        TopMod.getFiles().front()->getKind() == FileUnitKind::DWARFModule)
       return;
 
   auto It = ImportsMap.find(&TopMod);
diff --git a/lib/Index/IndexRecord.cpp b/lib/Index/IndexRecord.cpp
index cefe390..fe27519 100644
--- a/lib/Index/IndexRecord.cpp
+++ b/lib/Index/IndexRecord.cpp
@@ -406,6 +406,7 @@
       case FileUnitKind::Builtin:
         break;
       case FileUnitKind::SerializedAST:
+      case FileUnitKind::DWARFModule:
       case FileUnitKind::ClangModule: {
         auto *LFU = cast<LoadedFile>(FU);
         if (auto *F = fileMgr.getFile(LFU->getFilename())) {
diff --git a/lib/Parse/Lexer.cpp b/lib/Parse/Lexer.cpp
index a5acee6..095ff69 100644
--- a/lib/Parse/Lexer.cpp
+++ b/lib/Parse/Lexer.cpp
@@ -635,7 +635,7 @@
   return p == end;
 }
 
-/// \brief Determines if the given string is a valid operator identifier,
+/// Determines if the given string is a valid operator identifier,
 /// without escaping characters.
 bool Lexer::isOperator(StringRef string) {
   if (string.empty()) return false;
diff --git a/lib/Parse/ParseDecl.cpp b/lib/Parse/ParseDecl.cpp
index 90e59b3..86e1c07 100644
--- a/lib/Parse/ParseDecl.cpp
+++ b/lib/Parse/ParseDecl.cpp
@@ -201,7 +201,7 @@
   TheParser.parseDeclListDelayed(IDC);
 }
 
-/// \brief Main entrypoint for the parser.
+/// Main entrypoint for the parser.
 ///
 /// \verbatim
 ///   top-level:
@@ -2275,7 +2275,7 @@
   }
 }
 
-/// \brief This is the internal implementation of \c parseTypeAttributeList,
+/// This is the internal implementation of \c parseTypeAttributeList,
 /// which we expect to be inlined to handle the common case of an absent
 /// attribute list.
 ///
@@ -2335,7 +2335,7 @@
           Tok2.isContextualKeyword("infix"));
 }
 
-/// \brief Diagnose issues with fixity attributes, if any.
+/// Diagnose issues with fixity attributes, if any.
 static void diagnoseOperatorFixityAttributes(Parser &P,
                                              DeclAttributes &Attrs,
                                              const Decl *D) {
@@ -2618,7 +2618,7 @@
     consumeToken();
 }
 
-/// \brief Parse a single syntactic declaration and return a list of decl
+/// Parse a single syntactic declaration and return a list of decl
 /// ASTs.  This can return multiple results for var decls that bind to multiple
 /// values, structs that define a struct decl and a constructor, etc.
 ///
@@ -3054,7 +3054,7 @@
   });
 }
 
-/// \brief Parse an 'import' declaration, doing no token skipping on error.
+/// Parse an 'import' declaration, doing no token skipping on error.
 ///
 /// \verbatim
 ///   decl-import:
@@ -3161,7 +3161,7 @@
   return DCC.fixupParserResult(ID);
 }
 
-/// \brief Parse an inheritance clause.
+/// Parse an inheritance clause.
 ///
 /// \verbatim
 ///   inheritance:
@@ -3421,7 +3421,7 @@
   return Result;
 }
 
-/// \brief Parse the members in a struct/class/enum/protocol/extension.
+/// Parse the members in a struct/class/enum/protocol/extension.
 ///
 /// \verbatim
 ///    decl* '}'
@@ -3484,7 +3484,7 @@
   return !BackTrack.willBacktrack();
 }
 
-/// \brief Parse an 'extension' declaration.
+/// Parse an 'extension' declaration.
 ///
 /// \verbatim
 ///   extension:
@@ -3804,7 +3804,7 @@
   return makeParserSuccess();
 }
 
-/// \brief Parse a typealias decl.
+/// Parse a typealias decl.
 ///
 /// \verbatim
 ///   decl-typealias:
@@ -3916,7 +3916,7 @@
   return DCC.fixupParserResult(Status, TAD);
 }
 
-/// \brief Parse an associatedtype decl.
+/// Parse an associatedtype decl.
 ///
 /// \verbatim
 ///   decl-associatedtype:
@@ -4578,7 +4578,7 @@
 #include "swift/AST/AccessorKinds.def"
 }
 
-/// \brief Parse the brace-enclosed getter and setter for a variable.
+/// Parse the brace-enclosed getter and setter for a variable.
 ParserResult<VarDecl>
 Parser::parseDeclVarGetSet(Pattern *pattern, ParseDeclOptions Flags,
                            SourceLoc StaticLoc, SourceLoc VarLoc,
@@ -5039,7 +5039,7 @@
 }
 
 
-/// \brief Parse a 'var' or 'let' declaration, doing no token skipping on error.
+/// Parse a 'var' or 'let' declaration, doing no token skipping on error.
 ParserResult<PatternBindingDecl>
 Parser::parseDeclVar(ParseDeclOptions Flags,
                      DeclAttributes &Attributes,
@@ -5423,7 +5423,7 @@
   }
 }
 
-/// \brief Parse a 'func' declaration, returning null on error.  The caller
+/// Parse a 'func' declaration, returning null on error.  The caller
 /// handles this case and does recovery as appropriate.
 ///
 /// \verbatim
@@ -5681,7 +5681,7 @@
   return false;
 }
 
-/// \brief Parse a 'enum' declaration, returning true (and doing no token
+/// Parse a 'enum' declaration, returning true (and doing no token
 /// skipping) on error.
 ///
 /// \verbatim
@@ -5780,7 +5780,7 @@
   return DCC.fixupParserResult(Status, ED);
 }
 
-/// \brief Parse a 'case' of an enum.
+/// Parse a 'case' of an enum.
 ///
 /// \verbatim
 ///   enum-case:
@@ -5962,7 +5962,7 @@
   return makeParserResult(Status, TheCase);
 }
 
-/// \brief Parse a 'struct' declaration, returning true (and doing no token
+/// Parse a 'struct' declaration, returning true (and doing no token
 /// skipping) on error.
 ///
 /// \verbatim
@@ -6065,7 +6065,7 @@
   return DCC.fixupParserResult(Status, SD);
 }
 
-/// \brief Parse a 'class' declaration, doing no token skipping on error.
+/// Parse a 'class' declaration, doing no token skipping on error.
 ///
 /// \verbatim
 ///   decl-class:
@@ -6194,7 +6194,7 @@
   return DCC.fixupParserResult(Status, CD);
 }
 
-/// \brief Parse a 'protocol' declaration, doing no token skipping on error.
+/// Parse a 'protocol' declaration, doing no token skipping on error.
 ///
 /// \verbatim
 ///   decl-protocol:
@@ -6300,7 +6300,7 @@
   return DCC.fixupParserResult(Status, Proto);
 }
 
-/// \brief Parse a 'subscript' declaration.
+/// Parse a 'subscript' declaration.
 ///
 /// \verbatim
 ///   decl-subscript:
diff --git a/lib/Parse/ParseExpr.cpp b/lib/Parse/ParseExpr.cpp
index 89b691a..7949956 100644
--- a/lib/Parse/ParseExpr.cpp
+++ b/lib/Parse/ParseExpr.cpp
@@ -3143,7 +3143,7 @@
   return closure;
 }
  
-/// \brief Parse an object literal expression.
+/// Parse an object literal expression.
 ///
 /// expr-literal:
 ///   '#' identifier expr-paren
@@ -3184,7 +3184,7 @@
                               trailingClosure, /*implicit=*/false));
 }
 
-/// \brief Parse and diagnose unknown pound expression
+/// Parse and diagnose unknown pound expression
 ///
 /// If it look like a legacy (Swift 2) object literal expression, suggest fix-it
 /// to use new object literal syntax.
@@ -3266,7 +3266,7 @@
   return makeParserError();
 }
 
-/// \brief Handle code completion after pound in expression position.
+/// Handle code completion after pound in expression position.
 ///
 /// In case it's in a stmt condition position, specify \p ParentKind to
 /// decide the position accepts #available(...) condtion.
@@ -3285,7 +3285,7 @@
   return makeParserCodeCompletionResult(Expr);
 }
 
-/// \brief Parse an expression call suffix.
+/// Parse an expression call suffix.
 ///
 /// expr-call-suffix:
 ///   expr-paren
diff --git a/lib/Parse/ParsePattern.cpp b/lib/Parse/ParsePattern.cpp
index b8af9b3..d43209c 100644
--- a/lib/Parse/ParsePattern.cpp
+++ b/lib/Parse/ParsePattern.cpp
@@ -31,7 +31,7 @@
 using namespace swift;
 using namespace swift::syntax;
 
-/// \brief Determine the kind of a default argument given a parsed
+/// Determine the kind of a default argument given a parsed
 /// expression that has not yet been type-checked.
 static DefaultArgumentKind getDefaultArgKind(Expr *init) {
   if (!init)
diff --git a/lib/Parse/Parser.cpp b/lib/Parse/Parser.cpp
index ea3f509..09d779c 100644
--- a/lib/Parse/Parser.cpp
+++ b/lib/Parse/Parser.cpp
@@ -211,7 +211,7 @@
     parseDelayedDecl(PersistentState, CodeCompletionFactory);
 }
 
-/// \brief Tokenizes a string literal, taking into account string interpolation.
+/// Tokenizes a string literal, taking into account string interpolation.
 static void getStringPartTokens(const Token &Tok, const LangOptions &LangOpts,
                                 const SourceManager &SM,
                                 int BufID, std::vector<Token> &Toks) {
@@ -635,7 +635,7 @@
     skipSingle();
 }
 
-/// \brief Skip until a token that starts with '>', and consume it if found.
+/// Skip until a token that starts with '>', and consume it if found.
 /// Applies heuristics that are suitable when trying to find the end of a list
 /// of generic parameters, generic arguments, or list of types in a protocol
 /// composition.
diff --git a/lib/ParseSIL/ParseSIL.cpp b/lib/ParseSIL/ParseSIL.cpp
index 60fcf2f..5ed98d8 100644
--- a/lib/ParseSIL/ParseSIL.cpp
+++ b/lib/ParseSIL/ParseSIL.cpp
@@ -329,11 +329,12 @@
     bool parseSILOwnership(ValueOwnershipKind &OwnershipKind) {
       // We parse here @ <identifier>.
       if (!P.consumeIf(tok::at_sign)) {
-        // Add error here.
-        return true;
+        // If we fail, we must have @any ownership.
+        OwnershipKind = ValueOwnershipKind::Any;
+        return false;
       }
 
-      StringRef AllOwnershipKinds[4] = {"trivial", "unowned", "owned",
+      StringRef AllOwnershipKinds[3] = {"unowned", "owned",
                                         "guaranteed"};
       return parseSILIdentifierSwitch(OwnershipKind, AllOwnershipKinds,
                                       diag::expected_sil_value_ownership_kind);
@@ -394,7 +395,7 @@
                         StringRef &OpcodeName);
     bool parseSILDebugVar(SILDebugVariable &Var);
 
-    /// \brief Parses the basic block arguments as part of branch instruction.
+    /// Parses the basic block arguments as part of branch instruction.
     bool parseSILBBArgsAtBranch(SmallVector<SILValue, 6> &Args, SILBuilder &B);
 
     bool parseSILLocation(SILLocation &L);
diff --git a/lib/SIL/OperandOwnership.cpp b/lib/SIL/OperandOwnership.cpp
index 2e4ddda..dbff31e 100644
--- a/lib/SIL/OperandOwnership.cpp
+++ b/lib/SIL/OperandOwnership.cpp
@@ -78,8 +78,7 @@
   bool isAddressOrTrivialType() const {
     if (getType().isAddress())
       return true;
-    return getOwnershipKind() == ValueOwnershipKind::Trivial ||
-           getOwnershipKind() == ValueOwnershipKind::Any;
+    return getOwnershipKind() == ValueOwnershipKind::Any;
   }
 
   OperandOwnershipKindMap visitForwardingInst(SILInstruction *i,
@@ -165,68 +164,68 @@
 CONSTANT_OWNERSHIP_INST(Owned, MustBeInvalidated, StrongRelease)
 CONSTANT_OWNERSHIP_INST(Owned, MustBeInvalidated, InitExistentialRef)
 CONSTANT_OWNERSHIP_INST(Owned, MustBeInvalidated, EndLifetime)
-CONSTANT_OWNERSHIP_INST(Trivial, MustBeLive, AbortApply)
-CONSTANT_OWNERSHIP_INST(Trivial, MustBeLive, AddressToPointer)
-CONSTANT_OWNERSHIP_INST(Trivial, MustBeLive, BeginAccess)
-CONSTANT_OWNERSHIP_INST(Trivial, MustBeLive, BeginUnpairedAccess)
-CONSTANT_OWNERSHIP_INST(Trivial, MustBeLive, BindMemory)
-CONSTANT_OWNERSHIP_INST(Trivial, MustBeLive, CheckedCastAddrBranch)
-CONSTANT_OWNERSHIP_INST(Trivial, MustBeLive, CondFail)
-CONSTANT_OWNERSHIP_INST(Trivial, MustBeLive, CopyAddr)
-CONSTANT_OWNERSHIP_INST(Trivial, MustBeLive, DeallocStack)
-CONSTANT_OWNERSHIP_INST(Trivial, MustBeLive, DebugValueAddr)
-CONSTANT_OWNERSHIP_INST(Trivial, MustBeLive, DeinitExistentialAddr)
-CONSTANT_OWNERSHIP_INST(Trivial, MustBeLive, DestroyAddr)
-CONSTANT_OWNERSHIP_INST(Trivial, MustBeLive, EndAccess)
-CONSTANT_OWNERSHIP_INST(Trivial, MustBeLive, EndApply)
-CONSTANT_OWNERSHIP_INST(Trivial, MustBeLive, EndUnpairedAccess)
-CONSTANT_OWNERSHIP_INST(Trivial, MustBeLive, IndexAddr)
-CONSTANT_OWNERSHIP_INST(Trivial, MustBeLive, IndexRawPointer)
-CONSTANT_OWNERSHIP_INST(Trivial, MustBeLive, InitBlockStorageHeader)
-CONSTANT_OWNERSHIP_INST(Trivial, MustBeLive, InitEnumDataAddr)
-CONSTANT_OWNERSHIP_INST(Trivial, MustBeLive, InitExistentialAddr)
-CONSTANT_OWNERSHIP_INST(Trivial, MustBeLive, InitExistentialMetatype)
-CONSTANT_OWNERSHIP_INST(Trivial, MustBeLive, InjectEnumAddr)
-CONSTANT_OWNERSHIP_INST(Trivial, MustBeLive, IsUnique)
-CONSTANT_OWNERSHIP_INST(Trivial, MustBeLive, Load)
-CONSTANT_OWNERSHIP_INST(Trivial, MustBeLive, LoadBorrow)
-CONSTANT_OWNERSHIP_INST(Trivial, MustBeLive, MarkFunctionEscape)
-CONSTANT_OWNERSHIP_INST(Trivial, MustBeLive, MarkUninitializedBehavior)
-CONSTANT_OWNERSHIP_INST(Trivial, MustBeLive, ObjCExistentialMetatypeToObject)
-CONSTANT_OWNERSHIP_INST(Trivial, MustBeLive, ObjCMetatypeToObject)
-CONSTANT_OWNERSHIP_INST(Trivial, MustBeLive, ObjCToThickMetatype)
-CONSTANT_OWNERSHIP_INST(Trivial, MustBeLive, OpenExistentialAddr)
-CONSTANT_OWNERSHIP_INST(Trivial, MustBeLive, OpenExistentialMetatype)
-CONSTANT_OWNERSHIP_INST(Trivial, MustBeLive, PointerToAddress)
-CONSTANT_OWNERSHIP_INST(Trivial, MustBeLive, PointerToThinFunction)
-CONSTANT_OWNERSHIP_INST(Trivial, MustBeLive, ProjectBlockStorage)
-CONSTANT_OWNERSHIP_INST(Trivial, MustBeLive, ProjectValueBuffer)
-CONSTANT_OWNERSHIP_INST(Trivial, MustBeLive, RawPointerToRef)
-CONSTANT_OWNERSHIP_INST(Trivial, MustBeLive, SelectEnumAddr)
-CONSTANT_OWNERSHIP_INST(Trivial, MustBeLive, SelectValue)
-CONSTANT_OWNERSHIP_INST(Trivial, MustBeLive, StructElementAddr)
-CONSTANT_OWNERSHIP_INST(Trivial, MustBeLive, SwitchEnumAddr)
-CONSTANT_OWNERSHIP_INST(Trivial, MustBeLive, SwitchValue)
-CONSTANT_OWNERSHIP_INST(Trivial, MustBeLive, TailAddr)
-CONSTANT_OWNERSHIP_INST(Trivial, MustBeLive, ThickToObjCMetatype)
-CONSTANT_OWNERSHIP_INST(Trivial, MustBeLive, ThinFunctionToPointer)
-CONSTANT_OWNERSHIP_INST(Trivial, MustBeLive, ThinToThickFunction)
-CONSTANT_OWNERSHIP_INST(Trivial, MustBeLive, TupleElementAddr)
-CONSTANT_OWNERSHIP_INST(Trivial, MustBeLive, UncheckedAddrCast)
-CONSTANT_OWNERSHIP_INST(Trivial, MustBeLive, UncheckedRefCastAddr)
-CONSTANT_OWNERSHIP_INST(Trivial, MustBeLive, UncheckedTakeEnumDataAddr)
-CONSTANT_OWNERSHIP_INST(Trivial, MustBeLive, UnconditionalCheckedCastAddr)
-CONSTANT_OWNERSHIP_INST(Trivial, MustBeLive, AllocValueBuffer)
-CONSTANT_OWNERSHIP_INST(Trivial, MustBeLive, DeallocValueBuffer)
+CONSTANT_OWNERSHIP_INST(Any, MustBeLive, AbortApply)
+CONSTANT_OWNERSHIP_INST(Any, MustBeLive, AddressToPointer)
+CONSTANT_OWNERSHIP_INST(Any, MustBeLive, BeginAccess)
+CONSTANT_OWNERSHIP_INST(Any, MustBeLive, BeginUnpairedAccess)
+CONSTANT_OWNERSHIP_INST(Any, MustBeLive, BindMemory)
+CONSTANT_OWNERSHIP_INST(Any, MustBeLive, CheckedCastAddrBranch)
+CONSTANT_OWNERSHIP_INST(Any, MustBeLive, CondFail)
+CONSTANT_OWNERSHIP_INST(Any, MustBeLive, CopyAddr)
+CONSTANT_OWNERSHIP_INST(Any, MustBeLive, DeallocStack)
+CONSTANT_OWNERSHIP_INST(Any, MustBeLive, DebugValueAddr)
+CONSTANT_OWNERSHIP_INST(Any, MustBeLive, DeinitExistentialAddr)
+CONSTANT_OWNERSHIP_INST(Any, MustBeLive, DestroyAddr)
+CONSTANT_OWNERSHIP_INST(Any, MustBeLive, EndAccess)
+CONSTANT_OWNERSHIP_INST(Any, MustBeLive, EndApply)
+CONSTANT_OWNERSHIP_INST(Any, MustBeLive, EndUnpairedAccess)
+CONSTANT_OWNERSHIP_INST(Any, MustBeLive, IndexAddr)
+CONSTANT_OWNERSHIP_INST(Any, MustBeLive, IndexRawPointer)
+CONSTANT_OWNERSHIP_INST(Any, MustBeLive, InitBlockStorageHeader)
+CONSTANT_OWNERSHIP_INST(Any, MustBeLive, InitEnumDataAddr)
+CONSTANT_OWNERSHIP_INST(Any, MustBeLive, InitExistentialAddr)
+CONSTANT_OWNERSHIP_INST(Any, MustBeLive, InitExistentialMetatype)
+CONSTANT_OWNERSHIP_INST(Any, MustBeLive, InjectEnumAddr)
+CONSTANT_OWNERSHIP_INST(Any, MustBeLive, IsUnique)
+CONSTANT_OWNERSHIP_INST(Any, MustBeLive, Load)
+CONSTANT_OWNERSHIP_INST(Any, MustBeLive, LoadBorrow)
+CONSTANT_OWNERSHIP_INST(Any, MustBeLive, MarkFunctionEscape)
+CONSTANT_OWNERSHIP_INST(Any, MustBeLive, MarkUninitializedBehavior)
+CONSTANT_OWNERSHIP_INST(Any, MustBeLive, ObjCExistentialMetatypeToObject)
+CONSTANT_OWNERSHIP_INST(Any, MustBeLive, ObjCMetatypeToObject)
+CONSTANT_OWNERSHIP_INST(Any, MustBeLive, ObjCToThickMetatype)
+CONSTANT_OWNERSHIP_INST(Any, MustBeLive, OpenExistentialAddr)
+CONSTANT_OWNERSHIP_INST(Any, MustBeLive, OpenExistentialMetatype)
+CONSTANT_OWNERSHIP_INST(Any, MustBeLive, PointerToAddress)
+CONSTANT_OWNERSHIP_INST(Any, MustBeLive, PointerToThinFunction)
+CONSTANT_OWNERSHIP_INST(Any, MustBeLive, ProjectBlockStorage)
+CONSTANT_OWNERSHIP_INST(Any, MustBeLive, ProjectValueBuffer)
+CONSTANT_OWNERSHIP_INST(Any, MustBeLive, RawPointerToRef)
+CONSTANT_OWNERSHIP_INST(Any, MustBeLive, SelectEnumAddr)
+CONSTANT_OWNERSHIP_INST(Any, MustBeLive, SelectValue)
+CONSTANT_OWNERSHIP_INST(Any, MustBeLive, StructElementAddr)
+CONSTANT_OWNERSHIP_INST(Any, MustBeLive, SwitchEnumAddr)
+CONSTANT_OWNERSHIP_INST(Any, MustBeLive, SwitchValue)
+CONSTANT_OWNERSHIP_INST(Any, MustBeLive, TailAddr)
+CONSTANT_OWNERSHIP_INST(Any, MustBeLive, ThickToObjCMetatype)
+CONSTANT_OWNERSHIP_INST(Any, MustBeLive, ThinFunctionToPointer)
+CONSTANT_OWNERSHIP_INST(Any, MustBeLive, ThinToThickFunction)
+CONSTANT_OWNERSHIP_INST(Any, MustBeLive, TupleElementAddr)
+CONSTANT_OWNERSHIP_INST(Any, MustBeLive, UncheckedAddrCast)
+CONSTANT_OWNERSHIP_INST(Any, MustBeLive, UncheckedRefCastAddr)
+CONSTANT_OWNERSHIP_INST(Any, MustBeLive, UncheckedTakeEnumDataAddr)
+CONSTANT_OWNERSHIP_INST(Any, MustBeLive, UnconditionalCheckedCastAddr)
+CONSTANT_OWNERSHIP_INST(Any, MustBeLive, AllocValueBuffer)
+CONSTANT_OWNERSHIP_INST(Any, MustBeLive, DeallocValueBuffer)
 #define NEVER_LOADABLE_CHECKED_REF_STORAGE(Name, ...)                          \
-  CONSTANT_OWNERSHIP_INST(Trivial, MustBeLive, Load##Name)
+  CONSTANT_OWNERSHIP_INST(Any, MustBeLive, Load##Name)
 #define ALWAYS_LOADABLE_CHECKED_REF_STORAGE(Name, ...)                         \
   CONSTANT_OWNERSHIP_INST(Owned, MustBeInvalidated, Name##Release)
 #define SOMETIMES_LOADABLE_CHECKED_REF_STORAGE(Name, ...)                      \
   NEVER_LOADABLE_CHECKED_REF_STORAGE(Name, "...")                              \
   ALWAYS_LOADABLE_CHECKED_REF_STORAGE(Name, "...")
 #define UNCHECKED_REF_STORAGE(Name, ...)                                       \
-  CONSTANT_OWNERSHIP_INST(Trivial, MustBeLive, Name##ToRef)
+  CONSTANT_OWNERSHIP_INST(Any, MustBeLive, Name##ToRef)
 #include "swift/AST/ReferenceStorage.def"
 #undef CONSTANT_OWNERSHIP_INST
 
@@ -237,9 +236,8 @@
       INST##Inst *i) {                                                         \
     assert(i->getNumOperands() && "Expected to have non-zero operands");       \
     return Map::compatibilityMap(                                              \
-        {{ValueOwnershipKind::Trivial, UseLifetimeConstraint::MustBeLive},     \
-         {ValueOwnershipKind::OWNERSHIP,                                       \
-          UseLifetimeConstraint::USE_LIFETIME_CONSTRAINT}});                   \
+        ValueOwnershipKind::OWNERSHIP,                                         \
+        UseLifetimeConstraint::USE_LIFETIME_CONSTRAINT);                       \
   }
 CONSTANT_OR_TRIVIAL_OWNERSHIP_INST(Owned, MustBeInvalidated,
                                    CheckedCastValueBranch)
@@ -277,11 +275,7 @@
   OperandOwnershipKindMap OperandOwnershipKindClassifier::visit##INST##Inst(   \
       INST##Inst *i) {                                                         \
     assert(i->getNumOperands() && "Expected to have non-zero operands");       \
-    if (getType().is<AnyMetatypeType>()) {                                     \
-      return Map::compatibilityMap(ValueOwnershipKind::Trivial,                \
-                                   UseLifetimeConstraint::MustBeLive);         \
-    }                                                                          \
-    return Map::compatibleWithAllExcept(ValueOwnershipKind::Trivial);          \
+    return Map::allLive();                                                     \
   }
 ACCEPTS_ANY_NONTRIVIAL_OWNERSHIP_OR_METATYPE(MustBeLive, ClassMethod)
 ACCEPTS_ANY_NONTRIVIAL_OWNERSHIP_OR_METATYPE(MustBeLive, ObjCMethod)
@@ -294,7 +288,7 @@
   OperandOwnershipKindMap OperandOwnershipKindClassifier::visit##INST##Inst(   \
       INST##Inst *i) {                                                         \
     assert(i->getNumOperands() && "Expected to have non-zero operands");       \
-    return Map::compatibleWithAllExcept(ValueOwnershipKind::Trivial);          \
+    return Map::allLive();                                                     \
   }
 ACCEPTS_ANY_NONTRIVIAL_OWNERSHIP(MustBeLive, BridgeObjectToWord)
 ACCEPTS_ANY_NONTRIVIAL_OWNERSHIP(MustBeLive, ClassifyBridgeObject)
@@ -324,33 +318,23 @@
   assert(isOwnershipForwardingInst(i) &&
          "Expected to have an ownership forwarding inst");
 
-  // Find the first index where we have a non-trivial value.
-  auto iter = find_if(ops, [&i](const Operand &op) -> bool {
-    if (i->isTypeDependentOperand(op))
-      return false;
-    return op.get().getOwnershipKind() != ValueOwnershipKind::Trivial;
-  });
+  // Merge all of the ownership of our operands. If we get back a .none from the
+  // merge, then we return an empty compatibility map. This ensures that we will
+  // not be compatible with /any/ input triggering a special error in the
+  // ownership verifier.
+  Optional<ValueOwnershipKind> optionalKind =
+      ValueOwnershipKind::merge(makeOptionalTransformRange(
+          ops, [&i](const Operand &op) -> Optional<ValueOwnershipKind> {
+            if (i->isTypeDependentOperand(op))
+              return None;
+            return op.get().getOwnershipKind();
+          }));
+  if (!optionalKind)
+    return Map();
 
-  // If we do not find a non-trivial value, then we know for sure that we have a
-  // trivial value.
-  if (iter == ops.end()) {
-    return Map::compatibilityMap(ValueOwnershipKind::Trivial,
-                                 UseLifetimeConstraint::MustBeLive);
-  }
-
-  // Ok, we have at least a single non-trivial value. Grab the type of the
-  // operand and see if it is trivial or non-trivial. If the type of the operand
-  // is trivial, then return that we accept trivial here. Otherwise, return the
-  // base ownership kind.
-  if (getType().isTrivial(mod))
-    return Map::compatibilityMap(ValueOwnershipKind::Trivial,
-                                 UseLifetimeConstraint::MustBeLive);
-
-  // Otherwise, return the value ownership kind and forwarding lifetime
-  // constraint of the first non-trivial operand. This will ensure that all
-  // non-trivial operands have the same ownership kind.
-  unsigned index = std::distance(ops.begin(), iter);
-  ValueOwnershipKind kind = ops[index].get().getOwnershipKind();
+  auto kind = optionalKind.getValue();
+  if (kind == ValueOwnershipKind::Any)
+    return Map::allLive();
   auto lifetimeConstraint = kind.getForwardingLifetimeConstraint();
   return Map::compatibilityMap(kind, lifetimeConstraint);
 }
@@ -386,7 +370,6 @@
     assert(isGuaranteedForwardingInst(i) &&                                    \
            "Expected an ownership forwarding inst");                           \
     OperandOwnershipKindMap map;                                               \
-    map.add(ValueOwnershipKind::Trivial, UseLifetimeConstraint::MustBeLive);   \
     map.addCompatibilityConstraint(                                            \
         ValueOwnershipKind::OWNERSHIP,                                         \
         UseLifetimeConstraint::USE_LIFETIME_CONSTRAINT);                       \
@@ -405,8 +388,7 @@
                                  UseLifetimeConstraint::MustBeInvalidated);
   }
 
-  return Map::compatibilityMap(ValueOwnershipKind::Trivial,
-                               UseLifetimeConstraint::MustBeLive);
+  return Map::allLive();
 }
 
 OperandOwnershipKindMap
@@ -422,8 +404,7 @@
 OperandOwnershipKindClassifier::visitAllocRefInst(AllocRefInst *i) {
   assert(i->getNumOperands() != 0 &&
          "If we reach this point, we must have a tail operand");
-  return Map::compatibilityMap(ValueOwnershipKind::Trivial,
-                               UseLifetimeConstraint::MustBeLive);
+  return Map::allLive();
 }
 
 OperandOwnershipKindMap
@@ -431,8 +412,7 @@
     AllocRefDynamicInst *i) {
   assert(i->getNumOperands() != 0 &&
          "If we reach this point, we must have a tail operand");
-  return Map::compatibilityMap(ValueOwnershipKind::Trivial,
-                               UseLifetimeConstraint::MustBeLive);
+  return Map::allLive();
 }
 
 OperandOwnershipKindMap
@@ -465,8 +445,7 @@
   // If our conditional branch is the condition, it is trivial. Check that the
   // ownership kind is trivial.
   if (cbi->isConditionOperandIndex(getOperandIndex()))
-    return Map::compatibilityMap(ValueOwnershipKind::Trivial,
-                                 UseLifetimeConstraint::MustBeLive);
+    return Map::allLive();
 
   // Otherwise, make sure that our operand matches the ownership of the relevant
   // argument.
@@ -493,90 +472,40 @@
   // If our passed in type is trivial, we shouldn't have any non-trivial
   // successors. Just bail early returning trivial.
   if (opTy.isTrivial(mod))
-    return Map::compatibilityMap(ValueOwnershipKind::Trivial,
-                                 UseLifetimeConstraint::MustBeLive);
+    return Map::allLive();
 
-  // Otherwise, go through the cases of the enum. If we have any cases with
-  // trivial payload or no payload cases, add trivial as a base ownership kind
-  // we can accept.
-  OperandOwnershipKindMap map;
+  // Otherwise, go through the ownership constraints of our successor arguments
+  // and merge them.
+  auto mergedKind = ValueOwnershipKind::merge(makeTransformRange(
+      sei->getSuccessorBlockArguments(),
+      [&](PhiArgumentArrayRef array) -> ValueOwnershipKind {
+        // If the array is empty, we have a non-payloaded case. Return any.
+        if (array.empty())
+          return ValueOwnershipKind::Any;
 
-  bool foundNonTrivialCase = false;
+        // Otherwise, we should have a single element since a payload is
+        // a tuple.
+        assert(std::distance(array.begin(), array.end()) == 1);
+        SILPhiArgument *arg = array.front();
+        return arg->getOwnershipKind();
+      }));
 
-  auto *enumDecl = opTy.getEnumOrBoundGenericEnum();
-  assert(enumDecl);
-  for (auto *eltDecl : enumDecl->getAllElements()) {
-    // If we have a no-payload case add that we support trivial and continue.
-    if (!eltDecl->hasAssociatedValues()) {
-      map.addCompatibilityConstraint(ValueOwnershipKind::Trivial,
-                                     UseLifetimeConstraint::MustBeLive);
-      continue;
-    }
-
-    // If we have a completely trivial payload case, then add that we support
-    // trivial and continue.
-    if (opTy.getEnumElementType(eltDecl, mod).isTrivial(mod)) {
-      map.addCompatibilityConstraint(ValueOwnershipKind::Trivial,
-                                     UseLifetimeConstraint::MustBeLive);
-      continue;
-    }
-
-    // Otherwise, we have a non-trivial case. Set foundNonTrivialCase to
-    // true. We will need to check the arguments of the switch_enum's successors
-    // for the ownership kind that we can accept.
-    foundNonTrivialCase = true;
-  }
-
-  // If we didn't find a non-trivial case, return the map we have constructed so
-  // far.
-  if (!foundNonTrivialCase)
-    return map;
-
-  // Otherwise, we want to find the ownership constraint of our successor
-  // arguments.
-  Optional<ValueOwnershipKind> nonTrivialKind;
-  for (auto argArray : sei->getSuccessorBlockArguments()) {
-    if (argArray.empty())
-      continue;
-    SILValue arg = argArray[getOperandIndex()];
-    if (arg->getType().isTrivial(mod))
-      continue;
-
-    // If we haven't found a non-trivial kind yet, stash the kind we find.
-    if (!nonTrivialKind) {
-      nonTrivialKind = arg.getOwnershipKind();
-      continue;
-    }
-
-    // Otherwise if we /do/ have a non trivial kind and the argument's ownership
-    // kind is compatible, merge in case the first value we saw had Any
-    // ownership.
-    auto newKind = nonTrivialKind->merge(arg.getOwnershipKind());
-    if (newKind) {
-      nonTrivialKind = newKind;
-      continue;
-    }
-
-    // Otherwise, we have inconsistent ownership in between our successors. To
-    // be sure that we error, return an empty map.
+  // If we failed to merge, return an empty map so we will fail to pattern match
+  // with any operand. This is a known signal to the verifier that we failed to
+  // merge in a forwarding context.
+  if (!mergedKind)
     return Map();
-  }
-
-  // We should never have an enum with a non-trivial case where we do not have
-  // at least one successor with a proper ownership qualifier since we either
-  // switch over the entire enum implying we visit that case, or we go through
-  // the default which will have our enum type as its type and thus some form of
-  // non-trivial ownership. So it is correct to use the optional here without
-  // checking.
-  auto lifetimeConstraint = nonTrivialKind->getForwardingLifetimeConstraint();
-  map.addCompatibilityConstraint(*nonTrivialKind, lifetimeConstraint);
-
-  return map;
+  auto kind = mergedKind.getValue();
+  if (kind == ValueOwnershipKind::Any)
+    return Map::allLive();
+  auto lifetimeConstraint = kind.getForwardingLifetimeConstraint();
+  return Map::compatibilityMap(kind, lifetimeConstraint);
 }
 
 OperandOwnershipKindMap
 OperandOwnershipKindClassifier::visitCheckedCastBranchInst(
     CheckedCastBranchInst *ccbi) {
+  // TODO: Simplify this using ValueOwnershipKind::merge.
   Optional<OperandOwnershipKindMap> map;
   for (auto argArray : ccbi->getSuccessorBlockArguments()) {
     assert(!argArray.empty());
@@ -603,57 +532,41 @@
   return map.getValue();
 }
 
+//// FIX THIS HERE
 OperandOwnershipKindMap
 OperandOwnershipKindClassifier::visitReturnInst(ReturnInst *ri) {
+  // If we have a trivial value, return allLive().
   bool isTrivial = ri->getOperand()->getType().isTrivial(mod);
-  SILFunctionConventions fnConv = ri->getFunction()->getConventions();
-  auto results = fnConv.getDirectSILResults();
-  // FIXME: Shouldn't we return an empty OperandOwnershipKindMap here if we do
-  // not have any results?
-  if (results.empty() || isTrivial) {
-    return Map::compatibilityMap(ValueOwnershipKind::Trivial,
-                                 UseLifetimeConstraint::MustBeLive);
+  if (isTrivial) {
+    return Map::allLive();
   }
 
+  SILFunctionConventions fnConv = ri->getFunction()->getConventions();
+
+  auto results = fnConv.getDirectSILResults();
+  if (results.empty())
+    return Map();
+
   CanGenericSignature sig = fnConv.funcTy->getGenericSignature();
+  auto ownershipKindRange = makeTransformRange(results,
+                                               [&](const SILResultInfo &info) {
+                                                 return info.getOwnershipKind(mod, sig);
+                                               });
 
-  // Find the first index where we have a trivial value.
-  auto iter = find_if(results, [this, &sig](const SILResultInfo &info) -> bool {
-    return info.getOwnershipKind(mod, sig) != ValueOwnershipKind::Trivial;
-  });
+  // Then merge all of our ownership kinds. If we fail to merge, return an empty
+  // map so we fail on all operands.
+  auto mergedBase = ValueOwnershipKind::merge(ownershipKindRange);
+  if (!mergedBase)
+    return Map();
 
-  // If we have all trivial, then we must be trivial. Why wasn't our original
-  // type trivial? This is a hard error since this is a logic error in our code
-  // here.
-  if (iter == results.end())
-    llvm_unreachable("Should have already checked a trivial type?!");
+  auto base = *mergedBase;
 
-  ValueOwnershipKind base = iter->getOwnershipKind(mod, sig);
-
-  for (const SILResultInfo &resultInfo :
-       SILFunctionConventions::DirectSILResultRange(std::next(iter),
-                                                    results.end())) {
-    auto rKind = resultInfo.getOwnershipKind(mod, sig);
-    // Ignore trivial types.
-    if (rKind.merge(ValueOwnershipKind::Trivial))
-      continue;
-
-    auto mergedValue = base.merge(rKind);
-    // If we fail to merge all types in, bail. We can not come up with a proper
-    // result type. We assert here since this is a hard error in the normal
-    // SILVerifier since the return type of the function would not match its
-    // terminator.
-    assert(mergedValue.hasValue() &&
-           "Failed to merge all types in on a return?!");
-    // In case Base is Any.
-    base = mergedValue.getValue();
-  }
-
+  // TODO: This may not be needed once trivial is any.
   if (getType().getEnumOrBoundGenericEnum()) {
     return visitEnumArgument(base);
   }
 
-  return Map::compatibilityMap(base, UseLifetimeConstraint::MustBeInvalidated);
+  return Map::compatibilityMap(base, base.getForwardingLifetimeConstraint());
 }
 
 OperandOwnershipKindMap
@@ -699,8 +612,7 @@
     return Map::compatibilityMap(ValueOwnershipKind::Guaranteed,
                                  UseLifetimeConstraint::MustBeLive);
   }
-  return Map::compatibilityMap(ValueOwnershipKind::Trivial,
-                               UseLifetimeConstraint::MustBeLive);
+  return Map::allLive();
 }
 
 // FIXME: Why not use SILArgumentConvention here?
@@ -729,8 +641,7 @@
                                  UseLifetimeConstraint::MustBeInvalidated);
   case ParameterConvention::Direct_Guaranteed:
     if (substCalleeType->isNoEscape())
-      return Map::compatibilityMap(ValueOwnershipKind::Trivial,
-                                   UseLifetimeConstraint::MustBeLive);
+      return Map::allLive();
     // We want to accept guaranteed/owned in this position since we
     // treat the use of an owned parameter as an instantaneously
     // borrowed value for the duration of the call.
@@ -753,13 +664,8 @@
 // apply %f(%val) : (@owned Optional<SomeClass>)    // owned argument
 OperandOwnershipKindMap OperandOwnershipKindClassifier::visitEnumArgument(
     ValueOwnershipKind requiredKind) {
-  // If this value is already categorized as a trivial ownership kind,
-  // it is safe to pass to any argument convention. This is ok since
-  // we know that the enum type must match up as checked by the
-  // ownership verifier.
+  // Begin with an empty map.
   OperandOwnershipKindMap map;
-  map.addCompatibilityConstraint(ValueOwnershipKind::Trivial,
-                                 UseLifetimeConstraint::MustBeLive);
 
   // The operand has a non-trivial ownership kind. It must match the argument
   // convention.
@@ -810,8 +716,7 @@
 
   // Indirect return arguments are address types.
   if (apply.isIndirectResultOperand(op)) {
-    return Map::compatibilityMap(ValueOwnershipKind::Trivial,
-                                 UseLifetimeConstraint::MustBeLive);
+    return Map::allLive();
   }
 
   unsigned argIndex = apply.getCalleeArgIndex(op);
@@ -828,29 +733,21 @@
   case ParameterConvention::Indirect_In: {
     // This expects an @trivial if we have lowered addresses and @
     if (conv.useLoweredAddresses()) {
-      return visitApplyParameter(ValueOwnershipKind::Trivial,
-                                 UseLifetimeConstraint::MustBeLive);
+      return Map::allLive();
     }
     // TODO: Once trivial is subsumed in any, this goes away.
     auto map = visitApplyParameter(ValueOwnershipKind::Owned,
                                    UseLifetimeConstraint::MustBeInvalidated);
-    map.addCompatibilityConstraint(ValueOwnershipKind::Trivial,
-                                   UseLifetimeConstraint::MustBeLive);
     return map;
   }
 
   case ParameterConvention::Indirect_In_Guaranteed: {
     // This expects an @trivial if we have lowered addresses and @
     if (conv.useLoweredAddresses()) {
-      return visitApplyParameter(ValueOwnershipKind::Trivial,
-                                 UseLifetimeConstraint::MustBeLive);
+      return Map::allLive();
     }
-    // TODO: Once trivial is subsumed in any, this goes away.
-    auto map = visitApplyParameter(ValueOwnershipKind::Guaranteed,
-                                   UseLifetimeConstraint::MustBeLive);
-    map.addCompatibilityConstraint(ValueOwnershipKind::Trivial,
-                                   UseLifetimeConstraint::MustBeLive);
-    return map;
+    return visitApplyParameter(ValueOwnershipKind::Guaranteed,
+                               UseLifetimeConstraint::MustBeLive);
   }
 
   // The following conventions should take address types and thus be
@@ -858,8 +755,7 @@
   case ParameterConvention::Indirect_In_Constant:
   case ParameterConvention::Indirect_Inout:
   case ParameterConvention::Indirect_InoutAliasable:
-    return visitApplyParameter(ValueOwnershipKind::Trivial,
-                               UseLifetimeConstraint::MustBeLive);
+    return Map::allLive();
 
   case ParameterConvention::Direct_Guaranteed:
     // A +1 value may be passed to a guaranteed argument. From the caller's
@@ -890,9 +786,8 @@
 OperandOwnershipKindMap
 OperandOwnershipKindClassifier::visitPartialApplyInst(PartialApplyInst *i) {
   return Map::compatibilityMap(
-      {{ValueOwnershipKind::Trivial, UseLifetimeConstraint::MustBeLive},
        // All non-trivial types should be captured.
-       {ValueOwnershipKind::Owned, UseLifetimeConstraint::MustBeInvalidated}});
+       ValueOwnershipKind::Owned, UseLifetimeConstraint::MustBeInvalidated);
 }
 
 // TODO: FIX THIS
@@ -902,8 +797,7 @@
   //
   // TODO: Change this to check if this operand is an indirect result
   if (isAddressOrTrivialType())
-    return Map::compatibilityMap(ValueOwnershipKind::Trivial,
-                                 UseLifetimeConstraint::MustBeLive);
+    return Map::allLive();
 
   auto fnType = i->getFunction()->getLoweredFunctionType();
   auto yieldInfo = fnType->getYields()[getOperandIndex()];
@@ -931,27 +825,21 @@
 OperandOwnershipKindMap
 OperandOwnershipKindClassifier::visitAssignInst(AssignInst *i) {
   if (getValue() != i->getSrc()) {
-    return Map::compatibilityMap(ValueOwnershipKind::Trivial,
-                                 UseLifetimeConstraint::MustBeLive);
+    return Map::allLive();
   }
 
-  return Map::compatibilityMap({
-      {ValueOwnershipKind::Trivial, UseLifetimeConstraint::MustBeLive},
-      {ValueOwnershipKind::Owned, UseLifetimeConstraint::MustBeInvalidated},
-  });
+  return Map::compatibilityMap(ValueOwnershipKind::Owned,
+                               UseLifetimeConstraint::MustBeInvalidated);
 }
 
 OperandOwnershipKindMap
 OperandOwnershipKindClassifier::visitStoreInst(StoreInst *i) {
   if (getValue() != i->getSrc()) {
-    return Map::compatibilityMap(ValueOwnershipKind::Trivial,
-                                 UseLifetimeConstraint::MustBeLive);
+    return Map::allLive();
   }
 
-  return Map::compatibilityMap({
-      {ValueOwnershipKind::Trivial, UseLifetimeConstraint::MustBeLive},
-      {ValueOwnershipKind::Owned, UseLifetimeConstraint::MustBeInvalidated},
-  });
+  return Map::compatibilityMap(ValueOwnershipKind::Owned,
+                               UseLifetimeConstraint::MustBeInvalidated);
 }
 
 OperandOwnershipKindMap
@@ -963,7 +851,7 @@
                                  UseLifetimeConstraint::MustBeInvalidated);
   }
 
-  return Map::compatibleWithAllExcept(ValueOwnershipKind::Trivial);
+  return Map::allLive();
 }
 
 OperandOwnershipKindMap OperandOwnershipKindClassifier::visitMarkDependenceInst(
@@ -989,8 +877,7 @@
   // KeyPath moves the value in memory out of address operands, but the
   // ownership checker doesn't reason about that yet.
   return Map::compatibilityMap(
-      {{ValueOwnershipKind::Trivial, UseLifetimeConstraint::MustBeLive},
-       {ValueOwnershipKind::Owned, UseLifetimeConstraint::MustBeInvalidated}});
+       ValueOwnershipKind::Owned, UseLifetimeConstraint::MustBeInvalidated);
 }
 
 //===----------------------------------------------------------------------===//
@@ -1008,7 +895,7 @@
                                              llvm::Intrinsic::ID id) {
     // LLVM intrinsics do not traffic in ownership, so if we have a result, it
     // must be trivial.
-    return {ValueOwnershipKind::Trivial, UseLifetimeConstraint::MustBeLive};
+    return Map::allLive();
   }
 
   // BUILTIN_TYPE_CHECKER_OPERATION does not live past the type checker.
@@ -1037,119 +924,119 @@
 CONSTANT_OWNERSHIP_BUILTIN(Owned, MustBeLive, UnexpectedError)
 CONSTANT_OWNERSHIP_BUILTIN(Owned, MustBeLive, WillThrow)
 CONSTANT_OWNERSHIP_BUILTIN(Owned, MustBeInvalidated, UnsafeGuaranteed)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, MustBeLive, AShr)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, MustBeLive, Add)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, MustBeLive, Alignof)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, MustBeLive, AllocRaw)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, MustBeLive, And)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, MustBeLive, AssertConf)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, MustBeLive, AssignCopyArrayNoAlias)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, MustBeLive, AssignCopyArrayFrontToBack)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, MustBeLive, AssignCopyArrayBackToFront)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, MustBeLive, AssignTakeArray)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, MustBeLive, AssumeNonNegative)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, MustBeLive, AssumeTrue)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, MustBeLive, AtomicLoad)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, MustBeLive, AtomicRMW)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, MustBeLive, AtomicStore)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, MustBeLive, BitCast)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, MustBeLive, CanBeObjCClass)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, MustBeLive, CmpXChg)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, MustBeLive, CondUnreachable)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, MustBeLive, CopyArray)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, MustBeLive, DeallocRaw)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, MustBeLive, DestroyArray)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, MustBeLive, ExactSDiv)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, MustBeLive, ExactUDiv)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, MustBeLive, ExtractElement)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, MustBeLive, FAdd)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, MustBeLive, FCMP_OEQ)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, MustBeLive, FCMP_OGE)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, MustBeLive, FCMP_OGT)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, MustBeLive, FCMP_OLE)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, MustBeLive, FCMP_OLT)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, MustBeLive, FCMP_ONE)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, MustBeLive, FCMP_ORD)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, MustBeLive, FCMP_UEQ)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, MustBeLive, FCMP_UGE)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, MustBeLive, FCMP_UGT)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, MustBeLive, FCMP_ULE)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, MustBeLive, FCMP_ULT)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, MustBeLive, FCMP_UNE)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, MustBeLive, FCMP_UNO)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, MustBeLive, FDiv)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, MustBeLive, FMul)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, MustBeLive, FNeg)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, MustBeLive, FPExt)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, MustBeLive, FPToSI)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, MustBeLive, FPToUI)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, MustBeLive, FPTrunc)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, MustBeLive, FRem)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, MustBeLive, FSub)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, MustBeLive, Fence)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, MustBeLive, GetObjCTypeEncoding)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, MustBeLive, ICMP_EQ)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, MustBeLive, ICMP_NE)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, MustBeLive, ICMP_SGE)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, MustBeLive, ICMP_SGT)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, MustBeLive, ICMP_SLE)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, MustBeLive, ICMP_SLT)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, MustBeLive, ICMP_UGE)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, MustBeLive, ICMP_UGT)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, MustBeLive, ICMP_ULE)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, MustBeLive, ICMP_ULT)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, MustBeLive, InsertElement)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, MustBeLive, IntToFPWithOverflow)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, MustBeLive, IntToPtr)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, MustBeLive, IsOptionalType)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, MustBeLive, IsPOD)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, MustBeLive, IsBitwiseTakable)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, MustBeLive, IsSameMetatype)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, MustBeLive, LShr)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, MustBeLive, Mul)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, MustBeLive, OnFastPath)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, MustBeLive, Once)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, MustBeLive, OnceWithContext)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, MustBeLive, Or)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, MustBeLive, PtrToInt)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, MustBeLive, SAddOver)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, MustBeLive, SDiv)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, MustBeLive, SExt)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, MustBeLive, SExtOrBitCast)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, MustBeLive, SIToFP)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, MustBeLive, SMulOver)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, MustBeLive, SRem)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, MustBeLive, SSubOver)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, MustBeLive, SToSCheckedTrunc)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, MustBeLive, SToUCheckedTrunc)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, MustBeLive, Shl)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, MustBeLive, Sizeof)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, MustBeLive, StaticReport)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, MustBeLive, Strideof)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, MustBeLive, StringObjectOr)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, MustBeLive, Sub)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, MustBeLive, TakeArrayNoAlias)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, MustBeLive, TakeArrayBackToFront)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, MustBeLive, TakeArrayFrontToBack)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, MustBeLive, Trunc)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, MustBeLive, TruncOrBitCast)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, MustBeLive, TSanInoutAccess)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, MustBeLive, UAddOver)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, MustBeLive, UDiv)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, MustBeLive, UIToFP)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, MustBeLive, UMulOver)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, MustBeLive, URem)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, MustBeLive, USubOver)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, MustBeLive, UToSCheckedTrunc)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, MustBeLive, UToUCheckedTrunc)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, MustBeLive, Unreachable)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, MustBeLive, UnsafeGuaranteedEnd)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, MustBeLive, Xor)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, MustBeLive, ZExt)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, MustBeLive, ZExtOrBitCast)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, MustBeLive, ZeroInitializer)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, MustBeLive, Swift3ImplicitObjCEntrypoint)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, MustBeLive, PoundAssert)
+CONSTANT_OWNERSHIP_BUILTIN(Any, MustBeLive, AShr)
+CONSTANT_OWNERSHIP_BUILTIN(Any, MustBeLive, Add)
+CONSTANT_OWNERSHIP_BUILTIN(Any, MustBeLive, Alignof)
+CONSTANT_OWNERSHIP_BUILTIN(Any, MustBeLive, AllocRaw)
+CONSTANT_OWNERSHIP_BUILTIN(Any, MustBeLive, And)
+CONSTANT_OWNERSHIP_BUILTIN(Any, MustBeLive, AssertConf)
+CONSTANT_OWNERSHIP_BUILTIN(Any, MustBeLive, AssignCopyArrayNoAlias)
+CONSTANT_OWNERSHIP_BUILTIN(Any, MustBeLive, AssignCopyArrayFrontToBack)
+CONSTANT_OWNERSHIP_BUILTIN(Any, MustBeLive, AssignCopyArrayBackToFront)
+CONSTANT_OWNERSHIP_BUILTIN(Any, MustBeLive, AssignTakeArray)
+CONSTANT_OWNERSHIP_BUILTIN(Any, MustBeLive, AssumeNonNegative)
+CONSTANT_OWNERSHIP_BUILTIN(Any, MustBeLive, AssumeTrue)
+CONSTANT_OWNERSHIP_BUILTIN(Any, MustBeLive, AtomicLoad)
+CONSTANT_OWNERSHIP_BUILTIN(Any, MustBeLive, AtomicRMW)
+CONSTANT_OWNERSHIP_BUILTIN(Any, MustBeLive, AtomicStore)
+CONSTANT_OWNERSHIP_BUILTIN(Any, MustBeLive, BitCast)
+CONSTANT_OWNERSHIP_BUILTIN(Any, MustBeLive, CanBeObjCClass)
+CONSTANT_OWNERSHIP_BUILTIN(Any, MustBeLive, CmpXChg)
+CONSTANT_OWNERSHIP_BUILTIN(Any, MustBeLive, CondUnreachable)
+CONSTANT_OWNERSHIP_BUILTIN(Any, MustBeLive, CopyArray)
+CONSTANT_OWNERSHIP_BUILTIN(Any, MustBeLive, DeallocRaw)
+CONSTANT_OWNERSHIP_BUILTIN(Any, MustBeLive, DestroyArray)
+CONSTANT_OWNERSHIP_BUILTIN(Any, MustBeLive, ExactSDiv)
+CONSTANT_OWNERSHIP_BUILTIN(Any, MustBeLive, ExactUDiv)
+CONSTANT_OWNERSHIP_BUILTIN(Any, MustBeLive, ExtractElement)
+CONSTANT_OWNERSHIP_BUILTIN(Any, MustBeLive, FAdd)
+CONSTANT_OWNERSHIP_BUILTIN(Any, MustBeLive, FCMP_OEQ)
+CONSTANT_OWNERSHIP_BUILTIN(Any, MustBeLive, FCMP_OGE)
+CONSTANT_OWNERSHIP_BUILTIN(Any, MustBeLive, FCMP_OGT)
+CONSTANT_OWNERSHIP_BUILTIN(Any, MustBeLive, FCMP_OLE)
+CONSTANT_OWNERSHIP_BUILTIN(Any, MustBeLive, FCMP_OLT)
+CONSTANT_OWNERSHIP_BUILTIN(Any, MustBeLive, FCMP_ONE)
+CONSTANT_OWNERSHIP_BUILTIN(Any, MustBeLive, FCMP_ORD)
+CONSTANT_OWNERSHIP_BUILTIN(Any, MustBeLive, FCMP_UEQ)
+CONSTANT_OWNERSHIP_BUILTIN(Any, MustBeLive, FCMP_UGE)
+CONSTANT_OWNERSHIP_BUILTIN(Any, MustBeLive, FCMP_UGT)
+CONSTANT_OWNERSHIP_BUILTIN(Any, MustBeLive, FCMP_ULE)
+CONSTANT_OWNERSHIP_BUILTIN(Any, MustBeLive, FCMP_ULT)
+CONSTANT_OWNERSHIP_BUILTIN(Any, MustBeLive, FCMP_UNE)
+CONSTANT_OWNERSHIP_BUILTIN(Any, MustBeLive, FCMP_UNO)
+CONSTANT_OWNERSHIP_BUILTIN(Any, MustBeLive, FDiv)
+CONSTANT_OWNERSHIP_BUILTIN(Any, MustBeLive, FMul)
+CONSTANT_OWNERSHIP_BUILTIN(Any, MustBeLive, FNeg)
+CONSTANT_OWNERSHIP_BUILTIN(Any, MustBeLive, FPExt)
+CONSTANT_OWNERSHIP_BUILTIN(Any, MustBeLive, FPToSI)
+CONSTANT_OWNERSHIP_BUILTIN(Any, MustBeLive, FPToUI)
+CONSTANT_OWNERSHIP_BUILTIN(Any, MustBeLive, FPTrunc)
+CONSTANT_OWNERSHIP_BUILTIN(Any, MustBeLive, FRem)
+CONSTANT_OWNERSHIP_BUILTIN(Any, MustBeLive, FSub)
+CONSTANT_OWNERSHIP_BUILTIN(Any, MustBeLive, Fence)
+CONSTANT_OWNERSHIP_BUILTIN(Any, MustBeLive, GetObjCTypeEncoding)
+CONSTANT_OWNERSHIP_BUILTIN(Any, MustBeLive, ICMP_EQ)
+CONSTANT_OWNERSHIP_BUILTIN(Any, MustBeLive, ICMP_NE)
+CONSTANT_OWNERSHIP_BUILTIN(Any, MustBeLive, ICMP_SGE)
+CONSTANT_OWNERSHIP_BUILTIN(Any, MustBeLive, ICMP_SGT)
+CONSTANT_OWNERSHIP_BUILTIN(Any, MustBeLive, ICMP_SLE)
+CONSTANT_OWNERSHIP_BUILTIN(Any, MustBeLive, ICMP_SLT)
+CONSTANT_OWNERSHIP_BUILTIN(Any, MustBeLive, ICMP_UGE)
+CONSTANT_OWNERSHIP_BUILTIN(Any, MustBeLive, ICMP_UGT)
+CONSTANT_OWNERSHIP_BUILTIN(Any, MustBeLive, ICMP_ULE)
+CONSTANT_OWNERSHIP_BUILTIN(Any, MustBeLive, ICMP_ULT)
+CONSTANT_OWNERSHIP_BUILTIN(Any, MustBeLive, InsertElement)
+CONSTANT_OWNERSHIP_BUILTIN(Any, MustBeLive, IntToFPWithOverflow)
+CONSTANT_OWNERSHIP_BUILTIN(Any, MustBeLive, IntToPtr)
+CONSTANT_OWNERSHIP_BUILTIN(Any, MustBeLive, IsOptionalType)
+CONSTANT_OWNERSHIP_BUILTIN(Any, MustBeLive, IsPOD)
+CONSTANT_OWNERSHIP_BUILTIN(Any, MustBeLive, IsBitwiseTakable)
+CONSTANT_OWNERSHIP_BUILTIN(Any, MustBeLive, IsSameMetatype)
+CONSTANT_OWNERSHIP_BUILTIN(Any, MustBeLive, LShr)
+CONSTANT_OWNERSHIP_BUILTIN(Any, MustBeLive, Mul)
+CONSTANT_OWNERSHIP_BUILTIN(Any, MustBeLive, OnFastPath)
+CONSTANT_OWNERSHIP_BUILTIN(Any, MustBeLive, Once)
+CONSTANT_OWNERSHIP_BUILTIN(Any, MustBeLive, OnceWithContext)
+CONSTANT_OWNERSHIP_BUILTIN(Any, MustBeLive, Or)
+CONSTANT_OWNERSHIP_BUILTIN(Any, MustBeLive, PtrToInt)
+CONSTANT_OWNERSHIP_BUILTIN(Any, MustBeLive, SAddOver)
+CONSTANT_OWNERSHIP_BUILTIN(Any, MustBeLive, SDiv)
+CONSTANT_OWNERSHIP_BUILTIN(Any, MustBeLive, SExt)
+CONSTANT_OWNERSHIP_BUILTIN(Any, MustBeLive, SExtOrBitCast)
+CONSTANT_OWNERSHIP_BUILTIN(Any, MustBeLive, SIToFP)
+CONSTANT_OWNERSHIP_BUILTIN(Any, MustBeLive, SMulOver)
+CONSTANT_OWNERSHIP_BUILTIN(Any, MustBeLive, SRem)
+CONSTANT_OWNERSHIP_BUILTIN(Any, MustBeLive, SSubOver)
+CONSTANT_OWNERSHIP_BUILTIN(Any, MustBeLive, SToSCheckedTrunc)
+CONSTANT_OWNERSHIP_BUILTIN(Any, MustBeLive, SToUCheckedTrunc)
+CONSTANT_OWNERSHIP_BUILTIN(Any, MustBeLive, Shl)
+CONSTANT_OWNERSHIP_BUILTIN(Any, MustBeLive, Sizeof)
+CONSTANT_OWNERSHIP_BUILTIN(Any, MustBeLive, StaticReport)
+CONSTANT_OWNERSHIP_BUILTIN(Any, MustBeLive, Strideof)
+CONSTANT_OWNERSHIP_BUILTIN(Any, MustBeLive, StringObjectOr)
+CONSTANT_OWNERSHIP_BUILTIN(Any, MustBeLive, Sub)
+CONSTANT_OWNERSHIP_BUILTIN(Any, MustBeLive, TakeArrayNoAlias)
+CONSTANT_OWNERSHIP_BUILTIN(Any, MustBeLive, TakeArrayBackToFront)
+CONSTANT_OWNERSHIP_BUILTIN(Any, MustBeLive, TakeArrayFrontToBack)
+CONSTANT_OWNERSHIP_BUILTIN(Any, MustBeLive, Trunc)
+CONSTANT_OWNERSHIP_BUILTIN(Any, MustBeLive, TruncOrBitCast)
+CONSTANT_OWNERSHIP_BUILTIN(Any, MustBeLive, TSanInoutAccess)
+CONSTANT_OWNERSHIP_BUILTIN(Any, MustBeLive, UAddOver)
+CONSTANT_OWNERSHIP_BUILTIN(Any, MustBeLive, UDiv)
+CONSTANT_OWNERSHIP_BUILTIN(Any, MustBeLive, UIToFP)
+CONSTANT_OWNERSHIP_BUILTIN(Any, MustBeLive, UMulOver)
+CONSTANT_OWNERSHIP_BUILTIN(Any, MustBeLive, URem)
+CONSTANT_OWNERSHIP_BUILTIN(Any, MustBeLive, USubOver)
+CONSTANT_OWNERSHIP_BUILTIN(Any, MustBeLive, UToSCheckedTrunc)
+CONSTANT_OWNERSHIP_BUILTIN(Any, MustBeLive, UToUCheckedTrunc)
+CONSTANT_OWNERSHIP_BUILTIN(Any, MustBeLive, Unreachable)
+CONSTANT_OWNERSHIP_BUILTIN(Any, MustBeLive, UnsafeGuaranteedEnd)
+CONSTANT_OWNERSHIP_BUILTIN(Any, MustBeLive, Xor)
+CONSTANT_OWNERSHIP_BUILTIN(Any, MustBeLive, ZExt)
+CONSTANT_OWNERSHIP_BUILTIN(Any, MustBeLive, ZExtOrBitCast)
+CONSTANT_OWNERSHIP_BUILTIN(Any, MustBeLive, ZeroInitializer)
+CONSTANT_OWNERSHIP_BUILTIN(Any, MustBeLive, Swift3ImplicitObjCEntrypoint)
+CONSTANT_OWNERSHIP_BUILTIN(Any, MustBeLive, PoundAssert)
 #undef CONSTANT_OWNERSHIP_BUILTIN
 
 // Builtins that should be lowered to SIL instructions so we should never see
diff --git a/lib/SIL/OwnershipUtils.cpp b/lib/SIL/OwnershipUtils.cpp
index 108bee9..e15e0ad 100644
--- a/lib/SIL/OwnershipUtils.cpp
+++ b/lib/SIL/OwnershipUtils.cpp
@@ -18,7 +18,6 @@
 
 bool swift::isValueAddressOrTrivial(SILValue v, SILModule &m) {
   return v->getType().isAddress() ||
-         v.getOwnershipKind() == ValueOwnershipKind::Trivial ||
          v.getOwnershipKind() == ValueOwnershipKind::Any;
 }
 
@@ -120,8 +119,7 @@
 
     // If v produces any ownership, then we can ignore it. Otherwise, we need to
     // return false since this is an introducer we do not understand.
-    if (v.getOwnershipKind() != ValueOwnershipKind::Any &&
-        v.getOwnershipKind() != ValueOwnershipKind::Trivial)
+    if (v.getOwnershipKind() != ValueOwnershipKind::Any)
       return false;
   }
 
diff --git a/lib/SIL/SILBasicBlock.cpp b/lib/SIL/SILBasicBlock.cpp
index df7f255..035866c 100644
--- a/lib/SIL/SILBasicBlock.cpp
+++ b/lib/SIL/SILBasicBlock.cpp
@@ -165,7 +165,7 @@
   assert(isEntry() && "Function Arguments can only be in the entry block");
   SILModule &M = getParent()->getModule();
   if (Ty.isTrivial(M))
-    Kind = ValueOwnershipKind::Trivial;
+    Kind = ValueOwnershipKind::Any;
 
   assert(ArgumentList[i]->use_empty() && "Expected no uses of the old arg!");
 
@@ -190,7 +190,7 @@
   assert(!isEntry() && "PHI Arguments can not be in the entry block");
   SILModule &M = getParent()->getModule();
   if (Ty.isTrivial(M))
-    Kind = ValueOwnershipKind::Trivial;
+    Kind = ValueOwnershipKind::Any;
 
   assert(ArgumentList[i]->use_empty() && "Expected no uses of the old BB arg!");
 
@@ -211,10 +211,8 @@
                                                  ValueOwnershipKind Kind,
                                                  const ValueDecl *D) {
   assert(!isEntry() && "PHI Arguments can not be in the entry block");
-  assert(!getParent()->hasQualifiedOwnership() ||
-         Kind != ValueOwnershipKind::Any);
   if (Ty.isTrivial(getModule()))
-    Kind = ValueOwnershipKind::Trivial;
+    Kind = ValueOwnershipKind::Any;
   return new (getModule()) SILPhiArgument(this, Ty, Kind, D);
 }
 
@@ -222,10 +220,8 @@
                                                  ValueOwnershipKind Kind,
                                                  const ValueDecl *D) {
   assert(!isEntry() && "PHI Arguments can not be in the entry block");
-  assert(!getParent()->hasQualifiedOwnership() ||
-         Kind != ValueOwnershipKind::Any);
   if (Ty.isTrivial(getModule()))
-    Kind = ValueOwnershipKind::Trivial;
+    Kind = ValueOwnershipKind::Any;
   return new (getModule()) SILPhiArgument(this, Iter, Ty, Kind, D);
 }
 
@@ -237,7 +233,7 @@
   ArgumentList.erase(ArgumentList.begin() + Index);
 }
 
-/// \brief Splits a basic block into two at the specified instruction.
+/// Splits a basic block into two at the specified instruction.
 ///
 /// Note that all the instructions BEFORE the specified iterator
 /// stay as part of the original basic block. The old basic block is left
@@ -251,7 +247,7 @@
   return New;
 }
 
-/// \brief Move the basic block to after the specified basic block in the IR.
+/// Move the basic block to after the specified basic block in the IR.
 void SILBasicBlock::moveAfter(SILBasicBlock *After) {
   assert(getParent() && getParent() == After->getParent() &&
          "Blocks must be in the same function");
diff --git a/lib/SIL/SILBuilder.cpp b/lib/SIL/SILBuilder.cpp
index 3c93f29..f1ac73c 100644
--- a/lib/SIL/SILBuilder.cpp
+++ b/lib/SIL/SILBuilder.cpp
@@ -144,7 +144,7 @@
   return createBranch(Loc, TargetBlock, ArgsCopy);
 }
 
-/// \brief Branch to the given block if there's an active insertion point,
+/// Branch to the given block if there's an active insertion point,
 /// then move the insertion point to the end of that block.
 void SILBuilder::emitBlock(SILBasicBlock *BB, SILLocation BranchLoc) {
   if (!hasValidInsertionPoint()) {
diff --git a/lib/SIL/SILDeclRef.cpp b/lib/SIL/SILDeclRef.cpp
index 5538dba..e612eae 100644
--- a/lib/SIL/SILDeclRef.cpp
+++ b/lib/SIL/SILDeclRef.cpp
@@ -420,7 +420,7 @@
   return dyn_cast<AbstractFunctionDecl>(getDecl());
 }
 
-/// \brief True if the function should be treated as transparent.
+/// True if the function should be treated as transparent.
 bool SILDeclRef::isTransparent() const {
   if (isEnumElement())
     return true;
@@ -442,7 +442,7 @@
   return false;
 }
 
-/// \brief True if the function should have its body serialized.
+/// True if the function should have its body serialized.
 IsSerialized_t SILDeclRef::isSerialized() const {
   DeclContext *dc;
   if (auto closure = getAbstractClosureExpr())
@@ -528,7 +528,7 @@
   return IsNotSerialized;
 }
 
-/// \brief True if the function has an @inline(never) attribute.
+/// True if the function has an @inline(never) attribute.
 bool SILDeclRef::isNoinline() const {
   if (!hasDecl())
     return false;
@@ -552,7 +552,7 @@
   return false;
 }
 
-/// \brief True if the function has the @inline(__always) attribute.
+/// True if the function has the @inline(__always) attribute.
 bool SILDeclRef::isAlwaysInline() const {
   if (!hasDecl())
     return false;
diff --git a/lib/SIL/SILInstructions.cpp b/lib/SIL/SILInstructions.cpp
index 296a69b..7d37028 100644
--- a/lib/SIL/SILInstructions.cpp
+++ b/lib/SIL/SILInstructions.cpp
@@ -483,7 +483,7 @@
   }
 
   resultTypes.push_back(SILType::getSILTokenType(F.getASTContext()));
-  resultOwnerships.push_back(ValueOwnershipKind::Trivial);
+  resultOwnerships.push_back(ValueOwnershipKind::Any);
 
   SmallVector<SILValue, 32> typeDependentOperands;
   collectTypeDependentOperands(typeDependentOperands, openedArchetypes, F,
diff --git a/lib/SIL/SILModule.cpp b/lib/SIL/SILModule.cpp
index 6cce609..ee8da6f 100644
--- a/lib/SIL/SILModule.cpp
+++ b/lib/SIL/SILModule.cpp
@@ -478,7 +478,7 @@
   return SILLoader.get();
 }
 
-/// \brief Given a conformance \p C and a protocol requirement \p Requirement,
+/// Given a conformance \p C and a protocol requirement \p Requirement,
 /// search the witness table for the conformance and return the witness thunk
 /// for the requirement.
 std::pair<SILFunction *, SILWitnessTable *>
@@ -513,7 +513,7 @@
   return std::make_pair(nullptr, nullptr);
 }
 
-/// \brief Given a protocol \p Protocol and a requirement \p Requirement,
+/// Given a protocol \p Protocol and a requirement \p Requirement,
 /// search the protocol's default witness table and return the default
 /// witness thunk for the requirement.
 std::pair<SILFunction *, SILDefaultWitnessTable *>
diff --git a/lib/SIL/SILOwnershipVerifier.cpp b/lib/SIL/SILOwnershipVerifier.cpp
index c49d4c3..1ee998d 100644
--- a/lib/SIL/SILOwnershipVerifier.cpp
+++ b/lib/SIL/SILOwnershipVerifier.cpp
@@ -353,7 +353,7 @@
     // User's results to the worklist.
     if (user->getResults().size()) {
       for (SILValue result : user->getResults()) {
-        if (result.getOwnershipKind() == ValueOwnershipKind::Trivial) {
+        if (result.getOwnershipKind() == ValueOwnershipKind::Any) {
           continue;
         }
 
@@ -399,13 +399,13 @@
         // needing to be verified. If it isn't verified appropriately, assert
         // when the verifier is destroyed.
         auto succArgOwnershipKind = succArg->getOwnershipKind();
-        if (!succArgOwnershipKind.isTrivialOrCompatibleWith(ownershipKind)) {
+        if (!succArgOwnershipKind.isCompatibleWith(ownershipKind)) {
           // This is where the error would go.
           continue;
         }
 
-        // If we have a trivial value, just continue.
-        if (succArgOwnershipKind == ValueOwnershipKind::Trivial)
+        // If we have an any value, just continue.
+        if (succArgOwnershipKind == ValueOwnershipKind::Any)
           continue;
 
         // Otherwise add all end_borrow users for this BBArg to the
@@ -434,11 +434,8 @@
   switch (arg->getOwnershipKind()) {
   case ValueOwnershipKind::Guaranteed:
   case ValueOwnershipKind::Unowned:
-  case ValueOwnershipKind::Trivial:
-    return true;
   case ValueOwnershipKind::Any:
-    llvm_unreachable(
-        "Function arguments should never have ValueOwnershipKind::Any");
+    return true;
   case ValueOwnershipKind::Owned:
     break;
   }
@@ -458,10 +455,8 @@
   switch (yield->getOwnershipKind()) {
   case ValueOwnershipKind::Guaranteed:
   case ValueOwnershipKind::Unowned:
-  case ValueOwnershipKind::Trivial:
-    return true;
   case ValueOwnershipKind::Any:
-    llvm_unreachable("Yields should never have ValueOwnershipKind::Any");
+    return true;
   case ValueOwnershipKind::Owned:
     break;
   }
@@ -709,8 +704,6 @@
   if (!f->hasQualifiedOwnership() || !f->shouldVerifyOwnership())
     return;
 
-  assert(getOwnershipKind() != ValueOwnershipKind::Any &&
-         "No values should have any ownership anymore");
   ErrorBehaviorKind errorBehavior;
   if (IsSILOwnershipVerifierTestingEnabled) {
     errorBehavior = ErrorBehaviorKind::PrintMessageAndReturnFalse;
diff --git a/lib/SIL/SILPrinter.cpp b/lib/SIL/SILPrinter.cpp
index dad73ea..ff6a183 100644
--- a/lib/SIL/SILPrinter.cpp
+++ b/lib/SIL/SILPrinter.cpp
@@ -462,7 +462,7 @@
     if (!i.Type)
       return *this;
     *this << " : ";
-    if (i.OwnershipKind) {
+    if (i.OwnershipKind && *i.OwnershipKind != ValueOwnershipKind::Any) {
       *this << "@" << i.OwnershipKind.getValue() << " ";
     }
     return *this << i.Type;
diff --git a/lib/SIL/SILProfiler.cpp b/lib/SIL/SILProfiler.cpp
index 84a0d6c..1a13208 100644
--- a/lib/SIL/SILProfiler.cpp
+++ b/lib/SIL/SILProfiler.cpp
@@ -381,16 +381,16 @@
 #endif
 };
 
-/// \brief A region of source code that can be mapped to a counter.
+/// A region of source code that can be mapped to a counter.
 class SourceMappingRegion {
   ASTNode Node;
 
   CounterExpr *Count;
 
-  /// \brief The region's starting location.
+  /// The region's starting location.
   Optional<SourceLoc> StartLoc;
 
-  /// \brief The region's ending location.
+  /// The region's ending location.
   Optional<SourceLoc> EndLoc;
 
 public:
@@ -620,22 +620,22 @@
 private:
   const SourceManager &SM;
 
-  /// \brief Storage for counter expressions.
+  /// Storage for counter expressions.
   std::forward_list<CounterExpr> Exprs;
 
-  /// \brief The map of statements to counter expressions.
+  /// The map of statements to counter expressions.
   llvm::DenseMap<ASTNode, CounterExpr *> CounterMap;
 
-  /// \brief The source mapping regions for this function.
+  /// The source mapping regions for this function.
   std::vector<SourceMappingRegion> SourceRegions;
 
-  /// \brief A stack of currently live regions.
+  /// A stack of currently live regions.
   std::vector<SourceMappingRegion> RegionStack;
 
-  /// \brief A stack of active repeat-while loops.
+  /// A stack of active repeat-while loops.
   std::vector<RepeatWhileStmt *> RepeatWhileStack;
 
-  /// \brief A stack of active do-catch statements.
+  /// A stack of active do-catch statements.
   std::vector<DoCatchStmt *> DoCatchStack;
 
   CounterExpr *ExitCounter = nullptr;
@@ -644,10 +644,10 @@
 
   NominalTypeDecl *ParentNominalType = nullptr;
 
-  /// \brief Return true if \c Node has an associated counter.
+  /// Return true if \c Node has an associated counter.
   bool hasCounter(ASTNode Node) { return CounterMap.count(Node); }
 
-  /// \brief Return the region counter for \c Node.
+  /// Return the region counter for \c Node.
   ///
   /// This should only be called on statements that have a dedicated counter.
   CounterExpr &getCounter(ASTNode Node) {
@@ -655,13 +655,13 @@
     return *CounterMap[Node];
   }
 
-  /// \brief Create a counter expression.
+  /// Create a counter expression.
   CounterExpr &createCounter(CounterExpr &&Expr) {
     Exprs.push_front(std::move(Expr));
     return Exprs.front();
   }
 
-  /// \brief Create a counter expression for \c Node and add it to the map.
+  /// Create a counter expression for \c Node and add it to the map.
   CounterExpr &assignCounter(ASTNode Node, CounterExpr &&Expr) {
     assert(Node && "Assigning counter expression to non-existent AST node");
     CounterExpr &Result = createCounter(std::move(Expr));
@@ -669,12 +669,12 @@
     return Result;
   }
 
-  /// \brief Create a counter expression referencing \c Node's own counter.
+  /// Create a counter expression referencing \c Node's own counter.
   CounterExpr &assignCounter(ASTNode Node) {
     return assignCounter(Node, CounterExpr::Leaf(Node));
   }
 
-  /// \brief Add \c Expr to \c Node's counter.
+  /// Add \c Expr to \c Node's counter.
   void addToCounter(ASTNode Node, CounterExpr &Expr) {
     CounterExpr &Counter = getCounter(Node);
     if (const CounterExpr *ReferencedCounter = Counter.getReferencedNode())
@@ -685,7 +685,7 @@
       Counter = CounterExpr::Add(createCounter(std::move(Counter)), Expr);
   }
 
-  /// \brief Subtract \c Expr from \c Node's counter.
+  /// Subtract \c Expr from \c Node's counter.
   void subtractFromCounter(ASTNode Node, CounterExpr &Expr) {
     CounterExpr &Counter = getCounter(Node);
     assert(!Counter.isZero() && "Cannot create a negative counter");
@@ -695,16 +695,16 @@
       Counter = CounterExpr::Sub(createCounter(std::move(Counter)), Expr);
   }
 
-  /// \brief Return the current region's counter.
+  /// Return the current region's counter.
   CounterExpr &getCurrentCounter() { return getRegion().getCounter(); }
 
-  /// \brief Get the counter from the end of the most recent scope.
+  /// Get the counter from the end of the most recent scope.
   CounterExpr &getExitCounter() {
     assert(ExitCounter && "no exit counter available");
     return *ExitCounter;
   }
 
-  /// \brief Set the exit count so we can leave the scope related to \c Node
+  /// Set the exit count so we can leave the scope related to \c Node
   ///
   /// Returns the delta of the count on entering \c Node and exiting, or null if
   /// there was no change.
@@ -715,7 +715,7 @@
     return nullptr;
   }
 
-  /// \brief Adjust the count for control flow when exiting a scope.
+  /// Adjust the count for control flow when exiting a scope.
   void adjustForNonLocalExits(ASTNode Scope, CounterExpr *ControlFlowAdjust) {
     if (Parent.getAsDecl())
       return;
@@ -744,24 +744,24 @@
     RegionStack.emplace_back(ASTNode(), *Count, getEndLoc(Scope), None);
   }
 
-  /// \brief Push a region covering \c Node onto the stack.
+  /// Push a region covering \c Node onto the stack.
   void pushRegion(ASTNode Node) {
     RegionStack.emplace_back(Node, getCounter(Node), Node.getStartLoc(),
                              getEndLoc(Node));
   }
 
-  /// \brief Replace the current region's count by pushing an incomplete region.
+  /// Replace the current region's count by pushing an incomplete region.
   void replaceCount(CounterExpr &&Expr, Optional<SourceLoc> Start = None) {
     CounterExpr &Counter = createCounter(std::move(Expr));
     RegionStack.emplace_back(ASTNode(), Counter, Start, None);
   }
 
-  /// \brief Get the location for the end of the last token in \c Node.
+  /// Get the location for the end of the last token in \c Node.
   SourceLoc getEndLoc(ASTNode Node) {
     return Lexer::getLocForEndOfToken(SM, Node.getEndLoc());
   }
 
-  /// \brief Pop regions from the stack into the function's list of regions.
+  /// Pop regions from the stack into the function's list of regions.
   ///
   /// Adds all regions from \c ParentNode to the top of the stack to the
   /// function's \c SourceRegions.
@@ -786,13 +786,13 @@
     RegionStack.erase(ParentIt, E);
   }
 
-  /// \brief Return the currently active region.
+  /// Return the currently active region.
   SourceMappingRegion &getRegion() {
     assert(!RegionStack.empty() && "statement has no region");
     return RegionStack.back();
   }
 
-  /// \brief Ensure that \c S is included in the current region.
+  /// Ensure that \c S is included in the current region.
   void extendRegion(ASTNode S) {
     SourceMappingRegion &Region = getRegion();
     SourceLoc StartLoc = S.getStartLoc();
@@ -800,7 +800,7 @@
       Region.setStartLoc(StartLoc);
   }
 
-  /// \brief Mark \c S as a terminator, starting a zero region.
+  /// Mark \c S as a terminator, starting a zero region.
   void terminateRegion(ASTNode S) {
     SourceMappingRegion &Region = getRegion();
     if (!Region.hasEndLoc())
@@ -816,7 +816,7 @@
 public:
   CoverageMapping(const SourceManager &SM) : SM(SM) {}
 
-  /// \brief Generate the coverage counter mapping regions from collected
+  /// Generate the coverage counter mapping regions from collected
   /// source regions.
   SILCoverageMap *emitSourceRegions(
       SILModule &M, StringRef Name, StringRef PGOFuncName, uint64_t Hash,
diff --git a/lib/SIL/SILType.cpp b/lib/SIL/SILType.cpp
index 830acd6..0031d5c 100644
--- a/lib/SIL/SILType.cpp
+++ b/lib/SIL/SILType.cpp
@@ -420,7 +420,7 @@
   switch (getConvention()) {
   case ResultConvention::Indirect:
     return SILModuleConventions(M).isSILIndirect(*this)
-               ? ValueOwnershipKind::Trivial
+               ? ValueOwnershipKind::Any
                : ValueOwnershipKind::Owned;
   case ResultConvention::Autoreleased:
   case ResultConvention::Owned:
@@ -428,7 +428,7 @@
   case ResultConvention::Unowned:
   case ResultConvention::UnownedInnerPointer:
     if (IsTrivial)
-      return ValueOwnershipKind::Trivial;
+      return ValueOwnershipKind::Any;
     return ValueOwnershipKind::Unowned;
   }
 
diff --git a/lib/SIL/SILUndef.cpp b/lib/SIL/SILUndef.cpp
index 6c05bc2..f8c3146 100644
--- a/lib/SIL/SILUndef.cpp
+++ b/lib/SIL/SILUndef.cpp
@@ -17,7 +17,7 @@
 
 static ValueOwnershipKind getOwnershipKindForUndef(SILType type, SILModule &m) {
   if (type.isTrivial(m))
-    return ValueOwnershipKind::Trivial;
+    return ValueOwnershipKind::Any;
   return ValueOwnershipKind::Owned;
 }
 
diff --git a/lib/SIL/SILValue.cpp b/lib/SIL/SILValue.cpp
index 7ef07d5..c175cbd 100644
--- a/lib/SIL/SILValue.cpp
+++ b/lib/SIL/SILValue.cpp
@@ -152,7 +152,7 @@
   // Trivial types can be passed using a variety of conventions. They always
   // have trivial ownership.
   if (Type.isTrivial(M)) {
-    Value = ValueOwnershipKind::Trivial;
+    Value = ValueOwnershipKind::Any;
     return;
   }
 
@@ -160,18 +160,18 @@
   case SILArgumentConvention::Indirect_In:
   case SILArgumentConvention::Indirect_In_Constant:
     Value = SILModuleConventions(M).useLoweredAddresses()
-      ? ValueOwnershipKind::Trivial
+      ? ValueOwnershipKind::Any
       : ValueOwnershipKind::Owned;
     break;
   case SILArgumentConvention::Indirect_In_Guaranteed:
     Value = SILModuleConventions(M).useLoweredAddresses()
-      ? ValueOwnershipKind::Trivial
+      ? ValueOwnershipKind::Any
       : ValueOwnershipKind::Guaranteed;
     break;
   case SILArgumentConvention::Indirect_Inout:
   case SILArgumentConvention::Indirect_InoutAliasable:
   case SILArgumentConvention::Indirect_Out:
-    Value = ValueOwnershipKind::Trivial;
+    Value = ValueOwnershipKind::Any;
     return;
   case SILArgumentConvention::Direct_Owned:
     Value = ValueOwnershipKind::Owned;
@@ -190,8 +190,6 @@
 llvm::raw_ostream &swift::operator<<(llvm::raw_ostream &os,
                                      ValueOwnershipKind Kind) {
   switch (Kind) {
-  case ValueOwnershipKind::Trivial:
-    return os << "trivial";
   case ValueOwnershipKind::Unowned:
     return os << "unowned";
   case ValueOwnershipKind::Owned:
@@ -224,7 +222,6 @@
 
 ValueOwnershipKind::ValueOwnershipKind(StringRef S) {
   auto Result = llvm::StringSwitch<Optional<ValueOwnershipKind::innerty>>(S)
-                    .Case("trivial", ValueOwnershipKind::Trivial)
                     .Case("unowned", ValueOwnershipKind::Unowned)
                     .Case("owned", ValueOwnershipKind::Owned)
                     .Case("guaranteed", ValueOwnershipKind::Guaranteed)
@@ -239,7 +236,7 @@
 ValueOwnershipKind::getProjectedOwnershipKind(SILModule &M,
                                               SILType Proj) const {
   if (Proj.isTrivial(M))
-    return ValueOwnershipKind::Trivial;
+    return ValueOwnershipKind::Any;
   return *this;
 }
 
diff --git a/lib/SIL/SILVerifier.cpp b/lib/SIL/SILVerifier.cpp
index 45f719a..7ec511c6 100644
--- a/lib/SIL/SILVerifier.cpp
+++ b/lib/SIL/SILVerifier.cpp
@@ -1691,7 +1691,7 @@
           "Inst with qualified ownership in a function that is not qualified");
       SILValue Src = SI->getSrc();
       require(Src->getType().isTrivial(SI->getModule()) ||
-              Src.getOwnershipKind() == ValueOwnershipKind::Trivial,
+              Src.getOwnershipKind() == ValueOwnershipKind::Any,
               "A store with trivial ownership must store a type with trivial "
               "ownership");
       break;
@@ -4656,7 +4656,7 @@
             llvm::all_of(CBI->getTrueArgs(),
                          [](SILValue V) -> bool {
                            return V.getOwnershipKind() ==
-                                  ValueOwnershipKind::Trivial;
+                                  ValueOwnershipKind::Any;
                          }),
             "cond_br with critical edges must not have a non-trivial value");
       }
@@ -4665,7 +4665,7 @@
             llvm::all_of(CBI->getFalseArgs(),
                          [](SILValue V) -> bool {
                            return V.getOwnershipKind() ==
-                                  ValueOwnershipKind::Trivial;
+                                  ValueOwnershipKind::Any;
                          }),
             "cond_br with critical edges must not have a non-trivial value");
       }
diff --git a/lib/SIL/ValueOwnership.cpp b/lib/SIL/ValueOwnership.cpp
index 5c3e131..8347d40 100644
--- a/lib/SIL/ValueOwnership.cpp
+++ b/lib/SIL/ValueOwnership.cpp
@@ -59,7 +59,7 @@
   NEVER_LOADABLE_CHECKED_REF_STORAGE(Name, "...") \
   ALWAYS_LOADABLE_CHECKED_REF_STORAGE(Name, "...")
 #define UNCHECKED_REF_STORAGE(Name, ...) \
-  CONSTANT_OWNERSHIP_INST(Trivial, RefTo##Name) \
+  CONSTANT_OWNERSHIP_INST(Any, RefTo##Name) \
   CONSTANT_OWNERSHIP_INST(Unowned, Name##ToRef)
 #include "swift/AST/ReferenceStorage.def"
 
@@ -69,7 +69,7 @@
 CONSTANT_OWNERSHIP_INST(Owned, AllocExistentialBox)
 CONSTANT_OWNERSHIP_INST(Owned, AllocRef)
 CONSTANT_OWNERSHIP_INST(Owned, AllocRefDynamic)
-CONSTANT_OWNERSHIP_INST(Trivial, AllocValueBuffer)
+CONSTANT_OWNERSHIP_INST(Any, AllocValueBuffer)
 CONSTANT_OWNERSHIP_INST(Owned, CopyBlock)
 CONSTANT_OWNERSHIP_INST(Owned, CopyBlockWithoutEscaping)
 CONSTANT_OWNERSHIP_INST(Owned, CopyValue)
@@ -89,58 +89,58 @@
 
 // All addresses have trivial ownership. The values stored at the address may
 // not though.
-CONSTANT_OWNERSHIP_INST(Trivial, AddressToPointer)
-CONSTANT_OWNERSHIP_INST(Trivial, AllocStack)
-CONSTANT_OWNERSHIP_INST(Trivial, BeginAccess)
-CONSTANT_OWNERSHIP_INST(Trivial, BridgeObjectToWord)
-CONSTANT_OWNERSHIP_INST(Trivial, ClassMethod)
-CONSTANT_OWNERSHIP_INST(Trivial, ClassifyBridgeObject)
-CONSTANT_OWNERSHIP_INST(Trivial, ObjCMethod)
-CONSTANT_OWNERSHIP_INST(Trivial, ExistentialMetatype)
-CONSTANT_OWNERSHIP_INST(Trivial, FloatLiteral)
-CONSTANT_OWNERSHIP_INST(Trivial, FunctionRef)
-CONSTANT_OWNERSHIP_INST(Trivial, DynamicFunctionRef)
-CONSTANT_OWNERSHIP_INST(Trivial, PreviousDynamicFunctionRef)
-CONSTANT_OWNERSHIP_INST(Trivial, GlobalAddr)
-CONSTANT_OWNERSHIP_INST(Trivial, IndexAddr)
-CONSTANT_OWNERSHIP_INST(Trivial, IndexRawPointer)
-CONSTANT_OWNERSHIP_INST(Trivial, InitEnumDataAddr)
-CONSTANT_OWNERSHIP_INST(Trivial, InitExistentialAddr)
-CONSTANT_OWNERSHIP_INST(Trivial, InitExistentialMetatype)
-CONSTANT_OWNERSHIP_INST(Trivial, IntegerLiteral)
-CONSTANT_OWNERSHIP_INST(Trivial, IsUnique)
-CONSTANT_OWNERSHIP_INST(Trivial, IsEscapingClosure)
-CONSTANT_OWNERSHIP_INST(Trivial, MarkUninitializedBehavior)
-CONSTANT_OWNERSHIP_INST(Trivial, Metatype)
-CONSTANT_OWNERSHIP_INST(Trivial, ObjCToThickMetatype)
-CONSTANT_OWNERSHIP_INST(Trivial, OpenExistentialAddr)
-CONSTANT_OWNERSHIP_INST(Trivial, OpenExistentialBox)
-CONSTANT_OWNERSHIP_INST(Trivial, OpenExistentialMetatype)
-CONSTANT_OWNERSHIP_INST(Trivial, PointerToAddress)
-CONSTANT_OWNERSHIP_INST(Trivial, PointerToThinFunction)
-CONSTANT_OWNERSHIP_INST(Trivial, ProjectBlockStorage)
-CONSTANT_OWNERSHIP_INST(Trivial, ProjectBox)
-CONSTANT_OWNERSHIP_INST(Trivial, ProjectExistentialBox)
-CONSTANT_OWNERSHIP_INST(Trivial, ProjectValueBuffer)
-CONSTANT_OWNERSHIP_INST(Trivial, RefElementAddr)
-CONSTANT_OWNERSHIP_INST(Trivial, RefTailAddr)
-CONSTANT_OWNERSHIP_INST(Trivial, RefToRawPointer)
-CONSTANT_OWNERSHIP_INST(Trivial, SelectEnumAddr)
-CONSTANT_OWNERSHIP_INST(Trivial, StringLiteral)
-CONSTANT_OWNERSHIP_INST(Trivial, StructElementAddr)
-CONSTANT_OWNERSHIP_INST(Trivial, SuperMethod)
-CONSTANT_OWNERSHIP_INST(Trivial, ObjCSuperMethod)
-CONSTANT_OWNERSHIP_INST(Trivial, TailAddr)
-CONSTANT_OWNERSHIP_INST(Trivial, ThickToObjCMetatype)
-CONSTANT_OWNERSHIP_INST(Trivial, ThinFunctionToPointer)
-CONSTANT_OWNERSHIP_INST(Trivial, TupleElementAddr)
-CONSTANT_OWNERSHIP_INST(Trivial, UncheckedAddrCast)
-CONSTANT_OWNERSHIP_INST(Trivial, UncheckedTakeEnumDataAddr)
-CONSTANT_OWNERSHIP_INST(Trivial, UncheckedTrivialBitCast)
-CONSTANT_OWNERSHIP_INST(Trivial, ValueMetatype)
-CONSTANT_OWNERSHIP_INST(Trivial, WitnessMethod)
-CONSTANT_OWNERSHIP_INST(Trivial, StoreBorrow)
-CONSTANT_OWNERSHIP_INST(Trivial, ConvertEscapeToNoEscape)
+CONSTANT_OWNERSHIP_INST(Any, AddressToPointer)
+CONSTANT_OWNERSHIP_INST(Any, AllocStack)
+CONSTANT_OWNERSHIP_INST(Any, BeginAccess)
+CONSTANT_OWNERSHIP_INST(Any, BridgeObjectToWord)
+CONSTANT_OWNERSHIP_INST(Any, ClassMethod)
+CONSTANT_OWNERSHIP_INST(Any, ClassifyBridgeObject)
+CONSTANT_OWNERSHIP_INST(Any, ObjCMethod)
+CONSTANT_OWNERSHIP_INST(Any, ExistentialMetatype)
+CONSTANT_OWNERSHIP_INST(Any, FloatLiteral)
+CONSTANT_OWNERSHIP_INST(Any, FunctionRef)
+CONSTANT_OWNERSHIP_INST(Any, DynamicFunctionRef)
+CONSTANT_OWNERSHIP_INST(Any, PreviousDynamicFunctionRef)
+CONSTANT_OWNERSHIP_INST(Any, GlobalAddr)
+CONSTANT_OWNERSHIP_INST(Any, IndexAddr)
+CONSTANT_OWNERSHIP_INST(Any, IndexRawPointer)
+CONSTANT_OWNERSHIP_INST(Any, InitEnumDataAddr)
+CONSTANT_OWNERSHIP_INST(Any, InitExistentialAddr)
+CONSTANT_OWNERSHIP_INST(Any, InitExistentialMetatype)
+CONSTANT_OWNERSHIP_INST(Any, IntegerLiteral)
+CONSTANT_OWNERSHIP_INST(Any, IsUnique)
+CONSTANT_OWNERSHIP_INST(Any, IsEscapingClosure)
+CONSTANT_OWNERSHIP_INST(Any, MarkUninitializedBehavior)
+CONSTANT_OWNERSHIP_INST(Any, Metatype)
+CONSTANT_OWNERSHIP_INST(Any, ObjCToThickMetatype)
+CONSTANT_OWNERSHIP_INST(Any, OpenExistentialAddr)
+CONSTANT_OWNERSHIP_INST(Any, OpenExistentialBox)
+CONSTANT_OWNERSHIP_INST(Any, OpenExistentialMetatype)
+CONSTANT_OWNERSHIP_INST(Any, PointerToAddress)
+CONSTANT_OWNERSHIP_INST(Any, PointerToThinFunction)
+CONSTANT_OWNERSHIP_INST(Any, ProjectBlockStorage)
+CONSTANT_OWNERSHIP_INST(Any, ProjectBox)
+CONSTANT_OWNERSHIP_INST(Any, ProjectExistentialBox)
+CONSTANT_OWNERSHIP_INST(Any, ProjectValueBuffer)
+CONSTANT_OWNERSHIP_INST(Any, RefElementAddr)
+CONSTANT_OWNERSHIP_INST(Any, RefTailAddr)
+CONSTANT_OWNERSHIP_INST(Any, RefToRawPointer)
+CONSTANT_OWNERSHIP_INST(Any, SelectEnumAddr)
+CONSTANT_OWNERSHIP_INST(Any, StringLiteral)
+CONSTANT_OWNERSHIP_INST(Any, StructElementAddr)
+CONSTANT_OWNERSHIP_INST(Any, SuperMethod)
+CONSTANT_OWNERSHIP_INST(Any, ObjCSuperMethod)
+CONSTANT_OWNERSHIP_INST(Any, TailAddr)
+CONSTANT_OWNERSHIP_INST(Any, ThickToObjCMetatype)
+CONSTANT_OWNERSHIP_INST(Any, ThinFunctionToPointer)
+CONSTANT_OWNERSHIP_INST(Any, TupleElementAddr)
+CONSTANT_OWNERSHIP_INST(Any, UncheckedAddrCast)
+CONSTANT_OWNERSHIP_INST(Any, UncheckedTakeEnumDataAddr)
+CONSTANT_OWNERSHIP_INST(Any, UncheckedTrivialBitCast)
+CONSTANT_OWNERSHIP_INST(Any, ValueMetatype)
+CONSTANT_OWNERSHIP_INST(Any, WitnessMethod)
+CONSTANT_OWNERSHIP_INST(Any, StoreBorrow)
+CONSTANT_OWNERSHIP_INST(Any, ConvertEscapeToNoEscape)
 CONSTANT_OWNERSHIP_INST(Unowned, InitBlockStorageHeader)
 // TODO: It would be great to get rid of these.
 CONSTANT_OWNERSHIP_INST(Unowned, RawPointerToRef)
@@ -152,7 +152,7 @@
   ValueOwnershipKind ValueOwnershipKindClassifier::visit##INST##Inst(          \
       INST##Inst *I) {                                                         \
     if (I->getType().isTrivial(I->getModule())) {                              \
-      return ValueOwnershipKind::Trivial;                                      \
+      return ValueOwnershipKind::Any;                                          \
     }                                                                          \
     return ValueOwnershipKind::OWNERSHIP;                                      \
   }
@@ -201,54 +201,30 @@
 // For a forwarding instruction, we loop over all operands and make sure that
 // all non-trivial values have the same ownership.
 ValueOwnershipKind
-ValueOwnershipKindClassifier::visitForwardingInst(SILInstruction *I,
-                                                  ArrayRef<Operand> Ops) {
+ValueOwnershipKindClassifier::visitForwardingInst(SILInstruction *i,
+                                                  ArrayRef<Operand> ops) {
   // A forwarding inst without operands must be trivial.
-  if (Ops.empty())
-    return ValueOwnershipKind::Trivial;
-
-  // Find the first index where we have a trivial value.
-  auto Iter = find_if(Ops, [&I](const Operand &Op) -> bool {
-    if (I->isTypeDependentOperand(Op))
-      return false;
-    return Op.get().getOwnershipKind() != ValueOwnershipKind::Trivial;
-  });
-  // All trivial.
-  if (Iter == Ops.end()) {
-    return ValueOwnershipKind::Trivial;
-  }
-
-  // See if we have any Any. If we do, just return that for now.
-  if (any_of(Ops, [&I](const Operand &Op) -> bool {
-        if (I->isTypeDependentOperand(Op))
-          return false;
-        return Op.get().getOwnershipKind() == ValueOwnershipKind::Any;
-      }))
+  if (ops.empty())
     return ValueOwnershipKind::Any;
-  unsigned Index = std::distance(Ops.begin(), Iter);
 
-  ValueOwnershipKind Base = Ops[Index].get().getOwnershipKind();
+  auto mergedValue = ValueOwnershipKind::merge(makeOptionalTransformRange(
+      ops, [&i](const Operand &op) -> Optional<ValueOwnershipKind> {
+        if (i->isTypeDependentOperand(op))
+          return None;
+        return op.get().getOwnershipKind();
+      }));
 
-  for (const Operand &Op : Ops.slice(Index + 1)) {
-    if (I->isTypeDependentOperand(Op))
-      continue;
-    auto OpKind = Op.get().getOwnershipKind();
-    if (OpKind.merge(ValueOwnershipKind::Trivial))
-      continue;
-
-    auto MergedValue = Base.merge(OpKind.Value);
-    if (!MergedValue.hasValue()) {
-      // If we have mismatched SILOwnership and sil ownership is not enabled,
-      // just return Any for staging purposes. If SILOwnership is enabled, then
-      // we must assert!
-      if (!I->getModule().getOptions().EnableSILOwnership) {
-        return ValueOwnershipKind::Any;
-      }
-      llvm_unreachable("Forwarding inst with mismatching ownership kinds?!");
+  if (!mergedValue.hasValue()) {
+    // If we have mismatched SILOwnership and sil ownership is not enabled,
+    // just return Any for staging purposes. If SILOwnership is enabled, then
+    // we must assert!
+    if (!i->getModule().getOptions().EnableSILOwnership) {
+      return ValueOwnershipKind::Any;
     }
+    llvm_unreachable("Forwarding inst with mismatching ownership kinds?!");
   }
 
-  return Base;
+  return mergedValue.getValue();
 }
 
 #define FORWARDING_OWNERSHIP_INST(INST)                                        \
@@ -315,40 +291,31 @@
   return MDI->getValue().getOwnershipKind();
 }
 
-ValueOwnershipKind ValueOwnershipKindClassifier::visitApplyInst(ApplyInst *AI) {
-  SILModule &M = AI->getModule();
-  bool IsTrivial = AI->getType().isTrivial(M);
-  SILFunctionConventions fnConv(AI->getSubstCalleeType(), M);
-  auto Results = fnConv.getDirectSILResults();
-  // No results => empty tuple result => Trivial.
-  if (Results.empty() || IsTrivial)
-    return ValueOwnershipKind::Trivial;
+ValueOwnershipKind ValueOwnershipKindClassifier::visitApplyInst(ApplyInst *ai) {
+  SILModule &m = ai->getModule();
+  bool isTrivial = ai->getType().isTrivial(m);
+  // Quick is trivial check.
+  if (isTrivial)
+    return ValueOwnershipKind::Any;
 
-  CanGenericSignature Sig = AI->getSubstCalleeType()->getGenericSignature();
-  // Find the first index where we have a trivial value.
-  auto Iter = find_if(Results, [&M, &Sig](const SILResultInfo &Info) -> bool {
-    return Info.getOwnershipKind(M, Sig) != ValueOwnershipKind::Trivial;
-  });
-  // If we have all trivial, then we must be trivial.
-  if (Iter == Results.end())
-    return ValueOwnershipKind::Trivial;
+  SILFunctionConventions fnConv(ai->getSubstCalleeType(), m);
+  auto results = fnConv.getDirectSILResults();
+  // No results => Any.
+  if (results.empty())
+    return ValueOwnershipKind::Any;
 
-  ValueOwnershipKind Base = Iter->getOwnershipKind(M, Sig);
-
-  for (const SILResultInfo &ResultInfo :
-       SILFunctionConventions::DirectSILResultRange(next(Iter),
-                                                    Results.end())) {
-    auto RKind = ResultInfo.getOwnershipKind(M, Sig);
-    if (RKind.merge(ValueOwnershipKind::Trivial))
-      continue;
-
-    auto MergedValue = Base.merge(RKind.Value);
-    if (!MergedValue.hasValue()) {
-      llvm_unreachable("Forwarding inst with mismatching ownership kinds?!");
-    }
+  // Otherwise, map our results to their ownership kinds and then merge them!
+  CanGenericSignature sig = ai->getSubstCalleeType()->getGenericSignature();
+  auto resultOwnershipKinds =
+      makeTransformRange(results, [&](const SILResultInfo &info) {
+        return info.getOwnershipKind(m, sig);
+      });
+  auto mergedOwnershipKind = ValueOwnershipKind::merge(resultOwnershipKinds);
+  if (!mergedOwnershipKind) {
+    llvm_unreachable("Forwarding inst with mismatching ownership kinds?!");
   }
 
-  return Base;
+  return *mergedOwnershipKind;
 }
 
 ValueOwnershipKind ValueOwnershipKindClassifier::visitLoadInst(LoadInst *LI) {
@@ -357,9 +324,8 @@
   case LoadOwnershipQualifier::Copy:
     return ValueOwnershipKind::Owned;
   case LoadOwnershipQualifier::Unqualified:
-    return ValueOwnershipKind::Any;
   case LoadOwnershipQualifier::Trivial:
-    return ValueOwnershipKind::Trivial;
+    return ValueOwnershipKind::Any;
   }
 
   llvm_unreachable("Unhandled LoadOwnershipQualifier in switch.");
@@ -377,8 +343,8 @@
   ValueOwnershipKind visitLLVMIntrinsic(BuiltinInst *BI,
                                         llvm::Intrinsic::ID ID) {
     // LLVM intrinsics do not traffic in ownership, so if we have a result, it
-    // must be trivial.
-    return ValueOwnershipKind::Trivial;
+    // must be any.
+    return ValueOwnershipKind::Any;
   }
 
 #define BUILTIN(ID, NAME, ATTRS)                                               \
@@ -396,125 +362,125 @@
 // This returns a value at +1 that is destroyed strictly /after/ the
 // UnsafeGuaranteedEnd. This provides the guarantee that we want.
 CONSTANT_OWNERSHIP_BUILTIN(Owned, UnsafeGuaranteed)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, AShr)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, Add)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, And)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, AssumeNonNegative)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, AssumeTrue)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, BitCast)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, ExactSDiv)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, ExactUDiv)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, FAdd)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, FCMP_OEQ)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, FCMP_OGE)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, FCMP_OGT)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, FCMP_OLE)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, FCMP_OLT)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, FCMP_ONE)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, FCMP_UEQ)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, FCMP_UGE)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, FCMP_UGT)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, FCMP_ULE)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, FCMP_ULT)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, FCMP_UNE)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, FDiv)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, FMul)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, FNeg)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, FPExt)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, FPToSI)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, FPToUI)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, FPTrunc)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, FRem)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, FSub)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, ICMP_EQ)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, ICMP_NE)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, ICMP_SGE)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, ICMP_SGT)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, ICMP_SLE)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, ICMP_SLT)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, ICMP_UGE)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, ICMP_UGT)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, ICMP_ULE)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, ICMP_ULT)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, IntToPtr)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, LShr)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, Mul)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, Or)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, PtrToInt)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, SAddOver)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, SDiv)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, SExt)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, SExtOrBitCast)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, SIToFP)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, SMulOver)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, SRem)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, SSubOver)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, Shl)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, Sub)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, Trunc)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, TruncOrBitCast)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, UAddOver)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, UDiv)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, UIToFP)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, UMulOver)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, URem)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, USubOver)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, Xor)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, ZExt)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, ZExtOrBitCast)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, FCMP_ORD)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, FCMP_UNO)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, OnFastPath)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, IsOptionalType)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, Sizeof)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, Strideof)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, StringObjectOr)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, IsPOD)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, IsBitwiseTakable)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, IsSameMetatype)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, Alignof)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, AllocRaw)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, AssertConf)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, UToSCheckedTrunc)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, SToSCheckedTrunc)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, SToUCheckedTrunc)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, UToUCheckedTrunc)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, IntToFPWithOverflow)
+CONSTANT_OWNERSHIP_BUILTIN(Any, AShr)
+CONSTANT_OWNERSHIP_BUILTIN(Any, Add)
+CONSTANT_OWNERSHIP_BUILTIN(Any, And)
+CONSTANT_OWNERSHIP_BUILTIN(Any, AssumeNonNegative)
+CONSTANT_OWNERSHIP_BUILTIN(Any, AssumeTrue)
+CONSTANT_OWNERSHIP_BUILTIN(Any, BitCast)
+CONSTANT_OWNERSHIP_BUILTIN(Any, ExactSDiv)
+CONSTANT_OWNERSHIP_BUILTIN(Any, ExactUDiv)
+CONSTANT_OWNERSHIP_BUILTIN(Any, FAdd)
+CONSTANT_OWNERSHIP_BUILTIN(Any, FCMP_OEQ)
+CONSTANT_OWNERSHIP_BUILTIN(Any, FCMP_OGE)
+CONSTANT_OWNERSHIP_BUILTIN(Any, FCMP_OGT)
+CONSTANT_OWNERSHIP_BUILTIN(Any, FCMP_OLE)
+CONSTANT_OWNERSHIP_BUILTIN(Any, FCMP_OLT)
+CONSTANT_OWNERSHIP_BUILTIN(Any, FCMP_ONE)
+CONSTANT_OWNERSHIP_BUILTIN(Any, FCMP_UEQ)
+CONSTANT_OWNERSHIP_BUILTIN(Any, FCMP_UGE)
+CONSTANT_OWNERSHIP_BUILTIN(Any, FCMP_UGT)
+CONSTANT_OWNERSHIP_BUILTIN(Any, FCMP_ULE)
+CONSTANT_OWNERSHIP_BUILTIN(Any, FCMP_ULT)
+CONSTANT_OWNERSHIP_BUILTIN(Any, FCMP_UNE)
+CONSTANT_OWNERSHIP_BUILTIN(Any, FDiv)
+CONSTANT_OWNERSHIP_BUILTIN(Any, FMul)
+CONSTANT_OWNERSHIP_BUILTIN(Any, FNeg)
+CONSTANT_OWNERSHIP_BUILTIN(Any, FPExt)
+CONSTANT_OWNERSHIP_BUILTIN(Any, FPToSI)
+CONSTANT_OWNERSHIP_BUILTIN(Any, FPToUI)
+CONSTANT_OWNERSHIP_BUILTIN(Any, FPTrunc)
+CONSTANT_OWNERSHIP_BUILTIN(Any, FRem)
+CONSTANT_OWNERSHIP_BUILTIN(Any, FSub)
+CONSTANT_OWNERSHIP_BUILTIN(Any, ICMP_EQ)
+CONSTANT_OWNERSHIP_BUILTIN(Any, ICMP_NE)
+CONSTANT_OWNERSHIP_BUILTIN(Any, ICMP_SGE)
+CONSTANT_OWNERSHIP_BUILTIN(Any, ICMP_SGT)
+CONSTANT_OWNERSHIP_BUILTIN(Any, ICMP_SLE)
+CONSTANT_OWNERSHIP_BUILTIN(Any, ICMP_SLT)
+CONSTANT_OWNERSHIP_BUILTIN(Any, ICMP_UGE)
+CONSTANT_OWNERSHIP_BUILTIN(Any, ICMP_UGT)
+CONSTANT_OWNERSHIP_BUILTIN(Any, ICMP_ULE)
+CONSTANT_OWNERSHIP_BUILTIN(Any, ICMP_ULT)
+CONSTANT_OWNERSHIP_BUILTIN(Any, IntToPtr)
+CONSTANT_OWNERSHIP_BUILTIN(Any, LShr)
+CONSTANT_OWNERSHIP_BUILTIN(Any, Mul)
+CONSTANT_OWNERSHIP_BUILTIN(Any, Or)
+CONSTANT_OWNERSHIP_BUILTIN(Any, PtrToInt)
+CONSTANT_OWNERSHIP_BUILTIN(Any, SAddOver)
+CONSTANT_OWNERSHIP_BUILTIN(Any, SDiv)
+CONSTANT_OWNERSHIP_BUILTIN(Any, SExt)
+CONSTANT_OWNERSHIP_BUILTIN(Any, SExtOrBitCast)
+CONSTANT_OWNERSHIP_BUILTIN(Any, SIToFP)
+CONSTANT_OWNERSHIP_BUILTIN(Any, SMulOver)
+CONSTANT_OWNERSHIP_BUILTIN(Any, SRem)
+CONSTANT_OWNERSHIP_BUILTIN(Any, SSubOver)
+CONSTANT_OWNERSHIP_BUILTIN(Any, Shl)
+CONSTANT_OWNERSHIP_BUILTIN(Any, Sub)
+CONSTANT_OWNERSHIP_BUILTIN(Any, Trunc)
+CONSTANT_OWNERSHIP_BUILTIN(Any, TruncOrBitCast)
+CONSTANT_OWNERSHIP_BUILTIN(Any, UAddOver)
+CONSTANT_OWNERSHIP_BUILTIN(Any, UDiv)
+CONSTANT_OWNERSHIP_BUILTIN(Any, UIToFP)
+CONSTANT_OWNERSHIP_BUILTIN(Any, UMulOver)
+CONSTANT_OWNERSHIP_BUILTIN(Any, URem)
+CONSTANT_OWNERSHIP_BUILTIN(Any, USubOver)
+CONSTANT_OWNERSHIP_BUILTIN(Any, Xor)
+CONSTANT_OWNERSHIP_BUILTIN(Any, ZExt)
+CONSTANT_OWNERSHIP_BUILTIN(Any, ZExtOrBitCast)
+CONSTANT_OWNERSHIP_BUILTIN(Any, FCMP_ORD)
+CONSTANT_OWNERSHIP_BUILTIN(Any, FCMP_UNO)
+CONSTANT_OWNERSHIP_BUILTIN(Any, OnFastPath)
+CONSTANT_OWNERSHIP_BUILTIN(Any, IsOptionalType)
+CONSTANT_OWNERSHIP_BUILTIN(Any, Sizeof)
+CONSTANT_OWNERSHIP_BUILTIN(Any, Strideof)
+CONSTANT_OWNERSHIP_BUILTIN(Any, StringObjectOr)
+CONSTANT_OWNERSHIP_BUILTIN(Any, IsPOD)
+CONSTANT_OWNERSHIP_BUILTIN(Any, IsBitwiseTakable)
+CONSTANT_OWNERSHIP_BUILTIN(Any, IsSameMetatype)
+CONSTANT_OWNERSHIP_BUILTIN(Any, Alignof)
+CONSTANT_OWNERSHIP_BUILTIN(Any, AllocRaw)
+CONSTANT_OWNERSHIP_BUILTIN(Any, AssertConf)
+CONSTANT_OWNERSHIP_BUILTIN(Any, UToSCheckedTrunc)
+CONSTANT_OWNERSHIP_BUILTIN(Any, SToSCheckedTrunc)
+CONSTANT_OWNERSHIP_BUILTIN(Any, SToUCheckedTrunc)
+CONSTANT_OWNERSHIP_BUILTIN(Any, UToUCheckedTrunc)
+CONSTANT_OWNERSHIP_BUILTIN(Any, IntToFPWithOverflow)
 
 // This is surprising, Builtin.unreachable returns a "Never" value which is
 // trivially typed.
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, Unreachable)
+CONSTANT_OWNERSHIP_BUILTIN(Any, Unreachable)
 
 /// AtomicRMW has type (Builtin.RawPointer, T) -> T. But it provides overloads
 /// for integer or rawpointer, so it should be trivial.
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, AtomicRMW)
+CONSTANT_OWNERSHIP_BUILTIN(Any, AtomicRMW)
 
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, CondUnreachable)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, UnsafeGuaranteedEnd)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, GetObjCTypeEncoding)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, CanBeObjCClass)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, WillThrow)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, StaticReport)
+CONSTANT_OWNERSHIP_BUILTIN(Any, CondUnreachable)
+CONSTANT_OWNERSHIP_BUILTIN(Any, UnsafeGuaranteedEnd)
+CONSTANT_OWNERSHIP_BUILTIN(Any, GetObjCTypeEncoding)
+CONSTANT_OWNERSHIP_BUILTIN(Any, CanBeObjCClass)
+CONSTANT_OWNERSHIP_BUILTIN(Any, WillThrow)
+CONSTANT_OWNERSHIP_BUILTIN(Any, StaticReport)
 
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, DestroyArray)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, CopyArray)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, TakeArrayNoAlias)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, TakeArrayFrontToBack)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, TakeArrayBackToFront)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, AssignCopyArrayNoAlias)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, AssignCopyArrayFrontToBack)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, AssignCopyArrayBackToFront)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, AssignTakeArray)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, UnexpectedError)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, ErrorInMain)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, DeallocRaw)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, Fence)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, AtomicStore)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, Once)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, OnceWithContext)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, TSanInoutAccess)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, Swift3ImplicitObjCEntrypoint)
-CONSTANT_OWNERSHIP_BUILTIN(Trivial, PoundAssert)
+CONSTANT_OWNERSHIP_BUILTIN(Any, DestroyArray)
+CONSTANT_OWNERSHIP_BUILTIN(Any, CopyArray)
+CONSTANT_OWNERSHIP_BUILTIN(Any, TakeArrayNoAlias)
+CONSTANT_OWNERSHIP_BUILTIN(Any, TakeArrayFrontToBack)
+CONSTANT_OWNERSHIP_BUILTIN(Any, TakeArrayBackToFront)
+CONSTANT_OWNERSHIP_BUILTIN(Any, AssignCopyArrayNoAlias)
+CONSTANT_OWNERSHIP_BUILTIN(Any, AssignCopyArrayFrontToBack)
+CONSTANT_OWNERSHIP_BUILTIN(Any, AssignCopyArrayBackToFront)
+CONSTANT_OWNERSHIP_BUILTIN(Any, AssignTakeArray)
+CONSTANT_OWNERSHIP_BUILTIN(Any, UnexpectedError)
+CONSTANT_OWNERSHIP_BUILTIN(Any, ErrorInMain)
+CONSTANT_OWNERSHIP_BUILTIN(Any, DeallocRaw)
+CONSTANT_OWNERSHIP_BUILTIN(Any, Fence)
+CONSTANT_OWNERSHIP_BUILTIN(Any, AtomicStore)
+CONSTANT_OWNERSHIP_BUILTIN(Any, Once)
+CONSTANT_OWNERSHIP_BUILTIN(Any, OnceWithContext)
+CONSTANT_OWNERSHIP_BUILTIN(Any, TSanInoutAccess)
+CONSTANT_OWNERSHIP_BUILTIN(Any, Swift3ImplicitObjCEntrypoint)
+CONSTANT_OWNERSHIP_BUILTIN(Any, PoundAssert)
 
 #undef CONSTANT_OWNERSHIP_BUILTIN
 
@@ -523,7 +489,7 @@
   ValueOwnershipKind ValueOwnershipKindBuiltinVisitor::visit##ID(              \
       BuiltinInst *BI, StringRef Attr) {                                       \
     if (BI->getType().isTrivial(BI->getModule())) {                            \
-      return ValueOwnershipKind::Trivial;                                      \
+      return ValueOwnershipKind::Any;                                          \
     }                                                                          \
     return ValueOwnershipKind::Unowned;                                        \
   }
diff --git a/lib/SIL/ValueUtils.cpp b/lib/SIL/ValueUtils.cpp
index 8486181..d02c750 100644
--- a/lib/SIL/ValueUtils.cpp
+++ b/lib/SIL/ValueUtils.cpp
@@ -18,38 +18,9 @@
 
 Optional<ValueOwnershipKind>
 swift::mergeSILValueOwnership(ArrayRef<SILValue> values) {
-  // A forwarding inst without operands must be trivial.
-  if (values.empty())
-    return Optional<ValueOwnershipKind>(ValueOwnershipKind::Trivial);
-
-  // Find the first index where we have a trivial value.
-  auto iter = find_if(values, [](SILValue v) -> bool {
-    return v.getOwnershipKind() != ValueOwnershipKind::Trivial;
-  });
-  // All trivial.
-  if (iter == values.end()) {
-    return Optional<ValueOwnershipKind>(ValueOwnershipKind::Trivial);
-  }
-
-  // See if we have any Any. If we do, just return that for now.
-  if (any_of(values, [](SILValue v) -> bool {
-        return v.getOwnershipKind() == ValueOwnershipKind::Any;
-      }))
-    return Optional<ValueOwnershipKind>(ValueOwnershipKind::Any);
-
-  unsigned index = std::distance(values.begin(), iter);
-  ValueOwnershipKind base = values[index].getOwnershipKind();
-
-  for (SILValue v : values.slice(index + 1)) {
-    auto opKind = v.getOwnershipKind();
-    if (opKind.merge(ValueOwnershipKind::Trivial))
-      continue;
-
-    auto mergedValue = base.merge(opKind.Value);
-    if (!mergedValue.hasValue()) {
-      return None;
-    }
-  }
-
-  return base;
+  auto range = makeTransformRange(values,
+                                  [](SILValue v) {
+                                    return v.getOwnershipKind();
+                                  });
+  return ValueOwnershipKind::merge(range);
 }
diff --git a/lib/SILGen/Cleanup.h b/lib/SILGen/Cleanup.h
index 4a888a8..62b51fe 100644
--- a/lib/SILGen/Cleanup.h
+++ b/lib/SILGen/Cleanup.h
@@ -169,7 +169,7 @@
     return stack.findAndAdvance(iter);
   }
 
-  /// \brief Emit a branch to the given jump destination,
+  /// Emit a branch to the given jump destination,
   /// threading out through any cleanups we need to run. This does not pop the
   /// cleanup stack.
   ///
diff --git a/lib/SILGen/ManagedValue.cpp b/lib/SILGen/ManagedValue.cpp
index ff0b190..a8f2019 100644
--- a/lib/SILGen/ManagedValue.cpp
+++ b/lib/SILGen/ManagedValue.cpp
@@ -220,9 +220,9 @@
   if (getType().isTrivial(SGF.F.getModule()))
     return true;
 
-  // If we have an object and the object has trivial ownership, the same
+  // If we have an object and the object has any ownership, the same
   // property applies.
-  if (getType().isObject() && getOwnershipKind() == ValueOwnershipKind::Trivial)
+  if (getType().isObject() && getOwnershipKind() == ValueOwnershipKind::Any)
     return true;
 
   return hasCleanup();
diff --git a/lib/SILGen/ManagedValue.h b/lib/SILGen/ManagedValue.h
index 0055374..207ced4 100644
--- a/lib/SILGen/ManagedValue.h
+++ b/lib/SILGen/ManagedValue.h
@@ -78,7 +78,7 @@
     : valueAndFlag(value, false), cleanup(cleanup) {
     assert(value && "No value specified?!");
     assert((!getType().isObject() ||
-            value.getOwnershipKind() != ValueOwnershipKind::Trivial ||
+            value.getOwnershipKind() != ValueOwnershipKind::Any ||
             !hasCleanup()) &&
            "Objects with trivial ownership should never have a cleanup");
   }
@@ -98,7 +98,7 @@
     assert(value && "No value specified");
     assert(value->getType().isObject() &&
            "Expected borrowed rvalues to be objects");
-    assert(value.getOwnershipKind() != ValueOwnershipKind::Trivial);
+    assert(value.getOwnershipKind() != ValueOwnershipKind::Any);
     return ManagedValue(value, false, cleanup);
   }
 
@@ -109,8 +109,8 @@
                                             CleanupHandle cleanup) {
     assert(value && "No value specified");
     assert(value->getType().isAddress() && "Expected value to be an address");
-    assert(value.getOwnershipKind() == ValueOwnershipKind::Trivial &&
-           "Addresses always have trivial ownership");
+    assert(value.getOwnershipKind() == ValueOwnershipKind::Any &&
+           "Addresses always have any ownership");
     return ManagedValue(value, false, cleanup);
   }
 
@@ -127,7 +127,7 @@
     assert(value && "No value specified");
     assert(value->getType().isObject() &&
            "Expected borrowed rvalues to be objects");
-    assert(value.getOwnershipKind() != ValueOwnershipKind::Trivial);
+    assert(value.getOwnershipKind() != ValueOwnershipKind::Any);
     return ManagedValue(value, false, CleanupHandle::invalid());
   }
 
@@ -136,7 +136,7 @@
   forBorrowedAddressRValue(SILValue value) {
     assert(value && "No value specified");
     assert(value->getType().isAddress() && "Expected value to be an address");
-    assert(value.getOwnershipKind() == ValueOwnershipKind::Trivial &&
+    assert(value.getOwnershipKind() == ValueOwnershipKind::Any &&
            "Addresses always have trivial ownership");
     return ManagedValue(value, false, CleanupHandle::invalid());
   }
@@ -152,14 +152,14 @@
   /// Create a managed value for a +0 trivial object rvalue.
   static ManagedValue forTrivialObjectRValue(SILValue value) {
     assert(value->getType().isObject() && "Expected an object");
-    assert(value.getOwnershipKind() == ValueOwnershipKind::Trivial);
+    assert(value.getOwnershipKind() == ValueOwnershipKind::Any);
     return ManagedValue(value, false, CleanupHandle::invalid());
   }
 
   /// Create a managed value for a +0 trivial address rvalue.
   static ManagedValue forTrivialAddressRValue(SILValue value) {
     assert(value->getType().isAddress() && "Expected an address");
-    assert(value.getOwnershipKind() == ValueOwnershipKind::Trivial);
+    assert(value.getOwnershipKind() == ValueOwnershipKind::Any);
     return ManagedValue(value, false, CleanupHandle::invalid());
   }
 
diff --git a/lib/SILGen/RValue.cpp b/lib/SILGen/RValue.cpp
index b38b284..bc8948d 100644
--- a/lib/SILGen/RValue.cpp
+++ b/lib/SILGen/RValue.cpp
@@ -400,7 +400,7 @@
            "All loadable values in an RValue must be an object");
 
     ValueOwnershipKind kind = v.getOwnershipKind();
-    if (kind == ValueOwnershipKind::Trivial)
+    if (kind == ValueOwnershipKind::Any)
       continue;
 
     // Merge together whether or not the RValue has cleanups.
diff --git a/lib/SILGen/RValue.h b/lib/SILGen/RValue.h
index 1f35510..5d0e560 100644
--- a/lib/SILGen/RValue.h
+++ b/lib/SILGen/RValue.h
@@ -76,7 +76,7 @@
   CanType type;
   unsigned elementsToBeAdded;
   
-  /// \brief Flag value used to mark an rvalue as invalid.
+  /// Flag value used to mark an rvalue as invalid.
   ///
   /// The reasons why this can be true is:
   ///
diff --git a/lib/SILGen/SILGen.cpp b/lib/SILGen/SILGen.cpp
index b14ef57..07f31a6 100644
--- a/lib/SILGen/SILGen.cpp
+++ b/lib/SILGen/SILGen.cpp
@@ -675,10 +675,10 @@
 /// Emit a function now, if it's externally usable or has been referenced in
 /// the current TU, or remember how to emit it later if not.
 template<typename /*void (SILFunction*)*/ Fn>
-void emitOrDelayFunction(SILGenModule &SGM,
-                         SILDeclRef constant,
-                         Fn &&emitter,
-                         bool forceEmission = false) {
+static void emitOrDelayFunction(SILGenModule &SGM,
+                                SILDeclRef constant,
+                                Fn &&emitter,
+                                bool forceEmission = false) {
   auto emitAfter = SGM.lastEmittedFunction;
 
   SILFunction *f = nullptr;
@@ -1312,7 +1312,8 @@
       case AccessorKind::Read:
         return impl.getReadImpl() != ReadImplKind::Read;
       case AccessorKind::Set:
-        return impl.getWriteImpl() != WriteImplKind::Set;
+        return impl.getWriteImpl() != WriteImplKind::Set &&
+               impl.getWriteImpl() != WriteImplKind::StoredWithObservers;
       case AccessorKind::Modify:
         return impl.getReadWriteImpl() != ReadWriteImplKind::Modify;
 #define ACCESSOR(ID) \
diff --git a/lib/SILGen/SILGen.h b/lib/SILGen/SILGen.h
index 432951d..fad174b 100644
--- a/lib/SILGen/SILGen.h
+++ b/lib/SILGen/SILGen.h
@@ -230,7 +230,7 @@
   /// added to the current SILModule.
   void emitFunction(FuncDecl *fd);
   
-  /// \brief Generates code for the given closure expression and adds the
+  /// Generates code for the given closure expression and adds the
   /// SILFunction to the current SILModule under the name SILDeclRef(ce).
   SILFunction *emitClosure(AbstractClosureExpr *ce);
   /// Generates code for the given ConstructorDecl and adds
@@ -307,6 +307,9 @@
   /// Emit the default witness table for a resilient protocol.
   void emitDefaultWitnessTable(ProtocolDecl *protocol);
 
+  /// Emit the self-conformance witness table for a protocol.
+  void emitSelfConformanceWitnessTable(ProtocolDecl *protocol);
+
   /// Emit the lazy initializer function for a global pattern binding
   /// declaration.
   SILFunction *emitLazyGlobalInitializer(StringRef funcName,
diff --git a/lib/SILGen/SILGenBuilder.cpp b/lib/SILGen/SILGenBuilder.cpp
index cb9d2ae..8bc97e8 100644
--- a/lib/SILGen/SILGenBuilder.cpp
+++ b/lib/SILGen/SILGenBuilder.cpp
@@ -295,7 +295,7 @@
          "value");
 
   if (ty.isObject() &&
-      originalValue.getOwnershipKind() == ValueOwnershipKind::Trivial) {
+      originalValue.getOwnershipKind() == ValueOwnershipKind::Any) {
     return originalValue;
   }
 
@@ -436,7 +436,7 @@
                                       "address only type");
 
   if (ty.isObject() &&
-      originalValue.getOwnershipKind() == ValueOwnershipKind::Trivial) {
+      originalValue.getOwnershipKind() == ValueOwnershipKind::Any) {
     return originalValue;
   }
 
@@ -810,7 +810,7 @@
                                         StoreOwnershipQualifier qualifier) {
   SILModule &M = SGF.F.getModule();
   CleanupCloner cloner(*this, value);
-  if (value.getType().isTrivial(M) || value.getOwnershipKind() == ValueOwnershipKind::Trivial)
+  if (value.getType().isTrivial(M) || value.getOwnershipKind() == ValueOwnershipKind::Any)
     qualifier = StoreOwnershipQualifier::Trivial;
   createStore(loc, value.forward(SGF), address, qualifier);
   return cloner.clone(address);
@@ -848,7 +848,7 @@
 void SILGenBuilder::createStoreBorrowOrTrivial(SILLocation loc,
                                                ManagedValue value,
                                                SILValue address) {
-  if (value.getOwnershipKind() == ValueOwnershipKind::Trivial) {
+  if (value.getOwnershipKind() == ValueOwnershipKind::Any) {
     createStore(loc, value, address, StoreOwnershipQualifier::Trivial);
     return;
   }
diff --git a/lib/SILGen/SILGenDynamicCast.cpp b/lib/SILGen/SILGenDynamicCast.cpp
index 6890117..dfede8a 100644
--- a/lib/SILGen/SILGenDynamicCast.cpp
+++ b/lib/SILGen/SILGenDynamicCast.cpp
@@ -588,7 +588,7 @@
       });
 
   auto contBB = scope.exit();
-  auto isa = contBB->createPhiArgument(i1Ty, ValueOwnershipKind::Trivial);
+  auto isa = contBB->createPhiArgument(i1Ty, ValueOwnershipKind::Any);
   return isa;
 }
 
diff --git a/lib/SILGen/SILGenExpr.cpp b/lib/SILGen/SILGenExpr.cpp
index 0cb5f55..668cf24 100644
--- a/lib/SILGen/SILGenExpr.cpp
+++ b/lib/SILGen/SILGenExpr.cpp
@@ -68,7 +68,7 @@
   if (lowering.isTrivial())
     return ManagedValue::forUnmanaged(v);
   if (v->getType().isObject() &&
-      v.getOwnershipKind() == ValueOwnershipKind::Trivial)
+      v.getOwnershipKind() == ValueOwnershipKind::Any)
     return ManagedValue::forUnmanaged(v);
   assert((!lowering.isAddressOnly() || !silConv.useLoweredAddresses()) &&
          "cannot retain an unloadable type");
@@ -88,7 +88,7 @@
   v = lowering.emitLoadOfCopy(B, loc, v, IsNotTake);
   if (lowering.isTrivial())
     return ManagedValue::forUnmanaged(v);
-  if (v.getOwnershipKind() == ValueOwnershipKind::Trivial)
+  if (v.getOwnershipKind() == ValueOwnershipKind::Any)
     return ManagedValue::forUnmanaged(v);
   assert((!lowering.isAddressOnly() || !silConv.useLoweredAddresses()) &&
          "cannot retain an unloadable type");
@@ -126,7 +126,7 @@
     SILLocation loc, SILValue v, SILValue addr, const TypeLowering &lowering) {
   assert(lowering.getLoweredType().getObjectType() == v->getType());
   if (lowering.isTrivial() ||
-      v.getOwnershipKind() == ValueOwnershipKind::Trivial) {
+      v.getOwnershipKind() == ValueOwnershipKind::Any) {
     lowering.emitStore(B, loc, v, addr, StoreOwnershipQualifier::Trivial);
     return ManagedValue::forUnmanaged(v);
   }
@@ -150,7 +150,7 @@
   if (lowering.isTrivial())
     return ManagedValue::forUnmanaged(v);
 
-  if (v.getOwnershipKind() == ValueOwnershipKind::Trivial)
+  if (v.getOwnershipKind() == ValueOwnershipKind::Any)
     return ManagedValue::forUnmanaged(v);
 
   if (v.getOwnershipKind() == ValueOwnershipKind::Guaranteed)
@@ -272,7 +272,7 @@
 
 ManagedValue
 SILGenFunction::emitManagedBorrowedArgumentWithCleanup(SILPhiArgument *arg) {
-  if (arg->getOwnershipKind() == ValueOwnershipKind::Trivial ||
+  if (arg->getOwnershipKind() == ValueOwnershipKind::Any ||
       arg->getType().isTrivial(arg->getModule())) {
     return ManagedValue::forUnmanaged(arg);
   }
@@ -299,7 +299,7 @@
     return ManagedValue::forUnmanaged(borrowed);
 
   if (original->getType().isObject() &&
-      original.getOwnershipKind() == ValueOwnershipKind::Trivial)
+      original.getOwnershipKind() == ValueOwnershipKind::Any)
     return ManagedValue::forUnmanaged(borrowed);
 
   if (borrowed->getType().isObject()) {
@@ -321,7 +321,7 @@
   if (lowering.isTrivial())
     return ManagedValue::forUnmanaged(v);
   if (v->getType().isObject() &&
-      v.getOwnershipKind() == ValueOwnershipKind::Trivial) {
+      v.getOwnershipKind() == ValueOwnershipKind::Any) {
     return ManagedValue::forUnmanaged(v);
   }
   return ManagedValue(v, enterDestroyCleanup(v));
@@ -1816,7 +1816,7 @@
   if (valueTy.isObject()) {
     // See if we have more accurate information from the ownership kind. This
     // detects trivial cases of enums.
-    if (value.getOwnershipKind() == ValueOwnershipKind::Trivial)
+    if (value.getOwnershipKind() == ValueOwnershipKind::Any)
       return ManagedValue::forUnmanaged(value.getValue());
 
     // Otherwise, copy the value and return.
@@ -3155,7 +3155,7 @@
     subSGF.B.emitBlock(returnBB);
     scope.pop();
     SILValue returnVal = returnBB->createPhiArgument(i1Ty,
-                                                   ValueOwnershipKind::Trivial);
+                                                   ValueOwnershipKind::Any);
     auto returnBoolVal = subSGF.B.createStruct(loc,
       SILType::getPrimitiveObjectType(boolTy), returnVal);
     subSGF.B.createReturn(loc, returnBoolVal);
diff --git a/lib/SILGen/SILGenFunction.h b/lib/SILGen/SILGenFunction.h
index 3384eae..1cdcaeb 100644
--- a/lib/SILGen/SILGenFunction.h
+++ b/lib/SILGen/SILGenFunction.h
@@ -298,15 +298,15 @@
   /// createBasicBlock().)
   FunctionSection CurFunctionSection = FunctionSection::Ordinary;
 
-  /// \brief Does this function require a non-void direct return?
+  /// Does this function require a non-void direct return?
   bool NeedsReturn = false;
 
-  /// \brief Is emission currently within a formal modification?
+  /// Is emission currently within a formal modification?
   bool isInFormalEvaluationScope() const {
     return FormalEvalContext.isInFormalEvaluationScope();
   }
 
-  /// \brief Is emission currently within an inout conversion?
+  /// Is emission currently within an inout conversion?
   bool InInOutConversionScope = false;
 
   /// The SILGenBuilder used to construct the SILFunction.  It is what maintains
@@ -343,13 +343,13 @@
   /// be in the postmatter.
   JumpDest CoroutineUnwindDest = JumpDest::invalid();
     
-  /// \brief The SIL location corresponding to the AST node being processed.
+  /// The SIL location corresponding to the AST node being processed.
   SILLocation CurrentSILLoc;
 
-  /// \brief This records information about the currently active cleanups.
+  /// This records information about the currently active cleanups.
   CleanupManager Cleanups;
 
-  /// \brief The current context where formal evaluation cleanups are managed.
+  /// The current context where formal evaluation cleanups are managed.
   FormalEvaluationContext FormalEvalContext;
 
   /// VarLoc - representation of an emitted local variable or constant.  There
@@ -559,9 +559,9 @@
   // Entry points for codegen
   //===--------------------------------------------------------------------===//
   
-  /// \brief Generates code for a FuncDecl.
+  /// Generates code for a FuncDecl.
   void emitFunction(FuncDecl *fd);
-  /// \brief Emits code for a ClosureExpr.
+  /// Emits code for a ClosureExpr.
   void emitClosure(AbstractClosureExpr *ce);
   /// Generates code for a class destroying destructor. This
   /// emits the body code from the DestructorDecl, calls the base class 
@@ -651,7 +651,8 @@
                            SubstitutionMap reqtSubs,
                            SILDeclRef witness,
                            SubstitutionMap witnessSubs,
-                           IsFreeFunctionWitness_t isFree);
+                           IsFreeFunctionWitness_t isFree,
+                           bool isSelfConformance);
   
   /// Convert a block to a native function with a thunk.
   ManagedValue emitBlockToFunc(SILLocation loc,
@@ -775,7 +776,7 @@
   void bindParametersForForwarding(const ParameterList *params,
                                    SmallVectorImpl<SILValue> &parameters);
 
-  /// \brief Create (but do not emit) the epilog branch, and save the
+  /// Create (but do not emit) the epilog branch, and save the
   /// current cleanups depth as the destination for return statement branches.
   ///
   /// \param returnType  If non-null, the epilog block will be created with an
@@ -788,7 +789,7 @@
   void prepareRethrowEpilog(CleanupLocation l);
   void prepareCoroutineUnwindEpilog(CleanupLocation l);
   
-  /// \brief Branch to and emit the epilog basic block. This will fuse
+  /// Branch to and emit the epilog basic block. This will fuse
   /// the epilog to the current basic block if the epilog bb has no predecessor.
   /// The insertion point will be moved into the epilog block if it is
   /// reachable.
@@ -804,7 +805,7 @@
   std::pair<Optional<SILValue>, SILLocation>
     emitEpilogBB(SILLocation TopLevelLoc);
   
-  /// \brief Emits a standard epilog which runs top-level cleanups then returns
+  /// Emits a standard epilog which runs top-level cleanups then returns
   /// the function return value, if any.  This can be customized by clients, who
   /// set UsesCustomEpilog to true, and optionally inject their own code into
   /// the epilog block before calling this.  If they do this, their code is run
@@ -819,10 +820,10 @@
   ///        logic.
   SILLocation emitEpilog(SILLocation TopLevelLoc,bool UsesCustomEpilog = false);
 
-  /// \brief Emits the standard rethrow epilog using a Swift error result.
+  /// Emits the standard rethrow epilog using a Swift error result.
   void emitRethrowEpilog(SILLocation topLevelLoc);
 
-  /// \brief Emits the coroutine-unwind epilog.
+  /// Emits the coroutine-unwind epilog.
   void emitCoroutineUnwindEpilog(SILLocation topLevelLoc);
 
   /// emitSelfDecl - Emit a SILArgument for 'self', register it in varlocs, set
@@ -912,19 +913,19 @@
   SourceLocArgs
   emitSourceLocationArgs(SourceLoc loc, SILLocation emitLoc);
 
-  /// \brief Emit a call to the library intrinsic _doesOptionalHaveValue.
+  /// Emit a call to the library intrinsic _doesOptionalHaveValue.
   ///
   /// The result is a Builtin.Int1.
   SILValue emitDoesOptionalHaveValue(SILLocation loc, SILValue addrOrValue);
 
-  /// \brief Emit a switch_enum to call the library intrinsic
+  /// Emit a switch_enum to call the library intrinsic
   /// _diagnoseUnexpectedNilOptional if the optional has no value. Return the
   /// MangedValue resulting from the success case.
   ManagedValue emitPreconditionOptionalHasValue(SILLocation loc,
                                                 ManagedValue optional,
                                                 bool isImplicitUnwrap);
 
-  /// \brief Emit a call to the library intrinsic _getOptionalValue
+  /// Emit a call to the library intrinsic _getOptionalValue
   /// given the address of the optional, which checks that an optional contains
   /// some value and either returns the value or traps if there is none.
   ManagedValue emitCheckedGetOptionalValueFrom(SILLocation loc,
@@ -933,7 +934,7 @@
                                                const TypeLowering &optTL,
                                                SGFContext C);
   
-  /// \brief Extract the value from an optional, which must be known to contain
+  /// Extract the value from an optional, which must be known to contain
   /// a value.
   ManagedValue emitUncheckedGetOptionalValueFrom(SILLocation loc,
                                                  ManagedValue addrOrValue,
@@ -1000,7 +1001,7 @@
                       SILType loweredOpenedType,
                       AccessKind accessKind);
 
-  /// \brief Wrap the given value in an existential container.
+  /// Wrap the given value in an existential container.
   ///
   /// \param concreteFormalType AST type of value.
   /// \param concreteTL Type lowering of value.
@@ -1578,7 +1579,7 @@
     ~OpaqueValueRAII();
   };
 
-  /// \brief Emit a conditional checked cast branch. Does not
+  /// Emit a conditional checked cast branch. Does not
   /// re-abstract the argument to the success branch. Terminates the
   /// current BB.
   ///
@@ -1600,7 +1601,7 @@
       ProfileCounter TrueCount = ProfileCounter(),
       ProfileCounter FalseCount = ProfileCounter());
 
-  /// \brief Emit a conditional checked cast branch, starting from an
+  /// Emit a conditional checked cast branch, starting from an
   /// expression.  Terminates the current BB.
   ///
   /// \param loc          The AST location associated with the operation.
diff --git a/lib/SILGen/SILGenPattern.cpp b/lib/SILGen/SILGenPattern.cpp
index 28820da..69d4b0d 100644
--- a/lib/SILGen/SILGenPattern.cpp
+++ b/lib/SILGen/SILGenPattern.cpp
@@ -2463,7 +2463,7 @@
         } else {
           SILValue arg = caseBB->getArgument(argIndex++);
           assert(arg.getOwnershipKind() == ValueOwnershipKind::Owned ||
-                 arg.getOwnershipKind() == ValueOwnershipKind::Trivial);
+                 arg.getOwnershipKind() == ValueOwnershipKind::Any);
           mv = SGF.emitManagedRValueWithCleanup(arg);
         }
 
diff --git a/lib/SILGen/SILGenPoly.cpp b/lib/SILGen/SILGenPoly.cpp
index 40956d4..90c9e55 100644
--- a/lib/SILGen/SILGenPoly.cpp
+++ b/lib/SILGen/SILGenPoly.cpp
@@ -1423,7 +1423,7 @@
         case ParameterConvention::Direct_Owned:
         case ParameterConvention::Indirect_In:
           if (!input.hasCleanup() &&
-              input.getOwnershipKind() != ValueOwnershipKind::Trivial)
+              input.getOwnershipKind() != ValueOwnershipKind::Any)
             input = input.copyUnmanaged(SGF, Loc);
           break;
 
@@ -1640,8 +1640,8 @@
     return SGF.emitManagedRValueWithCleanup(value);
   case ParameterConvention::Direct_Guaranteed:
   case ParameterConvention::Direct_Unowned:
-    if (value.getOwnershipKind() == ValueOwnershipKind::Trivial)
-      return ManagedValue::forTrivialObjectRValue(value);
+    if (value.getOwnershipKind() == ValueOwnershipKind::Any)
+      return ManagedValue::forUnmanaged(value);
     return ManagedValue::forBorrowedObjectRValue(value);
   case ParameterConvention::Indirect_In_Guaranteed:
     return ManagedValue::forBorrowedAddressRValue(value);
@@ -2630,8 +2630,7 @@
       Scope S(SGF.Cleanups, CleanupLocation::get(Loc));
 
       // First create an rvalue cleanup for our direct result.
-      assert(innerResult.getOwnershipKind() == ValueOwnershipKind::Owned ||
-             innerResult.getOwnershipKind() == ValueOwnershipKind::Trivial);
+      assert(innerResult.getOwnershipKind().isCompatibleWith(ValueOwnershipKind::Owned));
       executeInnerTuple(innerResult, innerDirectResults);
       // Then allow the cleanups to be emitted in the proper reverse order.
     }
@@ -3575,15 +3574,23 @@
 enum class WitnessDispatchKind {
   Static,
   Dynamic,
-  Class
+  Class,
+  Witness
 };
 
-static WitnessDispatchKind getWitnessDispatchKind(SILDeclRef witness) {
+static WitnessDispatchKind getWitnessDispatchKind(SILDeclRef witness,
+                                                  bool isSelfConformance) {
   auto *decl = witness.getDecl();
 
+  if (isSelfConformance) {
+    assert(isa<ProtocolDecl>(decl->getDeclContext()));
+    return WitnessDispatchKind::Witness;
+  }
+
   ClassDecl *C = decl->getDeclContext()->getSelfClassDecl();
-  if (!C)
+  if (!C) {
     return WitnessDispatchKind::Static;
+  }
 
   // If the witness is dynamic, go through dynamic dispatch.
   if (decl->isObjCDynamic()) {
@@ -3630,6 +3637,7 @@
   switch (witnessKind) {
   case WitnessDispatchKind::Static:
   case WitnessDispatchKind::Dynamic:
+  case WitnessDispatchKind::Witness:
     return SGM.Types.getConstantInfo(witness).SILFnType;
   case WitnessDispatchKind::Class:
     return SGM.Types.getConstantOverrideType(witness);
@@ -3638,11 +3646,21 @@
   llvm_unreachable("Unhandled WitnessDispatchKind in switch.");
 }
 
+static std::pair<CanType, ProtocolConformanceRef>
+getSelfTypeAndConformanceForWitness(SILDeclRef witness, SubstitutionMap subs) {
+  auto protocol = cast<ProtocolDecl>(witness.getDecl()->getDeclContext());
+  auto selfParam = protocol->getProtocolSelfType()->getCanonicalType();
+  auto type = subs.getReplacementTypes()[0];
+  auto conf = *subs.lookupConformance(selfParam, protocol);
+  return {type->getCanonicalType(), conf};
+}
+
 static SILValue
 getWitnessFunctionRef(SILGenFunction &SGF,
                       SILDeclRef witness,
                       CanSILFunctionType witnessFTy,
                       WitnessDispatchKind witnessKind,
+                      SubstitutionMap witnessSubs,
                       SmallVectorImpl<ManagedValue> &witnessParams,
                       SILLocation loc) {
   switch (witnessKind) {
@@ -3650,6 +3668,14 @@
     return SGF.emitGlobalFunctionRef(loc, witness);
   case WitnessDispatchKind::Dynamic:
     return SGF.emitDynamicMethodRef(loc, witness, witnessFTy).getValue();
+  case WitnessDispatchKind::Witness: {
+    auto typeAndConf =
+      getSelfTypeAndConformanceForWitness(witness, witnessSubs);
+    return SGF.B.createWitnessMethod(loc, typeAndConf.first,
+                                     typeAndConf.second,
+                                     witness,
+                            SILType::getPrimitiveObjectType(witnessFTy));
+  }
   case WitnessDispatchKind::Class: {
     SILValue selfPtr = witnessParams.back().getValue();
     return SGF.emitClassMethodRef(loc, selfPtr, witness, witnessFTy);
@@ -3659,13 +3685,32 @@
   llvm_unreachable("Unhandled WitnessDispatchKind in switch.");
 }
 
+static ManagedValue
+emitOpenExistentialInSelfConformance(SILGenFunction &SGF, SILLocation loc,
+                                     SILDeclRef witness,
+                                     SubstitutionMap subs, ManagedValue value,
+                                     SILParameterInfo destParameter) {
+  auto typeAndConf = getSelfTypeAndConformanceForWitness(witness, subs);
+  auto archetype = typeAndConf.first->castTo<ArchetypeType>();
+  assert(archetype->isOpenedExistential());
+
+  auto openedTy = destParameter.getSILStorageType();
+  auto state = SGF.emitOpenExistential(loc, value, archetype, openedTy,
+                                       destParameter.isIndirectMutating()
+                                         ? AccessKind::ReadWrite
+                                         : AccessKind::Read);
+
+  return state.Value;
+}
+
 void SILGenFunction::emitProtocolWitness(AbstractionPattern reqtOrigTy,
                                          CanAnyFunctionType reqtSubstTy,
                                          SILDeclRef requirement,
                                          SubstitutionMap reqtSubs,
                                          SILDeclRef witness,
                                          SubstitutionMap witnessSubs,
-                                         IsFreeFunctionWitness_t isFree) {
+                                         IsFreeFunctionWitness_t isFree,
+                                         bool isSelfConformance) {
   // FIXME: Disable checks that the protocol witness carries debug info.
   // Should we carry debug info for witnesses?
   F.setBare(IsBare);
@@ -3679,7 +3724,7 @@
   FullExpr scope(Cleanups, cleanupLoc);
   FormalEvaluationScope formalEvalScope(*this);
 
-  auto witnessKind = getWitnessDispatchKind(witness);
+  auto witnessKind = getWitnessDispatchKind(witness, isSelfConformance);
   auto thunkTy = F.getLoweredFunctionType();
 
   SmallVector<ManagedValue, 8> origParams;
@@ -3704,9 +3749,24 @@
                                           ->getCanonicalType());
   }
 
+  // Get the lowered type of the witness.
+  auto origWitnessFTy = getWitnessFunctionType(SGM, witness, witnessKind);
+  auto witnessFTy = origWitnessFTy;
+  if (!witnessSubs.empty())
+    witnessFTy = origWitnessFTy->substGenericArgs(SGM.M, witnessSubs);
+
   auto reqtSubstParams = reqtSubstTy.getParams();
   auto witnessSubstParams = witnessSubstTy.getParams();
 
+  // For a self-conformance, open the self parameter.
+  if (isSelfConformance) {
+    assert(!isFree && "shouldn't have a free witness for a self-conformance");
+    origParams.back() =
+      emitOpenExistentialInSelfConformance(*this, loc, witness, witnessSubs,
+                                           origParams.back(),
+                                           witnessFTy->getSelfParameter());
+  }
+
   // For a free function witness, discard the 'self' parameter of the
   // requirement.
   if (isFree) {
@@ -3716,11 +3776,6 @@
 
   // Translate the argument values from the requirement abstraction level to
   // the substituted signature of the witness.
-  auto origWitnessFTy = getWitnessFunctionType(SGM, witness, witnessKind);
-  auto witnessFTy = origWitnessFTy;
-  if (!witnessSubs.empty())
-    witnessFTy = origWitnessFTy->substGenericArgs(SGM.M, witnessSubs);
-
   SmallVector<ManagedValue, 8> witnessParams;
   AbstractionPattern witnessOrigTy(witnessInfo.LoweredType);
   TranslateArguments(*this, loc,
@@ -3733,7 +3788,7 @@
 
   SILValue witnessFnRef = getWitnessFunctionRef(*this, witness,
                                                 origWitnessFTy,
-                                                witnessKind,
+                                                witnessKind, witnessSubs,
                                                 witnessParams, loc);
 
   auto coroutineKind =
diff --git a/lib/SILGen/SILGenType.cpp b/lib/SILGen/SILGenType.cpp
index 4be10a3..d53c888 100644
--- a/lib/SILGen/SILGenType.cpp
+++ b/lib/SILGen/SILGenType.cpp
@@ -364,6 +364,11 @@
   }
 };
 
+static IsSerialized_t isConformanceSerialized(RootProtocolConformance *conf) {
+  return SILWitnessTable::conformanceIsSerialized(conf)
+           ? IsSerialized : IsNotSerialized;
+}
+
 /// Emit a witness table for a protocol conformance.
 class SILGenConformance : public SILGenWitnessTable<SILGenConformance> {
   using super = SILGenWitnessTable<SILGenConformance>;
@@ -380,16 +385,11 @@
     // We only need to emit witness tables for base NormalProtocolConformances.
     : SGM(SGM), Conformance(C->getRootNormalConformance()),
       Linkage(getLinkageForProtocolConformance(Conformance,
-                                               ForDefinition))
+                                               ForDefinition)),
+      Serialized(isConformanceSerialized(Conformance))
   {
     auto *proto = Conformance->getProtocol();
 
-    Serialized = IsNotSerialized;
-
-    // ... or if the conformance itself thinks it should be.
-    if (SILWitnessTable::conformanceIsSerialized(Conformance))
-      Serialized = IsSerialized;
-
     // Not all protocols use witness tables; in this case we just skip
     // all of emit() below completely.
     if (!Lowering::TypeConverter::protocolRequiresWitnessTable(proto))
@@ -627,18 +627,13 @@
     conformance = *reqtSubMap.lookupConformance(self, requirement);
   }
 
-  CanAnyFunctionType reqtSubstTy;
-  if (genericEnv) {
-    auto *genericSig = genericEnv->getGenericSignature();
-    reqtSubstTy = CanGenericFunctionType::get(
-        genericSig->getCanonicalSignature(),
-        substReqtTy->getParams(), substReqtTy.getResult(),
-        reqtOrigTy->getExtInfo());
-  } else {
-    reqtSubstTy = CanFunctionType::get(substReqtTy->getParams(),
-                                       substReqtTy.getResult(),
-                                       reqtOrigTy->getExtInfo());
-  }
+  CanAnyFunctionType reqtSubstTy =
+    CanAnyFunctionType::get(genericEnv ? genericEnv->getGenericSignature()
+                                                   ->getCanonicalSignature()
+                                       : nullptr,
+                            substReqtTy->getParams(),
+                            substReqtTy.getResult(),
+                            reqtOrigTy->getExtInfo());
 
   // Coroutine lowering requires us to provide these substitutions
   // in order to recreate the appropriate yield types for the accessor
@@ -701,13 +696,141 @@
 
   SGF.emitProtocolWitness(AbstractionPattern(reqtOrigTy), reqtSubstTy,
                           requirement, reqtSubMap, witnessRef,
-                          witnessSubs, isFree);
+                          witnessSubs, isFree, /*isSelfConformance*/ false);
 
   return f;
 }
 
 namespace {
 
+static SILFunction *emitSelfConformanceWitness(SILGenModule &SGM,
+                                           SelfProtocolConformance *conformance,
+                                               SILLinkage linkage,
+                                               SILDeclRef requirement) {
+  auto requirementInfo = SGM.Types.getConstantInfo(requirement);
+
+  // Work out the lowered function type of the SIL witness thunk.
+  auto reqtOrigTy = cast<GenericFunctionType>(requirementInfo.LoweredType);
+
+  // The transformations we do here don't work for generic requirements.
+  GenericEnvironment *genericEnv = nullptr;
+
+  // A mapping from the requirement's generic signature to the type parameters
+  // of the witness thunk (which is non-generic).
+  auto protocol = conformance->getProtocol();
+  auto protocolType = protocol->getDeclaredInterfaceType();
+  auto reqtSubs = SubstitutionMap::getProtocolSubstitutions(protocol,
+                                          protocolType,
+                                          ProtocolConformanceRef(protocol));
+
+  // Open the protocol type.
+  auto openedType = ArchetypeType::getOpened(protocolType);
+
+  // Form the substitutions for calling the witness.
+  auto witnessSubs = SubstitutionMap::getProtocolSubstitutions(protocol,
+                                          openedType,
+                                          ProtocolConformanceRef(protocol));
+
+  // Substitute to get the formal substituted type of the thunk.
+  auto reqtSubstTy =
+    cast<AnyFunctionType>(reqtOrigTy.subst(reqtSubs)->getCanonicalType());
+
+  // Substitute into the requirement type to get the type of the thunk.
+  auto witnessSILFnType =
+    requirementInfo.SILFnType->substGenericArgs(SGM.M, reqtSubs);
+
+  // Mangle the name of the witness thunk.
+  std::string name = [&] {
+    Mangle::ASTMangler mangler;
+    return mangler.mangleWitnessThunk(conformance, requirement.getDecl());
+  }();
+
+  SILGenFunctionBuilder builder(SGM);
+  auto *f = builder.createFunction(
+      linkage, name, witnessSILFnType, genericEnv,
+      SILLocation(requirement.getDecl()), IsNotBare, IsTransparent,
+      IsSerialized, IsNotDynamic, ProfileCounter(), IsThunk,
+      SubclassScope::NotApplicable, InlineDefault);
+
+  f->setDebugScope(new (SGM.M)
+                   SILDebugScope(RegularLocation(requirement.getDecl()), f));
+
+  PrettyStackTraceSILFunction trace("generating protocol witness thunk", f);
+
+  // Create the witness.
+  SILGenFunction SGF(SGM, *f, SGM.SwiftModule);
+
+  auto isFree = isFreeFunctionWitness(requirement.getDecl(),
+                                      requirement.getDecl());
+
+  SGF.emitProtocolWitness(AbstractionPattern(reqtOrigTy), reqtSubstTy,
+                          requirement, reqtSubs, requirement,
+                          witnessSubs, isFree, /*isSelfConformance*/ true);
+
+  return f;
+}
+
+/// Emit a witness table for a self-conformance.
+class SILGenSelfConformanceWitnessTable
+       : public SILWitnessVisitor<SILGenSelfConformanceWitnessTable> {
+  using super = SILWitnessVisitor<SILGenSelfConformanceWitnessTable>;
+
+  SILGenModule &SGM;
+  SelfProtocolConformance *conformance;
+  SILLinkage linkage;
+  IsSerialized_t serialized;
+
+  SmallVector<SILWitnessTable::Entry, 8> entries;
+public:
+  SILGenSelfConformanceWitnessTable(SILGenModule &SGM,
+                                    SelfProtocolConformance *conformance)
+    : SGM(SGM), conformance(conformance),
+      linkage(getLinkageForProtocolConformance(conformance, ForDefinition)),
+      serialized(isConformanceSerialized(conformance)) {
+  }
+
+  void emit() {
+    // Add entries for all the requirements.
+    visitProtocolDecl(conformance->getProtocol());
+
+    // Create the witness table.
+    (void) SILWitnessTable::create(SGM.M, linkage, serialized, conformance,
+                                   entries, /*conditional*/ {});
+  }
+
+  void addProtocolConformanceDescriptor() {}
+
+  void addOutOfLineBaseProtocol(ProtocolDecl *protocol) {
+    // This is an unnecessary restriction that's just not necessary for Error.
+    llvm_unreachable("base protocols not supported in self-conformance");
+  }
+
+  // These are real semantic restrictions.
+  void addAssociatedConformance(AssociatedConformance conformance) {
+    llvm_unreachable("associated conformances not supported in self-conformance");
+  }
+  void addAssociatedType(AssociatedType type) {
+    llvm_unreachable("associated types not supported in self-conformance");
+  }
+  void addPlaceholder(MissingMemberDecl *placeholder) {
+    llvm_unreachable("placeholders not supported in self-conformance");
+  }
+
+  void addMethod(SILDeclRef requirement) {
+    auto witness = emitSelfConformanceWitness(SGM, conformance, linkage,
+                                              requirement);
+    entries.push_back(SILWitnessTable::MethodWitness{requirement, witness});
+  }
+};
+}
+
+void SILGenModule::emitSelfConformanceWitnessTable(ProtocolDecl *protocol) {
+  auto conformance = getASTContext().getSelfConformance(protocol);
+  SILGenSelfConformanceWitnessTable(*this, conformance).emit();
+}
+
+namespace {
+
 /// Emit a default witness table for a resilient protocol definition.
 class SILGenDefaultWitnessTable
     : public SILGenWitnessTable<SILGenDefaultWitnessTable> {
@@ -830,6 +953,9 @@
         if (!SF || SF->Kind != SourceFileKind::Interface)
           SGM.emitDefaultWitnessTable(protocol);
       }
+      if (protocol->requiresSelfConformanceWitnessTable()) {
+        SGM.emitSelfConformanceWitnessTable(protocol);
+      }
       return;
     }
 
diff --git a/lib/SILGen/Scope.cpp b/lib/SILGen/Scope.cpp
index 7998458..9eeacfa 100644
--- a/lib/SILGen/Scope.cpp
+++ b/lib/SILGen/Scope.cpp
@@ -22,7 +22,7 @@
   // stack location that will be destroyed by this scope.
   assert(mv && mv.getType().isObject() &&
          (mv.getType().isTrivial(cleanups.SGF.getModule()) ||
-          mv.getOwnershipKind() == ValueOwnershipKind::Trivial ||
+          mv.getOwnershipKind() == ValueOwnershipKind::Any ||
           mv.hasCleanup()));
   CleanupCloner cloner(cleanups.SGF, mv);
   SILValue value = mv.forward(cleanups.SGF);
diff --git a/lib/SILOptimizer/ARC/ARCBBState.h b/lib/SILOptimizer/ARC/ARCBBState.h
index 2412ac6..286c1fc 100644
--- a/lib/SILOptimizer/ARC/ARCBBState.h
+++ b/lib/SILOptimizer/ARC/ARCBBState.h
@@ -17,7 +17,7 @@
 
 namespace swift {
 
-/// \brief Per-BasicBlock state.
+/// Per-BasicBlock state.
 class ARCSequenceDataflowEvaluator::ARCBBState {
 public:
   using TopDownMapTy = SmallBlotMapVector<SILValue, TopDownRefCountState, 4>;
diff --git a/lib/SILOptimizer/ARC/ARCRegionState.h b/lib/SILOptimizer/ARC/ARCRegionState.h
index 649480a..6facbb7 100644
--- a/lib/SILOptimizer/ARC/ARCRegionState.h
+++ b/lib/SILOptimizer/ARC/ARCRegionState.h
@@ -23,7 +23,7 @@
 class AliasAnalysis;
 class RCIdentityFunctionInfo;
 
-/// \brief Per-Region state.
+/// Per-Region state.
 class ARCRegionState {
 public:
   // TODO: These are relatively expensive, find something else to use here.
diff --git a/lib/SILOptimizer/Analysis/AliasAnalysis.cpp b/lib/SILOptimizer/Analysis/AliasAnalysis.cpp
index 2521bc1..536df9c 100644
--- a/lib/SILOptimizer/Analysis/AliasAnalysis.cpp
+++ b/lib/SILOptimizer/Analysis/AliasAnalysis.cpp
@@ -407,7 +407,7 @@
   return false;
 }
 
-/// \brief return True if the types \p LTy and \p RTy may alias.
+/// return True if the types \p LTy and \p RTy may alias.
 ///
 /// Currently this only implements typed access based TBAA. See the TBAA section
 /// in the SIL reference manual.
diff --git a/lib/SILOptimizer/Analysis/ArraySemantic.cpp b/lib/SILOptimizer/Analysis/ArraySemantic.cpp
index 85aaa12..1e9925c 100644
--- a/lib/SILOptimizer/Analysis/ArraySemantic.cpp
+++ b/lib/SILOptimizer/Analysis/ArraySemantic.cpp
@@ -30,7 +30,7 @@
   return FnTy->getSelfParameter().getConvention();
 }
 
-/// \brief Make sure that all parameters are passed with a reference count
+/// Make sure that all parameters are passed with a reference count
 /// neutral parameter convention except for self.
 bool swift::ArraySemanticsCall::isValidSignature() {
   assert(SemanticsCall && getKind() != ArrayCallKind::kNone &&
@@ -380,7 +380,7 @@
 }
 
 
-/// \brief Hoist or copy the self argument of the semantics call.
+/// Hoist or copy the self argument of the semantics call.
 /// Return the hoisted self argument.
 static SILValue hoistOrCopySelf(ApplyInst *SemanticsCall,
                                 SILInstruction *InsertBefore,
diff --git a/lib/SILOptimizer/Analysis/ClassHierarchyAnalysis.cpp b/lib/SILOptimizer/Analysis/ClassHierarchyAnalysis.cpp
index 20c6cef..1e63c2b 100644
--- a/lib/SILOptimizer/Analysis/ClassHierarchyAnalysis.cpp
+++ b/lib/SILOptimizer/Analysis/ClassHierarchyAnalysis.cpp
@@ -64,7 +64,7 @@
   }
 }
 
-/// \brief Get all subclasses of a given class.
+/// Get all subclasses of a given class.
 ///
 /// \p Current class, whose direct and indirect subclasses are
 ///    to be collected.
diff --git a/lib/SILOptimizer/Analysis/SimplifyInstruction.cpp b/lib/SILOptimizer/Analysis/SimplifyInstruction.cpp
index 21a7c05..138ade8 100644
--- a/lib/SILOptimizer/Analysis/SimplifyInstruction.cpp
+++ b/lib/SILOptimizer/Analysis/SimplifyInstruction.cpp
@@ -538,7 +538,7 @@
   return simplifyBuiltin(BI);
 }
 
-/// \brief Simplify arithmetic intrinsics with overflow and known identity
+/// Simplify arithmetic intrinsics with overflow and known identity
 /// constants such as 0 and 1.
 /// If this returns a value other than SILValue() then the instruction was
 /// simplified to a value which doesn't overflow.  The overflow case is handled
@@ -653,7 +653,7 @@
   return SILValue();
 }
 
-/// \brief Try to simplify the specified instruction, performing local
+/// Try to simplify the specified instruction, performing local
 /// analysis of the operands of the instruction, without looking at its uses
 /// (e.g. constant folding).  If a simpler result can be found, it is
 /// returned, otherwise a null SILValue is returned.
diff --git a/lib/SILOptimizer/FunctionSignatureTransforms/FunctionSignatureOpts.h b/lib/SILOptimizer/FunctionSignatureTransforms/FunctionSignatureOpts.h
index fef9377..d2079b4 100644
--- a/lib/SILOptimizer/FunctionSignatureTransforms/FunctionSignatureOpts.h
+++ b/lib/SILOptimizer/FunctionSignatureTransforms/FunctionSignatureOpts.h
@@ -128,7 +128,7 @@
     if (IsEntirelyDead)
       return None;
     if (SubTy.isTrivial(Arg->getModule()))
-      return Optional<ValueOwnershipKind>(ValueOwnershipKind::Trivial);
+      return Optional<ValueOwnershipKind>(ValueOwnershipKind::Any);
     if (OwnedToGuaranteed)
       return Optional<ValueOwnershipKind>(ValueOwnershipKind::Guaranteed);
     return Arg->getOwnershipKind();
diff --git a/lib/SILOptimizer/IPO/CapturePromotion.cpp b/lib/SILOptimizer/IPO/CapturePromotion.cpp
index 3f01e15..3453954 100644
--- a/lib/SILOptimizer/IPO/CapturePromotion.cpp
+++ b/lib/SILOptimizer/IPO/CapturePromotion.cpp
@@ -64,7 +64,7 @@
 STATISTIC(NumCapturesPromoted, "Number of captures promoted");
 
 namespace {
-/// \brief Transient reference to a block set within ReachabilityInfo.
+/// Transient reference to a block set within ReachabilityInfo.
 ///
 /// This is a bitset that conveniently flattens into a matrix allowing bit-wise
 /// operations without masking.
@@ -78,7 +78,7 @@
     return (NumBlocks + BITWORD_SIZE - 1) / BITWORD_SIZE;
   }
 
-  /// \brief Transient reference to a reaching block matrix.
+  /// Transient reference to a reaching block matrix.
   struct ReachingBlockMatrix {
     uint64_t *Bits;
     unsigned NumBitWords; // Words per row.
@@ -168,7 +168,7 @@
   }
 };
 
-/// \brief Store the reachability matrix: ToBlock -> FromBlocks.
+/// Store the reachability matrix: ToBlock -> FromBlocks.
 class ReachabilityInfo {
   SILFunction *F;
   llvm::DenseMap<SILBasicBlock*, unsigned> BlockMap;
@@ -190,7 +190,7 @@
 
 
 namespace {
-/// \brief A SILCloner subclass which clones a closure function while converting
+/// A SILCloner subclass which clones a closure function while converting
 /// one or more captures from 'inout' (by-reference) to by-value.
 class ClosureCloner : public SILClonerWithScopes<ClosureCloner> {
 public:
@@ -231,7 +231,7 @@
 };
 } // end anonymous namespace
 
-/// \brief Compute ReachabilityInfo so that it can answer queries about
+/// Compute ReachabilityInfo so that it can answer queries about
 /// whether a given basic block in a function is reachable from another basic
 /// block in the function.
 ///
@@ -294,7 +294,7 @@
   ReachingBlockSet::deallocateSet(NewSet);
 }
 
-/// \brief Return true if the To basic block is reachable from the From basic
+/// Return true if the To basic block is reachable from the From basic
 /// block. A block is considered reachable from itself only if its entry can be
 /// recursively reached from its own exit.
 bool
@@ -396,7 +396,7 @@
   return Mangler.mangle();
 }
 
-/// \brief Create the function corresponding to the clone of the original
+/// Create the function corresponding to the clone of the original
 /// closure with the signature modified to reflect promotable captures (which
 /// are given by PromotableIndices, such that each entry in the set is the
 /// index of the box containing the variable in the closure's argument list, and
@@ -446,7 +446,7 @@
   return Fn;
 }
 
-/// \brief Populate the body of the cloned closure, modifying instructions as
+/// Populate the body of the cloned closure, modifying instructions as
 /// necessary to take into consideration the promoted capture(s)
 void
 ClosureCloner::populateCloned() {
@@ -483,7 +483,7 @@
     // a non-trivial value. We know that our value is not written to and it does
     // not escape. The use of a borrow enforces this.
     if (Cloned->hasQualifiedOwnership() &&
-        MappedValue.getOwnershipKind() != ValueOwnershipKind::Trivial) {
+        MappedValue.getOwnershipKind() != ValueOwnershipKind::Any) {
       SILLocation Loc(const_cast<ValueDecl *>((*I)->getDecl()));
       MappedValue = getBuilder().createBeginBorrow(Loc, MappedValue);
     }
@@ -529,7 +529,7 @@
   SILCloner<ClosureCloner>::visitDebugValueAddrInst(Inst);
 }
 
-/// \brief Handle a strong_release instruction during cloning of a closure; if
+/// Handle a strong_release instruction during cloning of a closure; if
 /// it is a strong release of a promoted box argument, then it is replaced with
 /// a ReleaseValue of the new object type argument, otherwise it is handled
 /// normally.
@@ -555,7 +555,7 @@
   SILCloner<ClosureCloner>::visitStrongReleaseInst(Inst);
 }
 
-/// \brief Handle a destroy_value instruction during cloning of a closure; if
+/// Handle a destroy_value instruction during cloning of a closure; if
 /// it is a strong release of a promoted box argument, then it is replaced with
 /// a destroy_value of the new object type argument, otherwise it is handled
 /// normally.
@@ -575,7 +575,7 @@
       // If ownership is enabled, then we must emit a begin_borrow for any
       // non-trivial value.
       if (F.hasQualifiedOwnership() &&
-          Value.getOwnershipKind() != ValueOwnershipKind::Trivial) {
+          Value.getOwnershipKind() != ValueOwnershipKind::Any) {
         auto *BBI = cast<BeginBorrowInst>(Value);
         Value = BBI->getOperand();
         B.createEndBorrow(Inst->getLoc(), BBI, Value);
@@ -629,7 +629,7 @@
   SILCloner<ClosureCloner>::visitEndAccessInst(Inst);
 }
 
-/// \brief Handle a load_borrow instruction during cloning of a closure.
+/// Handle a load_borrow instruction during cloning of a closure.
 ///
 /// The two relevant cases are a direct load from a promoted address argument or
 /// a load of a struct_element_addr of a promoted address argument.
@@ -641,7 +641,7 @@
     // the loads get mapped to uses of the new object type argument.
     //
     // We assume that the value is already guaranteed.
-    assert(Val.getOwnershipKind().isTrivialOr(ValueOwnershipKind::Guaranteed) &&
+    assert(Val.getOwnershipKind().isCompatibleWith(ValueOwnershipKind::Guaranteed) &&
            "Expected argument value to be guaranteed");
     recordFoldedValue(LI, Val);
     return;
@@ -651,7 +651,7 @@
   return;
 }
 
-/// \brief Handle a load instruction during cloning of a closure.
+/// Handle a load instruction during cloning of a closure.
 ///
 /// The two relevant cases are a direct load from a promoted address argument or
 /// a load of a struct_element_addr of a promoted address argument.
@@ -683,7 +683,7 @@
     // struct_extract of the new passed in value. The value should be borrowed
     // already, so we can just extract the value.
     assert(!getBuilder().getFunction().hasQualifiedOwnership() ||
-           Val.getOwnershipKind().isTrivialOr(ValueOwnershipKind::Guaranteed));
+           Val.getOwnershipKind().isCompatibleWith(ValueOwnershipKind::Guaranteed));
     Val = getBuilder().emitStructExtract(LI->getLoc(), Val, SEAI->getField(),
                                          LI->getType());
 
@@ -713,7 +713,7 @@
   return LI->getOwnershipQualifier() != LoadOwnershipQualifier::Take;
 }
 
-/// \brief Given a partial_apply instruction and the argument index into its
+/// Given a partial_apply instruction and the argument index into its
 /// callee's argument list of a box argument (which is followed by an argument
 /// for the address of the box's contents), return true if the closure is known
 /// not to mutate the captured variable.
@@ -941,7 +941,7 @@
 
 } // end anonymous namespace
 
-/// \brief Given a use of an alloc_box instruction, return true if the use
+/// Given a use of an alloc_box instruction, return true if the use
 /// definitely does not allow the box to escape; also, if the use is an
 /// instruction which possibly mutates the contents of the box, then add it to
 /// the Mutations vector.
@@ -1063,7 +1063,7 @@
   return isNonEscapingUse(Op, State);
 }
 
-/// \brief Examine an alloc_box instruction, returning true if at least one
+/// Examine an alloc_box instruction, returning true if at least one
 /// capture of the boxed variable is promotable.  If so, then the pair of the
 /// partial_apply instruction and the index of the box argument in the closure's
 /// argument list is added to IM.
@@ -1198,7 +1198,7 @@
   return B.createProjectBox(Box->getLoc(), Box, 0);
 }
 
-/// \brief Given a partial_apply instruction and a set of promotable indices,
+/// Given a partial_apply instruction and a set of promotable indices,
 /// clone the closure with the promoted captures and replace the partial_apply
 /// with a partial_apply of the new closure, fixing up reference counting as
 /// necessary. Also, if the closure is cloned, the cloned function is added to
diff --git a/lib/SILOptimizer/IPO/ClosureSpecializer.cpp b/lib/SILOptimizer/IPO/ClosureSpecializer.cpp
index 56c0195..d84b4bf 100644
--- a/lib/SILOptimizer/IPO/ClosureSpecializer.cpp
+++ b/lib/SILOptimizer/IPO/ClosureSpecializer.cpp
@@ -107,7 +107,7 @@
 
 class CallSiteDescriptor;
 
-/// \brief A SILCloner subclass which clones a function that takes a closure
+/// A SILCloner subclass which clones a function that takes a closure
 /// argument. We update the parameter list to remove the parameter for the
 /// closure argument and to append the variables captured in the closure.
 /// We also need to replace the closure parameter with the partial apply
@@ -711,7 +711,7 @@
       CallSiteDesc.getLoc(), calleeValue, Cvt->getType(), false, true);
 }
 
-/// \brief Populate the body of the cloned closure, modifying instructions as
+/// Populate the body of the cloned closure, modifying instructions as
 /// necessary. This is where we create the actual specialized BB Arguments.
 void ClosureSpecCloner::populateCloned() {
   SILFunction *Cloned = getCloned();
diff --git a/lib/SILOptimizer/LoopTransforms/COWArrayOpt.cpp b/lib/SILOptimizer/LoopTransforms/COWArrayOpt.cpp
index d336672..2497493 100644
--- a/lib/SILOptimizer/LoopTransforms/COWArrayOpt.cpp
+++ b/lib/SILOptimizer/LoopTransforms/COWArrayOpt.cpp
@@ -379,7 +379,7 @@
   // Set of all blocks that may reach the loop, not including loop blocks.
   llvm::SmallPtrSet<SILBasicBlock*,32> ReachingBlocks;
 
-  /// \brief Transient per-Array user set.
+  /// Transient per-Array user set.
   ///
   /// Track all known array users with the exception of struct_extract users
   /// (checkSafeArrayElementUse prohibits struct_extract users from mutating the
diff --git a/lib/SILOptimizer/LoopTransforms/LICM.cpp b/lib/SILOptimizer/LoopTransforms/LICM.cpp
index b5e03c8..3c509f7 100644
--- a/lib/SILOptimizer/LoopTransforms/LICM.cpp
+++ b/lib/SILOptimizer/LoopTransforms/LICM.cpp
@@ -192,7 +192,7 @@
   return Changed;
 }
 
-/// \brief Summary of may writes occurring in the loop tree rooted at \p
+/// Summary of may writes occurring in the loop tree rooted at \p
 /// Loop. This includes all writes of the sub loops and the loop itself.
 struct LoopNestSummary {
   SILLoop *Loop;
@@ -358,7 +358,7 @@
   return Changed;
 }
 
-/// \brief Optimize the loop tree bottom up propagating loop's summaries up the
+/// Optimize the loop tree bottom up propagating loop's summaries up the
 /// loop tree.
 class LoopTreeOptimization {
   llvm::DenseMap<SILLoop *, std::unique_ptr<LoopNestSummary>>
@@ -401,17 +401,17 @@
     }
   }
 
-  /// \brief Optimize this loop tree.
+  /// Optimize this loop tree.
   bool optimize();
 
 protected:
-  /// \brief Propagate the sub-loops' summaries up to the current loop.
+  /// Propagate the sub-loops' summaries up to the current loop.
   void propagateSummaries(std::unique_ptr<LoopNestSummary> &CurrSummary);
 
-  /// \brief Collect a set of instructions that can be hoisted
+  /// Collect a set of instructions that can be hoisted
   void analyzeCurrentLoop(std::unique_ptr<LoopNestSummary> &CurrSummary);
 
-  /// \brief Optimize the current loop nest.
+  /// Optimize the current loop nest.
   bool optimizeLoop(std::unique_ptr<LoopNestSummary> &CurrSummary);
 };
 } // end anonymous namespace
diff --git a/lib/SILOptimizer/Mandatory/AddressLowering.cpp b/lib/SILOptimizer/Mandatory/AddressLowering.cpp
index e6909c4..53a371b 100644
--- a/lib/SILOptimizer/Mandatory/AddressLowering.cpp
+++ b/lib/SILOptimizer/Mandatory/AddressLowering.cpp
@@ -438,7 +438,7 @@
       assert(!pass.valueStorageMap.contains(arg));
 
       arg = arg->getParent()->replaceFunctionArgument(
-          arg->getIndex(), addrType, ValueOwnershipKind::Trivial,
+          arg->getIndex(), addrType, ValueOwnershipKind::Any,
           arg->getDecl());
 
       loadArg->setOperand(arg);
@@ -467,7 +467,7 @@
 
     pass.F->begin()->insertFunctionArgument(argIdx,
                                             bodyResultTy.getAddressType(),
-                                            ValueOwnershipKind::Trivial, var);
+                                            ValueOwnershipKind::Any, var);
     ++argIdx;
   }
   assert(argIdx == pass.loweredFnConv.getNumIndirectSILResults());
diff --git a/lib/SILOptimizer/Mandatory/DataflowDiagnostics.cpp b/lib/SILOptimizer/Mandatory/DataflowDiagnostics.cpp
index 9ac1a9d..eea9716 100644
--- a/lib/SILOptimizer/Mandatory/DataflowDiagnostics.cpp
+++ b/lib/SILOptimizer/Mandatory/DataflowDiagnostics.cpp
@@ -95,7 +95,7 @@
   }
 }
 
-/// \brief Issue diagnostics whenever we see Builtin.static_report(1, ...).
+/// Issue diagnostics whenever we see Builtin.static_report(1, ...).
 static void diagnoseStaticReports(const SILInstruction *I,
                                   SILModule &M) {
 
@@ -116,7 +116,7 @@
   }
 }
 
-/// \brief Emit a diagnostic for `poundAssert` builtins whose condition is
+/// Emit a diagnostic for `poundAssert` builtins whose condition is
 /// false or whose condition cannot be evaluated.
 static void diagnosePoundAssert(const SILInstruction *I,
                                 SILModule &M,
diff --git a/lib/SILOptimizer/Mandatory/DiagnoseUnreachable.cpp b/lib/SILOptimizer/Mandatory/DiagnoseUnreachable.cpp
index df16a86..745db83 100644
--- a/lib/SILOptimizer/Mandatory/DiagnoseUnreachable.cpp
+++ b/lib/SILOptimizer/Mandatory/DiagnoseUnreachable.cpp
@@ -52,9 +52,9 @@
 /// and whether the condition evaluated to true or false.
 struct UnreachableInfo {
   UnreachableKind Kind;
-  /// \brief The location of the instruction that caused the unreachability.
+  /// The location of the instruction that caused the unreachability.
   SILLocation Loc;
-  /// \brief If this is the FoldedBranch kind, specifies if the condition is
+  /// If this is the FoldedBranch kind, specifies if the condition is
   /// always true.
   bool CondIsAlwaysTrue;
 };
@@ -70,14 +70,14 @@
 /// it possible.
 class UnreachableUserCodeReportingState {
 public:
-  /// \brief The set of top-level blocks that became immediately unreachable due
+  /// The set of top-level blocks that became immediately unreachable due
   /// to conditional branch folding, etc.
   ///
   /// This is a SetVector since several blocks may lead to the same error
   /// report and we iterate through these when producing the diagnostic.
   llvm::SetVector<const SILBasicBlock*> PossiblyUnreachableBlocks;
 
-  /// \brief The set of blocks in which we reported unreachable code errors.
+  /// The set of blocks in which we reported unreachable code errors.
   /// These are used to ensure that we don't issue duplicate reports.
   ///
   /// Note, this set is different from the PossiblyUnreachableBlocks as these
@@ -91,7 +91,7 @@
   llvm::DenseMap<const SILBasicBlock*, UnreachableInfo> MetaMap;
 };
 
-/// \brief Propagate/remove basic block input values when all predecessors
+/// Propagate/remove basic block input values when all predecessors
 /// supply the same arguments.
 static void propagateBasicBlockArgs(SILBasicBlock &BB) {
   // This functions would simplify the code as following:
@@ -369,7 +369,7 @@
   return false;
 }
 
-/// \brief Check if this instruction corresponds to user-written code.
+/// Check if this instruction corresponds to user-written code.
 static bool isUserCode(const SILInstruction *I) {
   SILLocation Loc = I->getLoc();
   if (Loc.isAutoGenerated())
@@ -573,7 +573,7 @@
   return true;
 }
 
-/// \brief Issue an "unreachable code" diagnostic if the blocks contains or
+/// Issue an "unreachable code" diagnostic if the blocks contains or
 /// leads to another block that contains user code.
 ///
 /// Note, we rely on SILLocation information to determine if SILInstructions
diff --git a/lib/SILOptimizer/Mandatory/MandatoryInlining.cpp b/lib/SILOptimizer/Mandatory/MandatoryInlining.cpp
index 8a98443..391e493 100644
--- a/lib/SILOptimizer/Mandatory/MandatoryInlining.cpp
+++ b/lib/SILOptimizer/Mandatory/MandatoryInlining.cpp
@@ -42,7 +42,7 @@
   Context.Diags.diagnose(loc, diag, std::forward<U>(args)...);
 }
 
-/// \brief Fixup reference counts after inlining a function call (which is a
+/// Fixup reference counts after inlining a function call (which is a
 /// no-op unless the function is a thick function). Note that this function
 /// makes assumptions about the release/retain convention of thick function
 /// applications: namely, that an apply of a thick function consumes the callee
@@ -133,7 +133,7 @@
   return CalleeValue;
 }
 
-/// \brief Removes instructions that create the callee value if they are no
+/// Removes instructions that create the callee value if they are no
 /// longer necessary after inlining.
 static void cleanupCalleeValue(SILValue CalleeValue) {
   // Handle the case where the callee of the apply is a load instruction. If we
@@ -282,7 +282,7 @@
   }
 }
 
-/// \brief Returns the callee SILFunction called at a call site, in the case
+/// Returns the callee SILFunction called at a call site, in the case
 /// that the call is transparent (as in, both that the call is marked
 /// with the transparent flag and that callee function is actually transparently
 /// determinable from the SIL) or nullptr otherwise. This assumes that the SIL
@@ -481,7 +481,7 @@
   return newApplyAI;
 }
 
-/// \brief Inlines all mandatory inlined functions into the body of a function,
+/// Inlines all mandatory inlined functions into the body of a function,
 /// first recursively inlining all mandatory apply instructions in those
 /// functions into their bodies if necessary.
 ///
diff --git a/lib/SILOptimizer/Mandatory/SemanticARCOpts.cpp b/lib/SILOptimizer/Mandatory/SemanticARCOpts.cpp
index 269bbc1..bcfa87e 100644
--- a/lib/SILOptimizer/Mandatory/SemanticARCOpts.cpp
+++ b/lib/SILOptimizer/Mandatory/SemanticARCOpts.cpp
@@ -79,6 +79,38 @@
   return all_of(out, [](SILValue v) { return isa<SILFunctionArgument>(v); });
 }
 
+// Eliminate a copy of a borrowed value, if:
+//
+// 1. All of the copies users do not consume the copy (and thus can accept a
+//    borrowed value instead).
+// 2. The copies's non-destroy_value users are strictly contained within the
+//    scope of the borrowed value.
+//
+// Example:
+//
+//   %0 = @guaranteed (argument or instruction)
+//   %1 = copy_value %0
+//   apply %f(%1) : $@convention(thin) (@guaranteed ...) ...
+//   other_non_consuming_use %1
+//   destroy_value %1
+//   end_borrow %0 (if an instruction)
+//
+// =>
+//
+//   %0 = @guaranteed (argument or instruction)
+//   apply %f(%0) : $@convention(thin) (@guaranteed ...) ...
+//   other_non_consuming_use %0
+//   end_borrow %0 (if an instruction)
+//
+// NOTE: This means that the destroy_value technically can be after the
+// end_borrow. In practice, this will not be the case but we use this to avoid
+// having to reason about the ordering of the end_borrow and destroy_value.
+//
+// NOTE: Today we only perform this for guaranteed parameters since this enables
+// us to avoid doing the linear lifetime check to make sure that all destroys
+// are within the borrow scope.
+//
+// TODO: This needs a better name.
 static bool performGuaranteedCopyValueOptimization(CopyValueInst *cvi) {
   SmallVector<SILValue, 16> borrowIntroducers;
 
@@ -149,9 +181,10 @@
   return true;
 }
 
-bool SemanticARCOptVisitor::visitCopyValueInst(CopyValueInst *cvi) {
-  // If our copy value inst has a single destroy value user, eliminate
-  // it.
+/// If cvi only has destroy value users, then cvi is a dead live range. Lets
+/// eliminate all such dead live ranges.
+static bool eliminateDeadLiveRangeCopyValue(CopyValueInst *cvi) {
+  // See if we are lucky and have a simple case.
   if (auto *op = cvi->getSingleUse()) {
     if (auto *dvi = dyn_cast<DestroyValueInst>(op->getUser())) {
       dvi->eraseFromParent();
@@ -161,6 +194,38 @@
     }
   }
 
+  // If all of our copy_value users are destroy_value, zap all of the
+  // instructions. We begin by performing that check and gathering up our
+  // destroy_value.
+  SmallVector<DestroyValueInst *, 16> destroys;
+  if (!all_of(cvi->getUses(), [&](Operand *op) {
+        auto *dvi = dyn_cast<DestroyValueInst>(op->getUser());
+        if (!dvi)
+          return false;
+
+        // Stash dvi in destroys so we can easily eliminate it later.
+        destroys.push_back(dvi);
+        return true;
+      })) {
+    return false;
+  }
+
+  // Now that we have a truly dead live range copy value, eliminate it!
+  while (!destroys.empty()) {
+    destroys.pop_back_val()->eraseFromParent();
+    ++NumEliminatedInsts;
+  }
+  cvi->eraseFromParent();
+  ++NumEliminatedInsts;
+  return true;
+}
+
+bool SemanticARCOptVisitor::visitCopyValueInst(CopyValueInst *cvi) {
+  // If our copy value inst has only destroy_value users, it is a dead live
+  // range. Try to eliminate them.
+  if (eliminateDeadLiveRangeCopyValue(cvi))
+    return true;
+
   // Then try to perform the guaranteed copy value optimization.
   if (performGuaranteedCopyValueOptimization(cvi))
     return true;
diff --git a/lib/SILOptimizer/PassManager/PassManager.cpp b/lib/SILOptimizer/PassManager/PassManager.cpp
index 5357cdc..714c120 100644
--- a/lib/SILOptimizer/PassManager/PassManager.cpp
+++ b/lib/SILOptimizer/PassManager/PassManager.cpp
@@ -725,7 +725,7 @@
   RestartPipeline = true;
 }
 
-/// \brief Reset the state of the pass manager and remove all transformation
+/// Reset the state of the pass manager and remove all transformation
 /// owned by the pass manager. Analysis passes will be kept.
 void SILPassManager::resetAndRemoveTransformations() {
   for (auto *T : Transformations)
diff --git a/lib/SILOptimizer/PassManager/PassPipeline.cpp b/lib/SILOptimizer/PassManager/PassPipeline.cpp
index a15d1fd..a81fb2f 100644
--- a/lib/SILOptimizer/PassManager/PassPipeline.cpp
+++ b/lib/SILOptimizer/PassManager/PassPipeline.cpp
@@ -11,7 +11,7 @@
 //===----------------------------------------------------------------------===//
 ///
 ///  \file
-///  \brief This file provides implementations of a few helper functions
+///  This file provides implementations of a few helper functions
 ///  which provide abstracted entrypoints to the SILPasses stage.
 ///
 ///  \note The actual SIL passes should be implemented in per-pass source files,
diff --git a/lib/SILOptimizer/PassManager/Passes.cpp b/lib/SILOptimizer/PassManager/Passes.cpp
index 25676e3..739bac3 100644
--- a/lib/SILOptimizer/PassManager/Passes.cpp
+++ b/lib/SILOptimizer/PassManager/Passes.cpp
@@ -11,7 +11,7 @@
 //===----------------------------------------------------------------------===//
 ///
 ///  \file
-///  \brief This file provides implementations of a few helper functions
+///  This file provides implementations of a few helper functions
 ///  which provide abstracted entrypoints to the SILPasses stage.
 ///
 ///  \note The actual SIL passes should be implemented in per-pass source files,
diff --git a/lib/SILOptimizer/SILCombiner/SILCombiner.h b/lib/SILOptimizer/SILCombiner/SILCombiner.h
index 4000f3d..1559153 100644
--- a/lib/SILOptimizer/SILCombiner/SILCombiner.h
+++ b/lib/SILOptimizer/SILCombiner/SILCombiner.h
@@ -327,7 +327,7 @@
 
   typedef SmallVector<SILInstruction*, 4> UserListTy;
 
-  /// \brief Returns a list of instructions that project or perform reference
+  /// Returns a list of instructions that project or perform reference
   /// counting operations on \p Value or on its uses.
   /// \return return false if \p Value has other than ARC uses.
   static bool recursivelyCollectARCUsers(UserListTy &Uses, ValueBase *Value);
diff --git a/lib/SILOptimizer/SILCombiner/SILCombinerApplyVisitors.cpp b/lib/SILOptimizer/SILCombiner/SILCombinerApplyVisitors.cpp
index c6fbe6b..bea8eff 100644
--- a/lib/SILOptimizer/SILCombiner/SILCombinerApplyVisitors.cpp
+++ b/lib/SILOptimizer/SILCombiner/SILCombinerApplyVisitors.cpp
@@ -1029,7 +1029,7 @@
   return createApplyWithConcreteType(Apply, CEIs, BuilderCtx);
 }
 
-/// \brief Check that all users of the apply are retain/release ignoring one
+/// Check that all users of the apply are retain/release ignoring one
 /// user.
 static bool
 hasOnlyRetainReleaseUsers(ApplyInst *AI, SILInstruction *IgnoreUser,
@@ -1049,7 +1049,7 @@
   return true;
 };
 
-/// \brief We only know how to simulate reference call effects for unary
+/// We only know how to simulate reference call effects for unary
 /// function calls that take their argument @owned or @guaranteed and return an
 /// @owned value.
 static bool knowHowToEmitReferenceCountInsts(ApplyInst *Call) {
@@ -1077,7 +1077,7 @@
          ParamConv == ParameterConvention::Direct_Guaranteed;
 }
 
-/// \brief Add reference counting operations equal to the effect of the call.
+/// Add reference counting operations equal to the effect of the call.
 static void emitMatchingRCAdjustmentsForCall(ApplyInst *Call, SILValue OnX) {
   FunctionRefInst *FRI = cast<FunctionRefInst>(Call->getCallee());
   SILFunction *F = FRI->getReferencedFunction();
diff --git a/lib/SILOptimizer/Transforms/AccessEnforcementDom.cpp b/lib/SILOptimizer/Transforms/AccessEnforcementDom.cpp
index 0ca0422..1f01076 100644
--- a/lib/SILOptimizer/Transforms/AccessEnforcementDom.cpp
+++ b/lib/SILOptimizer/Transforms/AccessEnforcementDom.cpp
@@ -301,12 +301,12 @@
   void perform();
 
 protected:
-  /// \brief Collect a set of instructions that can be dominated
+  /// Collect a set of instructions that can be dominated
   void
   analyzeCurrentLoop(SILLoop *currentLoop,
                      SmallVectorImpl<BeginAccessInst *> &dominatableInstrVec);
 
-  /// \brief Optimize the current loop nest.
+  /// Optimize the current loop nest.
   void optimizeLoop(SILLoop *currnetLoop,
                     SmallVectorImpl<BeginAccessInst *> &dominatableInstrVec);
 };
diff --git a/lib/SILOptimizer/Transforms/AllocBoxToStack.cpp b/lib/SILOptimizer/Transforms/AllocBoxToStack.cpp
index a44182f..93ce0d6 100644
--- a/lib/SILOptimizer/Transforms/AllocBoxToStack.cpp
+++ b/lib/SILOptimizer/Transforms/AllocBoxToStack.cpp
@@ -42,7 +42,7 @@
   return V;
 }
 
-/// \brief Returns True if the operand or one of its users is captured.
+/// Returns True if the operand or one of its users is captured.
 static bool useCaptured(Operand *UI) {
   auto *User = UI->getUser();
 
@@ -497,7 +497,7 @@
 
 namespace {
 
-/// \brief A SILCloner subclass which clones a closure function while
+/// A SILCloner subclass which clones a closure function while
 /// promoting some of its box parameters to stack addresses.
 class PromotedParamCloner : public SILClonerWithScopes<PromotedParamCloner> {
   friend class SILInstructionVisitor<PromotedParamCloner>;
@@ -558,7 +558,7 @@
   return Mangler.mangle();
 }
 
-/// \brief Create the function corresponding to the clone of the
+/// Create the function corresponding to the clone of the
 /// original closure with the signature modified to reflect promoted
 /// parameters (which are specified by PromotedArgIndices).
 SILFunction *PromotedParamCloner::
@@ -621,7 +621,7 @@
   return Fn;
 }
 
-/// \brief Populate the body of the cloned closure, modifying instructions as
+/// Populate the body of the cloned closure, modifying instructions as
 /// necessary to take into consideration the removed parameters.
 void
 PromotedParamCloner::populateCloned() {
@@ -669,7 +669,7 @@
   cloneFunctionBody(Orig, ClonedEntryBB, entryArgs);
 }
 
-/// \brief Handle a strong_release instruction during cloning of a closure; if
+/// Handle a strong_release instruction during cloning of a closure; if
 /// it is a strong release of a promoted box argument, then it is replaced with
 /// a ReleaseValue of the new object type argument, otherwise it is handled
 /// normally.
@@ -682,7 +682,7 @@
   SILCloner<PromotedParamCloner>::visitStrongReleaseInst(Inst);
 }
 
-/// \brief Handle a strong_release instruction during cloning of a closure; if
+/// Handle a strong_release instruction during cloning of a closure; if
 /// it is a strong release of a promoted box argument, then it is replaced with
 /// a ReleaseValue of the new object type argument, otherwise it is handled
 /// normally.
diff --git a/lib/SILOptimizer/Transforms/MergeCondFail.cpp b/lib/SILOptimizer/Transforms/MergeCondFail.cpp
index 88b16e4..e206586 100644
--- a/lib/SILOptimizer/Transforms/MergeCondFail.cpp
+++ b/lib/SILOptimizer/Transforms/MergeCondFail.cpp
@@ -23,7 +23,7 @@
 
 using namespace swift;
 
-/// \brief Return true if the operand of the cond_fail instruction looks like
+/// Return true if the operand of the cond_fail instruction looks like
 /// the overflow bit of an arithmetic instruction.
 static bool hasOverflowConditionOperand(CondFailInst *CFI) {
   if (auto *TEI = dyn_cast<TupleExtractInst>(CFI->getOperand()))
@@ -84,7 +84,7 @@
     }
   }
 
-  /// \brief Try to merge the cond_fail instructions. Returns true if any could
+  /// Try to merge the cond_fail instructions. Returns true if any could
   /// be merge.
   bool mergeCondFails(SmallVectorImpl<CondFailInst *> &CondFailToMerge) {
     assert(CondFailToMerge.size() > 1 &&
diff --git a/lib/SILOptimizer/Transforms/OwnershipModelEliminator.cpp b/lib/SILOptimizer/Transforms/OwnershipModelEliminator.cpp
index a83d85f..fe7bc4f 100644
--- a/lib/SILOptimizer/Transforms/OwnershipModelEliminator.cpp
+++ b/lib/SILOptimizer/Transforms/OwnershipModelEliminator.cpp
@@ -28,9 +28,15 @@
 #include "swift/SIL/SILFunction.h"
 #include "swift/SIL/SILVisitor.h"
 #include "swift/SILOptimizer/PassManager/Transforms.h"
+#include "llvm/Support/CommandLine.h"
 
 using namespace swift;
 
+// Utility command line argument to dump the module before we eliminate
+// ownership from it.
+static llvm::cl::opt<std::string>
+DumpBefore("sil-dump-before-ome-to-path", llvm::cl::Hidden);
+
 //===----------------------------------------------------------------------===//
 //                               Implementation
 //===----------------------------------------------------------------------===//
@@ -282,6 +288,10 @@
 
 struct OwnershipModelEliminator : SILModuleTransform {
   void run() override {
+    if (DumpBefore.size()) {
+      getModule()->dump(DumpBefore.c_str());
+    }
+
     for (auto &F : *getModule()) {
       // Don't rerun early lowering on deserialized functions.
       if (F.wasDeserializedCanonical())
diff --git a/lib/SILOptimizer/Transforms/PerformanceInliner.cpp b/lib/SILOptimizer/Transforms/PerformanceInliner.cpp
index 60c59fc..39ff21e 100644
--- a/lib/SILOptimizer/Transforms/PerformanceInliner.cpp
+++ b/lib/SILOptimizer/Transforms/PerformanceInliner.cpp
@@ -856,7 +856,7 @@
   }
 }
 
-/// \brief Attempt to inline all calls smaller than our threshold.
+/// Attempt to inline all calls smaller than our threshold.
 /// returns True if a function was inlined.
 bool SILPerformanceInliner::inlineCallsIntoFunction(SILFunction *Caller) {
   // Don't optimize functions that are marked with the opt.never attribute.
diff --git a/lib/SILOptimizer/Transforms/SILCodeMotion.cpp b/lib/SILOptimizer/Transforms/SILCodeMotion.cpp
index 607312a..61bfade 100644
--- a/lib/SILOptimizer/Transforms/SILCodeMotion.cpp
+++ b/lib/SILOptimizer/Transforms/SILCodeMotion.cpp
@@ -861,7 +861,7 @@
 //                            Generic Sinking Code
 //===----------------------------------------------------------------------===//
 
-/// \brief Hoist release on a SILArgument to its predecessors.
+/// Hoist release on a SILArgument to its predecessors.
 static bool hoistSILArgumentReleaseInst(SILBasicBlock *BB) {
   // There is no block to hoist releases to.
   if (BB->pred_empty())
@@ -906,12 +906,12 @@
 
 static const int SinkSearchWindow = 6;
 
-/// \brief Returns True if we can sink this instruction to another basic block.
+/// Returns True if we can sink this instruction to another basic block.
 static bool canSinkInstruction(SILInstruction *Inst) {
   return !Inst->hasUsesOfAnyResult() && !isa<TermInst>(Inst);
 }
 
-/// \brief Returns true if this instruction is a skip barrier, which means that
+/// Returns true if this instruction is a skip barrier, which means that
 /// we can't sink other instructions past it.
 static bool isSinkBarrier(SILInstruction *Inst) {
   if (isa<TermInst>(Inst))
@@ -938,7 +938,7 @@
   EqualAfterMove
 };
 
-/// \brief Find a root value for operand \p In. This function inspects a sil
+/// Find a root value for operand \p In. This function inspects a sil
 /// value and strips trivial conversions such as values that are passed
 /// as arguments to basic blocks with a single predecessor or type casts.
 /// This is a shallow one-step search and not a deep recursive search.
@@ -991,7 +991,7 @@
   return In;
 }
 
-/// \brief Search for an instruction that is identical to \p Iden by scanning
+/// Search for an instruction that is identical to \p Iden by scanning
 /// \p BB starting at the end of the block, stopping on sink barriers.
 /// The \p opRelation must be consistent for all operand comparisons.
 SILInstruction *findIdenticalInBlock(SILBasicBlock *BB, SILInstruction *Iden,
@@ -1329,7 +1329,7 @@
   return Changed;
 }
 
-/// \brief canonicalize retain/release instructions and make them amenable to
+/// canonicalize retain/release instructions and make them amenable to
 /// sinking by selecting canonical pointers. We reduce the number of possible
 /// inputs by replacing values that are unlikely to be a canonical values.
 /// Reducing the search space increases the chances of matching ref count
diff --git a/lib/SILOptimizer/Transforms/SILLowerAggregateInstrs.cpp b/lib/SILOptimizer/Transforms/SILLowerAggregateInstrs.cpp
index c062767..e2ae2fb 100644
--- a/lib/SILOptimizer/Transforms/SILLowerAggregateInstrs.cpp
+++ b/lib/SILOptimizer/Transforms/SILLowerAggregateInstrs.cpp
@@ -35,7 +35,7 @@
 //                      Higher Level Operation Expansion
 //===----------------------------------------------------------------------===//
 
-/// \brief Lower copy_addr into loads/stores/retain/release if we have a
+/// Lower copy_addr into loads/stores/retain/release if we have a
 /// non-address only type. We do this here so we can process the resulting
 /// loads/stores.
 ///
diff --git a/lib/SILOptimizer/Transforms/SILMem2Reg.cpp b/lib/SILOptimizer/Transforms/SILMem2Reg.cpp
index c10b6fb..16e6289 100644
--- a/lib/SILOptimizer/Transforms/SILMem2Reg.cpp
+++ b/lib/SILOptimizer/Transforms/SILMem2Reg.cpp
@@ -104,37 +104,37 @@
   void run();
 
 private:
-  /// \brief Promote AllocStacks into SSA.
+  /// Promote AllocStacks into SSA.
   void promoteAllocationToPhi();
 
-  /// \brief Replace the dummy nodes with new block arguments.
+  /// Replace the dummy nodes with new block arguments.
   void addBlockArguments(BlockSet &PhiBlocks);
 
-  /// \brief Fix all of the branch instructions and the uses to use
+  /// Fix all of the branch instructions and the uses to use
   /// the AllocStack definitions (which include stores and Phis).
   void fixBranchesAndUses(BlockSet &Blocks);
 
-  /// \brief update the branch instructions with the new Phi argument.
+  /// update the branch instructions with the new Phi argument.
   /// The blocks in \p PhiBlocks are blocks that define a value, \p Dest is
   /// the branch destination, and \p Pred is the predecessors who's branch we
   /// modify.
   void fixPhiPredBlock(BlockSet &PhiBlocks, SILBasicBlock *Dest,
                        SILBasicBlock *Pred);
 
-  /// \brief Get the value for this AllocStack variable that is
+  /// Get the value for this AllocStack variable that is
   /// flowing out of StartBB.
   SILValue getLiveOutValue(BlockSet &PhiBlocks, SILBasicBlock *StartBB);
 
-  /// \brief Get the value for this AllocStack variable that is
+  /// Get the value for this AllocStack variable that is
   /// flowing into BB.
   SILValue getLiveInValue(BlockSet &PhiBlocks, SILBasicBlock *BB);
 
-  /// \brief Prune AllocStacks usage in the function. Scan the function
+  /// Prune AllocStacks usage in the function. Scan the function
   /// and remove in-block usage of the AllocStack. Leave only the first
   /// load and the last store.
   void pruneAllocStackUsage();
 
-  /// \brief Promote all of the AllocStacks in a single basic block in one
+  /// Promote all of the AllocStacks in a single basic block in one
   /// linear scan. This function deletes all of the loads and stores except
   /// for the first load and the last store.
   /// \returns the last StoreInst found or zero if none found.
@@ -155,10 +155,10 @@
   /// The builder used to create new instructions during register promotion.
   SILBuilder B;
 
-  /// \brief Check if the AllocStackInst \p ASI is only written into.
+  /// Check if the AllocStackInst \p ASI is only written into.
   bool isWriteOnlyAllocation(AllocStackInst *ASI);
 
-  /// \brief Promote all of the AllocStacks in a single basic block in one
+  /// Promote all of the AllocStacks in a single basic block in one
   /// linear scan. Note: This function deletes all of the users of the
   /// AllocStackInst, including the DeallocStackInst but it does not remove the
   /// AllocStackInst itself!
@@ -174,7 +174,7 @@
   MemoryToRegisters(SILFunction &Func, DominanceInfo *Dt) : F(Func), DT(Dt),
                                                             B(Func) {}
 
-  /// \brief Promote memory to registers. Return True on change.
+  /// Promote memory to registers. Return True on change.
   bool run();
 };
 
diff --git a/lib/SILOptimizer/Transforms/SimplifyCFG.cpp b/lib/SILOptimizer/Transforms/SimplifyCFG.cpp
index 5f143c1..0b19979 100644
--- a/lib/SILOptimizer/Transforms/SimplifyCFG.cpp
+++ b/lib/SILOptimizer/Transforms/SimplifyCFG.cpp
@@ -168,7 +168,7 @@
                                        DominanceInfo *DT);
     bool dominatorBasedSimplify(DominanceAnalysis *DA);
 
-    /// \brief Remove the basic block if it has no predecessors. Returns true
+    /// Remove the basic block if it has no predecessors. Returns true
     /// If the block was removed.
     bool removeIfDead(SILBasicBlock *BB);
 
@@ -1296,7 +1296,7 @@
   return Simplified;
 }
 
-/// \brief Check if replacing an existing edge of the terminator by another
+/// Check if replacing an existing edge of the terminator by another
 /// one which has a DestBB as its destination would create a critical edge.
 static bool wouldIntroduceCriticalEdge(TermInst *T, SILBasicBlock *DestBB) {
   auto SrcSuccs = T->getSuccessors();
@@ -1345,7 +1345,7 @@
   return Cond;
 }
 
-/// \brief Returns the first cond_fail if it is the first side-effect
+/// Returns the first cond_fail if it is the first side-effect
 /// instruction in this block.
 static CondFailInst *getFirstCondFail(SILBasicBlock *BB) {
   auto It = BB->begin();
@@ -1384,7 +1384,7 @@
   return nullptr;
 }
 
-/// \brief Creates a new cond_fail instruction, optionally with an xor inverted
+/// Creates a new cond_fail instruction, optionally with an xor inverted
 /// condition.
 static void createCondFail(CondFailInst *Orig, SILValue Cond, bool inverted,
                            SILBuilder &Builder) {
diff --git a/lib/SILOptimizer/Transforms/Sink.cpp b/lib/SILOptimizer/Transforms/Sink.cpp
index 40bb7ee..a1077f0 100644
--- a/lib/SILOptimizer/Transforms/Sink.cpp
+++ b/lib/SILOptimizer/Transforms/Sink.cpp
@@ -48,7 +48,7 @@
   PostOrderFunctionInfo *PO;
   SILLoopInfo *LoopInfo;
 
-  /// \brief returns True if were able to sink the instruction \p II
+  /// returns True if were able to sink the instruction \p II
   /// closer to it's users.
   bool sinkInstruction(SILInstruction *II) {
 
diff --git a/lib/SILOptimizer/Transforms/SpeculativeDevirtualizer.cpp b/lib/SILOptimizer/Transforms/SpeculativeDevirtualizer.cpp
index 2c8a6b5..0aded32 100644
--- a/lib/SILOptimizer/Transforms/SpeculativeDevirtualizer.cpp
+++ b/lib/SILOptimizer/Transforms/SpeculativeDevirtualizer.cpp
@@ -256,7 +256,7 @@
   return VirtAI;
 }
 
-/// \brief Returns true, if a method implementation to be called by the
+/// Returns true, if a method implementation to be called by the
 /// default case handler of a speculative devirtualization is statically
 /// known. This happens if it can be proven that generated
 /// checked_cast_br instructions cover all other possible cases.
@@ -360,7 +360,7 @@
   return true;
 }
 
-/// \brief Try to speculate the call target for the call \p AI. This function
+/// Try to speculate the call target for the call \p AI. This function
 /// returns true if a change was made.
 static bool tryToSpeculateTarget(FullApplySite AI, ClassHierarchyAnalysis *CHA,
                                  OptRemark::Emitter &ORE) {
diff --git a/lib/SILOptimizer/UtilityPasses/ValueOwnershipKindDumper.cpp b/lib/SILOptimizer/UtilityPasses/ValueOwnershipKindDumper.cpp
index 67e5573..0befce4 100644
--- a/lib/SILOptimizer/UtilityPasses/ValueOwnershipKindDumper.cpp
+++ b/lib/SILOptimizer/UtilityPasses/ValueOwnershipKindDumper.cpp
@@ -56,20 +56,9 @@
           if (Kind == ValueOwnershipKind::Any)
             continue;
 
-          if (Kind == ValueOwnershipKind::Trivial) {
-            if (auto *EI = dyn_cast<EnumInst>(V)) {
-              checkEnumInstIsTrivial(EI);
-              continue;
-            }
-            SILType Ty = V->getType();
-            if (!Ty.isTrivial(M) && !Ty.isAddress()) {
-              llvm_unreachable("Error! Trivial ownership without trivial type\n");
-            }
-          } else {
-            if (V->getType().isTrivial(M)) {
-              llvm_unreachable(
-                  "Error! Non Trivial ownership with trivial type\n");
-            }
+          if (V->getType().isTrivial(M)) {
+            llvm_unreachable(
+                "Error! Non Trivial ownership with trivial type\n");
           }
         }
       }
diff --git a/lib/SILOptimizer/Utils/CFG.cpp b/lib/SILOptimizer/Utils/CFG.cpp
index de2ce17..230738a 100644
--- a/lib/SILOptimizer/Utils/CFG.cpp
+++ b/lib/SILOptimizer/Utils/CFG.cpp
@@ -21,7 +21,7 @@
 
 using namespace swift;
 
-/// \brief Adds a new argument to an edge between a branch and a destination
+/// Adds a new argument to an edge between a branch and a destination
 /// block.
 ///
 /// \param Branch The terminator to add the argument to.
@@ -77,7 +77,7 @@
   return NewBr;
 }
 
-/// \brief Changes the edge value between a branch and destination basic block
+/// Changes the edge value between a branch and destination basic block
 /// at the specified index. Changes all edges from \p Branch to \p Dest to carry
 /// the value.
 ///
@@ -187,7 +187,7 @@
     return DefaultBB;
 }
 
-/// \brief Replace a branch target.
+/// Replace a branch target.
 ///
 /// \param T The terminating instruction to modify.
 /// \param OldDest The successor block that will be replaced.
@@ -332,7 +332,7 @@
   llvm_unreachable("Not yet implemented!");
 }
 
-/// \brief Check if the edge from the terminator is critical.
+/// Check if the edge from the terminator is critical.
 bool swift::isCriticalEdge(TermInst *T, unsigned EdgeIdx) {
   assert(T->getSuccessors().size() > EdgeIdx && "Not enough successors");
 
diff --git a/lib/SILOptimizer/Utils/ConstantFolding.cpp b/lib/SILOptimizer/Utils/ConstantFolding.cpp
index 0bc6a21..7c938be 100644
--- a/lib/SILOptimizer/Utils/ConstantFolding.cpp
+++ b/lib/SILOptimizer/Utils/ConstantFolding.cpp
@@ -144,7 +144,7 @@
   return Context.Diags.diagnose(loc, diag, std::forward<U>(args)...);
 }
 
-/// \brief Construct (int, overflow) result tuple.
+/// Construct (int, overflow) result tuple.
 static SILValue constructResultWithOverflowTuple(BuiltinInst *BI,
                                                  APInt Res, bool Overflow) {
   // Get the SIL subtypes of the returned tuple type.
@@ -164,7 +164,7 @@
   return B.createTuple(Loc, FuncResType, Result);
 }
 
-/// \brief Fold arithmetic intrinsics with overflow.
+/// Fold arithmetic intrinsics with overflow.
 static SILValue
 constantFoldBinaryWithOverflow(BuiltinInst *BI, llvm::Intrinsic::ID ID,
                                bool ReportOverflow,
@@ -566,7 +566,7 @@
   return B.createIntegerLiteral(BI->getLoc(), BI->getType(), ResVal);
 }
 
-/// \brief Fold binary operations.
+/// Fold binary operations.
 ///
 /// The list of operations we constant fold might not be complete. Start with
 /// folding the operations used by the standard library.
diff --git a/lib/SILOptimizer/Utils/Devirtualize.cpp b/lib/SILOptimizer/Utils/Devirtualize.cpp
index 87abeec..728ada3 100644
--- a/lib/SILOptimizer/Utils/Devirtualize.cpp
+++ b/lib/SILOptimizer/Utils/Devirtualize.cpp
@@ -75,7 +75,7 @@
   }
 }
 
-/// \brief Returns true, if a method implementation corresponding to
+/// Returns true, if a method implementation corresponding to
 /// the class_method applied to an instance of the class CD is
 /// effectively final, i.e. it is statically known to be not overridden
 /// by any subclasses of the class CD.
@@ -608,7 +608,7 @@
   return M.lookUpFunctionInVTable(CD, Member);
 }
 
-/// \brief Check if it is possible to devirtualize an Apply instruction
+/// Check if it is possible to devirtualize an Apply instruction
 /// and a class member obtained using the class_method instruction into
 /// a direct call to a specific member of a specific class.
 ///
@@ -682,7 +682,7 @@
   return true;
 }
 
-/// \brief Devirtualize an apply of a class method.
+/// Devirtualize an apply of a class method.
 ///
 /// \p AI is the apply to devirtualize.
 /// \p ClassOrMetatype is a class value or metatype value that is the
diff --git a/lib/SILOptimizer/Utils/Local.cpp b/lib/SILOptimizer/Utils/Local.cpp
index 3971d64..ad1685c 100644
--- a/lib/SILOptimizer/Utils/Local.cpp
+++ b/lib/SILOptimizer/Utils/Local.cpp
@@ -89,7 +89,7 @@
   return B.createReleaseValue(Loc, Ptr, B.getDefaultAtomicity());
 }
 
-/// \brief Perform a fast local check to see if the instruction is dead.
+/// Perform a fast local check to see if the instruction is dead.
 ///
 /// This routine only examines the state of the instruction at hand.
 bool
@@ -138,7 +138,7 @@
   return false;
 }
 
-/// \brief Return true if this is a release instruction and the released value
+/// Return true if this is a release instruction and the released value
 /// is a part of a guaranteed parameter.
 bool swift::isIntermediateRelease(SILInstruction *I,
                                   EpilogueARCFunctionInfo *EAFI) {
@@ -240,7 +240,7 @@
   }
 }
 
-/// \brief If the given instruction is dead, delete it along with its dead
+/// If the given instruction is dead, delete it along with its dead
 /// operands.
 ///
 /// \param I The instruction to be deleted.
@@ -396,7 +396,7 @@
     FuncRef->moveBefore(&*DomBB->begin());
 }
 
-/// \brief Add an argument, \p val, to the branch-edge that is pointing into
+/// Add an argument, \p val, to the branch-edge that is pointing into
 /// block \p Dest. Return a new instruction and do not erase the old
 /// instruction.
 TermInst *swift::addArgumentToBranch(SILValue Val, SILBasicBlock *Dest,
diff --git a/lib/SILOptimizer/Utils/LoopUtils.cpp b/lib/SILOptimizer/Utils/LoopUtils.cpp
index b446cfa..0437d5b 100644
--- a/lib/SILOptimizer/Utils/LoopUtils.cpp
+++ b/lib/SILOptimizer/Utils/LoopUtils.cpp
@@ -42,7 +42,7 @@
   return Preheader;
 }
 
-/// \brief Create a unique loop preheader.
+/// Create a unique loop preheader.
 static SILBasicBlock *insertPreheader(SILLoop *L, DominanceInfo *DT,
                                       SILLoopInfo *LI) {
   assert(!L->getLoopPreheader() && "Expect multiple preheaders");
@@ -89,7 +89,7 @@
   return Preheader;
 }
 
-/// \brief Convert a loop with multiple backedges to a single backedge loop.
+/// Convert a loop with multiple backedges to a single backedge loop.
 ///
 /// Create a new block as a common target for all the current loop backedges.
 static SILBasicBlock *insertBackedgeBlock(SILLoop *L, DominanceInfo *DT,
diff --git a/lib/SILOptimizer/Utils/SILInliner.cpp b/lib/SILOptimizer/Utils/SILInliner.cpp
index d995992..e2ca9a4 100644
--- a/lib/SILOptimizer/Utils/SILInliner.cpp
+++ b/lib/SILOptimizer/Utils/SILInliner.cpp
@@ -313,7 +313,7 @@
 
   SILInliner::DeletionFuncTy DeletionCallback;
 
-  /// \brief The location representing the inlined instructions.
+  /// The location representing the inlined instructions.
   ///
   /// This location wraps the call site AST node that is being inlined.
   /// Alternatively, it can be the SIL file location of the call site (in case
diff --git a/lib/SILOptimizer/Utils/SILSSAUpdater.cpp b/lib/SILOptimizer/Utils/SILSSAUpdater.cpp
index 4740a6d..e27b18e 100644
--- a/lib/SILOptimizer/Utils/SILSSAUpdater.cpp
+++ b/lib/SILOptimizer/Utils/SILSSAUpdater.cpp
@@ -390,7 +390,7 @@
   return Impl.GetValue(BB);
 }
 
-/// \brief Construct a use wrapper. For branches we store information so that we
+/// Construct a use wrapper. For branches we store information so that we
 /// can reconstruct the use after the branch has been modified.
 ///
 /// When a branch is modified existing pointers to the operand
diff --git a/lib/Sema/CSApply.cpp b/lib/Sema/CSApply.cpp
index 92d5edb..f22f113 100644
--- a/lib/Sema/CSApply.cpp
+++ b/lib/Sema/CSApply.cpp
@@ -39,7 +39,7 @@
 using namespace swift;
 using namespace constraints;
 
-/// \brief Retrieve the fixed type for the given type variable.
+/// Retrieve the fixed type for the given type variable.
 Type Solution::getFixedType(TypeVariableType *typeVar) const {
   auto knownBinding = typeBindings.find(typeVar);
   assert(knownBinding != typeBindings.end());
@@ -103,7 +103,7 @@
                               lookupConformanceFn);
 }
 
-/// \brief Find a particular named function witness for a type that conforms to
+/// Find a particular named function witness for a type that conforms to
 /// the given protocol.
 ///
 /// \param tc The type check we're using.
@@ -417,7 +417,7 @@
 
 namespace {
 
-  /// \brief Rewrites an expression by applying the solution of a constraint
+  /// Rewrites an expression by applying the solution of a constraint
   /// system to that expression.
   class ExprRewriter : public ExprVisitor<ExprRewriter, Expr *> {
   public:
@@ -438,7 +438,7 @@
       cs.getTypeChecker().useBridgedNSErrorConformances(dc, toType);
     }
 
-    /// \brief Coerce the given tuple to another tuple type.
+    /// Coerce the given tuple to another tuple type.
     ///
     /// \param expr The expression we're converting.
     ///
@@ -464,7 +464,7 @@
                              SmallVectorImpl<unsigned> &variadicArgs,
                              Optional<Pattern*> typeFromPattern = None);
 
-    /// \brief Coerce a subclass, class-constrained archetype, class-constrained
+    /// Coerce a subclass, class-constrained archetype, class-constrained
     /// existential or to a superclass type.
     ///
     /// Also supports metatypes of the above.
@@ -478,7 +478,7 @@
     Expr *coerceSuperclass(Expr *expr, Type toType,
                            ConstraintLocatorBuilder locator);
 
-    /// \brief Coerce the given value to existential type.
+    /// Coerce the given value to existential type.
     ///
     /// The following conversions are supported:
     /// - concrete to existential
@@ -495,13 +495,13 @@
     Expr *coerceExistential(Expr *expr, Type toType,
                             ConstraintLocatorBuilder locator);
 
-    /// \brief Coerce an expression of (possibly unchecked) optional
+    /// Coerce an expression of (possibly unchecked) optional
     /// type to have a different (possibly unchecked) optional type.
     Expr *coerceOptionalToOptional(Expr *expr, Type toType,
                                    ConstraintLocatorBuilder locator,
                                    Optional<Pattern*> typeFromPattern = None);
 
-    /// \brief Coerce an expression of implicitly unwrapped optional type to its
+    /// Coerce an expression of implicitly unwrapped optional type to its
     /// underlying value type, in the correct way for an implicit
     /// look-through.
     Expr *coerceImplicitlyUnwrappedOptionalToValue(Expr *expr, Type objTy);
@@ -525,7 +525,7 @@
     bool peepholeCollectionUpcast(Expr *expr, Type toType,  bool bridged,
                                   ConstraintLocatorBuilder locator);
 
-    /// \brief Build a collection upcast expression.
+    /// Build a collection upcast expression.
     ///
     /// \param bridged Whether this is a bridging conversion, meaning that the
     /// element types themselves are bridged (vs. simply coerced).
@@ -551,7 +551,7 @@
     }
 
   public:
-    /// \brief Build a reference to the given declaration.
+    /// Build a reference to the given declaration.
     Expr *buildDeclRef(OverloadChoice choice, DeclNameLoc loc, Type openedType,
                        ConstraintLocatorBuilder locator, bool implicit,
                        FunctionRefKind functionRefKind,
@@ -879,7 +879,7 @@
       return true;
     }
 
-    /// \brief Build a new member reference with the given base and member.
+    /// Build a new member reference with the given base and member.
     Expr *buildMemberRef(Expr *base, Type openedFullType, SourceLoc dotLoc,
                          OverloadChoice choice, DeclNameLoc memberLoc,
                          Type openedType, ConstraintLocatorBuilder locator,
@@ -1140,10 +1140,10 @@
       return finishApply(apply, openedType, locator);
     }
     
-    /// \brief Describes either a type or the name of a type to be resolved.
+    /// Describes either a type or the name of a type to be resolved.
     using TypeOrName = llvm::PointerUnion<Identifier, Type>;
 
-    /// \brief Convert the given literal expression via a protocol pair.
+    /// Convert the given literal expression via a protocol pair.
     ///
     /// This routine handles the two-step literal conversion process used
     /// by integer, float, character, extended grapheme cluster, and string
@@ -1202,7 +1202,7 @@
                          Diag<> brokenProtocolDiag,
                          Diag<> brokenBuiltinProtocolDiag);
 
-    /// \brief Convert the given literal expression via a protocol pair.
+    /// Convert the given literal expression via a protocol pair.
     ///
     /// This routine handles the two-step literal conversion process used
     /// by integer, float, character, extended grapheme cluster, and string
@@ -1248,7 +1248,7 @@
                                 Diag<> brokenProtocolDiag,
                                 Diag<> brokenBuiltinProtocolDiag);
 
-    /// \brief Finish a function application by performing the appropriate
+    /// Finish a function application by performing the appropriate
     /// conversions on the function and argument expressions and setting
     /// the resulting type.
     ///
@@ -1264,7 +1264,7 @@
                       ConstraintLocatorBuilder locator);
 
   private:
-    /// \brief Simplify the given type by substituting all occurrences of
+    /// Simplify the given type by substituting all occurrences of
     /// type variables for their fixed types.
     Type simplifyType(Type type) {
       return solution.simplifyType(type);
@@ -1273,7 +1273,7 @@
   public:
 
 
-    /// \brief Coerce a closure expression with a non-Void return type to a
+    /// Coerce a closure expression with a non-Void return type to a
     /// contextual function type with a Void return type.
     ///
     /// This operation cannot fail.
@@ -1284,7 +1284,7 @@
     ///
     ClosureExpr *coerceClosureExprToVoid(ClosureExpr *expr);
 
-    /// \brief Coerce a closure expression with a Never return type to a
+    /// Coerce a closure expression with a Never return type to a
     /// contextual function type with some other return type.
     ///
     /// This operation cannot fail.
@@ -1295,7 +1295,7 @@
     ///
     ClosureExpr *coerceClosureExprFromNever(ClosureExpr *expr);
     
-    /// \brief Coerce the given expression to the given type.
+    /// Coerce the given expression to the given type.
     ///
     /// This operation cannot fail.
     ///
@@ -1310,7 +1310,7 @@
                        ConstraintLocatorBuilder locator,
                        Optional<Pattern*> typeFromPattern = None);
     
-    /// \brief Coerce the given expression (which is the argument to a call) to
+    /// Coerce the given expression (which is the argument to a call) to
     /// the given parameter type.
     ///
     /// This operation cannot fail.
@@ -1331,7 +1331,7 @@
                         bool hasTrailingClosure,
                         ConstraintLocatorBuilder locator);
 
-    /// \brief Coerce the given object argument (e.g., for the base of a
+    /// Coerce the given object argument (e.g., for the base of a
     /// member expression) to the given type.
     ///
     /// \param expr The expression to coerce.
@@ -1349,7 +1349,7 @@
                                      ConstraintLocatorBuilder locator);
 
   private:
-    /// \brief Build a new subscript.
+    /// Build a new subscript.
     ///
     /// \param base The base of the subscript.
     /// \param index The index of the subscript.
@@ -1615,7 +1615,7 @@
       return result;
     }
 
-    /// \brief Build a new reference to another constructor.
+    /// Build a new reference to another constructor.
     Expr *buildOtherConstructorRef(Type openedFullType,
                                    ConstructorDecl *ctor, Expr *base,
                                    DeclNameLoc loc,
@@ -1804,7 +1804,7 @@
 
     ConstraintSystem &getConstraintSystem() const { return cs; }
 
-    /// \brief Simplify the expression type and return the expression.
+    /// Simplify the expression type and return the expression.
     ///
     /// This routine is used for 'simple' expressions that only need their
     /// types simplified, with no further computation.
@@ -4871,7 +4871,7 @@
   return ConcreteDeclRef();
 }
 
-/// \brief Given a constraint locator, find the declaration reference
+/// Given a constraint locator, find the declaration reference
 /// to the callee, it is a call to a declaration.
 static ConcreteDeclRef
 findCalleeDeclRef(ConstraintSystem &cs, const Solution &solution,
@@ -7722,12 +7722,12 @@
       return result;
     }
 
-    /// \brief Ignore statements.
+    /// Ignore statements.
     std::pair<bool, Stmt *> walkToStmtPre(Stmt *stmt) override {
       return { false, stmt };
     }
 
-    /// \brief Ignore declarations.
+    /// Ignore declarations.
     bool walkToDeclPre(Decl *decl) override { return false; }
   };
 } // end anonymous namespace
@@ -7778,7 +7778,7 @@
   return diagnosed;
 }
 
-/// \brief Apply a given solution to the expression, producing a fully
+/// Apply a given solution to the expression, producing a fully
 /// type-checked expression.
 Expr *ConstraintSystem::applySolution(Solution &solution, Expr *expr,
                                       Type convertType,
diff --git a/lib/Sema/CSBindings.cpp b/lib/Sema/CSBindings.cpp
index a02d2c8..1980077 100644
--- a/lib/Sema/CSBindings.cpp
+++ b/lib/Sema/CSBindings.cpp
@@ -365,7 +365,7 @@
   return PotentialBinding{type, kind, constraint->getKind()};
 }
 
-/// \brief Retrieve the set of potential type bindings for the given
+/// Retrieve the set of potential type bindings for the given
 /// representative type variable, along with flags indicating whether
 /// those types should be opened.
 ConstraintSystem::PotentialBindings
@@ -777,7 +777,7 @@
   return result;
 }
 
-/// \brief Check whether the given type can be used as a binding for the given
+/// Check whether the given type can be used as a binding for the given
 /// type variable.
 ///
 /// \returns the type to bind to, if the binding is okay.
@@ -840,7 +840,7 @@
   return superclass;
 }
 
-/// \brief Enumerates all of the 'direct' supertypes of the given type.
+/// Enumerates all of the 'direct' supertypes of the given type.
 ///
 /// The direct supertype S of a type T is a supertype of T (e.g., T < S)
 /// such that there is no type U where T < U and U < S.
diff --git a/lib/Sema/CSDiagnostics.cpp b/lib/Sema/CSDiagnostics.cpp
index c33e11c..d7c29e9f0 100644
--- a/lib/Sema/CSDiagnostics.cpp
+++ b/lib/Sema/CSDiagnostics.cpp
@@ -1226,3 +1226,17 @@
       .fixItInsertAfter(argExpr->getEndLoc(), "()");
   return true;
 }
+
+bool NonOptionalUnwrapFailure::diagnoseAsError() {
+  auto *anchor = getAnchor();
+
+  auto diagnostic = diag::invalid_optional_chain;
+  if (isa<ForceValueExpr>(anchor))
+    diagnostic = diag::invalid_force_unwrap;
+
+  emitDiagnostic(anchor->getLoc(), diagnostic, BaseType)
+      .highlight(anchor->getSourceRange())
+      .fixItRemove(anchor->getEndLoc());
+
+  return true;
+}
diff --git a/lib/Sema/CSDiagnostics.h b/lib/Sema/CSDiagnostics.h
index 777db6d..f9a3e33 100644
--- a/lib/Sema/CSDiagnostics.h
+++ b/lib/Sema/CSDiagnostics.h
@@ -607,6 +607,29 @@
   bool diagnoseAsError() override;
 };
 
+/// Diagnose situations when there was an attempt to unwrap entity
+/// of non-optional type e.g.
+///
+/// ```swift
+/// let i: Int = 0
+/// _ = i!
+///
+/// struct A { func foo() {} }
+/// func foo(_ a: A) {
+///   a?.foo()
+/// }
+/// ```
+class NonOptionalUnwrapFailure final : public FailureDiagnostic {
+  Type BaseType;
+
+public:
+  NonOptionalUnwrapFailure(Expr *root, ConstraintSystem &cs, Type baseType,
+                           ConstraintLocator *locator)
+      : FailureDiagnostic(root, cs, locator), BaseType(baseType) {}
+
+  bool diagnoseAsError() override;
+};
+
 } // end namespace constraints
 } // end namespace swift
 
diff --git a/lib/Sema/CSFix.cpp b/lib/Sema/CSFix.cpp
index 9cc21f3..4b3cdd8 100644
--- a/lib/Sema/CSFix.cpp
+++ b/lib/Sema/CSFix.cpp
@@ -213,3 +213,14 @@
                                                      ConstraintLocator *locator) {
   return new (cs.getAllocator()) AutoClosureForwarding(cs, locator);
 }
+
+bool RemoveUnwrap::diagnose(Expr *root, bool asNote) const {
+  auto failure = NonOptionalUnwrapFailure(root, getConstraintSystem(), BaseType,
+                                          getLocator());
+  return failure.diagnose(asNote);
+}
+
+RemoveUnwrap *RemoveUnwrap::create(ConstraintSystem &cs, Type baseType,
+                                   ConstraintLocator *locator) {
+  return new (cs.getAllocator()) RemoveUnwrap(cs, baseType, locator);
+}
diff --git a/lib/Sema/CSFix.h b/lib/Sema/CSFix.h
index 3491ccb..c400f13 100644
--- a/lib/Sema/CSFix.h
+++ b/lib/Sema/CSFix.h
@@ -89,6 +89,9 @@
   /// @autoclosure conversions are unsupported starting from
   /// Swift version 5.
   AutoClosureForwarding,
+
+  /// Remove `!` or `?` because base is not an optional type.
+  RemoveUnwrap,
 };
 
 class ConstraintFix {
@@ -408,6 +411,23 @@
                                        ConstraintLocator *locator);
 };
 
+class RemoveUnwrap final : public ConstraintFix {
+  Type BaseType;
+
+public:
+  RemoveUnwrap(ConstraintSystem &cs, Type baseType, ConstraintLocator *locator)
+      : ConstraintFix(cs, FixKind::RemoveUnwrap, locator), BaseType(baseType) {}
+
+  std::string getName() const override {
+    return "remove unwrap operator `!` or `?`";
+  }
+
+  bool diagnose(Expr *root, bool asNote = false) const override;
+
+  static RemoveUnwrap *create(ConstraintSystem &cs, Type baseType,
+                              ConstraintLocator *locator);
+};
+
 } // end namespace constraints
 } // end namespace swift
 
diff --git a/lib/Sema/CSGen.cpp b/lib/Sema/CSGen.cpp
index 8e7159d..0d9e370 100644
--- a/lib/Sema/CSGen.cpp
+++ b/lib/Sema/CSGen.cpp
@@ -32,7 +32,7 @@
 using namespace swift;
 using namespace swift::constraints;
 
-/// \brief Find the declaration directly referenced by this expression.
+/// Find the declaration directly referenced by this expression.
 static std::pair<ValueDecl *, FunctionRefKind>
 findReferencedDecl(Expr *expr, DeclNameLoc &loc) {
   do {
@@ -170,20 +170,20 @@
       return expr;
     }
     
-    /// \brief Ignore statements.
+    /// Ignore statements.
     std::pair<bool, Stmt *> walkToStmtPre(Stmt *stmt) override {
       return { false, stmt };
     }
     
-    /// \brief Ignore declarations.
+    /// Ignore declarations.
     bool walkToDeclPre(Decl *decl) override { return false; }
 
-    /// \brief Ignore patterns.
+    /// Ignore patterns.
     std::pair<bool, Pattern*> walkToPatternPre(Pattern *pat) override {
       return { false, pat };
     }
 
-    /// \brief Ignore types.
+    /// Ignore types.
     bool walkToTypeLocPre(TypeLoc &TL) override { return false; }
   };
   
@@ -338,20 +338,20 @@
       return { true, expr };
     }
     
-    /// \brief Ignore statements.
+    /// Ignore statements.
     std::pair<bool, Stmt *> walkToStmtPre(Stmt *stmt) override {
       return { false, stmt };
     }
     
-    /// \brief Ignore declarations.
+    /// Ignore declarations.
     bool walkToDeclPre(Decl *decl) override { return false; }
 
-    /// \brief Ignore patterns.
+    /// Ignore patterns.
     std::pair<bool, Pattern*> walkToPatternPre(Pattern *pat) override {
       return { false, pat };
     }
 
-    /// \brief Ignore types.
+    /// Ignore types.
     bool walkToTypeLocPre(TypeLoc &TL) override { return false; }
   };
   
@@ -981,12 +981,12 @@
       return expr;
     }
     
-    /// \brief Ignore statements.
+    /// Ignore statements.
     std::pair<bool, Stmt *> walkToStmtPre(Stmt *stmt) override {
       return { false, stmt };
     }
     
-    /// \brief Ignore declarations.
+    /// Ignore declarations.
     bool walkToDeclPre(Decl *decl) override { return false; }
   };
 } // end anonymous namespace
@@ -1008,7 +1008,7 @@
       = { nullptr, nullptr };
     unsigned currentEditorPlaceholderVariable = 0;
 
-    /// \brief Add constraints for a reference to a named member of the given
+    /// Add constraints for a reference to a named member of the given
     /// base type, and return the type of such a reference.
     Type addMemberRefConstraints(Expr *expr, Expr *base, DeclName name,
                                  FunctionRefKind functionRefKind,
@@ -1030,7 +1030,7 @@
       return tv;
     }
 
-    /// \brief Add constraints for a reference to a specific member of the given
+    /// Add constraints for a reference to a specific member of the given
     /// base type, and return the type of such a reference.
     Type addMemberRefConstraints(Expr *expr, Expr *base, ValueDecl *decl,
                                  FunctionRefKind functionRefKind) {
@@ -1054,7 +1054,7 @@
       return tv;
     }
 
-    /// \brief Add constraints for a subscript operation.
+    /// Add constraints for a subscript operation.
     Type addSubscriptConstraints(Expr *anchor, Type baseTy, Expr *index,
                                  ValueDecl *declOrNull,
                                  ConstraintLocator *locator = nullptr) {
@@ -2073,7 +2073,7 @@
       });
     }
 
-    /// \brief Produces a type for the given pattern, filling in any missing
+    /// Produces a type for the given pattern, filling in any missing
     /// type information with fresh type variables.
     ///
     /// \param pattern The pattern.
@@ -2184,7 +2184,7 @@
       return CS.getType(expr->getClosureBody());
     }
 
-    /// \brief Walk a closure body to determine if it's possible for
+    /// Walk a closure body to determine if it's possible for
     /// it to return with a non-void result.
     static bool closureHasNoResult(ClosureExpr *expr) {
       // A walker that looks for 'return' statements that aren't
@@ -2233,7 +2233,7 @@
       return finder.hasNoResult();
     }
     
-    /// \brief Walk a closure AST to determine if it can throw.
+    /// Walk a closure AST to determine if it can throw.
     bool closureCanThrow(ClosureExpr *expr) {
       // A walker that looks for 'try' or 'throw' expressions
       // that aren't nested within closures, nested declarations,
@@ -3237,7 +3237,7 @@
     }
   };
 
-  /// \brief AST walker that "sanitizes" an expression for the
+  /// AST walker that "sanitizes" an expression for the
   /// constraint-based type checker.
   ///
   /// This is necessary because Sema fills in too much type information before
@@ -3414,7 +3414,7 @@
       return expr;
     }
 
-    /// \brief Ignore declarations.
+    /// Ignore declarations.
     bool walkToDeclPre(Decl *decl) override { return false; }
 
     // Don't walk into statements.  This handles the BraceStmt in
@@ -3490,7 +3490,7 @@
       return { true, expr };
     }
 
-    /// \brief Once we've visited the children of the given expression,
+    /// Once we've visited the children of the given expression,
     /// generate constraints from the expression.
     Expr *walkToExprPost(Expr *expr) override {
 
@@ -3565,12 +3565,12 @@
       return nullptr;
     }
 
-    /// \brief Ignore statements.
+    /// Ignore statements.
     std::pair<bool, Stmt *> walkToStmtPre(Stmt *stmt) override {
       return { false, stmt };
     }
 
-    /// \brief Ignore declarations.
+    /// Ignore declarations.
     bool walkToDeclPre(Decl *decl) override { return false; }
   };
 
diff --git a/lib/Sema/CSRanking.cpp b/lib/Sema/CSRanking.cpp
index 628a967..66bdc3d 100644
--- a/lib/Sema/CSRanking.cpp
+++ b/lib/Sema/CSRanking.cpp
@@ -134,7 +134,7 @@
   return false;
 }
 
-/// \brief Compare two overload choices for equality.
+/// Compare two overload choices for equality.
 static bool sameOverloadChoice(const OverloadChoice &x,
                                const OverloadChoice &y) {
   if (x.getKind() != y.getKind())
@@ -257,7 +257,7 @@
   return {SelfTypeRelationship::ConformsTo, conformance};
 }
 
-/// \brief Given two generic function declarations, signal if the first is more
+/// Given two generic function declarations, signal if the first is more
 /// "constrained" than the second by comparing the number of constraints
 /// applied to each type parameter.
 /// Note that this is not a subtype or conversion check - that takes place
@@ -381,7 +381,7 @@
   return index->getAttrs().hasAttribute<ImplicitlyUnwrappedOptionalAttr>();
 }
 
-/// \brief Determine whether the first declaration is as "specialized" as
+/// Determine whether the first declaration is as "specialized" as
 /// the second declaration.
 ///
 /// "Specialized" is essentially a form of subtyping, defined below.
diff --git a/lib/Sema/CSSimplify.cpp b/lib/Sema/CSSimplify.cpp
index 4b7c314..88e0d4a 100644
--- a/lib/Sema/CSSimplify.cpp
+++ b/lib/Sema/CSSimplify.cpp
@@ -2979,10 +2979,27 @@
     return SolutionKind::Unsolved;
   }
   
-  // If the base type is not optional, the constraint fails.
+
   Type objectTy = optTy->getOptionalObjectType();
-  if (!objectTy)
-    return SolutionKind::Error;
+  // If the base type is not optional, let's attempt a fix (if possible)
+  // and assume that `!` is just not there.
+  if (!objectTy) {
+    // Let's see if we can apply a specific fix here.
+    if (shouldAttemptFixes()) {
+      auto *fix =
+          RemoveUnwrap::create(*this, optTy, getConstraintLocator(locator));
+
+      if (recordFix(fix))
+        return SolutionKind::Error;
+
+      // If the fix was successful let's record
+      // "fixed" object type and continue.
+      objectTy = optTy;
+    } else {
+      // If fixes are not allowed, no choice but to fail.
+      return SolutionKind::Error;
+    }
+  }
   
   // The object type is an lvalue if the optional was.
   if (optLValueTy->is<LValueType>())
@@ -2993,7 +3010,7 @@
   return SolutionKind::Solved;
 }
 
-/// \brief Attempt to simplify a function input or result constraint.
+/// Attempt to simplify a function input or result constraint.
 ConstraintSystem::SolutionKind
 ConstraintSystem::simplifyFunctionComponentConstraint(
                                         ConstraintKind kind,
@@ -5427,6 +5444,7 @@
   case FixKind::RelabelArguments:
   case FixKind::AddConformance:
   case FixKind::AutoClosureForwarding:
+  case FixKind::RemoveUnwrap:
     llvm_unreachable("handled elsewhere");
   }
 
diff --git a/lib/Sema/CSSolver.cpp b/lib/Sema/CSSolver.cpp
index 6008846..944b6ef 100644
--- a/lib/Sema/CSSolver.cpp
+++ b/lib/Sema/CSSolver.cpp
@@ -234,7 +234,7 @@
   Fixes.append(solution.Fixes.begin(), solution.Fixes.end());
 }
 
-/// \brief Restore the type variable bindings to what they were before
+/// Restore the type variable bindings to what they were before
 /// we attempted to solve this constraint system.
 void ConstraintSystem::restoreTypeVariableBindings(unsigned numBindings) {
   auto &savedBindings = *getSavedBindings();
@@ -316,7 +316,7 @@
 
 namespace {
 
-/// \brief Truncate the given small vector to the given new size.
+/// Truncate the given small vector to the given new size.
 template<typename T>
 void truncate(SmallVectorImpl<T> &vec, unsigned newSize) {
   assert(newSize <= vec.size() && "Not a truncation!");
@@ -485,7 +485,7 @@
   cs.failedConstraint = nullptr;
 }
 
-/// \brief Solve the system of constraints.
+/// Solve the system of constraints.
 ///
 /// \param allowFreeTypeVariables How to bind free type variables in
 /// the solution.
@@ -826,7 +826,7 @@
     }
 
   private:
-    /// \brief Extract type of the element from given collection type.
+    /// Extract type of the element from given collection type.
     ///
     /// \param collection The type of the collection container.
     ///
diff --git a/lib/Sema/CSStep.h b/lib/Sema/CSStep.h
index 3fdde3c..c2d805f 100644
--- a/lib/Sema/CSStep.h
+++ b/lib/Sema/CSStep.h
@@ -126,7 +126,7 @@
   ///          this step solved or failed.
   virtual StepResult take(bool prevFailed) = 0;
 
-  /// \brief Try to resume previously suspended step.
+  /// Try to resume previously suspended step.
   ///
   /// This happens after "follow-up" steps are done
   /// and all of the required information should be
@@ -144,7 +144,7 @@
   virtual void print(llvm::raw_ostream &Out) = 0;
 
 protected:
-  /// \brief Transition this step into one of the available states.
+  /// Transition this step into one of the available states.
   ///
   /// This is primarily driven by execution of the step itself and
   /// the solver, while it executes the work list.
diff --git a/lib/Sema/CalleeCandidateInfo.cpp b/lib/Sema/CalleeCandidateInfo.cpp
index 5581f94..b4850ce 100644
--- a/lib/Sema/CalleeCandidateInfo.cpp
+++ b/lib/Sema/CalleeCandidateInfo.cpp
@@ -26,7 +26,7 @@
 using namespace swift;
 using namespace constraints;
 
-/// \brief Determine whether one type would be a valid substitution for an
+/// Determine whether one type would be a valid substitution for an
 /// archetype.
 ///
 /// \param type The potential type.
diff --git a/lib/Sema/CodeSynthesis.cpp b/lib/Sema/CodeSynthesis.cpp
index 28a7790..912c8f3 100644
--- a/lib/Sema/CodeSynthesis.cpp
+++ b/lib/Sema/CodeSynthesis.cpp
@@ -81,7 +81,8 @@
   // Note that we can't just use hasClangNode() because the importer
   // sometimes synthesizes things that lack clang nodes.
   auto *mod = storage->getDeclContext()->getModuleScopeContext();
-  return (cast<FileUnit>(mod)->getKind() == FileUnitKind::ClangModule);
+  return (cast<FileUnit>(mod)->getKind() == FileUnitKind::ClangModule ||
+          cast<FileUnit>(mod)->getKind() == FileUnitKind::DWARFModule);
 }
 
 /// Insert the specified decl into the DeclContext's member list.  If the hint
@@ -2186,7 +2187,7 @@
   llvm_unreachable("bad synthesized function kind");
 }
 
-/// \brief Create an implicit struct or class constructor.
+/// Create an implicit struct or class constructor.
 ///
 /// \param decl The struct or class for which a constructor will be created.
 /// \param ICK The kind of implicit constructor to create.
diff --git a/lib/Sema/CodeSynthesis.h b/lib/Sema/CodeSynthesis.h
index 3b08c7a..6f5bb35 100644
--- a/lib/Sema/CodeSynthesis.h
+++ b/lib/Sema/CodeSynthesis.h
@@ -106,19 +106,19 @@
 
 void triggerAccessorSynthesis(TypeChecker &TC, AbstractStorageDecl *storage);
 
-/// \brief Describes the kind of implicit constructor that will be
+/// Describes the kind of implicit constructor that will be
 /// generated.
 enum class ImplicitConstructorKind {
-  /// \brief The default constructor, which default-initializes each
+  /// The default constructor, which default-initializes each
   /// of the instance variables.
   Default,
-  /// \brief The memberwise constructor, which initializes each of
+  /// The memberwise constructor, which initializes each of
   /// the instance variables from a parameter of the same type and
   /// name.
   Memberwise
 };
 
-/// \brief Create an implicit struct or class constructor.
+/// Create an implicit struct or class constructor.
 ///
 /// \param decl The struct or class for which a constructor will be created.
 /// \param ICK The kind of implicit constructor to create.
diff --git a/lib/Sema/Constraint.h b/lib/Sema/Constraint.h
index 9f5bd4a..d824da0 100644
--- a/lib/Sema/Constraint.h
+++ b/lib/Sema/Constraint.h
@@ -45,45 +45,45 @@
 class ConstraintLocator;
 class ConstraintSystem;
 
-/// \brief Describes the kind of constraint placed on one or more types.
+/// Describes the kind of constraint placed on one or more types.
 enum class ConstraintKind : char {
-  /// \brief The two types must be bound to the same type. This is the only
+  /// The two types must be bound to the same type. This is the only
   /// truly symmetric constraint.
   Bind,
-  /// \brief The two types must be bound to the same type, dropping
+  /// The two types must be bound to the same type, dropping
   /// lvalueness when comparing a type variable to a type.
   Equal,
-  /// \brief The first type is the type of a function parameter; the second
+  /// The first type is the type of a function parameter; the second
   /// type is the type of a reference to that parameter from within the
   /// function body. Specifically, the left type is an inout type iff the right
   /// type is an lvalue type with the same object type. Otherwise, the two
   /// types must be the same type.
   BindParam,
-  /// \brief Binds the first type to the element type of the second type.
+  /// Binds the first type to the element type of the second type.
   BindToPointerType,
-  /// \brief The first type is a subtype of the second type, i.e., a value
+  /// The first type is a subtype of the second type, i.e., a value
   /// of the type of the first type can be used wherever a value of the
   /// second type is expected.
   Subtype,
-  /// \brief The first type is convertible to the second type.
+  /// The first type is convertible to the second type.
   Conversion,
-  /// \brief The first type can be bridged to the second type.
+  /// The first type can be bridged to the second type.
   BridgingConversion,
-  /// \brief The first type is the element of an argument tuple that is
+  /// The first type is the element of an argument tuple that is
   /// convertible to the second type (which represents the corresponding
   /// parameter type).
   ArgumentConversion,
-  /// \brief The first type is convertible to the second type, including inout.
+  /// The first type is convertible to the second type, including inout.
   OperatorArgumentConversion,
-  /// \brief The first type must conform to the second type (which is a
+  /// The first type must conform to the second type (which is a
   /// protocol type).
   ConformsTo,
-  /// \brief The first type describes a literal that conforms to the second
+  /// The first type describes a literal that conforms to the second
   /// type, which is one of the known expressible-by-literal protocols.
   LiteralConformsTo,
   /// A checked cast from the first type to the second.
   CheckedCast,
-  /// \brief The first type can act as the Self type of the second type (which
+  /// The first type can act as the Self type of the second type (which
   /// is a protocol).
   ///
   /// This constraint is slightly looser than a conforms-to constraint, because
@@ -91,78 +91,78 @@
   /// existential, even if it doesn't conform to that protocol (e.g., due to
   /// the use of associated types).
   SelfObjectOfProtocol,
-  /// \brief Both types are function types. The first function type's
+  /// Both types are function types. The first function type's
   /// input is the value being passed to the function and its output
   /// is a type variable that describes the output. The second
   /// function type is expected to become a function type. Note, we
   /// do not require the function type attributes to match.
   ApplicableFunction,
-  /// \brief The first type is a function type whose input is the value passed
+  /// The first type is a function type whose input is the value passed
   /// to the function and whose output is a type variable describing the output.
   /// The second type is either a `@dynamicCallable` nominal type or the
   /// function type of a `dynamicallyCall` method defined on a
   /// `@dynamicCallable` nominal type.
   DynamicCallableApplicableFunction,
-  /// \brief The first type is the type of the dynamicType member of the
+  /// The first type is the type of the dynamicType member of the
   /// second type.
   DynamicTypeOf,
-  /// \brief Binds the left-hand type to a particular overload choice.
+  /// Binds the left-hand type to a particular overload choice.
   BindOverload,
-  /// \brief The first type has a member with the given name, and the
+  /// The first type has a member with the given name, and the
   /// type of that member, when referenced as a value, is the second type.
   ValueMember,
-  /// \brief The first type (which is implicit) has a member with the given
+  /// The first type (which is implicit) has a member with the given
   /// name, and the type of that member, when referenced as a value, is the
   /// second type.
   UnresolvedValueMember,
-  /// \brief The first type can be defaulted to the second (which currently
+  /// The first type can be defaulted to the second (which currently
   /// cannot be dependent).  This is more like a type property than a
   /// relational constraint.
   Defaultable,
-  /// \brief A disjunction constraint that specifies that one or more of the
+  /// A disjunction constraint that specifies that one or more of the
   /// stored constraints must hold.
   Disjunction,
-  /// \brief The first type is an optional type whose object type is the second
+  /// The first type is an optional type whose object type is the second
   /// type, preserving lvalue-ness.
   OptionalObject,
-  /// \brief The first type is the same function type as the second type, but
+  /// The first type is the same function type as the second type, but
   /// made @escaping.
   EscapableFunctionOf,
-  /// \brief The first type is an opened type from the second type (which is
+  /// The first type is an opened type from the second type (which is
   /// an existential).
   OpenedExistentialOf,
-  /// \brief A relation between three types. The first is the key path type,
+  /// A relation between three types. The first is the key path type,
   // the second is the root type, and the third is the projected value type.
   // The second and third types can be lvalues depending on the kind of key
   // path.
   KeyPathApplication,
-  /// \brief A relation between three types. The first is the key path type,
+  /// A relation between three types. The first is the key path type,
   // the second is its root type, and the third is the projected value type.
   // The key path type is chosen based on the selection of overloads for the
   // member references along the path.
   KeyPath,
-  /// \brief The first type is a function type, the second is the function's
+  /// The first type is a function type, the second is the function's
   /// input type.
   FunctionInput,
-  /// \brief The first type is a function type, the second is the function's
+  /// The first type is a function type, the second is the function's
   /// result type.
   FunctionResult,
 };
 
-/// \brief Classification of the different kinds of constraints.
+/// Classification of the different kinds of constraints.
 enum class ConstraintClassification : char {
-  /// \brief A relational constraint, which relates two types.
+  /// A relational constraint, which relates two types.
   Relational,
 
-  /// \brief A member constraint, which names a member of a type and assigns
+  /// A member constraint, which names a member of a type and assigns
   /// it a reference type.
   Member,
 
-  /// \brief A property of a single type, such as whether it is defaultable to
+  /// A property of a single type, such as whether it is defaultable to
   /// a particular type.
   TypeProperty,
 
-  /// \brief A disjunction constraint.
+  /// A disjunction constraint.
   Disjunction
 };
 
@@ -233,12 +233,12 @@
   RememberChoice = true
 };
 
-/// \brief A constraint between two type variables.
+/// A constraint between two type variables.
 class Constraint final : public llvm::ilist_node<Constraint>,
     private llvm::TrailingObjects<Constraint, TypeVariableType *> {
   friend TrailingObjects;
 
-  /// \brief The kind of constraint.
+  /// The kind of constraint.
   ConstraintKind Kind : 8;
 
   /// The kind of restriction placed on this constraint.
@@ -276,28 +276,28 @@
 
   union {
     struct {
-      /// \brief The first type.
+      /// The first type.
       Type First;
 
-      /// \brief The second type.
+      /// The second type.
       Type Second;
 
-      /// \brief The third type, if any.
+      /// The third type, if any.
       Type Third;
     } Types;
 
     struct {
-      /// \brief The type of the base.
+      /// The type of the base.
       Type First;
 
-      /// \brief The type of the member.
+      /// The type of the member.
       Type Second;
 
-      /// \brief If non-null, the name of a member of the first type is that
+      /// If non-null, the name of a member of the first type is that
       /// being related to the second type.
       DeclName Member;
 
-      /// \brief The DC in which the use appears.
+      /// The DC in which the use appears.
       DeclContext *UseDC;
     } Member;
 
@@ -305,22 +305,22 @@
     ArrayRef<Constraint *> Nested;
 
     struct {
-      /// \brief The first type
+      /// The first type
       Type First;
 
-      /// \brief The overload choice
+      /// The overload choice
       OverloadChoice Choice;
 
-      /// \brief The DC in which the use appears.
+      /// The DC in which the use appears.
       DeclContext *UseDC;
     } Overload;
   };
 
-  /// \brief The locator that describes where in the expression this
+  /// The locator that describes where in the expression this
   /// constraint applies.
   ConstraintLocator *Locator;
 
-  /// \brief Constraints are always allocated within a given constraint
+  /// Constraints are always allocated within a given constraint
   /// system.
   void *operator new(size_t) = delete;
 
@@ -410,7 +410,7 @@
                                        RememberChoice_t shouldRememberChoice
                                          = ForgetChoice);
 
-  /// \brief Determine the kind of constraint.
+  /// Determine the kind of constraint.
   ConstraintKind getKind() const { return Kind; }
 
   /// Retrieve the restriction placed on this constraint.
@@ -460,7 +460,7 @@
     return {getTrailingObjects<TypeVariableType*>(), NumTypeVariables};
   }
 
-  /// \brief Determine the classification of this constraint, providing
+  /// Determine the classification of this constraint, providing
   /// a broader categorization than \c getKind().
   ConstraintClassification getClassification() const {
     switch (Kind) {
@@ -504,7 +504,7 @@
     llvm_unreachable("Unhandled ConstraintKind in switch.");
   }
 
-  /// \brief Retrieve the first type in the constraint.
+  /// Retrieve the first type in the constraint.
   Type getFirstType() const {
     switch (getKind()) {
     case ConstraintKind::Disjunction:
@@ -522,7 +522,7 @@
     }
   }
 
-  /// \brief Retrieve the second type in the constraint.
+  /// Retrieve the second type in the constraint.
   Type getSecondType() const {
     switch (getKind()) {
     case ConstraintKind::Disjunction:
@@ -538,7 +538,7 @@
     }
   }
 
-  /// \brief Retrieve the third type in the constraint.
+  /// Retrieve the third type in the constraint.
   Type getThirdType() const {
     switch (getKind()) {
     case ConstraintKind::KeyPath:
@@ -549,17 +549,17 @@
     }
   }
 
-  /// \brief Retrieve the protocol in a conformance constraint.
+  /// Retrieve the protocol in a conformance constraint.
   ProtocolDecl *getProtocol() const;
 
-  /// \brief Retrieve the name of the member for a member constraint.
+  /// Retrieve the name of the member for a member constraint.
   DeclName getMember() const {
     assert(Kind == ConstraintKind::ValueMember ||
            Kind == ConstraintKind::UnresolvedValueMember);
     return Member.Member;
   }
 
-  /// \brief Determine whether this constraint kind has a second type.
+  /// Determine whether this constraint kind has a second type.
   static bool hasMember(ConstraintKind kind) {
     return kind == ConstraintKind::ValueMember
         || kind == ConstraintKind::UnresolvedValueMember;
@@ -613,7 +613,7 @@
     return Member.UseDC;
   }
 
-  /// \brief Retrieve the locator for this constraint.
+  /// Retrieve the locator for this constraint.
   ConstraintLocator *getLocator() const { return Locator; }
 
   /// Clone the given constraint.
diff --git a/lib/Sema/ConstraintLocator.h b/lib/Sema/ConstraintLocator.h
index 83e5de5..df2d848 100644
--- a/lib/Sema/ConstraintLocator.h
+++ b/lib/Sema/ConstraintLocator.h
@@ -38,7 +38,7 @@
 namespace constraints {
   class ConstraintSystem;
 
-/// \brief Locates a given constraint within the expression being
+/// Locates a given constraint within the expression being
 /// type-checked, which may refer down into subexpressions and parts of
 /// the types of those subexpressions.
 ///
@@ -50,59 +50,59 @@
 /// to indicate constraints on its argument or result type.
 class ConstraintLocator : public llvm::FoldingSetNode {
 public:
-  /// \brief Describes the kind of a particular path element, e.g.,
+  /// Describes the kind of a particular path element, e.g.,
   /// "tuple element", "call result", "base of member lookup", etc.
   enum PathElementKind : unsigned char {
-    /// \brief The argument of function application.
+    /// The argument of function application.
     ApplyArgument,
-    /// \brief The function being applied.
+    /// The function being applied.
     ApplyFunction,
     /// Matching an argument to a parameter.
     ApplyArgToParam,
-    /// \brief A generic parameter being opened.
+    /// A generic parameter being opened.
     ///
     /// Also contains the generic parameter type itself.
     GenericParameter,
-    /// \brief The argument type of a function.
+    /// The argument type of a function.
     FunctionArgument,
-    /// \brief The result type of a function.
+    /// The result type of a function.
     FunctionResult,
-    /// \brief A tuple element referenced by position.
+    /// A tuple element referenced by position.
     TupleElement,
-    /// \brief A tuple element referenced by name.
+    /// A tuple element referenced by name.
     NamedTupleElement,
-    /// \brief An optional payload.
+    /// An optional payload.
     OptionalPayload,
-    /// \brief A generic argument.
+    /// A generic argument.
     /// FIXME: Add support for named generic arguments?
     GenericArgument,
-    /// \brief A member.
+    /// A member.
     /// FIXME: Do we need the actual member name here?
     Member,
-    /// \brief An unresolved member.
+    /// An unresolved member.
     UnresolvedMember,
-    /// \brief The base of a member expression.
+    /// The base of a member expression.
     MemberRefBase,
-    /// \brief The lookup for a subscript member.
+    /// The lookup for a subscript member.
     SubscriptMember,
-    /// \brief The lookup for a constructor member.
+    /// The lookup for a constructor member.
     ConstructorMember,
-    /// \brief An implicit @lvalue-to-inout conversion; only valid for operator
+    /// An implicit @lvalue-to-inout conversion; only valid for operator
     /// arguments.
     LValueConversion,
-    /// \brief RValue adjustment.
+    /// RValue adjustment.
     RValueAdjustment,
-    /// \brief The result of a closure.
+    /// The result of a closure.
     ClosureResult,
-    /// \brief The parent of a nested type.
+    /// The parent of a nested type.
     ParentType,
-    /// \brief The instance of a metatype type.
+    /// The instance of a metatype type.
     InstanceType,
-    /// \brief The generic type of a sequence.
+    /// The generic type of a sequence.
     SequenceIteratorProtocol,
-    /// \brief The element type of a generator.
+    /// The element type of a generator.
     GeneratorElementType,
-    /// \brief An argument passed in an autoclosure parameter
+    /// An argument passed in an autoclosure parameter
     /// position, which must match the autoclosure return type.
     AutoclosureResult,
     /// The requirement that we're matching during protocol conformance
@@ -119,15 +119,15 @@
     ConditionalRequirement,
     /// A single requirement placed on the type parameters.
     TypeParameterRequirement,
-    /// \brief Locator for a binding from an IUO disjunction choice.
+    /// Locator for a binding from an IUO disjunction choice.
     ImplicitlyUnwrappedDisjunctionChoice,
-    /// \brief A result of an expression involving dynamic lookup.
+    /// A result of an expression involving dynamic lookup.
     DynamicLookupResult,
-    /// \brief The desired contextual type passed in to the constraint system.
+    /// The desired contextual type passed in to the constraint system.
     ContextualType,
   };
 
-  /// \brief Determine the number of numeric values used for the given path
+  /// Determine the number of numeric values used for the given path
   /// element kind.
   static unsigned numNumericValuesInPathElement(PathElementKind kind) {
     switch (kind) {
@@ -227,11 +227,11 @@
     llvm_unreachable("Unhandled PathElementKind in switch.");
   }
 
-  /// \brief One element in the path of a locator, which can include both
+  /// One element in the path of a locator, which can include both
   /// a kind (PathElementKind) and a value used to describe specific
   /// kinds further (e.g., the position of a tuple element).
   class PathElement {
-    /// \brief Describes the kind of data stored here.
+    /// Describes the kind of data stored here.
     enum StoredKind : unsigned char {
       StoredGenericParameter,
       StoredRequirement,
@@ -239,7 +239,7 @@
       StoredKindAndValue
     };
 
-    /// \brief The actual storage for the path element, which involves both a
+    /// The actual storage for the path element, which involves both a
     /// kind and (potentially) a value.
     ///
     /// The current storage involves a two-bit "storage kind", which selects
@@ -251,16 +251,16 @@
     /// \note The "storage kind" is stored in the  \c storedKind field.
     uint64_t storage : 62;
 
-    /// \brief The kind of value stored in \c storage. Valid values are those
+    /// The kind of value stored in \c storage. Valid values are those
     /// from the StoredKind enum.
     uint64_t storedKind : 2;
 
-    /// \brief Encode a path element kind and a value into the storage format.
+    /// Encode a path element kind and a value into the storage format.
     static uint64_t encodeStorage(PathElementKind kind, unsigned value) {
       return ((uint64_t)value << 8) | kind;
     }
 
-    /// \brief Decode a storage value into path element kind and value.
+    /// Decode a storage value into path element kind and value.
     static std::pair<PathElementKind, unsigned>
     decodeStorage(uint64_t storage) {
       return { (PathElementKind)((unsigned)storage & 0xFF), storage >> 8 };
@@ -310,13 +310,13 @@
               (kind == Witness && getWitness() == decl)));
     }
 
-    /// \brief Retrieve a path element for a tuple element referred to by
+    /// Retrieve a path element for a tuple element referred to by
     /// its position.
     static PathElement getTupleElement(unsigned position) {
       return PathElement(TupleElement, position);
     }
 
-    /// \brief Retrieve a path element for a tuple element referred to by
+    /// Retrieve a path element for a tuple element referred to by
     /// its name.
     static PathElement getNamedTupleElement(unsigned position) {
       return PathElement(NamedTupleElement, position);
@@ -328,7 +328,7 @@
       return PathElement(ApplyArgToParam, argIdx, paramIdx);
     }
 
-    /// \brief Retrieve a path element for a generic argument referred to by
+    /// Retrieve a path element for a generic argument referred to by
     /// its position.
     static PathElement getGenericArgument(unsigned position) {
       return PathElement(GenericArgument, position);
@@ -350,7 +350,7 @@
                          static_cast<unsigned>(kind));
     }
 
-    /// \brief Retrieve the kind of path element.
+    /// Retrieve the kind of path element.
     PathElementKind getKind() const {
       switch (static_cast<StoredKind>(storedKind)) {
       case StoredGenericParameter:
@@ -369,7 +369,7 @@
       llvm_unreachable("Unhandled StoredKind in switch.");
     }
 
-    /// \brief Retrieve the value associated with this path element,
+    /// Retrieve the value associated with this path element,
     /// if it has one.
     unsigned getValue() const {
       unsigned numValues = numNumericValuesInPathElement(getKind());
@@ -383,7 +383,7 @@
       return value >> 16;
     }
 
-    /// \brief Retrieve the second value associated with this path element,
+    /// Retrieve the second value associated with this path element,
     /// if it has one.
     unsigned getValue2() const {
       unsigned numValues = numNumericValuesInPathElement(getKind());
@@ -400,7 +400,7 @@
       return reinterpret_cast<ValueDecl *>(storage << 2);
     }
 
-    /// \brief Retrieve the actual archetype for a generic parameter path
+    /// Retrieve the actual archetype for a generic parameter path
     /// element.
     GenericTypeParamType *getGenericParameter() const {
       assert(getKind() == GenericParameter &&
@@ -415,7 +415,7 @@
       return reinterpret_cast<ValueDecl *>(storage << 2);
     }
 
-    /// \brief Return the summary flags for this particular element.
+    /// Return the summary flags for this particular element.
     unsigned getNewSummaryFlags() const {
       return getSummaryFlagsForPathElement(getKind());
     }
@@ -428,10 +428,10 @@
     return flags;
   }
 
-  /// \brief Retrieve the expression that anchors this locator.
+  /// Retrieve the expression that anchors this locator.
   Expr *getAnchor() const { return anchor; }
   
-  /// \brief Retrieve the path that extends from the anchor to a specific
+  /// Retrieve the path that extends from the anchor to a specific
   /// subcomponent.
   ArrayRef<PathElement> getPath() const {
     // FIXME: Alignment.
@@ -441,22 +441,22 @@
 
   unsigned getSummaryFlags() const { return summaryFlags; }
 
-  /// \brief Determines whether this locator is part of a function
+  /// Determines whether this locator is part of a function
   /// conversion.
   bool isFunctionConversion() const {
     return (getSummaryFlags() & IsFunctionConversion);
   }
 
-  /// \brief Produce a profile of this locator, for use in a folding set.
+  /// Produce a profile of this locator, for use in a folding set.
   static void Profile(llvm::FoldingSetNodeID &id, Expr *anchor,
                       ArrayRef<PathElement> path);
   
-  /// \brief Produce a profile of this locator, for use in a folding set.
+  /// Produce a profile of this locator, for use in a folding set.
   void Profile(llvm::FoldingSetNodeID &id) {
     Profile(id, anchor, getPath());
   }
   
-  /// \brief Produce a debugging dump of this locator.
+  /// Produce a debugging dump of this locator.
   LLVM_ATTRIBUTE_DEPRECATED(
       void dump(SourceManager *SM) LLVM_ATTRIBUTE_USED,
       "only for use within the debugger");
@@ -467,7 +467,7 @@
   void dump(SourceManager *SM, raw_ostream &OS) LLVM_ATTRIBUTE_USED;
 
 private:
-  /// \brief Initialize a constraint locator with an anchor and a path.
+  /// Initialize a constraint locator with an anchor and a path.
   ConstraintLocator(Expr *anchor, ArrayRef<PathElement> path,
                     unsigned flags)
     : anchor(anchor), numPathElements(path.size()), summaryFlags(flags)
@@ -477,7 +477,7 @@
               reinterpret_cast<PathElement *>(this + 1));
   }
 
-  /// \brief Create a new locator from an anchor and an array of path
+  /// Create a new locator from an anchor and an array of path
   /// elements.
   ///
   /// Note that this routine only handles the allocation and initialization
@@ -494,15 +494,15 @@
     return new (mem) ConstraintLocator(anchor, path, flags);
   }
 
-  /// \brief The expression at which this locator is anchored.
+  /// The expression at which this locator is anchored.
   Expr *anchor;
 
-  /// \brief The number of path elements in this locator.
+  /// The number of path elements in this locator.
   ///
   /// The actual path elements are stored after the locator.
   unsigned numPathElements : 24;
 
-  /// \brief A set of flags summarizing interesting properties of the path.
+  /// A set of flags summarizing interesting properties of the path.
   unsigned summaryFlags : 7;
   
   friend class ConstraintSystem;
@@ -510,21 +510,21 @@
 
 using LocatorPathElt = ConstraintLocator::PathElement;
 
-/// \brief A simple stack-only builder object that constructs a
+/// A simple stack-only builder object that constructs a
 /// constraint locator without allocating memory.
 ///
 /// Use this object to build a path when passing components down the
 /// stack, e.g., when recursively breaking apart types as in \c matchTypes().
 class ConstraintLocatorBuilder {
-  /// \brief The constraint locator that this builder extends or the
+  /// The constraint locator that this builder extends or the
   /// previous builder in the chain.
   llvm::PointerUnion<ConstraintLocator *, ConstraintLocatorBuilder *>
     previous;
 
-  /// \brief The current path element, if there is one.
+  /// The current path element, if there is one.
   Optional<LocatorPathElt> element;
 
-  /// \brief The current set of flags.
+  /// The current set of flags.
   unsigned summaryFlags;
 
   ConstraintLocatorBuilder(llvm::PointerUnion<ConstraintLocator *,
@@ -539,7 +539,7 @@
     : previous(locator), element(),
       summaryFlags(locator ? locator->getSummaryFlags() : 0) { }
 
-  /// \brief Retrieve a new path with the given path element added to it.
+  /// Retrieve a new path with the given path element added to it.
   ConstraintLocatorBuilder withPathElement(LocatorPathElt newElt) {
     unsigned newFlags = summaryFlags | newElt.getNewSummaryFlags();
     if (!element)
@@ -548,12 +548,12 @@
     return ConstraintLocatorBuilder(this, newElt, newFlags);
   }
 
-  /// \brief Determine whether this builder has an empty path.
+  /// Determine whether this builder has an empty path.
   bool hasEmptyPath() const {
     return !element;
   }
 
-  /// \brief Return the set of flags that summarize this path.
+  /// Return the set of flags that summarize this path.
   unsigned getSummaryFlags() const {
     return summaryFlags;
   }
@@ -562,7 +562,7 @@
     return (getSummaryFlags() & ConstraintLocator::IsFunctionConversion);
   }
 
-  /// \brief Retrieve the base constraint locator, on which this builder's
+  /// Retrieve the base constraint locator, on which this builder's
   /// path is based.
   ConstraintLocator *getBaseLocator() const {
     for (auto prev = this;
@@ -586,7 +586,7 @@
     return nullptr;
   }
 
-  /// \brief Retrieve the components of the complete locator, which includes
+  /// Retrieve the components of the complete locator, which includes
   /// the anchor expression and the path.
   Expr *getLocatorParts(SmallVectorImpl<LocatorPathElt> &path) const {
     for (auto prev = this;
diff --git a/lib/Sema/ConstraintSystem.cpp b/lib/Sema/ConstraintSystem.cpp
index 7ec35af..fd689a8 100644
--- a/lib/Sema/ConstraintSystem.cpp
+++ b/lib/Sema/ConstraintSystem.cpp
@@ -2189,7 +2189,7 @@
   return diagnosed;
 }
 
-/// \brief Determine the number of distinct overload choices in the
+/// Determine the number of distinct overload choices in the
 /// provided set.
 static unsigned countDistinctOverloads(ArrayRef<OverloadChoice> choices) {
   llvm::SmallPtrSet<void *, 4> uniqueChoices;
@@ -2201,7 +2201,7 @@
   return result;
 }
 
-/// \brief Determine the name of the overload in a set of overload choices.
+/// Determine the name of the overload in a set of overload choices.
 static DeclName getOverloadChoiceName(ArrayRef<OverloadChoice> choices) {
   DeclName name;
   for (auto choice : choices) {
diff --git a/lib/Sema/ConstraintSystem.h b/lib/Sema/ConstraintSystem.h
index ba16bc6..f7f3a8a 100644
--- a/lib/Sema/ConstraintSystem.h
+++ b/lib/Sema/ConstraintSystem.h
@@ -58,7 +58,7 @@
 
 } // end namespace swift
 
-/// \brief Allocate memory within the given constraint system.
+/// Allocate memory within the given constraint system.
 void *operator new(size_t bytes, swift::constraints::ConstraintSystem& cs,
                    size_t alignment = 8);
 
@@ -66,26 +66,26 @@
 
 namespace constraints {
 
-/// \brief A handle that holds the saved state of a type variable, which
+/// A handle that holds the saved state of a type variable, which
 /// can be restored.
 class SavedTypeVariableBinding {
-  /// \brief The type variable and type variable options.
+  /// The type variable and type variable options.
   llvm::PointerIntPair<TypeVariableType *, 3> TypeVarAndOptions;
   
-  /// \brief The parent or fixed type.
+  /// The parent or fixed type.
   llvm::PointerUnion<TypeVariableType *, TypeBase *> ParentOrFixed;
 
 public:
   explicit SavedTypeVariableBinding(TypeVariableType *typeVar);
 
-  /// \brief Restore the state of the type variable to the saved state.
+  /// Restore the state of the type variable to the saved state.
   void restore();
 
   TypeVariableType *getTypeVariable() { return TypeVarAndOptions.getPointer(); }
   unsigned getOptions() { return TypeVarAndOptions.getInt(); }
 };
 
-/// \brief A set of saved type variable bindings.
+/// A set of saved type variable bindings.
 using SavedTypeVariableBindings = SmallVector<SavedTypeVariableBinding, 16>;
 
 class ConstraintLocator;
@@ -169,7 +169,7 @@
   TVO_PrefersSubtypeBinding = 0x04
 };
 
-/// \brief The implementation object for a type variable used within the
+/// The implementation object for a type variable used within the
 /// constraint-solving type checker.
 ///
 /// The implementation object for a type variable contains information about
@@ -177,10 +177,10 @@
 /// to, what specific types it might be and, eventually, the fixed type to
 /// which it is assigned.
 class TypeVariableType::Implementation {
-  /// \brief The locator that describes where this type variable was generated.
+  /// The locator that describes where this type variable was generated.
   constraints::ConstraintLocator *locator;
 
-  /// \brief Either the parent of this type variable within an equivalence
+  /// Either the parent of this type variable within an equivalence
   /// class of type variables, or the fixed type to which this type variable
   /// type is bound.
   llvm::PointerUnion<TypeVariableType *, TypeBase *> ParentOrFixed;
@@ -191,12 +191,12 @@
   friend class constraints::SavedTypeVariableBinding;
 
 public:
-  /// \brief Retrieve the type variable associated with this implementation.
+  /// Retrieve the type variable associated with this implementation.
   TypeVariableType *getTypeVariable() {
     return reinterpret_cast<TypeVariableType *>(this) - 1;
   }
 
-  /// \brief Retrieve the type variable associated with this implementation.
+  /// Retrieve the type variable associated with this implementation.
   const TypeVariableType *getTypeVariable() const {
     return reinterpret_cast<const TypeVariableType *>(this) - 1;
   }
@@ -207,7 +207,7 @@
     getTypeVariable()->Bits.TypeVariableType.Options = options;
   }
 
-  /// \brief Retrieve the unique ID corresponding to this type variable.
+  /// Retrieve the unique ID corresponding to this type variable.
   unsigned getID() const { return getTypeVariable()->getID(); }
 
   unsigned getRawOptions() const {
@@ -256,7 +256,7 @@
     getTypeVariable()->Bits.TypeVariableType.GraphIndex = newIndex;
   }
   
-  /// \brief Check whether this type variable either has a representative that
+  /// Check whether this type variable either has a representative that
   /// is not itself or has a fixed type binding.
   bool hasRepresentativeOrFixed() const {
     // If we have a fixed type, we're done.
@@ -268,21 +268,21 @@
     return ParentOrFixed.get<TypeVariableType *>() != getTypeVariable();
   }
 
-  /// \brief Record the current type-variable binding.
+  /// Record the current type-variable binding.
   void recordBinding(constraints::SavedTypeVariableBindings &record) {
     record.push_back(constraints::SavedTypeVariableBinding(getTypeVariable()));
   }
 
-  /// \brief Retrieve the locator describing where this type variable was
+  /// Retrieve the locator describing where this type variable was
   /// created.
   constraints::ConstraintLocator *getLocator() const {
     return locator;
   }
 
-  /// \brief Retrieve the generic parameter opened by this type variable.
+  /// Retrieve the generic parameter opened by this type variable.
   GenericTypeParamType *getGenericParameter() const;
 
-  /// \brief Retrieve the representative of the equivalence class to which this
+  /// Retrieve the representative of the equivalence class to which this
   /// type variable belongs.
   ///
   /// \param record The record of changes made by retrieving the representative,
@@ -324,7 +324,7 @@
     return result;
   }
 
-  /// \brief Merge the equivalence class of this type variable with the
+  /// Merge the equivalence class of this type variable with the
   /// equivalence class of another type variable.
   ///
   /// \param other The type variable to merge with.
@@ -351,7 +351,7 @@
     }
   }
 
-  /// \brief Retrieve the fixed type that corresponds to this type variable,
+  /// Retrieve the fixed type that corresponds to this type variable,
   /// if there is one.
   ///
   /// \returns the fixed type associated with this type variable, or a null
@@ -369,7 +369,7 @@
     return repImpl.ParentOrFixed.dyn_cast<TypeBase *>();
   }
 
-  /// \brief Assign a fixed type to this equivalence class.
+  /// Assign a fixed type to this equivalence class.
   void assignFixedType(Type type,
                        constraints::SavedTypeVariableBindings *record) {
     assert((!getFixedType(0) || getFixedType(0)->isEqual(type)) &&
@@ -392,7 +392,7 @@
     }
   }
 
-  /// \brief Print the type variable to the given output stream.
+  /// Print the type variable to the given output stream.
   void print(llvm::raw_ostream &OS);
 };
 
@@ -400,18 +400,18 @@
 
 struct ResolvedOverloadSetListItem;
 
-/// \brief The result of comparing two constraint systems that are a solutions
+/// The result of comparing two constraint systems that are a solutions
 /// to the given set of constraints.
 enum class SolutionCompareResult {
-  /// \brief The two solutions are incomparable, because, e.g., because one
+  /// The two solutions are incomparable, because, e.g., because one
   /// solution has some better decisions and some worse decisions than the
   /// other.
   Incomparable,
-  /// \brief The two solutions are identical.
+  /// The two solutions are identical.
   Identical,
-  /// \brief The first solution is better than the second.
+  /// The first solution is better than the second.
   Better,
-  /// \brief The second solution is better than the first.
+  /// The second solution is better than the first.
   Worse
 };
 
@@ -549,21 +549,21 @@
 using OpenedTypeMap =
     llvm::DenseMap<GenericTypeParamType *, TypeVariableType *>;
 
-/// \brief A complete solution to a constraint system.
+/// A complete solution to a constraint system.
 ///
 /// A solution to a constraint system consists of type variable bindings to
 /// concrete types for every type variable that is used in the constraint
 /// system along with a set of mappings from each constraint locator
 /// involving an overload set to the selected overload.
 class Solution {
-  /// \brief The constraint system this solution solves.
+  /// The constraint system this solution solves.
   ConstraintSystem *constraintSystem;
 
-  /// \brief The fixed score for this solution.
+  /// The fixed score for this solution.
   Score FixedScore;
 
 public:
-  /// \brief Create a solution for the given constraint system.
+  /// Create a solution for the given constraint system.
   Solution(ConstraintSystem &cs, const Score &score)
     : constraintSystem(&cs), FixedScore(score) {}
 
@@ -576,13 +576,13 @@
 
   size_t getTotalMemory() const;
 
-  /// \brief Retrieve the constraint system that this solution solves.
+  /// Retrieve the constraint system that this solution solves.
   ConstraintSystem &getConstraintSystem() const { return *constraintSystem; }
 
-  /// \brief The set of type bindings.
+  /// The set of type bindings.
   llvm::SmallDenseMap<TypeVariableType *, Type> typeBindings;
   
-  /// \brief The set of overload choices along with their types.
+  /// The set of overload choices along with their types.
   llvm::SmallDenseMap<ConstraintLocator *, SelectedOverload> overloadChoices;
 
   /// The set of constraint restrictions used to arrive at this restriction,
@@ -611,11 +611,11 @@
   llvm::SmallVector<std::pair<ConstraintLocator *, ProtocolConformanceRef>, 8>
       Conformances;
 
-  /// \brief Simplify the given type by substituting all occurrences of
+  /// Simplify the given type by substituting all occurrences of
   /// type variables for their fixed types.
   Type simplifyType(Type type) const;
 
-  /// \brief Coerce the given expression to the given type.
+  /// Coerce the given expression to the given type.
   ///
   /// This operation cannot fail.
   ///
@@ -636,7 +636,7 @@
                      bool ignoreTopLevelInjection = false,
                      Optional<Pattern*> typeFromPattern = None) const;
 
-  /// \brief Convert the given expression to a logic value.
+  /// Convert the given expression to a logic value.
   ///
   /// This operation cannot fail.
   ///
@@ -649,7 +649,7 @@
   Expr *convertBooleanTypeToBuiltinI1(Expr *expr,
                                       ConstraintLocator *locator) const;
 
-  /// \brief Convert the given optional-producing expression to a Bool
+  /// Convert the given optional-producing expression to a Bool
   /// indicating whether the optional has a value.
   ///
   /// This operation cannot fail.
@@ -679,26 +679,26 @@
     return DisjunctionChoices.find(locator)->second;
   }
 
-  /// \brief Retrieve the fixed score of this solution
+  /// Retrieve the fixed score of this solution
   const Score &getFixedScore() const { return FixedScore; }
 
-  /// \brief Retrieve the fixed score of this solution
+  /// Retrieve the fixed score of this solution
   Score &getFixedScore() { return FixedScore; }
 
-  /// \brief Retrieve the fixed type for the given type variable.
+  /// Retrieve the fixed type for the given type variable.
   Type getFixedType(TypeVariableType *typeVar) const;
 
   /// Try to resolve the given locator to a declaration within this
   /// solution.
   ConcreteDeclRef resolveLocatorToDecl(ConstraintLocator *locator) const;
 
-  /// \brief Retrieve the overload choice associated with the given
+  /// Retrieve the overload choice associated with the given
   /// locator.
   SelectedOverload getOverloadChoice(ConstraintLocator *locator) const {
     return *getOverloadChoiceIfAvailable(locator);
   }
 
-  /// \brief Retrieve the overload choice associated with the given
+  /// Retrieve the overload choice associated with the given
   /// locator.
   Optional<SelectedOverload>
   getOverloadChoiceIfAvailable(ConstraintLocator *locator) const {
@@ -722,41 +722,41 @@
       void dump() const LLVM_ATTRIBUTE_USED,
       "only for use within the debugger");
 
-  /// \brief Dump this solution.
+  /// Dump this solution.
   void dump(raw_ostream &OS) const LLVM_ATTRIBUTE_USED;
 };
 
-/// \brief Describes the differences between several solutions to the same
+/// Describes the differences between several solutions to the same
 /// constraint system.
 class SolutionDiff {
 public:
-  /// \brief A difference between two overloads.
+  /// A difference between two overloads.
   struct OverloadDiff {
-    /// \brief The locator that describes where the overload comes from.
+    /// The locator that describes where the overload comes from.
     ConstraintLocator *locator;
 
-    /// \brief The choices that each solution made.
+    /// The choices that each solution made.
     SmallVector<OverloadChoice, 2> choices;
   };
 
-  /// \brief A difference between two type variable bindings.
+  /// A difference between two type variable bindings.
   struct TypeBindingDiff {
-    /// \brief The type variable.
+    /// The type variable.
     TypeVariableType *typeVar;
 
-    /// \brief The bindings that each solution made.
+    /// The bindings that each solution made.
     SmallVector<Type, 2> bindings;
   };
 
-  /// \brief The differences between the overload choices between the
+  /// The differences between the overload choices between the
   /// solutions.
   SmallVector<OverloadDiff, 4> overloads;
 
-  /// \brief The differences between the type variable bindings of the
+  /// The differences between the type variable bindings of the
   /// solutions.
   SmallVector<TypeBindingDiff, 4> typeBindings;
 
-  /// \brief Compute the differences between the given set of solutions.
+  /// Compute the differences between the given set of solutions.
   ///
   /// \param solutions The set of solutions.
   explicit SolutionDiff(ArrayRef<Solution> solutions);
@@ -911,7 +911,7 @@
   
 };
 
-/// \brief Stores the required methods for @dynamicCallable types.
+/// Stores the required methods for @dynamicCallable types.
 struct DynamicCallableMethods {
   llvm::DenseSet<FuncDecl *> argumentsMethods;
   llvm::DenseSet<FuncDecl *> keywordArgumentsMethods;
@@ -924,7 +924,7 @@
     keywordArgumentsMethods.insert(method);
   }
 
-  /// \brief Returns true if type defines either of the @dynamicCallable
+  /// Returns true if type defines either of the @dynamicCallable
   /// required methods. Returns false iff type does not satisfy @dynamicCallable
   /// requirements.
   bool isValid() const {
@@ -932,7 +932,7 @@
   }
 };
 
-/// \brief Describes a system of constraints on type variables, the
+/// Describes a system of constraints on type variables, the
 /// solution of which assigns concrete types to each of the type variables.
 /// Constraint systems are typically generated given an (untyped) expression.
 class ConstraintSystem {
@@ -967,22 +967,22 @@
   /// The original CS if this CS was created as a simplification of another CS
   ConstraintSystem *baseCS = nullptr;
 
-  /// \brief The total number of disjunctions created.
+  /// The total number of disjunctions created.
   unsigned CountDisjunctions = 0;
 
 private:
 
-  /// \brief Allocator used for all of the related constraint systems.
+  /// Allocator used for all of the related constraint systems.
   llvm::BumpPtrAllocator Allocator;
 
-  /// \brief Arena used for memory management of constraint-checker-related
+  /// Arena used for memory management of constraint-checker-related
   /// allocations.
   ConstraintCheckerArenaRAII Arena;
 
-  /// \brief Counter for type variables introduced.
+  /// Counter for type variables introduced.
   unsigned TypeCounter = 0;
 
-  /// \brief The number of scopes created so far during the solution
+  /// The number of scopes created so far during the solution
   /// of this constraint system.
   ///
   /// This is a measure of complexity of the solution space. A new
@@ -994,7 +994,7 @@
   /// explored.
   size_t MaxMemory = 0;
 
-  /// \brief Cached member lookups.
+  /// Cached member lookups.
   llvm::DenseMap<std::pair<Type, DeclName>, Optional<LookupResult>>
     MemberLookups;
 
@@ -1002,11 +1002,11 @@
   static const unsigned NumAlternativeLiteralTypes = 13;
   Optional<ArrayRef<Type>> AlternativeLiteralTypes[NumAlternativeLiteralTypes];
 
-  /// \brief Folding set containing all of the locators used in this
+  /// Folding set containing all of the locators used in this
   /// constraint system.
   llvm::FoldingSetVector<ConstraintLocator> ConstraintLocators;
 
-  /// \brief The overload sets that have been resolved along the current path.
+  /// The overload sets that have been resolved along the current path.
   ResolvedOverloadSetListItem *resolvedOverloadSets = nullptr;
 
   /// The current fixed score for this constraint system and the (partial)
@@ -1039,7 +1039,7 @@
   Expr *contextualTypeNode = nullptr;
   ContextualTypePurpose contextualTypePurpose = CTP_Unused;
   
-  /// \brief The set of constraint restrictions used to reach the
+  /// The set of constraint restrictions used to reach the
   /// current constraint system.
   ///
   /// Constraint restrictions help describe which path the solver took when
@@ -1052,7 +1052,7 @@
   /// The set of fixes applied to make the solution work.
   llvm::SmallVector<ConstraintFix *, 4> Fixes;
 
-  /// \brief The set of remembered disjunction choices used to reach
+  /// The set of remembered disjunction choices used to reach
   /// the current constraint system.
   SmallVector<std::pair<ConstraintLocator*, unsigned>, 32>
       DisjunctionChoices;
@@ -1093,7 +1093,7 @@
   llvm::DenseMap<CanType, bool> DynamicMemberLookupCache;
 
 private:
-  /// \brief Describe the candidate expression for partial solving.
+  /// Describe the candidate expression for partial solving.
   /// This class used by shrink & solve methods which apply
   /// variation of directional path consistency algorithm in attempt
   /// to reduce scopes of the overload sets (disjunctions) in the system.
@@ -1115,10 +1115,10 @@
         : E(expr), TC(cs.TC), DC(cs.DC), Allocator(cs.Allocator), BaseCS(cs),
           CT(ct), CTP(ctp) {}
 
-    /// \brief Return underlying expression.
+    /// Return underlying expression.
     Expr *getExpr() const { return E; }
 
-    /// \brief Try to solve this candidate sub-expression
+    /// Try to solve this candidate sub-expression
     /// and re-write it's OSR domains afterwards.
     ///
     /// \param shrunkExprs The set of expressions which
@@ -1127,7 +1127,7 @@
     /// \returns true on solver failure, false otherwise.
     bool solve(llvm::SmallDenseSet<OverloadSetRefExpr *> &shrunkExprs);
 
-    /// \brief Apply solutions found by solver as reduced OSR sets for
+    /// Apply solutions found by solver as reduced OSR sets for
     /// for current and all of it's sub-expressions.
     ///
     /// \param solutions The solutions found by running solver on the
@@ -1169,7 +1169,7 @@
     }
   };
 
-  /// \brief Describes the current solver state.
+  /// Describes the current solver state.
   struct SolverState {
     SolverState(Expr *const expr, ConstraintSystem &cs,
                 FreeTypeVariableBinding allowFreeTypeVariables);
@@ -1187,16 +1187,16 @@
     /// system itself.
     bool OldDebugConstraintSolver;
 
-    /// \brief Depth of the solution stack.
+    /// Depth of the solution stack.
     unsigned depth = 0;
 
-    /// \brief Maximum depth reached so far in exploring solutions.
+    /// Maximum depth reached so far in exploring solutions.
     unsigned maxDepth = 0;
 
-    /// \brief Whether to record failures or not.
+    /// Whether to record failures or not.
     bool recordFixes = false;
 
-    /// \brief The set of type variable bindings that have changed while
+    /// The set of type variable bindings that have changed while
     /// processing this constraint system.
     SavedTypeVariableBindings savedBindings;
 
@@ -1213,19 +1213,19 @@
     #define CS_STATISTIC(Name, Description) unsigned Name = 0;
     #include "ConstraintSolverStats.def"
 
-    /// \brief Check whether there are any retired constraints present.
+    /// Check whether there are any retired constraints present.
     bool hasRetiredConstraints() const {
       return !retiredConstraints.empty();
     }
 
-    /// \brief Mark given constraint as retired along current solver path.
+    /// Mark given constraint as retired along current solver path.
     ///
     /// \param constraint The constraint to retire temporarily.
     void retireConstraint(Constraint *constraint) {
       retiredConstraints.push_front(constraint);
     }
 
-    /// \brief Iterate over all of the retired constraints registered with
+    /// Iterate over all of the retired constraints registered with
     /// current solver state.
     ///
     /// \param processor The processor function to be applied to each of
@@ -1235,14 +1235,14 @@
         processor(constraint);
     }
 
-    /// \brief Add new "generated" constraint along the current solver path.
+    /// Add new "generated" constraint along the current solver path.
     ///
     /// \param constraint The newly generated constraint.
     void addGeneratedConstraint(Constraint *constraint) {
       generatedConstraints.push_back(constraint);
     }
 
-    /// \brief Erase given constraint from the list of generated constraints
+    /// Erase given constraint from the list of generated constraints
     /// along the current solver path. Note that this operation doesn't
     /// guarantee any ordering of the after it's application.
     ///
@@ -1260,7 +1260,7 @@
       }
     }
 
-    /// \brief Register given scope to be tracked by the current solver state,
+    /// Register given scope to be tracked by the current solver state,
     /// this helps to make sure that all of the retired/generated constraints
     /// are dealt with correctly when the life time of the scope ends.
     ///
@@ -1277,7 +1277,7 @@
       scopes.push_back(scopeInfo);
     }
 
-    /// \brief Restore all of the retired/generated constraints to the state
+    /// Restore all of the retired/generated constraints to the state
     /// before given scope. This is required because retired constraints have
     /// to be re-introduced to the system in order of arrival (LIFO) and list
     /// of the generated constraints has to be truncated back to the
@@ -1366,12 +1366,12 @@
       return expr;
     }
 
-    /// \brief Ignore statements.
+    /// Ignore statements.
     std::pair<bool, Stmt *> walkToStmtPre(Stmt *stmt) override {
       return { false, stmt };
     }
 
-    /// \brief Ignore declarations.
+    /// Ignore declarations.
     bool walkToDeclPre(Decl *decl) override { return false; }
   };
 
@@ -1397,12 +1397,12 @@
       return expr;
     }
 
-    /// \brief Ignore statements.
+    /// Ignore statements.
     std::pair<bool, Stmt *> walkToStmtPre(Stmt *stmt) override {
       return { false, stmt };
     }
 
-    /// \brief Ignore declarations.
+    /// Ignore declarations.
     bool walkToDeclPre(Decl *decl) override { return false; }
   };
 
@@ -1431,7 +1431,7 @@
     expr->walk(CacheExprTypes(expr, *this, excludeRoot));
   }
 
-  /// \brief The current solver state.
+  /// The current solver state.
   ///
   /// This will be non-null when we're actively solving the constraint
   /// system, and carries temporary state related to the current path
@@ -1462,7 +1462,7 @@
   void incrementLeafScopes();
 
 public:
-  /// \brief Introduces a new solver scope, which any changes to the
+  /// Introduces a new solver scope, which any changes to the
   /// solver state or constraint system are temporary and will be undone when
   /// this object is destroyed.
   ///
@@ -1470,22 +1470,22 @@
   class SolverScope {
     ConstraintSystem &cs;
 
-    /// \brief The current resolved overload set list.
+    /// The current resolved overload set list.
     ResolvedOverloadSetListItem *resolvedOverloadSets;
 
-    /// \brief The length of \c TypeVariables.
+    /// The length of \c TypeVariables.
     unsigned numTypeVariables;
 
-    /// \brief The length of \c SavedBindings.
+    /// The length of \c SavedBindings.
     unsigned numSavedBindings;
 
-    /// \brief The length of \c ConstraintRestrictions.
+    /// The length of \c ConstraintRestrictions.
     unsigned numConstraintRestrictions;
 
-    /// \brief The length of \c Fixes.
+    /// The length of \c Fixes.
     unsigned numFixes;
 
-    /// \brief The length of \c DisjunctionChoices.
+    /// The length of \c DisjunctionChoices.
     unsigned numDisjunctionChoices;
 
     /// The length of \c OpenedTypes.
@@ -1528,28 +1528,28 @@
   /// Retrieve the constraint graph associated with this constraint system.
   ConstraintGraph &getConstraintGraph() const { return CG; }
 
-  /// \brief Retrieve the AST context.
+  /// Retrieve the AST context.
   ASTContext &getASTContext() const { return TC.Context; }
 
-  /// \brief Determine whether this constraint system has any free type
+  /// Determine whether this constraint system has any free type
   /// variables.
   bool hasFreeTypeVariables();
 
 private:
-  /// \brief Indicates if the constraint system should retain all of the
+  /// Indicates if the constraint system should retain all of the
   /// solutions it has deduced regardless of their score.
   bool retainAllSolutions() const {
     return Options.contains(
         ConstraintSystemFlags::ReturnAllDiscoveredSolutions);
   }
 
-  /// \brief Finalize this constraint system; we're done attempting to solve
+  /// Finalize this constraint system; we're done attempting to solve
   /// it.
   ///
   /// \returns the solution.
   Solution finalize();
 
-  /// \brief Apply the given solution to the current constraint system.
+  /// Apply the given solution to the current constraint system.
   ///
   /// This operation is used to take a solution computed based on some
   /// subset of the constraints and then apply it back to the
@@ -1560,7 +1560,7 @@
   /// able to emit an error message, or false if none of the fixits worked out.
   bool applySolutionFixes(Expr *E, const Solution &solution);
 
-  /// \brief If there is more than one viable solution,
+  /// If there is more than one viable solution,
   /// attempt to pick the best solution and remove all of the rest.
   ///
   /// \param solutions The set of solutions to filter.
@@ -1582,14 +1582,14 @@
     }
   }
 
-  /// \brief Restore the type variable bindings to what they were before
+  /// Restore the type variable bindings to what they were before
   /// we attempted to solve this constraint system.
   ///
   /// \param numBindings The number of bindings to restore, from the end of
   /// the saved-binding stack.
   void restoreTypeVariableBindings(unsigned numBindings);
 
-  /// \brief Retrieve the set of saved type variable bindings, if available.
+  /// Retrieve the set of saved type variable bindings, if available.
   ///
   /// \returns null when we aren't currently solving the system.
   SavedTypeVariableBindings *getSavedBindings() const {
@@ -1599,12 +1599,12 @@
   /// Add a new type variable that was already created.
   void addTypeVariable(TypeVariableType *typeVar);
   
-  /// \brief Add a constraint from the subscript base to the root of the key
+  /// Add a constraint from the subscript base to the root of the key
   /// path literal to the constraint system.
   void addKeyPathApplicationRootConstraint(Type root, ConstraintLocatorBuilder locator);
 
 public:
-  /// \brief Lookup for a member with the given name in the given base type.
+  /// Lookup for a member with the given name in the given base type.
   ///
   /// This routine caches the results of member lookups in the top constraint
   /// system, to avoid.
@@ -1620,7 +1620,7 @@
   /// for a given literal protocol kind.
   ArrayRef<Type> getAlternativeLiteralTypes(KnownProtocolKind kind);
 
-  /// \brief Create a new type variable.
+  /// Create a new type variable.
   TypeVariableType *createTypeVariable(ConstraintLocator *locator,
                                        unsigned options = 0);
 
@@ -1746,20 +1746,20 @@
     return contextualTypePurpose;
   }
   
-  /// \brief Retrieve the constraint locator for the given anchor and
+  /// Retrieve the constraint locator for the given anchor and
   /// path, uniqued.
   ConstraintLocator *
   getConstraintLocator(Expr *anchor,
                        ArrayRef<ConstraintLocator::PathElement> path,
                        unsigned summaryFlags);
 
-  /// \brief Retrieve the constraint locator for the given anchor and
+  /// Retrieve the constraint locator for the given anchor and
   /// an empty path, uniqued.
   ConstraintLocator *getConstraintLocator(Expr *anchor) {
     return getConstraintLocator(anchor, {}, 0);
   }
 
-  /// \brief Retrieve the constraint locator for the given anchor and
+  /// Retrieve the constraint locator for the given anchor and
   /// path element.
   ConstraintLocator *
   getConstraintLocator(Expr *anchor, ConstraintLocator::PathElement pathElt) {
@@ -1767,7 +1767,7 @@
                                 pathElt.getNewSummaryFlags());
   }
 
-  /// \brief Extend the given constraint locator with a path element.
+  /// Extend the given constraint locator with a path element.
   ConstraintLocator *
   getConstraintLocator(ConstraintLocator *locator,
                        ConstraintLocator::PathElement pathElt) {
@@ -1775,14 +1775,14 @@
                                   .withPathElement(pathElt));
   }
 
-  /// \brief Retrieve the constraint locator described by the given
+  /// Retrieve the constraint locator described by the given
   /// builder.
   ConstraintLocator *
   getConstraintLocator(const ConstraintLocatorBuilder &builder);
 
 public:
 
-  /// \brief Whether we should attempt to fix problems.
+  /// Whether we should attempt to fix problems.
   bool shouldAttemptFixes() const {
     if (!(Options & ConstraintSystemFlags::AllowFixes))
       return false;
@@ -1798,7 +1798,7 @@
     return Options.contains(ConstraintSystemFlags::ReusePrecheckedType);
   }
 
-  /// \brief Log and record the application of the fix. Return true iff any
+  /// Log and record the application of the fix. Return true iff any
   /// subsequent solution would be worse than the best known solution.
   bool recordFix(ConstraintFix *fix);
 
@@ -1806,7 +1806,7 @@
   /// constraint system, return the decl that it references.
   ValueDecl *findResolvedMemberRef(ConstraintLocator *locator);
 
-  /// \brief Try to salvage the constraint system by applying (speculative)
+  /// Try to salvage the constraint system by applying (speculative)
   /// fixes to the underlying expression.
   ///
   /// \param viable the set of viable solutions produced by the initial
@@ -1819,7 +1819,7 @@
   /// diagnostic and returns true.
   bool salvage(SmallVectorImpl<Solution> &viable, Expr *expr);
   
-  /// \brief Mine the active and inactive constraints in the constraint
+  /// Mine the active and inactive constraints in the constraint
   /// system to generate a plausible diagnosis of why the system could not be
   /// solved.
   ///
@@ -1833,28 +1833,28 @@
   bool diagnoseAmbiguity(Expr *expr, ArrayRef<Solution> solutions);
   bool diagnoseAmbiguityWithFixes(Expr *expr, ArrayRef<Solution> solutions);
 
-  /// \brief Give the deprecation warning for referring to a global function
+  /// Give the deprecation warning for referring to a global function
   /// when there's a method from a conditional conformance in a smaller/closer
   /// scope.
   void
   diagnoseDeprecatedConditionalConformanceOuterAccess(UnresolvedDotExpr *UDE,
                                                       ValueDecl *choice);
 
-  /// \brief Add a constraint to the constraint system.
+  /// Add a constraint to the constraint system.
   void addConstraint(ConstraintKind kind, Type first, Type second,
                      ConstraintLocatorBuilder locator,
                      bool isFavored = false);
 
-  /// \brief Add a requirement as a constraint to the constraint system.
+  /// Add a requirement as a constraint to the constraint system.
   void addConstraint(Requirement req, ConstraintLocatorBuilder locator,
                      bool isFavored = false);
 
-  /// \brief Add a key path application constraint to the constraint system.
+  /// Add a key path application constraint to the constraint system.
   void addKeyPathApplicationConstraint(Type keypath, Type root, Type value,
                                        ConstraintLocatorBuilder locator,
                                        bool isFavored = false);
 
-  /// \brief Add a key path constraint to the constraint system.
+  /// Add a key path constraint to the constraint system.
   void addKeyPathConstraint(Type keypath, Type root, Type value,
                             ConstraintLocatorBuilder locator,
                             bool isFavored = false);
@@ -1872,7 +1872,7 @@
     resolveOverload(locator, boundTy, choice, useDC);
   }
 
-  /// \brief Add a value member constraint to the constraint system.
+  /// Add a value member constraint to the constraint system.
   void addValueMemberConstraint(Type baseTy, DeclName name, Type memberTy,
                                 DeclContext *useDC,
                                 FunctionRefKind functionRefKind,
@@ -1901,7 +1901,7 @@
     }
   }
 
-  /// \brief Add a value member constraint for an UnresolvedMemberRef
+  /// Add a value member constraint for an UnresolvedMemberRef
   /// to the constraint system.
   void addUnresolvedValueMemberConstraint(Type baseTy, DeclName name,
                                           Type memberTy, DeclContext *useDC,
@@ -1939,7 +1939,7 @@
                                        bool allowFixes,
                                        ConstraintLocatorBuilder locator);
 
-  /// \brief Add a disjunction constraint.
+  /// Add a disjunction constraint.
   void addDisjunctionConstraint(ArrayRef<Constraint *> constraints,
                                 ConstraintLocatorBuilder locator,
                                 RememberChoice_t rememberChoice = ForgetChoice,
@@ -1973,7 +1973,7 @@
     }
   }
 
-  /// \brief Add a newly-generated constraint that is known not to be solvable
+  /// Add a newly-generated constraint that is known not to be solvable
   /// right now.
   void addUnsolvedConstraint(Constraint *constraint) {
     // We couldn't solve this constraint; add it to the pile.
@@ -1987,7 +1987,7 @@
       solverState->addGeneratedConstraint(constraint);
   }
 
-  /// \brief Remove an inactive constraint from the current constraint graph.
+  /// Remove an inactive constraint from the current constraint graph.
   void removeInactiveConstraint(Constraint *constraint) {
     CG.removeConstraint(constraint);
     InactiveConstraints.erase(constraint);
@@ -2009,13 +2009,13 @@
     filterConstraints(InactiveConstraints, pred, found);
   }
 
-  /// \brief Retrieve the representative of the equivalence class containing
+  /// Retrieve the representative of the equivalence class containing
   /// this type variable.
   TypeVariableType *getRepresentative(TypeVariableType *typeVar) {
     return typeVar->getImpl().getRepresentative(getSavedBindings());
   }
 
-  /// \brief Merge the equivalence sets of the two type variables.
+  /// Merge the equivalence sets of the two type variables.
   ///
   /// Note that both \c typeVar1 and \c typeVar2 must be the
   /// representatives of their equivalence classes, and must be
@@ -2024,9 +2024,9 @@
                                TypeVariableType *typeVar2,
                                bool updateWorkList = true);
 
-  /// \brief Flags that direct type matching.
+  /// Flags that direct type matching.
   enum TypeMatchFlags {
-    /// \brief Indicates that we are in a context where we should be
+    /// Indicates that we are in a context where we should be
     /// generating constraints for any unsolvable problems.
     ///
     /// This flag is automatically introduced when type matching destructures
@@ -2041,7 +2041,7 @@
   /// Options that govern how type matching should proceed.
   using TypeMatchOptions = OptionSet<TypeMatchFlags>;
 
-  /// \brief Retrieve the fixed type corresponding to the given type variable,
+  /// Retrieve the fixed type corresponding to the given type variable,
   /// or a null type if there is no fixed type.
   Type getFixedType(TypeVariableType *typeVar) {
     return typeVar->getImpl().getFixedType(getSavedBindings());
@@ -2084,7 +2084,7 @@
   static bool typeVarOccursInType(TypeVariableType *typeVar, Type type,
                                   bool *involvesOtherTypeVariables = nullptr);
 
-  /// \brief Assign a fixed type to the given type variable.
+  /// Assign a fixed type to the given type variable.
   ///
   /// \param typeVar The type variable to bind.
   ///
@@ -2096,7 +2096,7 @@
   void assignFixedType(TypeVariableType *typeVar, Type type,
                        bool updateState = true);
 
-  /// \brief Set the TVO_MustBeMaterializable bit on all type variables
+  /// Set the TVO_MustBeMaterializable bit on all type variables
   /// necessary to ensure that the type in question is materializable in a
   /// viable solution.
   void setMustBeMaterializableRecursive(Type type);
@@ -2116,7 +2116,7 @@
   /// Determine if the type in question is one of the known collection types.
   static bool isCollectionType(Type t);
 
-  /// \brief Determine if the type in question is AnyHashable.
+  /// Determine if the type in question is AnyHashable.
   bool isAnyHashableType(Type t);
 
   /// Call Expr::isTypeReference on the given expression, using a
@@ -2157,10 +2157,10 @@
 
 public:
 
-  /// \brief Coerce the given expression to an rvalue, if it isn't already.
+  /// Coerce the given expression to an rvalue, if it isn't already.
   Expr *coerceToRValue(Expr *expr);
 
-  /// \brief "Open" the given unbound type by introducing fresh type
+  /// "Open" the given unbound type by introducing fresh type
   /// variables for generic parameters and constructing a bound generic
   /// type from these type variables.
   ///
@@ -2171,7 +2171,7 @@
                               ConstraintLocatorBuilder locator,
                               OpenedTypeMap &replacements);
 
-  /// \brief "Open" the given type by replacing any occurrences of unbound
+  /// "Open" the given type by replacing any occurrences of unbound
   /// generic types with bound generic types with fresh type variables as
   /// generic arguments.
   ///
@@ -2180,7 +2180,7 @@
   /// \returns The opened type.
   Type openUnboundGenericType(Type type, ConstraintLocatorBuilder locator);
 
-  /// \brief "Open" the given type by replacing any occurrences of generic
+  /// "Open" the given type by replacing any occurrences of generic
   /// parameter types and dependent member types with fresh type variables.
   ///
   /// \param type The type to open.
@@ -2188,7 +2188,7 @@
   /// \returns The opened type, or \c type if there are no archetypes in it.
   Type openType(Type type, OpenedTypeMap &replacements);
 
-  /// \brief "Open" the given function type.
+  /// "Open" the given function type.
   ///
   /// If the function type is non-generic, this is equivalent to calling
   /// openType(). Otherwise, it calls openGeneric() on the generic
@@ -2239,7 +2239,7 @@
          ConstraintLocatorBuilder locator,
          const OpenedTypeMap &replacements);
 
-  /// \brief Retrieve the type of a reference to the given value declaration.
+  /// Retrieve the type of a reference to the given value declaration.
   ///
   /// For references to polymorphic function types, this routine "opens up"
   /// the type by replacing each instance of an archetype with a fresh type
@@ -2272,7 +2272,7 @@
                                   const DeclRefExpr *base = nullptr,
                                   bool wantInterfaceType = false);
 
-  /// \brief Retrieve the type of a reference to the given value declaration,
+  /// Retrieve the type of a reference to the given value declaration,
   /// as a member with a base of the given type.
   ///
   /// For references to generic function types or members of generic types,
@@ -2292,14 +2292,14 @@
                           const DeclRefExpr *base = nullptr,
                           OpenedTypeMap *replacements = nullptr);
 
-  /// \brief Add a new overload set to the list of unresolved overload
+  /// Add a new overload set to the list of unresolved overload
   /// sets.
   void addOverloadSet(Type boundType, ArrayRef<OverloadChoice> choices,
                       DeclContext *useDC, ConstraintLocator *locator,
                       OverloadChoice *favored = nullptr,
                       ArrayRef<OverloadChoice> outerAlternatives = {});
 
-  /// \brief Retrieve the allocator used by this constraint system.
+  /// Retrieve the allocator used by this constraint system.
   llvm::BumpPtrAllocator &getAllocator() { return Allocator; }
 
   template <typename It>
@@ -2323,33 +2323,33 @@
     return allocateCopy(vec.begin(), vec.end());
   }
 
-  /// \brief Generate constraints for the given (unchecked) expression.
+  /// Generate constraints for the given (unchecked) expression.
   ///
   /// \returns a possibly-sanitized expression, or null if an error occurred.
   Expr *generateConstraints(Expr *E);
 
-  /// \brief Generate constraints for binding the given pattern to the
+  /// Generate constraints for binding the given pattern to the
   /// value of the given expression.
   ///
   /// \returns a possibly-sanitized initializer, or null if an error occurred.
   Type generateConstraints(Pattern *P, ConstraintLocatorBuilder locator);
 
-  /// \brief Propagate constraints in an effort to enforce local
+  /// Propagate constraints in an effort to enforce local
   /// consistency to reduce the time to solve the system.
   ///
   /// \returns true if the system is known to be inconsistent (have no
   /// solutions).
   bool propagateConstraints();
 
-  /// \brief The result of attempting to resolve a constraint or set of
+  /// The result of attempting to resolve a constraint or set of
   /// constraints.
   enum class SolutionKind : char {
-    /// \brief The constraint has been solved completely, and provides no
+    /// The constraint has been solved completely, and provides no
     /// more information.
     Solved,
-    /// \brief The constraint could not be solved at this point.
+    /// The constraint could not be solved at this point.
     Unsolved,
-    /// \brief The constraint uncovers an inconsistency in the system.
+    /// The constraint uncovers an inconsistency in the system.
     Error
   };
 
@@ -2379,14 +2379,14 @@
     TypeMatchResult(SolutionKind result) : Kind(result) {}
   };
 
-  /// \brief Subroutine of \c matchTypes(), which matches up two tuple types.
+  /// Subroutine of \c matchTypes(), which matches up two tuple types.
   ///
   /// \returns the result of performing the tuple-to-tuple conversion.
   TypeMatchResult matchTupleTypes(TupleType *tuple1, TupleType *tuple2,
                                   ConstraintKind kind, TypeMatchOptions flags,
                                   ConstraintLocatorBuilder locator);
 
-  /// \brief Subroutine of \c matchTypes(), which matches a scalar type to
+  /// Subroutine of \c matchTypes(), which matches a scalar type to
   /// a tuple type.
   ///
   /// \returns the result of performing the scalar-to-tuple conversion.
@@ -2395,24 +2395,24 @@
                                           TypeMatchOptions flags,
                                           ConstraintLocatorBuilder locator);
 
-  /// \brief Subroutine of \c matchTypes(), which matches up two function
+  /// Subroutine of \c matchTypes(), which matches up two function
   /// types.
   TypeMatchResult matchFunctionTypes(FunctionType *func1, FunctionType *func2,
                                      ConstraintKind kind, TypeMatchOptions flags,
                                      ConstraintLocatorBuilder locator);
   
-  /// \brief Subroutine of \c matchTypes(), which matches up a value to a
+  /// Subroutine of \c matchTypes(), which matches up a value to a
   /// superclass.
   TypeMatchResult matchSuperclassTypes(Type type1, Type type2,
                                        TypeMatchOptions flags,
                                        ConstraintLocatorBuilder locator);
 
-  /// \brief Subroutine of \c matchTypes(), which matches up two types that
+  /// Subroutine of \c matchTypes(), which matches up two types that
   /// refer to the same declaration via their generic arguments.
   TypeMatchResult matchDeepEqualityTypes(Type type1, Type type2,
                                          ConstraintLocatorBuilder locator);
 
-  /// \brief Subroutine of \c matchTypes(), which matches up a value to an
+  /// Subroutine of \c matchTypes(), which matches up a value to an
   /// existential type.
   ///
   /// \param kind Either ConstraintKind::SelfObjectOfProtocol or
@@ -2424,7 +2424,7 @@
                                         TypeMatchOptions flags,
                                         ConstraintLocatorBuilder locator);
 
-  /// \brief Subroutine of \c matchTypes(), used to bind a type to a
+  /// Subroutine of \c matchTypes(), used to bind a type to a
   /// type variable.
   TypeMatchResult matchTypesBindTypeVar(
       TypeVariableType *typeVar, Type type, ConstraintKind kind,
@@ -2432,7 +2432,7 @@
       llvm::function_ref<TypeMatchResult()> formUnsolvedResult);
 
 public: // FIXME: public due to statics in CSSimplify.cpp
-  /// \brief Attempt to match up types \c type1 and \c type2, which in effect
+  /// Attempt to match up types \c type1 and \c type2, which in effect
   /// is solving the given type constraint between these two types.
   ///
   /// \param type1 The first type, which is on the left of the type relation.
@@ -2554,18 +2554,18 @@
     buildDisjunctionForOptionalVsUnderlying(boundTy, type, dynamicLocator);
   }
 
-  /// \brief Resolve the given overload set to the given choice.
+  /// Resolve the given overload set to the given choice.
   void resolveOverload(ConstraintLocator *locator, Type boundType,
                        OverloadChoice choice, DeclContext *useDC);
 
-  /// \brief Simplify a type, by replacing type variables with either their
+  /// Simplify a type, by replacing type variables with either their
   /// fixed types (if available) or their representatives.
   ///
   /// The resulting types can be compared canonically, so long as additional
   /// type equivalence requirements aren't introduced between comparisons.
   Type simplifyType(Type type);
 
-  /// \brief Simplify a type, by replacing type variables with either their
+  /// Simplify a type, by replacing type variables with either their
   /// fixed types (if available) or their representatives.
   ///
   /// \param flags If the simplified type has changed, this will be updated
@@ -2595,7 +2595,7 @@
                                          bool includeInaccessibleMembers);
 
 private:  
-  /// \brief Attempt to simplify the given construction constraint.
+  /// Attempt to simplify the given construction constraint.
   ///
   /// \param valueType The type being constructed.
   ///
@@ -2615,7 +2615,7 @@
                                               FunctionRefKind functionRefKind,
                                               ConstraintLocator *locator);
 
-  /// \brief Attempt to simplify the given conformance constraint.
+  /// Attempt to simplify the given conformance constraint.
   ///
   /// \param type The type being tested.
   /// \param protocol The protocol to which the type should conform.
@@ -2627,7 +2627,7 @@
                                             ConstraintLocatorBuilder locator,
                                             TypeMatchOptions flags);
 
-  /// \brief Attempt to simplify the given conformance constraint.
+  /// Attempt to simplify the given conformance constraint.
   ///
   /// \param type The type being tested.
   /// \param protocol The protocol or protocol composition type to which the
@@ -2647,65 +2647,65 @@
                                              TypeMatchOptions flags,
                                              ConstraintLocatorBuilder locator);
 
-  /// \brief Attempt to simplify the given member constraint.
+  /// Attempt to simplify the given member constraint.
   SolutionKind simplifyMemberConstraint(
       ConstraintKind kind, Type baseType, DeclName member, Type memberType,
       DeclContext *useDC, FunctionRefKind functionRefKind,
       ArrayRef<OverloadChoice> outerAlternatives, TypeMatchOptions flags,
       ConstraintLocatorBuilder locator);
 
-  /// \brief Attempt to simplify the optional object constraint.
+  /// Attempt to simplify the optional object constraint.
   SolutionKind simplifyOptionalObjectConstraint(
                                           Type first, Type second,
                                           TypeMatchOptions flags,
                                           ConstraintLocatorBuilder locator);
 
-  /// \brief Attempt to simplify a function input or result constraint.
+  /// Attempt to simplify a function input or result constraint.
   SolutionKind simplifyFunctionComponentConstraint(
                                           ConstraintKind kind,
                                           Type first, Type second,
                                           TypeMatchOptions flags,
                                           ConstraintLocatorBuilder locator);
 
-  /// \brief Attempt to simplify the BridgingConversion constraint.
+  /// Attempt to simplify the BridgingConversion constraint.
   SolutionKind simplifyBridgingConstraint(Type type1,
                                          Type type2,
                                          TypeMatchOptions flags,
                                          ConstraintLocatorBuilder locator);
 
-  /// \brief Attempt to simplify the ApplicableFunction constraint.
+  /// Attempt to simplify the ApplicableFunction constraint.
   SolutionKind simplifyApplicableFnConstraint(
                                       Type type1,
                                       Type type2,
                                       TypeMatchOptions flags,
                                       ConstraintLocatorBuilder locator);
 
-  /// \brief Attempt to simplify the DynamicCallableApplicableFunction constraint.
+  /// Attempt to simplify the DynamicCallableApplicableFunction constraint.
   SolutionKind simplifyDynamicCallableApplicableFnConstraint(
                                       Type type1,
                                       Type type2,
                                       TypeMatchOptions flags,
                                       ConstraintLocatorBuilder locator);
 
-  /// \brief Attempt to simplify the given DynamicTypeOf constraint.
+  /// Attempt to simplify the given DynamicTypeOf constraint.
   SolutionKind simplifyDynamicTypeOfConstraint(
                                          Type type1, Type type2,
                                          TypeMatchOptions flags,
                                          ConstraintLocatorBuilder locator);
 
-  /// \brief Attempt to simplify the given EscapableFunctionOf constraint.
+  /// Attempt to simplify the given EscapableFunctionOf constraint.
   SolutionKind simplifyEscapableFunctionOfConstraint(
                                          Type type1, Type type2,
                                          TypeMatchOptions flags,
                                          ConstraintLocatorBuilder locator);
 
-  /// \brief Attempt to simplify the given OpenedExistentialOf constraint.
+  /// Attempt to simplify the given OpenedExistentialOf constraint.
   SolutionKind simplifyOpenedExistentialOfConstraint(
                                          Type type1, Type type2,
                                          TypeMatchOptions flags,
                                          ConstraintLocatorBuilder locator);
 
-  /// \brief Attempt to simplify the given KeyPathApplication constraint.
+  /// Attempt to simplify the given KeyPathApplication constraint.
   SolutionKind simplifyKeyPathApplicationConstraint(
                                          Type keyPath,
                                          Type root,
@@ -2713,19 +2713,19 @@
                                          TypeMatchOptions flags,
                                          ConstraintLocatorBuilder locator);
 
-  /// \brief Attempt to simplify the given KeyPath constraint.
+  /// Attempt to simplify the given KeyPath constraint.
   SolutionKind simplifyKeyPathConstraint(Type keyPath,
                                          Type root,
                                          Type value,
                                          TypeMatchOptions flags,
                                          ConstraintLocatorBuilder locator);
 
-  /// \brief Attempt to simplify the given defaultable constraint.
+  /// Attempt to simplify the given defaultable constraint.
   SolutionKind simplifyDefaultableConstraint(Type first, Type second,
                                              TypeMatchOptions flags,
                                              ConstraintLocatorBuilder locator);
 
-  /// \brief Simplify a conversion constraint by applying the given
+  /// Simplify a conversion constraint by applying the given
   /// reduction rule, which is known to apply at the outermost level.
   SolutionKind simplifyRestrictedConstraintImpl(
                  ConversionRestrictionKind restriction,
@@ -2734,7 +2734,7 @@
                  TypeMatchOptions flags,
                  ConstraintLocatorBuilder locator);
 
-  /// \brief Simplify a conversion constraint by applying the given
+  /// Simplify a conversion constraint by applying the given
   /// reduction rule, which is known to apply at the outermost level.
   SolutionKind simplifyRestrictedConstraint(
                  ConversionRestrictionKind restriction,
@@ -2744,14 +2744,14 @@
                  ConstraintLocatorBuilder locator);
 
 public: // FIXME: Public for use by static functions.
-  /// \brief Simplify a conversion constraint with a fix applied to it.
+  /// Simplify a conversion constraint with a fix applied to it.
   SolutionKind simplifyFixConstraint(ConstraintFix *fix, Type type1, Type type2,
                                      ConstraintKind matchKind,
                                      TypeMatchOptions flags,
                                      ConstraintLocatorBuilder locator);
 
 public:
-  /// \brief Simplify the system of constraints, by breaking down complex
+  /// Simplify the system of constraints, by breaking down complex
   /// constraints into simpler constraints.
   ///
   /// The result of simplification is a constraint system consisting of
@@ -2764,9 +2764,9 @@
   /// \returns true if an error occurred, false otherwise.
   bool simplify(bool ContinueAfterFailures = false);
 
-  /// \brief Simplify the given constraint.
+  /// Simplify the given constraint.
   SolutionKind simplifyConstraint(const Constraint &constraint);
-  /// \brief Simplify the given disjunction choice.
+  /// Simplify the given disjunction choice.
   void simplifyDisjunctionChoice(Constraint *choice);
 
 private:
@@ -2916,7 +2916,7 @@
       }
     }
 
-    /// \brief Add a potential binding to the list of bindings,
+    /// Add a potential binding to the list of bindings,
     /// coalescing supertype bounds when we are able to compute the meet.
     void addPotentialBinding(PotentialBinding binding,
                              bool allowJoinMeet = true);
@@ -2995,15 +2995,15 @@
   PotentialBindings getPotentialBindings(TypeVariableType *typeVar);
 
 private:
-  /// \brief Add a constraint to the constraint system.
+  /// Add a constraint to the constraint system.
   SolutionKind addConstraintImpl(ConstraintKind kind, Type first, Type second,
                                  ConstraintLocatorBuilder locator,
                                  bool isFavored);
 
-  /// \brief Collect the current inactive disjunction constraints.
+  /// Collect the current inactive disjunction constraints.
   void collectDisjunctions(SmallVectorImpl<Constraint *> &disjunctions);
 
-  /// \brief Solve the system of constraints after it has already been
+  /// Solve the system of constraints after it has already been
   /// simplified.
   ///
   /// \param solutions The set of solutions to this system of constraints.
@@ -3011,7 +3011,7 @@
   /// \returns true if an error occurred, false otherwise.
   bool solveSimplified(SmallVectorImpl<Solution> &solutions);
 
-  /// \brief Find reduced domains of disjunction constraints for given
+  /// Find reduced domains of disjunction constraints for given
   /// expression, this is achieved to solving individual sub-expressions
   /// and combining resolving types. Such algorithm is called directional
   /// path consistency because it goes from children to parents for all
@@ -3020,7 +3020,7 @@
   /// \param expr The expression to find reductions for.
   void shrink(Expr *expr);
 
-  /// \brief Pick a disjunction from the InactiveConstraints list.
+  /// Pick a disjunction from the InactiveConstraints list.
   ///
   /// \returns The selected disjunction.
   Constraint *selectDisjunction();
@@ -3037,7 +3037,7 @@
                                      bool *foundConsistent);
   bool areBindPairConsistent(Constraint *first, Constraint *second);
 
-  /// \brief Solve the system of constraints generated from provided expression.
+  /// Solve the system of constraints generated from provided expression.
   ///
   /// \param expr The expression to generate constraints from.
   /// \param convertType The expected type of the expression.
@@ -3056,7 +3056,7 @@
                           = FreeTypeVariableBinding::Disallow);
 
 public:
-  /// \brief Solve the system of constraints generated from provided expression.
+  /// Solve the system of constraints generated from provided expression.
   ///
   /// The expression should have already been pre-checked with
   /// preCheckExpression().
@@ -3077,7 +3077,7 @@
              FreeTypeVariableBinding allowFreeTypeVariables
              = FreeTypeVariableBinding::Disallow);
 
-  /// \brief Solve the system of constraints.
+  /// Solve the system of constraints.
   ///
   /// \param solutions The set of solutions to this system of constraints.
   ///
@@ -3091,7 +3091,7 @@
              FreeTypeVariableBinding allowFreeTypeVariables =
                  FreeTypeVariableBinding::Disallow);
 
-  /// \brief Solve the system of constraints.
+  /// Solve the system of constraints.
   ///
   /// \param allowFreeTypeVariables How to bind free type variables in
   /// the solution.
@@ -3105,7 +3105,7 @@
                                  bool allowFixes = false);
 
 private:
-  /// \brief Solve the system of constraints.
+  /// Solve the system of constraints.
   ///
   /// This method responsible for running search/solver algorithm.
   /// It doesn't filter solutions, that's the job of top-level `solve` methods.
@@ -3113,7 +3113,7 @@
   /// \param solutions The set of solutions to this system of constraints.
   void solve(SmallVectorImpl<Solution> &solutions);
 
-  /// \brief Compare two solutions to the same set of constraints.
+  /// Compare two solutions to the same set of constraints.
   ///
   /// \param cs The constraint system.
   /// \param solutions All of the solutions to the system.
@@ -3135,7 +3135,7 @@
   /// solution found so far.
   bool worseThanBestSolution() const;
 
-  /// \brief Given a set of viable solutions, find the best
+  /// Given a set of viable solutions, find the best
   /// solution.
   ///
   /// \param solutions The set of viable solutions to consider.
@@ -3152,7 +3152,7 @@
                                       llvm::DenseMap<Expr *, unsigned> &weights,
                                       bool minimize);
 
-  /// \brief Apply a given solution to the expression, producing a fully
+  /// Apply a given solution to the expression, producing a fully
   /// type-checked expression.
   ///
   /// \param convertType the contextual type to which the
@@ -3165,12 +3165,12 @@
                       Type convertType, bool discardedExpr,
                       bool skipClosures);
 
-  /// \brief Reorder the disjunctive clauses for a given expression to
+  /// Reorder the disjunctive clauses for a given expression to
   /// increase the likelihood that a favored constraint will be successfully
   /// resolved before any others.
   void optimizeConstraints(Expr *e);
   
-  /// \brief Determine if we've already explored too many paths in an
+  /// Determine if we've already explored too many paths in an
   /// attempt to solve this expression.
   bool isExpressionAlreadyTooComplex = false;
   bool getExpressionTooComplex(SmallVectorImpl<Solution> const &solutions) {
@@ -3297,7 +3297,7 @@
   void print(raw_ostream &out);
 };
 
-/// \brief Compute the shuffle required to map from a given tuple type to
+/// Compute the shuffle required to map from a given tuple type to
 /// another tuple type.
 ///
 /// \param fromTuple The tuple type we're converting from, as represented by its
@@ -3513,7 +3513,7 @@
   operator Constraint *() const { return Choice; }
 
 private:
-  /// \brief If associated disjunction is an explicit conversion,
+  /// If associated disjunction is an explicit conversion,
   /// let's try to propagate its type early to prune search space.
   void propagateConversionInfo(ConstraintSystem &cs) const;
 
@@ -3750,7 +3750,7 @@
   }
 };
 
-/// \brief Matches array of function parameters to candidate inputs,
+/// Matches array of function parameters to candidate inputs,
 /// which can be anything suitable (e.g., parameters, arguments).
 ///
 /// It claims inputs sequentially and tries to pair between an input
diff --git a/lib/Sema/MiscDiagnostics.cpp b/lib/Sema/MiscDiagnostics.cpp
index a7f46c2..54ccc6c 100644
--- a/lib/Sema/MiscDiagnostics.cpp
+++ b/lib/Sema/MiscDiagnostics.cpp
@@ -3078,7 +3078,7 @@
   const_cast<Expr *>(E)->walk(Walker);
 }
 
-/// \brief Diagnose trailing closure in statement-conditions.
+/// Diagnose trailing closure in statement-conditions.
 ///
 /// Conditional statements, including 'for' or `switch` doesn't allow ambiguous
 /// trailing closures in these conditions part. Even if the parser can recover
@@ -3969,7 +3969,7 @@
 // High-level entry points.
 //===----------------------------------------------------------------------===//
 
-/// \brief Emit diagnostics for syntactic restrictions on a given expression.
+/// Emit diagnostics for syntactic restrictions on a given expression.
 void swift::performSyntacticExprDiagnostics(TypeChecker &TC, const Expr *E,
                                             const DeclContext *DC,
                                             bool isExprStmt) {
diff --git a/lib/Sema/MiscDiagnostics.h b/lib/Sema/MiscDiagnostics.h
index e0d53b6..358376b 100644
--- a/lib/Sema/MiscDiagnostics.h
+++ b/lib/Sema/MiscDiagnostics.h
@@ -34,12 +34,12 @@
   class TypeChecker;
   class ValueDecl;
 
-/// \brief Emit diagnostics for syntactic restrictions on a given expression.
+/// Emit diagnostics for syntactic restrictions on a given expression.
 void performSyntacticExprDiagnostics(TypeChecker &TC, const Expr *E,
                                      const DeclContext *DC,
                                      bool isExprStmt);
 
-/// \brief Emit diagnostics for a given statement.
+/// Emit diagnostics for a given statement.
 void performStmtDiagnostics(TypeChecker &TC, const Stmt *S);
 
 void performAbstractFuncDeclDiagnostics(TypeChecker &TC,
diff --git a/lib/Sema/OverloadChoice.h b/lib/Sema/OverloadChoice.h
index 101249b..e1e6b63 100644
--- a/lib/Sema/OverloadChoice.h
+++ b/lib/Sema/OverloadChoice.h
@@ -31,37 +31,37 @@
 namespace constraints {
   class ConstraintSystem;
 
-/// \brief The kind of overload choice.
+/// The kind of overload choice.
 enum class OverloadChoiceKind : int {
-  /// \brief The overload choice selects a particular declaration from a
+  /// The overload choice selects a particular declaration from a
   /// set of declarations.
   Decl,
-  /// \brief The overload choice selects a particular declaration that was
+  /// The overload choice selects a particular declaration that was
   /// found via dynamic lookup and, therefore, might not actually be
   /// available at runtime.
   DeclViaDynamic,
-  /// \brief The overload choice equates the member type with the
+  /// The overload choice equates the member type with the
   /// base type. Used for unresolved member expressions like ".none" that
   /// refer to enum members with unit type.
   BaseType,
-  /// \brief The overload choice selects a key path subscripting operation.
+  /// The overload choice selects a key path subscripting operation.
   KeyPathApplication,
-  /// \brief The member is looked up using @dynamicMemberLookup.
+  /// The member is looked up using @dynamicMemberLookup.
   DynamicMemberLookup,
-  /// \brief The overload choice selects a particular declaration that
+  /// The overload choice selects a particular declaration that
   /// was found by bridging the base value type to its Objective-C
   /// class type.
   DeclViaBridge,
-  /// \brief The overload choice selects a particular declaration that
+  /// The overload choice selects a particular declaration that
   /// was found by unwrapping an optional context type.
   DeclViaUnwrappedOptional,
-  /// \brief The overload choice indexes into a tuple. Index zero will
+  /// The overload choice indexes into a tuple. Index zero will
   /// have the value of this enumerator, index one will have the value of this
   /// enumerator + 1, and so on. Thus, this enumerator must always be last.
   TupleIndex,
 };
 
-/// \brief Describes a particular choice within an overload set.
+/// Describes a particular choice within an overload set.
 ///
 class OverloadChoice {
   enum : unsigned {
@@ -79,7 +79,7 @@
     IsDeclViaDynamic = 0x03,
   };
 
-  /// \brief The base type to be used when referencing the declaration
+  /// The base type to be used when referencing the declaration
   /// along with the three bits above.
   llvm::PointerIntPair<Type, 3, unsigned> BaseAndDeclKind;
 
@@ -195,12 +195,12 @@
     return result;
   }
 
-  /// \brief Retrieve the base type used to refer to the declaration.
+  /// Retrieve the base type used to refer to the declaration.
   Type getBaseType() const {
     return BaseAndDeclKind.getPointer();
   }
   
-  /// \brief Determines the kind of overload choice this is.
+  /// Determines the kind of overload choice this is.
   OverloadChoiceKind getKind() const {
     if (!DynamicNameAndFRK.getPointer().empty())
       return OverloadChoiceKind::DynamicMemberLookup;
@@ -226,7 +226,7 @@
     return DeclOrKind.is<ValueDecl*>();
   }
 
-  /// \brief Retrieve the declaration that corresponds to this overload choice.
+  /// Retrieve the declaration that corresponds to this overload choice.
   ValueDecl *getDecl() const {
     return DeclOrKind.get<ValueDecl*>();
   }
@@ -240,7 +240,7 @@
   /// Get the name of the overload choice.
   DeclName getName() const;
 
-  /// \brief Retrieve the tuple index that corresponds to this overload
+  /// Retrieve the tuple index that corresponds to this overload
   /// choice.
   unsigned getTupleIndex() const {
     assert(getKind() == OverloadChoiceKind::TupleIndex);
@@ -248,7 +248,7 @@
     return kind-(uint32_t)OverloadChoiceKind::TupleIndex;
   }
 
-  /// \brief Retrieves an opaque choice that ignores the base type.
+  /// Retrieves an opaque choice that ignores the base type.
   void *getOpaqueChoiceSimple() const {
     return DeclOrKind.getOpaqueValue();
   }
diff --git a/lib/Sema/SourceLoader.cpp b/lib/Sema/SourceLoader.cpp
index ea50c5f..476a433 100644
--- a/lib/Sema/SourceLoader.cpp
+++ b/lib/Sema/SourceLoader.cpp
@@ -11,7 +11,7 @@
 //===----------------------------------------------------------------------===//
 ///
 /// \file
-/// \brief A simple module loader that loads .swift source files.
+/// A simple module loader that loads .swift source files.
 ///
 //===----------------------------------------------------------------------===//
 
diff --git a/lib/Sema/TypeCheckCaptures.cpp b/lib/Sema/TypeCheckCaptures.cpp
index 29f08c1..9415a98 100644
--- a/lib/Sema/TypeCheckCaptures.cpp
+++ b/lib/Sema/TypeCheckCaptures.cpp
@@ -80,7 +80,7 @@
     CaptureLoc = getCaptureLoc(AFR);
   }
 
-  /// \brief Check if the type of an expression references any generic
+  /// Check if the type of an expression references any generic
   /// type parameters, or the dynamic Self type.
   ///
   /// Note that we do not need to distinguish inner from outer generic
diff --git a/lib/Sema/TypeCheckConstraints.cpp b/lib/Sema/TypeCheckConstraints.cpp
index 4e7365a..d7e810f 100644
--- a/lib/Sema/TypeCheckConstraints.cpp
+++ b/lib/Sema/TypeCheckConstraints.cpp
@@ -2279,7 +2279,7 @@
   return FunctionType::get(argTypes, solution.simplifyType(CS.getType(expr)));
 }
 
-/// \brief Return the type of operator function for specified LHS, or a null
+/// Return the type of operator function for specified LHS, or a null
 /// \c Type on error.
 FunctionType *
 TypeChecker::getTypeOfCompletionOperator(DeclContext *DC, Expr *LHS,
diff --git a/lib/Sema/TypeCheckDeclOverride.cpp b/lib/Sema/TypeCheckDeclOverride.cpp
index 727e2c7..5eda5e4 100644
--- a/lib/Sema/TypeCheckDeclOverride.cpp
+++ b/lib/Sema/TypeCheckDeclOverride.cpp
@@ -1318,7 +1318,7 @@
   return OverrideRequiresKeyword::Always;
 }
 
-/// \brief Returns true if the availability of the overriding declaration
+/// Returns true if the availability of the overriding declaration
 /// makes it a safe override, given the availability of the base declaration.
 static bool isAvailabilitySafeForOverride(ValueDecl *override,
                                           ValueDecl *base) {
diff --git a/lib/Sema/TypeCheckProtocol.cpp b/lib/Sema/TypeCheckProtocol.cpp
index 6917f05..bcffb40 100644
--- a/lib/Sema/TypeCheckProtocol.cpp
+++ b/lib/Sema/TypeCheckProtocol.cpp
@@ -67,7 +67,7 @@
   }
 }
 
-/// \brief Describes the suitability of the chosen witness for
+/// Describes the suitability of the chosen witness for
 /// the requirement.
 struct swift::RequirementCheck {
   CheckKind Kind;
@@ -972,7 +972,7 @@
   return false;
 }
 
-/// \brief Determine whether one requirement match is better than the other.
+/// Determine whether one requirement match is better than the other.
 static bool isBetterMatch(TypeChecker &tc, DeclContext *dc,
                           ValueDecl *requirement,
                           const RequirementMatch &match1,
@@ -1623,7 +1623,7 @@
       .fixItInsert(loc, differentFixit);
 }
 
-/// \brief Determine whether the type \c T conforms to the protocol \c Proto,
+/// Determine whether the type \c T conforms to the protocol \c Proto,
 /// recording the complete witness table if it does.
 ProtocolConformance *MultiConformanceChecker::
 checkIndividualConformance(NormalProtocolConformance *conformance,
@@ -1849,7 +1849,7 @@
   return conformance;
 }
 
-/// \brief Add the next associated type deduction to the string representation
+/// Add the next associated type deduction to the string representation
 /// of the deductions, used in diagnostics.
 static void addAssocTypeDeductionString(llvm::SmallString<128> &str,
                                         AssociatedTypeDecl *assocType,
@@ -1928,7 +1928,7 @@
                     SubstFlags::UseErrorType);
 }
 
-/// \brief Retrieve the kind of requirement described by the given declaration,
+/// Retrieve the kind of requirement described by the given declaration,
 /// for use in some diagnostics.
 static diag::RequirementKind getRequirementKind(ValueDecl *VD) {
   if (isa<ConstructorDecl>(VD))
@@ -2074,7 +2074,7 @@
 
 }
 
-/// \brief Diagnose a requirement match, describing what went wrong (or not).
+/// Diagnose a requirement match, describing what went wrong (or not).
 static void
 diagnoseMatch(ModuleDecl *module, NormalProtocolConformance *conformance,
               ValueDecl *req, const RequirementMatch &match) {
diff --git a/lib/Sema/TypeCheckProtocol.h b/lib/Sema/TypeCheckProtocol.h
index 15dbb19..ca5e72a 100644
--- a/lib/Sema/TypeCheckProtocol.h
+++ b/lib/Sema/TypeCheckProtocol.h
@@ -151,53 +151,53 @@
 
 class RequirementEnvironment;
 
-/// \brief The result of matching a particular declaration to a given
+/// The result of matching a particular declaration to a given
 /// requirement.
 enum class MatchKind : uint8_t {
-  /// \brief The witness matched the requirement exactly.
+  /// The witness matched the requirement exactly.
   ExactMatch,
 
-  /// \brief There is a difference in optionality.
+  /// There is a difference in optionality.
   OptionalityConflict,
 
-  /// \brief The witness matched the requirement with some renaming.
+  /// The witness matched the requirement with some renaming.
   RenamedMatch,
 
-  /// \brief The witness is invalid or has an invalid type.
+  /// The witness is invalid or has an invalid type.
   WitnessInvalid,
 
-  /// \brief The kind of the witness and requirement differ, e.g., one
+  /// The kind of the witness and requirement differ, e.g., one
   /// is a function and the other is a variable.
   KindConflict,
 
-  /// \brief The types conflict.
+  /// The types conflict.
   TypeConflict,
 
-  /// \brief The witness would match if an additional requirement were met.
+  /// The witness would match if an additional requirement were met.
   MissingRequirement,
 
   /// The witness throws, but the requirement does not.
   ThrowsConflict,
 
-  /// \brief The witness did not match due to static/non-static differences.
+  /// The witness did not match due to static/non-static differences.
   StaticNonStaticConflict,
 
-  /// \brief The witness is not settable, but the requirement is.
+  /// The witness is not settable, but the requirement is.
   SettableConflict,
 
-  /// \brief The witness did not match due to prefix/non-prefix differences.
+  /// The witness did not match due to prefix/non-prefix differences.
   PrefixNonPrefixConflict,
 
-  /// \brief The witness did not match due to postfix/non-postfix differences.
+  /// The witness did not match due to postfix/non-postfix differences.
   PostfixNonPostfixConflict,
 
-  /// \brief The witness did not match because of mutating conflicts.
+  /// The witness did not match because of mutating conflicts.
   MutatingConflict,
 
-  /// \brief The witness did not match because of nonmutating conflicts.
+  /// The witness did not match because of nonmutating conflicts.
   NonMutatingConflict,
 
-  /// \brief The witness did not match because of __consuming conflicts.
+  /// The witness did not match because of __consuming conflicts.
   ConsumingConflict,
 
   /// The witness is not rethrows, but the requirement is.
@@ -342,7 +342,7 @@
   SourceLoc getOptionalityLoc(TypeRepr *tyR) const;
 };
 
-/// \brief Describes a match between a requirement and a witness.
+/// Describes a match between a requirement and a witness.
 struct RequirementMatch {
   RequirementMatch(ValueDecl *witness, MatchKind kind,
                    Optional<RequirementEnvironment> env = None)
@@ -374,19 +374,19 @@
            "Should have witness type and requirement");
   }
 
-  /// \brief The witness that matches the (implied) requirement.
+  /// The witness that matches the (implied) requirement.
   ValueDecl *Witness;
 
-  /// \brief The kind of match.
+  /// The kind of match.
   MatchKind Kind;
 
-  /// \brief The type of the witness when it is referenced.
+  /// The type of the witness when it is referenced.
   Type WitnessType;
 
-  /// \brief Requirement not met.
+  /// Requirement not met.
   Optional<Requirement> MissingRequirement;
 
-  /// \brief The requirement environment to use for the witness thunk.
+  /// The requirement environment to use for the witness thunk.
   Optional<RequirementEnvironment> ReqEnv;
 
   /// The set of optional adjustments performed on the witness.
@@ -396,7 +396,7 @@
   /// environment.
   SubstitutionMap WitnessSubstitutions;
 
-  /// \brief Determine whether this match is viable.
+  /// Determine whether this match is viable.
   bool isViable() const {
     switch(Kind) {
     case MatchKind::ExactMatch:
@@ -424,7 +424,7 @@
     llvm_unreachable("Unhandled MatchKind in switch.");
   }
 
-  /// \brief Determine whether this requirement match has a witness type.
+  /// Determine whether this requirement match has a witness type.
   bool hasWitnessType() const {
     switch(Kind) {
     case MatchKind::ExactMatch:
@@ -452,7 +452,7 @@
     llvm_unreachable("Unhandled MatchKind in switch.");
   }
 
-  /// \brief Determine whether this requirement match has a requirement.
+  /// Determine whether this requirement match has a requirement.
   bool hasRequirement() { return Kind == MatchKind::MissingRequirement; }
 
   swift::Witness getWitness(ASTContext &ctx) const;
@@ -889,7 +889,7 @@
                                                  AssociatedTypeDecl *assocType);
 };
 
-/// \brief Match the given witness to the given requirement.
+/// Match the given witness to the given requirement.
 ///
 /// \returns the result of performing the match.
 RequirementMatch matchWitness(
diff --git a/lib/Sema/TypeCheckStmt.cpp b/lib/Sema/TypeCheckStmt.cpp
index d4a97bd..a47afb2 100644
--- a/lib/Sema/TypeCheckStmt.cpp
+++ b/lib/Sema/TypeCheckStmt.cpp
@@ -284,7 +284,7 @@
 public:
   TypeChecker &TC;
 
-  /// \brief This is the current function or closure being checked.
+  /// This is the current function or closure being checked.
   /// This is null for top level code.
   Optional<AnyFunctionRef> TheFunc;
   
diff --git a/lib/Sema/TypeCheckType.cpp b/lib/Sema/TypeCheckType.cpp
index c57e914..e981440 100644
--- a/lib/Sema/TypeCheckType.cpp
+++ b/lib/Sema/TypeCheckType.cpp
@@ -844,7 +844,7 @@
   return resultType;
 }
 
-/// \brief Diagnose a use of an unbound generic type.
+/// Diagnose a use of an unbound generic type.
 static void diagnoseUnboundGenericType(Type ty, SourceLoc loc) {
   auto unbound = ty->castTo<UnboundGenericType>();
   {
@@ -900,7 +900,7 @@
   ctx.Diags.diagnose(loc, diagCode, isa<TypeAliasDecl>(typeDecl), typeDecl->getFullName(), parentTy);
 }
 
-/// \brief Returns a valid type or ErrorType in case of an error.
+/// Returns a valid type or ErrorType in case of an error.
 static Type resolveTypeDecl(TypeDecl *typeDecl, SourceLoc loc,
                             DeclContext *foundDC,
                             TypeResolution resolution,
@@ -1551,7 +1551,7 @@
   return ty;
 }
 
-/// \brief Returns a valid type or ErrorType in case of an error.
+/// Returns a valid type or ErrorType in case of an error.
 Type TypeChecker::resolveIdentifierType(
        TypeResolution resolution,
        IdentTypeRepr *IdType,
diff --git a/lib/Sema/TypeCheckType.h b/lib/Sema/TypeCheckType.h
index 7b3c782..ac3faf6 100644
--- a/lib/Sema/TypeCheckType.h
+++ b/lib/Sema/TypeCheckType.h
@@ -327,7 +327,7 @@
   /// no generic signature to resolve types.
   GenericSignature *getGenericSignature() const;
 
-  /// \brief Resolves a TypeRepr to a type.
+  /// Resolves a TypeRepr to a type.
   ///
   /// Performs name binding, checking of generic arguments, and so on in order
   /// to create a well-formed type.
diff --git a/lib/Sema/TypeChecker.cpp b/lib/Sema/TypeChecker.cpp
index 5cbc12e..68a2cbf 100644
--- a/lib/Sema/TypeChecker.cpp
+++ b/lib/Sema/TypeChecker.cpp
@@ -827,7 +827,7 @@
   return None;
 }
 
-/// \brief Return the type of an expression parsed during code completion, or
+/// Return the type of an expression parsed during code completion, or
 /// a null \c Type on error.
 Optional<Type> swift::getTypeOfCompletionContextExpr(
                         ASTContext &Ctx,
@@ -843,7 +843,7 @@
                                           referencedDecl);
 }
 
-/// \brief Return the type of operator function for specified LHS, or a null
+/// Return the type of operator function for specified LHS, or a null
 /// \c Type on error.
 FunctionType *
 swift::getTypeOfCompletionOperator(DeclContext *DC, Expr *LHS,
diff --git a/lib/Sema/TypeChecker.h b/lib/Sema/TypeChecker.h
index 8ee715b..5e69720 100644
--- a/lib/Sema/TypeChecker.h
+++ b/lib/Sema/TypeChecker.h
@@ -54,7 +54,7 @@
   class Solution;
 }
 
-/// \brief A mapping from substitutable types to the protocol-conformance
+/// A mapping from substitutable types to the protocol-conformance
 /// mappings for those types.
 using ConformanceMap =
     llvm::DenseMap<SubstitutableType *, SmallVector<ProtocolConformance *, 2>>;
@@ -184,7 +184,7 @@
   /// Add a result to the set of results.
   void addResult(LookupTypeResultEntry result) { Results.push_back(result); }
 
-  /// \brief Determine whether this result set is ambiguous.
+  /// Determine whether this result set is ambiguous.
   bool isAmbiguous() const {
     return Results.size() > 1;
   }
@@ -521,7 +521,7 @@
   ASTContext &Context;
   DiagnosticEngine &Diags;
 
-  /// \brief The list of function definitions we've encountered.
+  /// The list of function definitions we've encountered.
   std::vector<AbstractFunctionDecl *> definedFunctions;
 
   /// Declarations that need their conformances checked.
@@ -836,7 +836,7 @@
   Type getObjCSelectorType(DeclContext *dc);
   Type getExceptionType(DeclContext *dc, SourceLoc loc);
   
-  /// \brief Try to resolve an IdentTypeRepr, returning either the referenced
+  /// Try to resolve an IdentTypeRepr, returning either the referenced
   /// Type or an ErrorType in case of error.
   static Type resolveIdentifierType(TypeResolution resolution,
                                     IdentTypeRepr *IdType,
@@ -847,7 +847,7 @@
   /// for the lookup.
   Expr *resolveDeclRefExpr(UnresolvedDeclRefExpr *UDRE, DeclContext *Context);
 
-  /// \brief Validate the given type.
+  /// Validate the given type.
   ///
   /// Type validation performs name binding, checking of generic arguments,
   /// and so on to determine whether the given type is well-formed and can
@@ -973,7 +973,7 @@
                                            TypeResolution resolution,
                                            ArrayRef<Type> genericArgs);
 
-  /// \brief Substitute the given base type into the type of the given nested type,
+  /// Substitute the given base type into the type of the given nested type,
   /// producing the effective type that the nested type will have.
   ///
   /// \param module The module in which the substitution will be performed.
@@ -985,7 +985,7 @@
   static Type substMemberTypeWithBase(ModuleDecl *module, TypeDecl *member,
                                       Type baseTy, bool useArchetypes = true);
 
-  /// \brief Determine whether one type is a subtype of another.
+  /// Determine whether one type is a subtype of another.
   ///
   /// \param t1 The potential subtype.
   /// \param t2 The potential supertype.
@@ -994,7 +994,7 @@
   /// \returns true if \c t1 is a subtype of \c t2.
   bool isSubtypeOf(Type t1, Type t2, DeclContext *dc);
   
-  /// \brief Determine whether one type is implicitly convertible to another.
+  /// Determine whether one type is implicitly convertible to another.
   ///
   /// \param t1 The potential source type of the conversion.
   ///
@@ -1009,7 +1009,7 @@
   bool isConvertibleTo(Type t1, Type t2, DeclContext *dc,
                        bool *unwrappedIUO = nullptr);
 
-  /// \brief Determine whether one type is explicitly convertible to another,
+  /// Determine whether one type is explicitly convertible to another,
   /// i.e. using an 'as' expression.
   ///
   /// \param t1 The potential source type of the conversion.
@@ -1021,7 +1021,7 @@
   /// \returns true if \c t1 can be explicitly converted to \c t2.
   bool isExplicitlyConvertibleTo(Type t1, Type t2, DeclContext *dc);
 
-  /// \brief Determine whether one type is bridged to another type.
+  /// Determine whether one type is bridged to another type.
   ///
   /// \param t1 The potential source type of the conversion.
   ///
@@ -1036,7 +1036,7 @@
   bool isObjCBridgedTo(Type t1, Type t2, DeclContext *dc,
                        bool *unwrappedIUO = nullptr);
 
-  /// \brief Return true if performing a checked cast from one type to another
+  /// Return true if performing a checked cast from one type to another
   /// with the "as!" operator could possibly succeed.
   ///
   /// \param t1 The potential source type of the cast.
@@ -1049,7 +1049,7 @@
   /// false if it will certainly fail, e.g. because the types are unrelated.
   bool checkedCastMaySucceed(Type t1, Type t2, DeclContext *dc);
 
-  /// \brief Determine whether a constraint of the given kind can be satisfied
+  /// Determine whether a constraint of the given kind can be satisfied
   /// by the two types.
   ///
   /// \param t1 The first type of the constraint.
@@ -1258,7 +1258,7 @@
   void maybeDiagnoseClassWithoutInitializers(ClassDecl *classDecl);
 
   ///
-  /// \brief Add any implicitly-defined constructors required for the given
+  /// Add any implicitly-defined constructors required for the given
   /// struct or class.
   void addImplicitConstructors(NominalTypeDecl *typeDecl);
 
@@ -1323,14 +1323,14 @@
   Optional<Type> boolType;
 
 public:
-  /// \brief Define the default constructor for the given struct or class.
+  /// Define the default constructor for the given struct or class.
   void defineDefaultConstructor(NominalTypeDecl *decl);
 
-  /// \brief Fold the given sequence expression into an (unchecked) expression
+  /// Fold the given sequence expression into an (unchecked) expression
   /// tree.
   Expr *foldSequence(SequenceExpr *expr, DeclContext *dc);
 
-  /// \brief Type check the given expression.
+  /// Type check the given expression.
   ///
   /// \param expr The expression to type-check, which will be modified in
   /// place.
@@ -1374,7 +1374,7 @@
   }
 
 
-  /// \brief Type check the given expression and return its type without
+  /// Type check the given expression and return its type without
   /// applying the solution.
   ///
   /// \param expr The expression to type-check.
@@ -1404,7 +1404,7 @@
           FreeTypeVariableBinding::Disallow,
       ExprTypeCheckListener *listener = nullptr);
 
-  /// \brief Return the type of operator function for specified LHS, or a null
+  /// Return the type of operator function for specified LHS, or a null
   /// \c Type on error.
   FunctionType *getTypeOfCompletionOperator(DeclContext *DC, Expr *LHS,
                                             Identifier opName,
@@ -1417,14 +1417,14 @@
   Optional<Type> checkObjCKeyPathExpr(DeclContext *dc, KeyPathExpr *expr,
                                       bool requireResultType = false);
 
-  /// \brief Type check whether the given type declaration includes members of
+  /// Type check whether the given type declaration includes members of
   /// unsupported recursive value types.
   ///
   /// \param decl The declaration to be type-checked. This process will not
   /// modify the declaration.
   void checkDeclCircularity(NominalTypeDecl *decl);
 
-  /// \brief Type check whether the given switch statement exhaustively covers
+  /// Type check whether the given switch statement exhaustively covers
   /// its domain.
   ///
   /// \param stmt The switch statement to be type-checked.  No modification of
@@ -1436,7 +1436,7 @@
   void checkSwitchExhaustiveness(const SwitchStmt *stmt, const DeclContext *DC,
                                  bool limitChecking);
 
-  /// \brief Type check the given expression as a condition, which converts
+  /// Type check the given expression as a condition, which converts
   /// it to a logic value.
   ///
   /// \param expr The expression to type-check, which will be modified in place
@@ -1445,7 +1445,7 @@
   /// \returns true if an error occurred, false otherwise.
   bool typeCheckCondition(Expr *&expr, DeclContext *dc);
 
-  /// \brief Type check the given 'if' or 'while' statement condition, which
+  /// Type check the given 'if' or 'while' statement condition, which
   /// either converts an expression to a logic value or bind variables to the
   /// contents of an Optional.
   ///
@@ -1455,7 +1455,7 @@
   bool typeCheckStmtCondition(StmtCondition &cond, DeclContext *dc,
                               Diag<> diagnosticForAlwaysTrue);
 
-  /// \brief Determine the semantics of a checked cast operation.
+  /// Determine the semantics of a checked cast operation.
   ///
   /// \param fromType       The source type of the cast.
   /// \param toType         The destination type of the cast.
@@ -1494,7 +1494,7 @@
                                          Type dynamicType,
                                          Type valueType);
 
-  /// \brief Resolve ambiguous pattern/expr productions inside a pattern using
+  /// Resolve ambiguous pattern/expr productions inside a pattern using
   /// name lookup information. Must be done before type-checking the pattern.
   Pattern *resolvePattern(Pattern *P, DeclContext *dc,
                           bool isStmtCondition);
@@ -1549,14 +1549,14 @@
   /// Type-check a for-each loop's pattern binding and sequence together.
   bool typeCheckForEachBinding(DeclContext *dc, ForEachStmt *stmt);
 
-  /// \brief Lazily diagnose conversions to C function pointers of closures
+  /// Lazily diagnose conversions to C function pointers of closures
   /// with captures.
   void maybeDiagnoseCaptures(Expr *E, AnyFunctionRef AFR);
 
-  /// \brief Compute the set of captures for the given function or closure.
+  /// Compute the set of captures for the given function or closure.
   void computeCaptures(AnyFunctionRef AFR);
 
-  /// \brief Change the context of closures in the given initializer
+  /// Change the context of closures in the given initializer
   /// expression to the given context.
   ///
   /// \returns true if any closures were found
@@ -1612,7 +1612,7 @@
         base, wantInterfaceType);
   }
 
-  /// \brief Retrieve the default type for the given protocol.
+  /// Retrieve the default type for the given protocol.
   ///
   /// Some protocols, particularly those that correspond to literals, have
   /// default types associated with them. This routine retrieves that default
@@ -1622,7 +1622,7 @@
   /// this protocol.
   Type getDefaultType(ProtocolDecl *protocol, DeclContext *dc);
 
-  /// \brief Convert the given expression to the given type.
+  /// Convert the given expression to the given type.
   ///
   /// \param expr The expression, which will be updated in place.
   /// \param type The type to convert to.
@@ -1633,7 +1633,7 @@
   bool convertToType(Expr *&expr, Type type, DeclContext *dc,
                      Optional<Pattern*> typeFromPattern = None);
 
-  /// \brief Coerce the given expression to materializable type, if it
+  /// Coerce the given expression to materializable type, if it
   /// isn't already.
   Expr *coerceToRValue(Expr *expr,
                        llvm::function_ref<Type(Expr *)> getType
@@ -1643,7 +1643,7 @@
                            expr->setType(type);
                          });
 
-  /// \brief Add implicit load expression to given AST, this is sometimes
+  /// Add implicit load expression to given AST, this is sometimes
   /// more complicated than simplify wrapping given root in newly created
   /// `LoadExpr`, because `ForceValueExpr` and `ParenExpr` supposed to appear
   /// only at certain positions in AST.
@@ -1663,7 +1663,7 @@
   /// array literals exist.
   bool requireArrayLiteralIntrinsics(SourceLoc loc);
 
-  /// \brief Retrieve the witness type with the given name.
+  /// Retrieve the witness type with the given name.
   ///
   /// \param type The type that conforms to the given protocol.
   ///
@@ -1683,7 +1683,7 @@
                       Identifier name,
                       Diag<> brokenProtocolDiag);
 
-  /// \brief Build a call to the witness with the given name and arguments.
+  /// Build a call to the witness with the given name and arguments.
   ///
   /// \param base The base expression, whose witness will be invoked.
   ///
@@ -1706,7 +1706,7 @@
                     ArrayRef<Expr *> arguments,
                     Diag<> brokenProtocolDiag);
 
-  /// \brief Determine whether the given type contains the given protocol.
+  /// Determine whether the given type contains the given protocol.
   ///
   /// \param DC The context in which to check conformance. This affects, for
   /// example, extension visibility.
@@ -1720,7 +1720,7 @@
                                              DeclContext *DC,
                                              ConformanceCheckOptions options);
 
-  /// \brief Determine whether the given type conforms to the given protocol.
+  /// Determine whether the given type conforms to the given protocol.
   ///
   /// Unlike subTypeOfProtocol(), this will return false for existentials of
   /// non-self conforming protocols.
@@ -1839,7 +1839,7 @@
                                NameLookupOptions options
                                  = defaultUnqualifiedLookupOptions);
 
-  /// \brief Lookup a member in the given type.
+  /// Lookup a member in the given type.
   ///
   /// \param dc The context that needs the member.
   /// \param type The type in which we will look for a member.
@@ -1851,11 +1851,11 @@
                                    NameLookupOptions options
                                      = defaultMemberLookupOptions);
 
-  /// \brief Check whether the given declaration can be written as a
+  /// Check whether the given declaration can be written as a
   /// member of the given base type.
   static bool isUnsupportedMemberTypeAccess(Type type, TypeDecl *typeDecl);
 
-  /// \brief Look up a member type within the given type.
+  /// Look up a member type within the given type.
   ///
   /// This routine looks for member types with the given name within the
   /// given type.
@@ -1871,7 +1871,7 @@
                                            NameLookupOptions options
                                              = defaultMemberTypeLookupOptions);
 
-  /// \brief Look up the constructors of the given type.
+  /// Look up the constructors of the given type.
   ///
   /// \param dc The context that needs the constructor.
   /// \param type The type for which we will look for constructors.
@@ -1894,7 +1894,7 @@
   /// operator \c name appended to the expression.
   Expr *findLHS(DeclContext *DC, Expr *E, Identifier name);
 
-  /// \brief Look up the Bool type in the standard library.
+  /// Look up the Bool type in the standard library.
   Type lookupBoolType(const DeclContext *dc);
 
   /// @}
@@ -1915,11 +1915,11 @@
                                  ValueDecl *decl1,
                                  ValueDecl *decl2);
 
-  /// \brief Build a type-checked reference to the given value.
+  /// Build a type-checked reference to the given value.
   Expr *buildCheckedRefExpr(VarDecl *D, DeclContext *UseDC,
                             DeclNameLoc nameLoc, bool Implicit);
 
-  /// \brief Build a reference to a declaration, where name lookup returned
+  /// Build a reference to a declaration, where name lookup returned
   /// the given set of declarations.
   Expr *buildRefExpr(ArrayRef<ValueDecl *> Decls, DeclContext *UseDC,
                      DeclNameLoc NameLoc, bool Implicit,
@@ -1931,7 +1931,7 @@
                              FunctionType *closureType);
   /// @}
 
-  /// \brief Retrieve a specific, known protocol.
+  /// Retrieve a specific, known protocol.
   ///
   /// \param loc The location at which we need to look for the protocol.
   /// \param kind The known protocol we're looking for.
@@ -1940,7 +1940,7 @@
   /// problem with the Standard Library.
   ProtocolDecl *getProtocol(SourceLoc loc, KnownProtocolKind kind);
 
-  /// \brief Retrieve the literal protocol for the given expression.
+  /// Retrieve the literal protocol for the given expression.
   ///
   /// \returns the literal protocol, if known and available, or null if the
   /// expression does not have an associated literal protocol.
@@ -1999,7 +1999,7 @@
   /// potentially unavailable API elements
   /// @{
 
-  /// \brief Returns true if the availability of the witness
+  /// Returns true if the availability of the witness
   /// is sufficient to safely conform to the requirement in the context
   /// the provided conformance. On return, requiredAvailability holds th
   /// availability levels required for conformance.
diff --git a/lib/TBDGen/TBDGenVisitor.h b/lib/TBDGen/TBDGenVisitor.h
index 9f2582e..d0ae53d 100644
--- a/lib/TBDGen/TBDGenVisitor.h
+++ b/lib/TBDGen/TBDGenVisitor.h
@@ -86,7 +86,7 @@
       addSymbol("main");
   }
 
-  /// \brief Adds the global symbols associated with the first file.
+  /// Adds the global symbols associated with the first file.
   void addFirstFileSymbols();
 
   void visitAbstractFunctionDecl(AbstractFunctionDecl *AFD);
diff --git a/lib/TBDGen/tapi/APIVersion.h b/lib/TBDGen/tapi/APIVersion.h
index 5209376..c789c47 100644
--- a/lib/TBDGen/tapi/APIVersion.h
+++ b/lib/TBDGen/tapi/APIVersion.h
@@ -8,7 +8,7 @@
 //===----------------------------------------------------------------------===//
 ///
 /// \file
-/// \brief Access the TAPI API version information and feature availability.
+/// Access the TAPI API version information and feature availability.
 /// \since 1.0
 ///
 //===----------------------------------------------------------------------===//
@@ -31,13 +31,13 @@
 namespace tapi {
 
 ///
-/// \brief Defines a list of TAPI library features.
+/// Defines a list of TAPI library features.
 /// \since 1.0
 ///
 enum class Feature : unsigned {};
 
 ///
-/// \brief Access to API version, feature and ABI related information about the
+/// Access to API version, feature and ABI related information about the
 ///        TAPI dynamic library.
 /// \since 1.0
 ///
@@ -49,28 +49,28 @@
   ///
 
   ///
-  /// \brief Get the major API version number.
+  /// Get the major API version number.
   /// \return The major API version number as unsigned integer.
   /// \since 1.0
   ///
   static unsigned getMajor() noexcept;
 
   ///
-  /// \brief Get the minor API version number.
+  /// Get the minor API version number.
   /// \return The minor API version number as unsigned integer.
   /// \since 1.0
   ///
   static unsigned getMinor() noexcept;
 
   ///
-  /// \brief Get the patch API version number.
+  /// Get the patch API version number.
   /// \return The patch API version as unsigned integer.
   /// \since 1.0
   ///
   static unsigned getPatch() noexcept;
 
   ///
-  /// \brief Check if the current API version is at least the specified API
+  /// Check if the current API version is at least the specified API
   ///        version or greater.
   /// \param[in] major The major API version number to compare against.
   /// \param[in] minor The minor API version number to compare against.
@@ -92,7 +92,7 @@
   ///
 
   ///
-  /// \brief Check if the library supports a particular #Feature.
+  /// Check if the library supports a particular #Feature.
   /// \param[in] feature The #Feature to be queried for.
   /// \return True if \a feature is supported.
   /// \since 1.0
@@ -109,7 +109,7 @@
   ///
 
   ///
-  /// \brief Check if the library supports the specified ABI version.
+  /// Check if the library supports the specified ABI version.
   /// \param[in] abiVersion The ABI version to query for.
   /// \return True if the library supports the ABI version \a abiVersion.
   /// \since 1.0
diff --git a/lib/TBDGen/tapi/Architecture.cpp b/lib/TBDGen/tapi/Architecture.cpp
index 3652ae7..a62b3fd 100644
--- a/lib/TBDGen/tapi/Architecture.cpp
+++ b/lib/TBDGen/tapi/Architecture.cpp
@@ -8,7 +8,7 @@
 //===----------------------------------------------------------------------===//
 ///
 /// \file
-/// \brief Implements the architecture.
+/// Implements the architecture.
 ///
 //===----------------------------------------------------------------------===//
 
diff --git a/lib/TBDGen/tapi/Architecture.h b/lib/TBDGen/tapi/Architecture.h
index 25d4f7d..a704bcf 100644
--- a/lib/TBDGen/tapi/Architecture.h
+++ b/lib/TBDGen/tapi/Architecture.h
@@ -8,7 +8,7 @@
 //===----------------------------------------------------------------------===//
 ///
 /// \file
-/// \brief Defines architecture enum.
+/// Defines architecture enum.
 ///
 //===----------------------------------------------------------------------===//
 
diff --git a/lib/TBDGen/tapi/ArchitectureSet.cpp b/lib/TBDGen/tapi/ArchitectureSet.cpp
index 3ad3dce..00ecfd1 100644
--- a/lib/TBDGen/tapi/ArchitectureSet.cpp
+++ b/lib/TBDGen/tapi/ArchitectureSet.cpp
@@ -8,7 +8,7 @@
 //===----------------------------------------------------------------------===//
 ///
 /// \file
-/// \brief Implements the architecture set.
+/// Implements the architecture set.
 ///
 //===----------------------------------------------------------------------===//
 
diff --git a/lib/TBDGen/tapi/ArchitectureSet.h b/lib/TBDGen/tapi/ArchitectureSet.h
index 7f3b546..a261527 100644
--- a/lib/TBDGen/tapi/ArchitectureSet.h
+++ b/lib/TBDGen/tapi/ArchitectureSet.h
@@ -8,7 +8,7 @@
 //===----------------------------------------------------------------------===//
 ///
 /// \file
-/// \brief Defines the architecture set.
+/// Defines the architecture set.
 ///
 //===----------------------------------------------------------------------===//
 
diff --git a/lib/TBDGen/tapi/ArchitectureSupport.cpp b/lib/TBDGen/tapi/ArchitectureSupport.cpp
index 3b6d983..217797b 100644
--- a/lib/TBDGen/tapi/ArchitectureSupport.cpp
+++ b/lib/TBDGen/tapi/ArchitectureSupport.cpp
@@ -8,7 +8,7 @@
 //===----------------------------------------------------------------------===//
 ///
 /// \file
-/// \brief Implements architecture specific helper functions.
+/// Implements architecture specific helper functions.
 ///
 //===----------------------------------------------------------------------===//
 
diff --git a/lib/TBDGen/tapi/ArchitectureSupport.h b/lib/TBDGen/tapi/ArchitectureSupport.h
index 058c568..3375089 100644
--- a/lib/TBDGen/tapi/ArchitectureSupport.h
+++ b/lib/TBDGen/tapi/ArchitectureSupport.h
@@ -8,7 +8,7 @@
 //===----------------------------------------------------------------------===//
 ///
 /// \file
-/// \brief Defines architecture specific enums and helper functions.
+/// Defines architecture specific enums and helper functions.
 ///
 //===----------------------------------------------------------------------===//
 
@@ -45,13 +45,13 @@
 
   bool empty() const { return _version == 0; }
 
-  /// \brief Retrieve the major version number.
+  /// Retrieve the major version number.
   unsigned getMajor() const { return _version >> 16; }
 
-  /// \brief Retrieve the minor version number, if provided.
+  /// Retrieve the minor version number, if provided.
   unsigned getMinor() const { return (_version >> 8) & 0xff; }
 
-  /// \brief Retrieve the subminor version number, if provided.
+  /// Retrieve the subminor version number, if provided.
   unsigned getSubminor() const { return _version & 0xff; }
 
   bool parse32(StringRef str);
diff --git a/lib/TBDGen/tapi/AvailabilityInfo.h b/lib/TBDGen/tapi/AvailabilityInfo.h
index 4f48b91..5685695 100644
--- a/lib/TBDGen/tapi/AvailabilityInfo.h
+++ b/lib/TBDGen/tapi/AvailabilityInfo.h
@@ -8,7 +8,7 @@
 //===----------------------------------------------------------------------===//
 ///
 /// \file
-/// \brief Defines the Availability Info.
+/// Defines the Availability Info.
 ///
 //===----------------------------------------------------------------------===//
 
diff --git a/lib/TBDGen/tapi/CoreSymbol.h b/lib/TBDGen/tapi/CoreSymbol.h
index fd3089c..149c064 100644
--- a/lib/TBDGen/tapi/CoreSymbol.h
+++ b/lib/TBDGen/tapi/CoreSymbol.h
@@ -8,7 +8,7 @@
 //===----------------------------------------------------------------------===//
 ///
 /// \file
-/// \brief API Symbol
+/// API Symbol
 ///
 //===----------------------------------------------------------------------===//
 
@@ -65,7 +65,7 @@
 
   void print(raw_ostream &os) const;
 
-  /// \brief Print APISymbol in human readable format.
+  /// Print APISymbol in human readable format.
   void dump(raw_ostream &os) const;
   void dump() const { dump(llvm::errs()); }
 
diff --git a/lib/TBDGen/tapi/Defines.h b/lib/TBDGen/tapi/Defines.h
index 4ed9256..2a09e10 100644
--- a/lib/TBDGen/tapi/Defines.h
+++ b/lib/TBDGen/tapi/Defines.h
@@ -8,7 +8,7 @@
 //===----------------------------------------------------------------------===//
 ///
 /// \file
-/// \brief TAPI C++ library defines.
+/// TAPI C++ library defines.
 /// \since 1.0
 ///
 //===----------------------------------------------------------------------===//
diff --git a/lib/TBDGen/tapi/ExtendedInterfaceFile.cpp b/lib/TBDGen/tapi/ExtendedInterfaceFile.cpp
index ece934d..4a26b77 100644
--- a/lib/TBDGen/tapi/ExtendedInterfaceFile.cpp
+++ b/lib/TBDGen/tapi/ExtendedInterfaceFile.cpp
@@ -8,7 +8,7 @@
 //===----------------------------------------------------------------------===//
 ///
 /// \file
-/// \brief Implements the Extended Interface File
+/// Implements the Extended Interface File
 ///
 //===----------------------------------------------------------------------===//
 
diff --git a/lib/TBDGen/tapi/ExtendedInterfaceFile.h b/lib/TBDGen/tapi/ExtendedInterfaceFile.h
index a634dec..a10e184 100644
--- a/lib/TBDGen/tapi/ExtendedInterfaceFile.h
+++ b/lib/TBDGen/tapi/ExtendedInterfaceFile.h
@@ -8,7 +8,7 @@
 //===----------------------------------------------------------------------===//
 ///
 /// \file
-/// \brief A generic and abstract interface representation for linkable objects.
+/// A generic and abstract interface representation for linkable objects.
 ///        This could be an MachO executable, bundle, dylib, or text-based stub
 ///        file.
 ///
diff --git a/lib/TBDGen/tapi/File.h b/lib/TBDGen/tapi/File.h
index 93739a6..64e7250 100644
--- a/lib/TBDGen/tapi/File.h
+++ b/lib/TBDGen/tapi/File.h
@@ -8,7 +8,7 @@
 //===----------------------------------------------------------------------===//
 ///
 /// \file
-/// \brief TAPI File abstraction.
+/// TAPI File abstraction.
 ///
 //===----------------------------------------------------------------------===//
 
@@ -26,43 +26,43 @@
 
 // clang-format off
 enum FileType : unsigned {
-  /// \brief Invalid file type.
+  /// Invalid file type.
   Invalid                   = 0U,
 
-  /// \brief TAPI Configuration file.
+  /// TAPI Configuration file.
   TAPI_Configuration_V1     = 1U <<  0,
 
-  /// \brief MachO Dynamic Library file.
+  /// MachO Dynamic Library file.
   MachO_DynamicLibrary      = 1U <<  1,
 
-  /// \brief MachO Dynamic Library Stub file.
+  /// MachO Dynamic Library Stub file.
   MachO_DynamicLibrary_Stub = 1U <<  2,
 
-  /// \brief MachO Bundle file.
+  /// MachO Bundle file.
   MachO_Bundle              = 1U <<  3,
 
-  /// \brief Text-based stub file (.tbd) version 1.0
+  /// Text-based stub file (.tbd) version 1.0
   TBD_V1                    = 1U <<  4,
 
-  /// \brief Text-based stub file (.tbd) version 2.0
+  /// Text-based stub file (.tbd) version 2.0
   TBD_V2                    = 1U <<  5,
 
-  /// \brief Text-based stub file (.tbd) version 3.0
+  /// Text-based stub file (.tbd) version 3.0
   TBD_V3                    = 1U <<  6,
 
-  /// \brief JSON Header List
+  /// JSON Header List
   JSON_V1                   = 1U <<  7,
 
-  /// \brief LD64 re-export file
+  /// LD64 re-export file
   ReexportFile              = 1U <<  8,
 
-  /// \brief Text-based API file (.api) version 1.0
+  /// Text-based API file (.api) version 1.0
   API_V1                    = 1U <<  9,
 
-  /// \brief Text-based SPI file (.spi) version 1.0
+  /// Text-based SPI file (.spi) version 1.0
   SPI_V1                    = 1U << 10,
 
-  /// \brief SDKDB file (.sdkdb) version 1.0
+  /// SDKDB file (.sdkdb) version 1.0
   SDKDB_V1                  = 1U << 11,
 
   All                       = ~0U,
@@ -79,7 +79,7 @@
                                static_cast<unsigned>(rhs));
 }
 
-/// \brief Abstract TAPI file.
+/// Abstract TAPI file.
 class File {
 public:
   enum class Kind : unsigned {
diff --git a/lib/TBDGen/tapi/InterfaceFile.cpp b/lib/TBDGen/tapi/InterfaceFile.cpp
index 074e32b..ed0c7b1 100644
--- a/lib/TBDGen/tapi/InterfaceFile.cpp
+++ b/lib/TBDGen/tapi/InterfaceFile.cpp
@@ -8,7 +8,7 @@
 //===----------------------------------------------------------------------===//
 ///
 /// \file
-/// \brief Implements the Interface File
+/// Implements the Interface File
 ///
 //===----------------------------------------------------------------------===//
 
diff --git a/lib/TBDGen/tapi/InterfaceFile.h b/lib/TBDGen/tapi/InterfaceFile.h
index e7b9f64..a191a29 100644
--- a/lib/TBDGen/tapi/InterfaceFile.h
+++ b/lib/TBDGen/tapi/InterfaceFile.h
@@ -8,7 +8,7 @@
 //===----------------------------------------------------------------------===//
 ///
 /// \file
-/// \brief A generic and abstract interface representation for linkable objects.
+/// A generic and abstract interface representation for linkable objects.
 ///        This could be an MachO executable, bundle, dylib, or text-based stub
 ///        file.
 ///
diff --git a/lib/TBDGen/tapi/InterfaceFileBase.cpp b/lib/TBDGen/tapi/InterfaceFileBase.cpp
index d31d5f5..31b4ac7 100644
--- a/lib/TBDGen/tapi/InterfaceFileBase.cpp
+++ b/lib/TBDGen/tapi/InterfaceFileBase.cpp
@@ -8,7 +8,7 @@
 //===----------------------------------------------------------------------===//
 ///
 /// \file
-/// \brief Implements the Interface File Base
+/// Implements the Interface File Base
 ///
 //===----------------------------------------------------------------------===//
 
diff --git a/lib/TBDGen/tapi/InterfaceFileBase.h b/lib/TBDGen/tapi/InterfaceFileBase.h
index 7d89b18..c7c97b6 100644
--- a/lib/TBDGen/tapi/InterfaceFileBase.h
+++ b/lib/TBDGen/tapi/InterfaceFileBase.h
@@ -8,7 +8,7 @@
 //===----------------------------------------------------------------------===//
 ///
 /// \file
-/// \brief Abstract base class for interface files.
+/// Abstract base class for interface files.
 ///
 //===----------------------------------------------------------------------===//
 
diff --git a/lib/TBDGen/tapi/LinkerInterfaceFile.h b/lib/TBDGen/tapi/LinkerInterfaceFile.h
index 80ceccf..adf26ab 100644
--- a/lib/TBDGen/tapi/LinkerInterfaceFile.h
+++ b/lib/TBDGen/tapi/LinkerInterfaceFile.h
@@ -8,7 +8,7 @@
 //===----------------------------------------------------------------------===//
 ///
 /// \file
-/// \brief API for reading TAPI files.
+/// API for reading TAPI files.
 /// \since 1.0
 ///
 //===----------------------------------------------------------------------===//
@@ -36,113 +36,113 @@
 class Symbol;
 
 ///
-/// \brief Defines a list of supported platforms.
+/// Defines a list of supported platforms.
 /// \since 1.0
 ///
 enum class Platform : unsigned {
-  /// \brief Unknown platform
+  /// Unknown platform
   /// \since 1.0
   Unknown = 0,
 
-  /// \brief Mac OS X
+  /// Mac OS X
   /// \since 1.0
   OSX = 1,
 
-  /// \brief iOS
+  /// iOS
   /// \since 1.0
   iOS = 2,
 
-  /// \brief watchOS
+  /// watchOS
   /// \since 1.0
   watchOS = 3,
 
-  /// \brief tvOS
+  /// tvOS
   /// \since 1.0
   tvOS = 4,
 
-  /// \brief bridgeOS
+  /// bridgeOS
   /// \since 1.2
   bridgeOS = 5,
 };
 
 ///
-/// \brief Defines a list of Objective-C constraints.
+/// Defines a list of Objective-C constraints.
 /// \since 1.0
 ///
 enum class ObjCConstraint : unsigned {
-  /// \brief No constraint.
+  /// No constraint.
   /// \since 1.0
   None = 0,
 
-  /// \brief Retain/Release.
+  /// Retain/Release.
   /// \since 1.0
   Retain_Release = 1,
 
-  /// \brief Retain/Release for Simulator.
+  /// Retain/Release for Simulator.
   /// \since 1.0
   Retain_Release_For_Simulator = 2,
 
-  /// \brief Retain/Release or Garbage Collection.
+  /// Retain/Release or Garbage Collection.
   /// \since 1.0
   Retain_Release_Or_GC = 3,
 
-  /// \brief Garbage Collection.
+  /// Garbage Collection.
   /// \since 1.0
   GC = 4,
 };
 
 ///
-/// \brief Defines a list of supported file types.
+/// Defines a list of supported file types.
 /// \since 1.0
 ///
 enum class FileType : unsigned {
-  /// \brief Unsupported file type.
+  /// Unsupported file type.
   /// \since 1.0
   Unsupported = 0,
 
-  /// \brief Text-based Dynamic Library Stub File (.tbd) version 1.0
+  /// Text-based Dynamic Library Stub File (.tbd) version 1.0
   /// \since 1.0
   TBD_V1 = 1,
 
-  /// \brief Text-based stub file (.tbd) version 2.0
+  /// Text-based stub file (.tbd) version 2.0
   /// \since 1.0
   TBD_V2 = 2,
 
-  /// \brief Text-based stub file (.tbd) version 3.0
+  /// Text-based stub file (.tbd) version 3.0
   /// \since 1.3
   TBD_V3 = 3,
 };
 
 ///
-/// \brief Defines the cpu subtype matching mode.
+/// Defines the cpu subtype matching mode.
 /// \since 1.0
 ///
 enum class CpuSubTypeMatching : unsigned {
-  /// \brief Fall-back to an ABI compatible slice if an exact match cannot be
+  /// Fall-back to an ABI compatible slice if an exact match cannot be
   ///        found.
   /// \since 1.0
   ABI_Compatible = 0,
 
-  /// \brief Only accept a slice if the sub type matches.
+  /// Only accept a slice if the sub type matches.
   /// \since 1.0
   Exact = 1,
 };
 
 ///
-/// \brief Defines flags that control the parsing of text-based stub files.
+/// Defines flags that control the parsing of text-based stub files.
 /// \since 1.1
 ///
 enum ParsingFlags : unsigned {
-  /// \brief Default flags.
+  /// Default flags.
   /// \since 1.1
   None = 0,
 
-  /// \brief Only accept a slice if the sub type matches. ABI fall-back mode is
+  /// Only accept a slice if the sub type matches. ABI fall-back mode is
   ///        the default.
   /// \since 1.1
   ExactCpuSubType = 1U << 0,
 
-  /// \brief Disallow weak imported symbols. This adds weak imported symbols to
+  /// Disallow weak imported symbols. This adds weak imported symbols to
   ///        the ignore exports list.
   /// \since 1.1
   DisallowWeakImports = 1U << 1,
@@ -159,13 +159,13 @@
 }
 
 ///
-/// \brief TAPI File APIs
+/// TAPI File APIs
 /// \since 1.0
 ///
 class TAPI_PUBLIC LinkerInterfaceFile {
 public:
   ///
-  /// \brief Returns a list of supported file extensions.
+  /// Returns a list of supported file extensions.
   ///
   /// \returns a list of supported file extensions.
   /// \since 1.0
@@ -173,7 +173,7 @@
   static std::vector<std::string> getSupportedFileExtensions() noexcept;
 
   ///
-  /// \brief Indicate if the provided buffer is a supported Text-based Dynamic
+  /// Indicate if the provided buffer is a supported Text-based Dynamic
   ///        Library Stub file.
   ///
   /// Checks if the buffer is a supported format. This doesn't check for
@@ -189,7 +189,7 @@
                           size_t size) noexcept;
 
   ///
-  /// \brief Check if we should prefer the text-based stub file.
+  /// Check if we should prefer the text-based stub file.
   ///
   /// \param[in] path full path to the text-based stub file.
   /// \returns true if the tex-based stub file should be prefered over any
@@ -199,7 +199,7 @@
   static bool shouldPreferTextBasedStubFile(const std::string &path) noexcept;
 
   ///
-  /// \brief Check if the text-based stub file and the MachO dynamic library
+  /// Check if the text-based stub file and the MachO dynamic library
   ///        file are in sync.
   ///
   /// This validates both files against each other and checks if both files are
@@ -214,7 +214,7 @@
                             const std::string &dylibPath) noexcept;
 
   ///
-  /// \brief Create a LinkerInterfaceFile from the provided buffer.
+  /// Create a LinkerInterfaceFile from the provided buffer.
   ///
   /// Parses the content of the provided buffer with the given constrains for
   /// cpu type, cpu sub-type, matching requirement, and minimum deployment
@@ -240,7 +240,7 @@
          std::string &errorMessage) noexcept;
 
   ///
-  /// \brief Create a LinkerInterfaceFile from the provided buffer.
+  /// Create a LinkerInterfaceFile from the provided buffer.
   ///
   /// Parses the content of the provided buffer with the given constrains for
   /// cpu type, cpu sub-type, flags, and minimum deployment version.
@@ -264,7 +264,7 @@
          PackedVersion32 minOSVersion, std::string &errorMessage) noexcept;
 
   ///
-  /// \brief Create a LinkerInterfaceFile from a file.
+  /// Create a LinkerInterfaceFile from a file.
   ///
   /// Parses the content of the file with the given constrains for cpu type,
   /// cpu sub-type, flags, and minimum deployment version.
@@ -286,28 +286,28 @@
          std::string &errorMessage) noexcept;
 
   ///
-  /// \brief Query the file type.
+  /// Query the file type.
   /// \return Returns the file type this TAPI file represents.
   /// \since 1.0
   ///
   FileType getFileType() const noexcept;
 
   ///
-  /// \brief Query the platform
+  /// Query the platform
   /// \return Returns the platform supported by the TAPI file.
   /// \since 1.0
   ///
   Platform getPlatform() const noexcept;
 
   ///
-  /// \brief Query the install name.
+  /// Query the install name.
   /// \return Returns the install name of the TAPI file.
   /// \since 1.0
   ///
   const std::string &getInstallName() const noexcept;
 
   ///
-  /// \brief Query the install name is version specifc.
+  /// Query the install name is version specifc.
   /// \return True if the install name has been adjusted for the provided
   ///         minimum OS version.
   /// \since 1.0
@@ -315,70 +315,70 @@
   bool isInstallNameVersionSpecific() const noexcept;
 
   ///
-  /// \brief Query the current library version.
+  /// Query the current library version.
   /// \return Returns the current library version as 32bit packed version.
   /// \since 1.0
   ///
   PackedVersion32 getCurrentVersion() const noexcept;
 
   ///
-  /// \brief Query the compatibility library version.
+  /// Query the compatibility library version.
   /// \return Returns the compatibility library version as 32bit packed version.
   /// \since 1.0
   ///
   PackedVersion32 getCompatibilityVersion() const noexcept;
 
   ///
-  /// \brief Query the Swift ABI version.
+  /// Query the Swift ABI version.
   /// \return Returns the Swift ABI version as unsigned integer.
   /// \since 1.0
   ///
   unsigned getSwiftVersion() const noexcept;
 
   ///
-  /// \brief Query the Objective-C Constraint.
+  /// Query the Objective-C Constraint.
   /// \return Returns the Objetive-C constraint.
   /// \since 1.0
   ///
   ObjCConstraint getObjCConstraint() const noexcept;
 
   ///
-  /// \brief Query if the library has two level namespace.
+  /// Query if the library has two level namespace.
   /// \return Returns true if the library has two level namespace.
   /// \since 1.0
   ///
   bool hasTwoLevelNamespace() const noexcept;
 
   ///
-  /// \brief Query if the library is Applicatiuon Extension Safe.
+  /// Query if the library is Applicatiuon Extension Safe.
   /// \return Returns true if the library is Application Extension Safe.
   /// \since 1.0
   ///
   bool isApplicationExtensionSafe() const noexcept;
 
   ///
-  /// \brief Query if the library has any allowable clients.
+  /// Query if the library has any allowable clients.
   /// \return Return true if there are any allowable clients.
   /// \since 1.0
   ///
   bool hasAllowableClients() const noexcept;
 
   ///
-  /// \brief Query if the library has any re-exported libraries.
+  /// Query if the library has any re-exported libraries.
   /// \return Return true if there are any re-exported libraries.
   /// \since 1.0
   ///
   bool hasReexportedLibraries() const noexcept;
 
   ///
-  /// \brief Query if the library has any weak defined exports.
+  /// Query if the library has any weak defined exports.
   /// \return Return true if there are any weak defined exports.
   /// \since 1.0
   ///
   bool hasWeakDefinedExports() const noexcept;
 
   ///
-  /// \brief Obtain the name of the parent framework (umbrella framework).
+  /// Obtain the name of the parent framework (umbrella framework).
   /// \return Returns the name of the parent framework (if it exists), otherwise
   ///         an empty string.
   /// \since 1.0
@@ -386,49 +386,49 @@
   const std::string &getParentFrameworkName() const noexcept;
 
   ///
-  /// \brief Obtain the list of allowable clients.
+  /// Obtain the list of allowable clients.
   /// \return Returns a list of allowable clients.
   /// \since 1.0
   ///
   const std::vector<std::string> &allowableClients() const noexcept;
 
   ///
-  /// \brief Obtain the list of re-exported libraries.
+  /// Obtain the list of re-exported libraries.
   /// \return Returns a list of re-exported libraries.
   /// \since 1.0
   ///
   const std::vector<std::string> &reexportedLibraries() const noexcept;
 
   ///
-  /// \brief Obtain a list of all symbols to be ignored.
+  /// Obtain a list of all symbols to be ignored.
   /// \return Returns a list of all symbols that should be ignored.
   /// \since 1.0
   ///
   const std::vector<std::string> &ignoreExports() const noexcept;
 
   ///
-  /// \brief Obtain a list of all exported symbols.
+  /// Obtain a list of all exported symbols.
   /// \return Returns a list of all exported symbols.
   /// \since 1.0
   ///
   const std::vector<Symbol> &exports() const noexcept;
 
   ///
-  /// \brief Obtain a list of all undefined symbols.
+  /// Obtain a list of all undefined symbols.
   /// \return Returns a list of all undefined symbols.
   /// \since 1.0
   ///
   const std::vector<Symbol> &undefineds() const noexcept;
 
   ///
-  /// \brief Obtain a list of all inlined frameworks.
+  /// Obtain a list of all inlined frameworks.
   /// \return Returns a list of install names of all inlined frameworks.
   /// \since 1.3
   ///
   const std::vector<std::string> &inlinedFrameworkNames() const noexcept;
 
   ///
-  /// \brief Create a LinkerInterfaceFile from the specified inlined framework.
+  /// Create a LinkerInterfaceFile from the specified inlined framework.
   ///
   /// Creates a LinkerInterfaceFile with the given constrains for cpu type,
   /// cpu sub-type, flags, and minimum deployment version.
@@ -451,20 +451,20 @@
                       std::string &errorMessage) const noexcept;
 
   ///
-  /// \brief Destructor.
+  /// Destructor.
   /// \since 1.0
   ///
   ~LinkerInterfaceFile() noexcept;
 
   ///
-  /// \brief Copy constructor (deleted).
+  /// Copy constructor (deleted).
   /// \since 1.0
   ///
   LinkerInterfaceFile(const LinkerInterfaceFile &) noexcept = delete;
   LinkerInterfaceFile &operator=(const LinkerInterfaceFile &) noexcept = delete;
 
   ///
-  /// \brief Move constructor.
+  /// Move constructor.
   /// \since 1.0
   ///
   LinkerInterfaceFile(LinkerInterfaceFile &&) noexcept;
diff --git a/lib/TBDGen/tapi/PackedVersion32.h b/lib/TBDGen/tapi/PackedVersion32.h
index 0dc7029..e837291 100644
--- a/lib/TBDGen/tapi/PackedVersion32.h
+++ b/lib/TBDGen/tapi/PackedVersion32.h
@@ -8,7 +8,7 @@
 //===----------------------------------------------------------------------===//
 ///
 /// \file
-/// \brief Defines the packed version number.
+/// Defines the packed version number.
 /// \since 1.0
 ///
 //===----------------------------------------------------------------------===//
@@ -27,7 +27,7 @@
 TAPI_NAMESPACE_V1_BEGIN
 
 ///
-/// \brief Packed Version Number Encoding.
+/// Packed Version Number Encoding.
 ///
 /// The Mach-O version numbers are commonly encoded as a 32bit value, where the
 /// upper 16 bit quantity is used for the major version number and the lower two
@@ -41,19 +41,19 @@
 
 public:
   ///
-  /// \brief Default construct a PackedVersion32.
+  /// Default construct a PackedVersion32.
   /// \since 1.0
   ///
   PackedVersion32() = default;
 
   ///
-  /// \brief Construct a PackedVersion32 with a raw value.
+  /// Construct a PackedVersion32 with a raw value.
   /// \since 1.0
   ///
   PackedVersion32(uint32_t rawVersion) : _version(rawVersion) {}
 
   ///
-  /// \brief Construct a PackedVersion32 with the provided major, minor, and
+  /// Construct a PackedVersion32 with the provided major, minor, and
   /// patch version number.
   /// \since 1.0
   ///
@@ -61,21 +61,21 @@
       : _version((major << 16) | ((minor & 0xff) << 8) | (patch & 0xff)) {}
 
   ///
-  /// \brief Get the major version number.
+  /// Get the major version number.
   /// \return The major version number as unsigned integer.
   /// \since 1.0
   ///
   unsigned getMajor() const { return _version >> 16; }
 
   ///
-  /// \brief Get the minor version number.
+  /// Get the minor version number.
   /// \return The minor version number as unsigned integer.
   /// \since 1.0
   ///
   unsigned getMinor() const { return (_version >> 8) & 0xff; }
 
   ///
-  /// \brief Get the patch version number.
+  /// Get the patch version number.
   /// \return The patch version number as unsigned integer.
   /// \since 1.0
   ///
diff --git a/lib/TBDGen/tapi/Platform.cpp b/lib/TBDGen/tapi/Platform.cpp
index 5df905b..2022634 100644
--- a/lib/TBDGen/tapi/Platform.cpp
+++ b/lib/TBDGen/tapi/Platform.cpp
@@ -8,7 +8,7 @@
 //===----------------------------------------------------------------------===//
 ///
 /// \file
-/// \brief Implements platform specific helper functions.
+/// Implements platform specific helper functions.
 ///
 //===----------------------------------------------------------------------===//
 
diff --git a/lib/TBDGen/tapi/Platform.h b/lib/TBDGen/tapi/Platform.h
index fb439ff..0c7c1b6 100644
--- a/lib/TBDGen/tapi/Platform.h
+++ b/lib/TBDGen/tapi/Platform.h
@@ -8,7 +8,7 @@
 //===----------------------------------------------------------------------===//
 ///
 /// \file
-/// \brief Defines the platform enum.
+/// Defines the platform enum.
 ///
 //===----------------------------------------------------------------------===//
 
diff --git a/lib/TBDGen/tapi/Registry.cpp b/lib/TBDGen/tapi/Registry.cpp
index 988401b..5be845b 100644
--- a/lib/TBDGen/tapi/Registry.cpp
+++ b/lib/TBDGen/tapi/Registry.cpp
@@ -8,7 +8,7 @@
 //===----------------------------------------------------------------------===//
 ///
 /// \file
-/// \brief Implements the TAPI Registry.
+/// Implements the TAPI Registry.
 ///
 //===----------------------------------------------------------------------===//
 
diff --git a/lib/TBDGen/tapi/Registry.h b/lib/TBDGen/tapi/Registry.h
index 76e5ff0..068e159 100644
--- a/lib/TBDGen/tapi/Registry.h
+++ b/lib/TBDGen/tapi/Registry.h
@@ -8,7 +8,7 @@
 //===----------------------------------------------------------------------===//
 ///
 /// \file
-/// \brief The TAPI registry keeps track of the supported file formats.
+/// The TAPI registry keeps track of the supported file formats.
 ///
 //===----------------------------------------------------------------------===//
 
diff --git a/lib/TBDGen/tapi/STLExtras.h b/lib/TBDGen/tapi/STLExtras.h
index e2ce022..4377916 100644
--- a/lib/TBDGen/tapi/STLExtras.h
+++ b/lib/TBDGen/tapi/STLExtras.h
@@ -8,7 +8,7 @@
 //===----------------------------------------------------------------------===//
 ///
 /// \file
-/// \brief Simplify common uses cases of C++ code.
+/// Simplify common uses cases of C++ code.
 ///
 //===----------------------------------------------------------------------===//
 
diff --git a/lib/TBDGen/tapi/Symbol.h b/lib/TBDGen/tapi/Symbol.h
index 740bdeb..2914dc0 100644
--- a/lib/TBDGen/tapi/Symbol.h
+++ b/lib/TBDGen/tapi/Symbol.h
@@ -8,7 +8,7 @@
 //===----------------------------------------------------------------------===//
 ///
 /// \file
-/// \brief Defines a symbol.
+/// Defines a symbol.
 /// \since 1.0
 ///
 //===----------------------------------------------------------------------===//
@@ -27,23 +27,23 @@
 TAPI_NAMESPACE_V1_BEGIN
 
 ///
-/// \brief Symbol flags.
+/// Symbol flags.
 /// \since 1.0
 ///
 enum class SymbolFlags : unsigned {
-  /// \brief No flags
+  /// No flags
   /// \since 1.0
   None = 0,
 
-  /// \brief Thread-local value symbol
+  /// Thread-local value symbol
   /// \since 1.0
   ThreadLocalValue = 1U << 0,
 
-  /// \brief Weak defined symbol
+  /// Weak defined symbol
   /// \since 1.0
   WeakDefined = 1U << 1,
 
-  /// \brief Weak referenced symbol
+  /// Weak referenced symbol
   /// \since 1.0
   WeakReferenced = 1U << 2,
 };
@@ -55,7 +55,7 @@
 }
 
 ///
-/// \brief Provides query methods for symbols.
+/// Provides query methods for symbols.
 /// \since 1.0
 ///
 class TAPI_PUBLIC Symbol {
@@ -65,21 +65,21 @@
       : _name(std::forward<Tp>(name)), _flags(flags) {}
 
   ///
-  /// \brief Get the symbol name as string.
+  /// Get the symbol name as string.
   /// \return A string with the symbol name.
   /// \since 1.0
   ///
   inline const std::string &getName() const noexcept { return _name; }
 
   ///
-  /// \brief Obtain the symbol flags.
+  /// Obtain the symbol flags.
   /// \return Returns the symbol flags.
   /// \since 1.0
   ///
   inline SymbolFlags getFlags() const noexcept { return _flags; }
 
   ///
-  /// \brief Query if the symbol is thread-local.
+  /// Query if the symbol is thread-local.
   /// \return True if the symbol is a thread-local value, false otherwise.
   /// \since 1.0
   ///
@@ -89,7 +89,7 @@
   }
 
   ///
-  /// \brief Query if the symbol is weak defined.
+  /// Query if the symbol is weak defined.
   /// \return True if the symbol is weak defined, false otherwise.
   /// \since 1.0
   ///
@@ -98,7 +98,7 @@
   }
 
   ///
-  /// \brief Query if the symbol is weak referenced.
+  /// Query if the symbol is weak referenced.
   /// \return True if the symbol is weak referenced, false otherwise.
   /// \since 1.0
   ///
diff --git a/lib/TBDGen/tapi/TapiError.cpp b/lib/TBDGen/tapi/TapiError.cpp
index 657233c..9bf1bc5 100644
--- a/lib/TBDGen/tapi/TapiError.cpp
+++ b/lib/TBDGen/tapi/TapiError.cpp
@@ -8,7 +8,7 @@
 //===----------------------------------------------------------------------===//
 ///
 /// \file
-/// \brief Implements TAPI Error.
+/// Implements TAPI Error.
 ///
 //===----------------------------------------------------------------------===//
 
diff --git a/lib/TBDGen/tapi/TapiError.h b/lib/TBDGen/tapi/TapiError.h
index cf1e3df..6a66381 100644
--- a/lib/TBDGen/tapi/TapiError.h
+++ b/lib/TBDGen/tapi/TapiError.h
@@ -8,7 +8,7 @@
 //===----------------------------------------------------------------------===//
 ///
 /// \file
-/// \brief Define TAPI specific error codes.
+/// Define TAPI specific error codes.
 ///
 //===----------------------------------------------------------------------===//
 
diff --git a/lib/TBDGen/tapi/TextStub_v3.cpp b/lib/TBDGen/tapi/TextStub_v3.cpp
index 9ac914b..a1bf4f2 100644
--- a/lib/TBDGen/tapi/TextStub_v3.cpp
+++ b/lib/TBDGen/tapi/TextStub_v3.cpp
@@ -8,7 +8,7 @@
 //===----------------------------------------------------------------------===//
 ///
 /// \file
-/// \brief Implements the text stub file (TBD v3) reader/writer.
+/// Implements the text stub file (TBD v3) reader/writer.
 ///
 //===----------------------------------------------------------------------===//
 
diff --git a/lib/TBDGen/tapi/TextStub_v3.h b/lib/TBDGen/tapi/TextStub_v3.h
index 49d4b1e..3351c69 100644
--- a/lib/TBDGen/tapi/TextStub_v3.h
+++ b/lib/TBDGen/tapi/TextStub_v3.h
@@ -8,7 +8,7 @@
 //===----------------------------------------------------------------------===//
 ///
 /// \file
-/// \brief Defines the content of a text stub v3 file.
+/// Defines the content of a text stub v3 file.
 ///
 //===----------------------------------------------------------------------===//
 
diff --git a/lib/TBDGen/tapi/Version.h b/lib/TBDGen/tapi/Version.h
index 3492c0b..e8c4817 100644
--- a/lib/TBDGen/tapi/Version.h
+++ b/lib/TBDGen/tapi/Version.h
@@ -8,7 +8,7 @@
 //===----------------------------------------------------------------------===//
 ///
 /// \file
-/// \brief Access the TAPI version information.
+/// Access the TAPI version information.
 /// \since 1.0
 ///
 //===----------------------------------------------------------------------===//
@@ -32,7 +32,7 @@
 namespace tapi {
 
 ///
-/// \brief Access to version related information about the TAPI dynamic library.
+/// Access to version related information about the TAPI dynamic library.
 /// \since 1.0
 ///
 class TAPI_PUBLIC Version {
@@ -43,42 +43,42 @@
   ///
 
   ///
-  /// \brief Get the major version number.
+  /// Get the major version number.
   /// \return The major version number as unsigned integer.
   /// \since 1.0
   ///
   static unsigned getMajor() noexcept;
 
   ///
-  /// \brief Get the minor version number.
+  /// Get the minor version number.
   /// \return The minor version number as unsigned integer.
   /// \since 1.0
   ///
   static unsigned getMinor() noexcept;
 
   ///
-  /// \brief Get the patch version number.
+  /// Get the patch version number.
   /// \return The patch version as unsigned integer.
   /// \since 1.0
   ///
   static unsigned getPatch() noexcept;
 
   ///
-  /// \brief Get the library version as string.
+  /// Get the library version as string.
   /// \return A string with the version number.
   /// \since 1.0
   ///
   static std::string getAsString() noexcept;
 
   ///
-  /// \brief Get the full library name and version as string.
+  /// Get the full library name and version as string.
   /// \return A string with the program name and version number.
   /// \since 1.0
   ///
   static std::string getFullVersionAsString() noexcept;
 
   ///
-  /// \brief Check if the current version is at least the specified version or
+  /// Check if the current version is at least the specified version or
   ///        greater.
   /// \param[in] major The major version number to compare against.
   /// \param[in] minor The minor version number to compare against.
diff --git a/lib/TBDGen/tapi/XPI.cpp b/lib/TBDGen/tapi/XPI.cpp
index 6ce7e86..bf31576 100644
--- a/lib/TBDGen/tapi/XPI.cpp
+++ b/lib/TBDGen/tapi/XPI.cpp
@@ -8,7 +8,7 @@
 //===----------------------------------------------------------------------===//
 ///
 /// \file
-/// \brief Implements the XPI set
+/// Implements the XPI set
 ///
 //===----------------------------------------------------------------------===//
 
diff --git a/lib/TBDGen/tapi/XPI.h b/lib/TBDGen/tapi/XPI.h
index b0789d40..e7a3dec 100644
--- a/lib/TBDGen/tapi/XPI.h
+++ b/lib/TBDGen/tapi/XPI.h
@@ -8,7 +8,7 @@
 //===----------------------------------------------------------------------===//
 ///
 /// \file
-/// \brief Defines XPI - API, SPI, etc
+/// Defines XPI - API, SPI, etc
 ///
 //===----------------------------------------------------------------------===//
 
@@ -39,7 +39,7 @@
 
 using SymbolFlags = tapi::v1::SymbolFlags;
 
-/// \brief Helper method to create the symbol flags from the XPI flags.
+/// Helper method to create the symbol flags from the XPI flags.
 inline SymbolFlags operator|=(SymbolFlags &lhs,
                               const SymbolFlags &rhs) noexcept {
   lhs = static_cast<SymbolFlags>(static_cast<unsigned>(lhs) |
@@ -47,7 +47,7 @@
   return lhs;
 }
 
-/// \brief The different XPI kinds.
+/// The different XPI kinds.
 enum class XPIKind : unsigned {
   GlobalSymbol,
   ObjectiveCClass,
@@ -58,7 +58,7 @@
   ObjCProtocol,
 };
 
-/// \brief The XPI access permissions/visibility.
+/// The XPI access permissions/visibility.
 enum class XPIAccess : unsigned {
   Unknown,
   Exported,
@@ -70,13 +70,13 @@
 
 class XPI {
 protected:
-  /// \brief Construct an XPI - the constructor should only be called by a
+  /// Construct an XPI - the constructor should only be called by a
   /// sub-class.
   XPI(XPIKind kind, StringRef name, XPIAccess access,
       SymbolFlags flags = SymbolFlags::None)
       : _name(name), _kind(kind), _access(access), _flags(flags) {}
 
-  /// \brief Construct an XPI - the constructor should only be called by a
+  /// Construct an XPI - the constructor should only be called by a
   /// sub-class.
   XPI(XPIKind kind, StringRef name, XPIAccess access, Architecture arch,
       AvailabilityInfo &info)
@@ -197,13 +197,13 @@
   ArchitectureSet _archs{};
 
 protected:
-  /// \brief The kind of xpi.
+  /// The kind of xpi.
   XPIKind _kind;
 
-  /// \brief The access permission/visibility of this xpi.
+  /// The access permission/visibility of this xpi.
   XPIAccess _access;
 
-  /// \brief Hoisted GlobalSymbol flags.
+  /// Hoisted GlobalSymbol flags.
   SymbolFlags _flags;
 };
 
diff --git a/lib/TBDGen/tapi/XPISet.cpp b/lib/TBDGen/tapi/XPISet.cpp
index fef41a9..f090d16 100644
--- a/lib/TBDGen/tapi/XPISet.cpp
+++ b/lib/TBDGen/tapi/XPISet.cpp
@@ -8,7 +8,7 @@
 //===----------------------------------------------------------------------===//
 ///
 /// \file
-/// \brief Implements the XPI set
+/// Implements the XPI set
 ///
 //===----------------------------------------------------------------------===//
 
diff --git a/lib/TBDGen/tapi/XPISet.h b/lib/TBDGen/tapi/XPISet.h
index 1aab56c..3e155bd 100644
--- a/lib/TBDGen/tapi/XPISet.h
+++ b/lib/TBDGen/tapi/XPISet.h
@@ -8,7 +8,7 @@
 //===----------------------------------------------------------------------===//
 ///
 /// \file
-/// \brief Defines the XPI Set - A set of API, SPI, etc
+/// Defines the XPI Set - A set of API, SPI, etc
 ///
 //===----------------------------------------------------------------------===//
 
diff --git a/lib/TBDGen/tapi/YAML.cpp b/lib/TBDGen/tapi/YAML.cpp
index 64d8b63..e4798af 100644
--- a/lib/TBDGen/tapi/YAML.cpp
+++ b/lib/TBDGen/tapi/YAML.cpp
@@ -8,7 +8,7 @@
 //===----------------------------------------------------------------------===//
 ///
 /// \file
-/// \brief Implements common YAML mappings
+/// Implements common YAML mappings
 ///
 //===----------------------------------------------------------------------===//
 
diff --git a/lib/TBDGen/tapi/YAML.h b/lib/TBDGen/tapi/YAML.h
index 731c6e0..0a0f474 100644
--- a/lib/TBDGen/tapi/YAML.h
+++ b/lib/TBDGen/tapi/YAML.h
@@ -8,7 +8,7 @@
 //===----------------------------------------------------------------------===//
 ///
 /// \file
-/// \brief Defines common YAML mappings
+/// Defines common YAML mappings
 ///
 //===----------------------------------------------------------------------===//
 
diff --git a/lib/TBDGen/tapi/YAMLReaderWriter.cpp b/lib/TBDGen/tapi/YAMLReaderWriter.cpp
index d7f710a..0268f67 100644
--- a/lib/TBDGen/tapi/YAMLReaderWriter.cpp
+++ b/lib/TBDGen/tapi/YAMLReaderWriter.cpp
@@ -8,7 +8,7 @@
 //===----------------------------------------------------------------------===//
 ///
 /// \file
-/// \brief Implements the YAML reader/writer.
+/// Implements the YAML reader/writer.
 ///
 //===----------------------------------------------------------------------===//
 
diff --git a/lib/TBDGen/tapi/YAMLReaderWriter.h b/lib/TBDGen/tapi/YAMLReaderWriter.h
index 6ec24b4..a91db62 100644
--- a/lib/TBDGen/tapi/YAMLReaderWriter.h
+++ b/lib/TBDGen/tapi/YAMLReaderWriter.h
@@ -8,7 +8,7 @@
 //===----------------------------------------------------------------------===//
 ///
 /// \file
-/// \brief Defines the YAML Reader/Writer.
+/// Defines the YAML Reader/Writer.
 ///
 //===----------------------------------------------------------------------===//
 
diff --git a/lib/TBDGen/tapi/tapi.h b/lib/TBDGen/tapi/tapi.h
index 0c85a6d..77c8294 100644
--- a/lib/TBDGen/tapi/tapi.h
+++ b/lib/TBDGen/tapi/tapi.h
@@ -8,7 +8,7 @@
 //===----------------------------------------------------------------------===//
 ///
 /// \file
-/// \brief This is the umbrella header for the TAPI C++ Library Interface.
+/// This is the umbrella header for the TAPI C++ Library Interface.
 /// \since 1.0
 ///
 //===----------------------------------------------------------------------===//
diff --git a/stdlib/public/SDK/XCTest/XCTestCaseAdditions.mm b/stdlib/public/SDK/XCTest/XCTestCaseAdditions.mm
index c3cc74e..40dcfdc 100644
--- a/stdlib/public/SDK/XCTest/XCTestCaseAdditions.mm
+++ b/stdlib/public/SDK/XCTest/XCTestCaseAdditions.mm
@@ -55,7 +55,7 @@
 }
 
 
-/// \brief Demangle a mangled class name into module+class.
+/// Demangle a mangled class name into module+class.
 /// Returns true if the name was successfully decoded.
 /// On success, *outModule and *outClass must be freed with free().
 /// FIXME: this should be replaced by a real demangler
diff --git a/stdlib/public/core/BridgeObjectiveC.swift b/stdlib/public/core/BridgeObjectiveC.swift
index 44a2cd3..7dc8996 100644
--- a/stdlib/public/core/BridgeObjectiveC.swift
+++ b/stdlib/public/core/BridgeObjectiveC.swift
@@ -374,10 +374,9 @@
   ///   `Pointee`.
   @inlinable
   public var pointee: Pointee {
-    /// Retrieve the value the pointer points to.
-    @_transparent get {
+    @_transparent _read {
       // We can do a strong load normally.
-      return UnsafePointer(self).pointee
+      yield UnsafePointer(self).pointee
     }
     /// Set the value the pointer points to, copying over the previous value.
     ///
@@ -414,9 +413,9 @@
   @inlinable // unsafe-performance
   public subscript(i: Int) -> Pointee {
     @_transparent
-    get {
+    _read {
       // We can do a strong load normally.
-      return (UnsafePointer<Pointee>(self) + i).pointee
+      yield ((UnsafePointer<Pointee>(self) + i).pointee)
     }
   }
 
diff --git a/stdlib/public/core/MigrationSupport.swift b/stdlib/public/core/MigrationSupport.swift
index b553c81..a0fd8b8 100644
--- a/stdlib/public/core/MigrationSupport.swift
+++ b/stdlib/public/core/MigrationSupport.swift
@@ -157,150 +157,6 @@
 @available(*, unavailable, renamed: "Optional")
 public typealias ImplicitlyUnwrappedOptional<Wrapped> = Optional<Wrapped>
 
-@available(swift, deprecated: 3.1, obsoleted: 4.0, message: "Use FixedWidthInteger protocol instead")
-public typealias BitwiseOperations = _BitwiseOperations
-
-public protocol _BitwiseOperations {
-  static func & (lhs: Self, rhs: Self) -> Self
-  static func | (lhs: Self, rhs: Self) -> Self
-  static func ^ (lhs: Self, rhs: Self) -> Self
-  static prefix func ~ (x: Self) -> Self
-  static var allZeros: Self { get }
-}
-
-extension _BitwiseOperations {  
-    @available(swift, obsoleted: 4.1)
-    public static func |= (lhs: inout Self, rhs: Self) {
-      lhs = lhs | rhs
-    }
-
-    @available(swift, obsoleted: 4.1)
-    public static func &= (lhs: inout Self, rhs: Self) {
-      lhs = lhs & rhs
-    }
-
-    @available(swift, obsoleted: 4.1)
-    public static func ^= (lhs: inout Self, rhs: Self) {
-      lhs = lhs ^ rhs
-    }
-}
-
-extension FloatingPoint {
-  @available(swift, obsoleted: 4, message: "Please use operators instead.")
-  public func negated() -> Self {
-    return -self
-  }
-
-  @available(swift, obsoleted: 4, message: "Please use operators instead.")
-  public func adding(_ other: Self) -> Self {
-    return self + other
-  }
-
-  @available(swift, obsoleted: 4, message: "Please use operators instead.")
-  public mutating func add(_ other: Self) {
-    self += other
-  }
-
-  @available(swift, obsoleted: 4, message: "Please use operators instead.")
-  public func subtracting(_ other: Self) -> Self {
-    return self - other
-  }
-
-  @available(swift, obsoleted: 4, message: "Please use operators instead.")
-  public mutating func subtract(_ other: Self) {
-    self -= other
-  }
-
-  @available(swift, obsoleted: 4, message: "Please use operators instead.")
-  public func multiplied(by other: Self) -> Self {
-    return self * other
-  }
-
-  @available(swift, obsoleted: 4, message: "Please use operators instead.")
-  public mutating func multiply(by other: Self) {
-    self *= other
-  }
-
-  @available(swift, obsoleted: 4, message: "Please use operators instead.")
-  public func divided(by other: Self) -> Self {
-    return self / other
-  }
-
-  @available(swift, obsoleted: 4, message: "Please use operators instead.")
-  public mutating func divide(by other: Self) {
-    self /= other
-  }
-}
-
-extension FloatingPoint {
-  @available(*, unavailable, message: "Use bitPattern property instead")
-  public func _toBitPattern() -> UInt {
-    fatalError("unavailable")
-  }
-
-  @available(*, unavailable, message: "Use init(bitPattern:) instead")
-  public static func _fromBitPattern(_ bits: UInt) -> Self {
-    fatalError("unavailable")
-  }
-}
-
-extension BinaryFloatingPoint {
-  @available(*, unavailable, renamed: "isSignalingNaN")
-  public var isSignaling: Bool {
-    fatalError("unavailable")
-  }
-
-  @available(*, unavailable, renamed: "nan")
-  public var NaN: Bool {
-    fatalError("unavailable")
-  }
-  @available(*, unavailable, renamed: "nan")
-  public var quietNaN: Bool {
-    fatalError("unavailable")
-  }
-}
-
-@available(*, unavailable, renamed: "FloatingPoint")
-public typealias FloatingPointType = FloatingPoint
-
-// Swift 3 compatibility APIs
-@available(swift, obsoleted: 4, renamed: "BinaryInteger")
-public typealias Integer = BinaryInteger
-
-@available(swift, obsoleted: 4, renamed: "BinaryInteger")
-public typealias IntegerArithmetic = BinaryInteger
-
-@available(swift, obsoleted: 4, message: "Please use 'SignedNumeric & Comparable' instead.")
-public typealias SignedNumber = SignedNumeric & Comparable
-
-@available(swift, obsoleted: 4, message: "Please use 'SignedNumeric & Comparable' instead.")
-public typealias AbsoluteValuable = SignedNumeric & Comparable
-
-@available(swift, obsoleted: 4, renamed: "SignedInteger")
-public typealias _SignedInteger = SignedInteger
-
-extension SignedNumeric where Self : Comparable {
-  @available(swift, obsoleted: 4, message: "Please use the 'abs(_:)' free function.")
-  @_transparent
-  public static func abs(_ x: Self) -> Self {
-    return Swift.abs(x)
-  }
-}
-
-extension BinaryInteger {
-  @available(swift, obsoleted: 4)
-  public func toIntMax() -> Int64 {
-    return Int64(self)
-  }
-}
-
-extension UnsignedInteger {
-  @available(swift, obsoleted: 4)
-  public func toUIntMax() -> UInt64 {
-    return UInt64(self)
-  }
-}
-
 extension Range where Bound: Strideable, Bound.Stride : SignedInteger {
   /// Now that Range is conditionally a collection when Bound: Strideable,
   /// CountableRange is no longer needed. This is a deprecated initializer
@@ -321,13 +177,6 @@
   }  
 }
 
-extension _ExpressibleByColorLiteral {
-  @available(swift, deprecated: 3.2, obsoleted: 4.0, message: "This initializer is only meant to be used by color literals")
-  public init(colorLiteralRed red: Float, green: Float, blue: Float, alpha: Float) {
-    self.init(_colorLiteralRed: red, green: green, blue: blue, alpha: alpha)
-  }
-}
-
 @available(swift, deprecated: 5.0, renamed: "KeyValuePairs")
 public typealias DictionaryLiteral<Key, Value> = KeyValuePairs<Key, Value>
 
@@ -354,43 +203,6 @@
   }
 }
 
-extension FloatingPoint {
-  @available(swift, deprecated: 3.1, obsoleted: 4.0, message: "Please use the `abs(_:)` free function")
-  public static func abs(_ x: Self) -> Self {
-    return x.magnitude
-  }
-}
-
-extension FixedWidthInteger {
-  /// The empty bitset.
-  @available(swift, deprecated: 3.1, obsoleted: 4.0, message: "Use 0")
-  public static var allZeros: Self { return 0 }
-  
-  @available(*, unavailable, message:
-    "Use operators or addingReportingOverflow instead.")
-  public func unsafeAdding(_ other: Self) -> Self {
-    fatalError("unavailable")
-  }
-  
-  @available(*, unavailable, message:
-    "Use operators or subtractingReportingOverflow instead.")
-  public func unsafeSubtracting(_ other: Self) -> Self {
-    fatalError("unavailable")
-  }
-  
-  @available(*, unavailable, message:
-    "Use operators or multipliedReportingOverflow(by:) instead.")
-  public func unsafeMultiplied(by other: Self) -> Self {
-    fatalError("unavailable")
-  }
-  
-  @available(*, unavailable, message:
-    "Use operators or dividedReportingOverflow(by:) instead.")
-  public func unsafeDivided(by other: Self) -> Self {
-    fatalError("unavailable")
-  }
-}
-
 extension String {
   /// A view of a string's contents as a collection of characters.
   ///
@@ -407,12 +219,8 @@
   /// characters, so this type is now just an alias for String.
   @available(swift, deprecated: 3.2, obsoleted: 5.0, message: "Please use String directly")
   public var characters: String {
-    get {
-      return self
-    }
-    set {
-      self = newValue
-    }
+    get { return self }
+    set { self = newValue }
   }
 
   /// Applies the given closure to a mutable view of the string's characters.
@@ -426,42 +234,8 @@
   ) -> R {
     return body(&self)
   }
-
-  @available(swift, deprecated: 3.2, obsoleted: 4.0)
-  public init?(_ utf16: UTF16View) {
-    Builtin.unreachable()
-  }
-
-  @available(swift, deprecated: 3.2, message: "Failable initializer was removed in Swift 4. When upgrading to Swift 4, please use non-failable String.init(_:UTF8View)")
-  @available(swift, obsoleted: 4.0, message: "Please use non-failable String.init(_:UTF8View) instead")
-  public init?(_ utf8: UTF8View) {
-    Builtin.unreachable()
-  }
 }
 
-extension String { // RangeReplaceableCollection
-  // The defaulted argument prevents this initializer from satisfies the
-  // LosslessStringConvertible conformance.  You can satisfy a protocol
-  // requirement with something that's not yet available, but not with
-  // something that has become unavailable. Without this, the code won't
-  // compile as Swift 4.
-  @available(swift, obsoleted: 4, message: "String.init(_:String) is no longer failable")
-  public init?(_ other: String, obsoletedInSwift4: () = ()) {
-    Builtin.unreachable()
-  }
-}
-
-@available(*, unavailable, renamed: "TextOutputStream")
-public typealias OutputStreamType = TextOutputStream
-
-extension TextOutputStreamable {
-  @available(*, unavailable, renamed: "write(to:)")
-  public func writeTo<Target : TextOutputStream>(_ target: inout Target) {
-    Builtin.unreachable()
-  }
-}
-
-
 extension String.UnicodeScalarView : _CustomPlaygroundQuickLookable {
   @available(swift, deprecated: 4.2/*, obsoleted: 5.0*/, message: "UnicodeScalarView.customPlaygroundQuickLook will be removed in Swift 5.0")
   public var customPlaygroundQuickLook: _PlaygroundQuickLook {
@@ -469,88 +243,6 @@
   }
 }
 
-// backward compatibility for index interchange.
-extension String.UnicodeScalarView {
-  @available(swift, obsoleted: 4.0, message: "Any String view index conversion can fail in Swift 4; please unwrap the optional index")
-  public func index(after i: Index?) -> Index {
-    Builtin.unreachable()
-  }
-  @available(swift, obsoleted: 4.0, message: "Any String view index conversion can fail in Swift 4; please unwrap the optional index")
-  public func index(_ i: Index?,  offsetBy n: Int) -> Index {
-    Builtin.unreachable()
-  }
-  @available(swift, obsoleted: 4.0, message: "Any String view index conversion can fail in Swift 4; please unwrap the optional indices")
-  public func distance(from i: Index?, to j: Index?) -> Int {
-    Builtin.unreachable()
-  }
-  @available(swift, obsoleted: 4.0, message: "Any String view index conversion can fail in Swift 4; please unwrap the optional index")
-  public subscript(i: Index?) -> Unicode.Scalar {
-    Builtin.unreachable()
-  }
-}
-
-// backward compatibility for index interchange.
-extension String.UTF16View {
-  @available(swift, obsoleted: 4.0, message: "Any String view index conversion can fail in Swift 4; please unwrap the optional index")
-  public func index(after i: Index?) -> Index {
-    Builtin.unreachable()
-  }
-  @available(swift, obsoleted: 4.0, message: "Any String view index conversion can fail in Swift 4; please unwrap the optional index")
-  public func index(_ i: Index?, offsetBy n: Int) -> Index {
-    Builtin.unreachable()
-  }
-  @available(swift, obsoleted: 4.0, message: "Any String view index conversion can fail in Swift 4; please unwrap the optional indices")
-  public func distance(from i: Index?, to j: Index?) -> Int {
-    Builtin.unreachable()
-  }
-  @available(swift, obsoleted: 4.0, message: "Any String view index conversion can fail in Swift 4; please unwrap the optional index")
-  public subscript(i: Index?) -> Unicode.UTF16.CodeUnit {
-    Builtin.unreachable()
-  }
-}
-
-// backward compatibility for index interchange.
-extension String.UTF8View {
-  @available(swift, obsoleted: 4.0, message: "Any String view index conversion can fail in Swift 4; please unwrap the optional index")
-  public func index(after i: Index?) -> Index {
-    Builtin.unreachable()
-  }
-  @available(swift, obsoleted: 4.0, message: "Any String view index conversion can fail in Swift 4; please unwrap the optional index")
-  public func index(_ i: Index?, offsetBy n: Int) -> Index {
-    Builtin.unreachable()
-  }
-  @available(swift, obsoleted: 4.0, message: "Any String view index conversion can fail in Swift 4; please unwrap the optional indices")
-  public func distance(from i: Index?, to j: Index?) -> Int {
-    Builtin.unreachable()
-  }
-  @available(swift, obsoleted: 4.0, message: "Any String view index conversion can fail in Swift 4; please unwrap the optional index")
-  public subscript(i: Index?) -> Unicode.UTF8.CodeUnit {
-    Builtin.unreachable()
-  }
-}
-
-//===--- String/Substring Slicing Support ---------------------------------===//
-/// In Swift 3.2, in the absence of type context,
-///
-///     someString[someString.startIndex..<someString.endIndex]
-///
-/// was deduced to be of type `String`.  Therefore have a more-specific
-/// Swift-3-only `subscript` overload on `String` (and `Substring`) that
-/// continues to produce `String`.
-extension String {
-  @available(swift, obsoleted: 4)
-  public subscript(bounds: Range<Index>) -> String {
-    _boundsCheck(bounds)
-    return String(self[bounds])
-  }
-
-  @available(swift, obsoleted: 4)
-  public subscript(bounds: ClosedRange<Index>) -> String {
-    _boundsCheck(bounds)
-    return String(self[bounds])
-  }
-}
-
 //===--- Slicing Support --------------------------------------------------===//
 // In Swift 3.2, in the absence of type context,
 //
@@ -573,47 +265,6 @@
   }
 }
 
-//===--- Slicing Support --------------------------------------------------===//
-// In Swift 3.2, in the absence of type context,
-//
-//   someString.utf16[someString.utf16.startIndex..<someString.utf16.endIndex]
-//
-// was deduced to be of type `String.UTF16View`.  Provide a more-specific
-// Swift-3-only `subscript` overload that continues to produce
-// `String.UTF16View`.
-extension String.UTF16View {
-  @available(swift, obsoleted: 4)
-  public subscript(bounds: Range<Index>) -> String.UTF16View {
-    Builtin.unreachable()
-  }
-
-  @available(swift, obsoleted: 4)
-  public subscript(bounds: ClosedRange<Index>) -> String.UTF16View {
-    Builtin.unreachable()
-  }
-}
-
-//===--- Slicing Support --------------------------------------------------===//
-/// In Swift 3.2, in the absence of type context,
-///
-///   someString.utf8[someString.utf8.startIndex..<someString.utf8.endIndex]
-///
-/// was deduced to be of type `String.UTF8View`.  Provide a more-specific
-/// Swift-3-only `subscript` overload that continues to produce
-/// `String.UTF8View`.
-extension String.UTF8View {
-  @available(swift, obsoleted: 4)
-  public subscript(bounds: Range<Index>) -> String.UTF8View {
-    Builtin.unreachable()
-  }
-
-
-  @available(swift, obsoleted: 4)
-  public subscript(bounds: ClosedRange<Index>) -> String.UTF8View {
-    Builtin.unreachable()
-  }
-}
-
 // @available(swift,deprecated: 5.0, renamed: "Unicode.UTF8")
 public typealias UTF8 = Unicode.UTF8
 // @available(swift, deprecated: 5.0, renamed: "Unicode.UTF16")
@@ -624,22 +275,6 @@
 public typealias UnicodeScalar = Unicode.Scalar
 
 
-// popFirst() is only present when a collection is its own subsequence. This was
-// dropped in Swift 4.
-extension String {
-  @available(swift, deprecated: 3.2, obsoleted: 4, message: "Please use 'first', 'dropFirst()', or 'Substring.popFirst()'.")
-  public mutating func popFirst() -> String.Element? {
-    Builtin.unreachable()
-  }
-}
-
-extension String.UnicodeScalarView {
-  @available(swift, deprecated: 3.2, obsoleted: 4, message: "Please use 'first', 'dropFirst()', or 'Substring.UnicodeScalarView.popFirst()'.")
-  public mutating func popFirst() -> String.UnicodeScalarView.Element? {
-    Builtin.unreachable()
-  }
-}
-
 extension String.UTF16View : _CustomPlaygroundQuickLookable {
   @available(swift, deprecated: 4.2/*, obsoleted: 5.0*/, message: "UTF16View.customPlaygroundQuickLook will be removed in Swift 5.0")
   public var customPlaygroundQuickLook: _PlaygroundQuickLook {
@@ -654,15 +289,6 @@
   }
 }
 
-extension StringProtocol {
-  @available(swift, deprecated: 3.2, obsoleted: 4.0, renamed: "UTF8View.Index")
-  public typealias UTF8Index = UTF8View.Index
-  @available(swift, deprecated: 3.2, obsoleted: 4.0, renamed: "UTF16View.Index")
-  public typealias UTF16Index = UTF16View.Index
-  @available(swift, deprecated: 3.2, obsoleted: 4.0, renamed: "UnicodeScalarView.Index")
-  public typealias UnicodeScalarIndex = UnicodeScalarView.Index
-}
-
 extension Substring {
   /// A view of a string's contents as a collection of characters.
   ///
@@ -787,38 +413,6 @@
   }
 }
 
-extension Strideable {
-  @available(swift, deprecated: 3, obsoleted: 4, message: "Please use explicit type conversions or Strideable methods for mixed-type arithmetics.")
-  public static func + (lhs: Self, rhs: Self.Stride) -> Self {
-    return lhs.advanced(by: rhs)
-  }
-
-  @available(swift, deprecated: 3, obsoleted: 4, message: "Please use explicit type conversions or Strideable methods for mixed-type arithmetics.")
-  public static func + (lhs: Self.Stride, rhs: Self) -> Self {
-    return rhs.advanced(by: lhs)
-  }
-
-  @available(swift, deprecated: 3, obsoleted: 4, message: "Please use explicit type conversions or Strideable methods for mixed-type arithmetics.")
-  public static func - (lhs: Self, rhs: Self.Stride) -> Self {
-    return lhs.advanced(by: -rhs)
-  }
-
-  @available(swift, deprecated: 3, obsoleted: 4, message: "Please use explicit type conversions or Strideable methods for mixed-type arithmetics.")
-  public static func - (lhs: Self, rhs: Self) -> Self.Stride {
-    return rhs.distance(to: lhs)
-  }
-
-  @available(swift, deprecated: 3, obsoleted: 4, message: "Please use explicit type conversions or Strideable methods for mixed-type arithmetics.")
-  public static func += (lhs: inout Self, rhs: Self.Stride) {
-    lhs = lhs.advanced(by: rhs)
-  }
-
-  @available(swift, deprecated: 3, obsoleted: 4, message: "Please use explicit type conversions or Strideable methods for mixed-type arithmetics.")
-  public static func -= (lhs: inout Self, rhs: Self.Stride) {
-    lhs = lhs.advanced(by: -rhs)
-  }
-}
-
 extension UnsafeMutableRawPointer {
   @available(*, unavailable, renamed: "init(mutating:)")
   public init(_ from : UnsafeRawPointer) { Builtin.unreachable() }
@@ -1013,45 +607,6 @@
   }
 }
 
-extension String.Index {
-  @available(swift, deprecated: 3.2, obsoleted: 4.0)
-  public init(_position: Int) {
-    self.init(encodedOffset: _position)
-  }
-
-  @available(swift, deprecated: 3.2, obsoleted: 4.0)
-  public init(_codeUnitOffset: Int) {
-    self.init(encodedOffset: _codeUnitOffset)
-  }
-
-  @available(swift, deprecated: 3.2, obsoleted: 4.0)
-  public var _utf16Index: Int {
-    return self.encodedOffset
-  }
-
-  @available(swift, deprecated: 3.2, obsoleted: 4.0)
-  public var _offset: Int {
-    return self.encodedOffset
-  }
-}
-
-// backward compatibility for index interchange.
-extension Optional where Wrapped == String.Index {
-  @available(swift, obsoleted: 4.0, message: "Any String view index conversion can fail in Swift 4; please unwrap the optional indices")
-  public static func ..<(
-    lhs: String.Index?, rhs: String.Index?
-  ) -> Range<String.Index> {
-    return lhs! ..< rhs!
-  }
-
-  @available(swift, obsoleted: 4.0, message: "Any String view index conversion can fail in Swift 4; please unwrap the optional indices")
-  public static func ...(
-    lhs: String.Index?, rhs: String.Index?
-  ) -> ClosedRange<String.Index> {
-    return lhs! ... rhs!
-  }
-}
-
 extension Zip2Sequence {
   @available(swift, deprecated: 4.2, obsoleted: 5.0, renamed: "Sequence1.Iterator")
   public typealias Stream1 = Sequence1.Iterator
@@ -1106,78 +661,6 @@
   case _raw([UInt8], String)
 }
 
-// Maintain old `keys` and `values` types in Swift 3 mode.
-extension Dictionary {
-  /// A collection containing just the keys of the dictionary.
-  ///
-  /// When iterated over, keys appear in this collection in the same order as
-  /// they occur in the dictionary's key-value pairs. Each key in the keys
-  /// collection has a unique value.
-  ///
-  ///     let countryCodes = ["BR": "Brazil", "GH": "Ghana", "JP": "Japan"]
-  ///     print(countryCodes)
-  ///     // Prints "["BR": "Brazil", "JP": "Japan", "GH": "Ghana"]"
-  ///
-  ///     for k in countryCodes.keys {
-  ///         print(k)
-  ///     }
-  ///     // Prints "BR"
-  ///     // Prints "JP"
-  ///     // Prints "GH"
-  @available(swift, obsoleted: 4.0)
-  public var keys: LazyMapCollection<[Key: Value], Key> {
-    return self.lazy.map { $0.key }
-  }
-
-  /// A collection containing just the values of the dictionary.
-  ///
-  /// When iterated over, values appear in this collection in the same order as
-  /// they occur in the dictionary's key-value pairs.
-  ///
-  ///     let countryCodes = ["BR": "Brazil", "GH": "Ghana", "JP": "Japan"]
-  ///     print(countryCodes)
-  ///     // Prints "["BR": "Brazil", "JP": "Japan", "GH": "Ghana"]"
-  ///
-  ///     for v in countryCodes.values {
-  ///         print(v)
-  ///     }
-  ///     // Prints "Brazil"
-  ///     // Prints "Japan"
-  ///     // Prints "Ghana"
-  @available(swift, obsoleted: 4.0)
-  public var values: LazyMapCollection<[Key: Value], Value> {
-    return self.lazy.map { $0.value }
-  }
-
-  @available(swift, obsoleted: 4.0)
-  public __consuming func filter(
-    _ isIncluded: (Element) throws -> Bool, obsoletedInSwift4: () = ()
-  ) rethrows -> [Element] {
-    var result: [Element] = []
-    for x in self {
-      if try isIncluded(x) {
-        result.append(x)
-      }
-    }
-    return result
-  }
-}
-
-extension Set {
-  @available(swift, obsoleted: 4.0)
-  public __consuming func filter(
-    _ isIncluded: (Element) throws -> Bool, obsoletedInSwift4: () = ()
-  ) rethrows -> [Element] {
-    var result: [Element] = []
-    for x in self {
-      if try isIncluded(x) {
-        result.append(x)
-      }
-    }
-    return result
-  }  
-}
-
 extension _PlaygroundQuickLook {
   /// Creates a new Quick Look for the given instance.
   ///
diff --git a/stdlib/public/runtime/HeapObject.cpp b/stdlib/public/runtime/HeapObject.cpp
index 02032a4..53179a5 100644
--- a/stdlib/public/runtime/HeapObject.cpp
+++ b/stdlib/public/runtime/HeapObject.cpp
@@ -153,7 +153,7 @@
                       "Fatal error: Weak reference to stack object\n");
 }
 
-/// \brief Allocate a reference-counted object on the heap that
+/// Allocate a reference-counted object on the heap that
 /// occupies <size> bytes of maximally-aligned storage.  The object is
 /// uninitialized except for its header.
 SWIFT_CC(swift) SWIFT_RUNTIME_STDLIB_SPI
diff --git a/stdlib/public/runtime/Metadata.cpp b/stdlib/public/runtime/Metadata.cpp
index a6c93e6..2186353 100644
--- a/stdlib/public/runtime/Metadata.cpp
+++ b/stdlib/public/runtime/Metadata.cpp
@@ -2823,7 +2823,7 @@
 /*** Metatypes *************************************************************/
 /***************************************************************************/
 
-/// \brief Find the appropriate value witness table for the given type.
+/// Find the appropriate value witness table for the given type.
 static const ValueWitnessTable *
 getMetatypeValueWitnesses(const Metadata *instanceType) {
   // When metatypes are accessed opaquely, they always have a "thick"
@@ -2862,7 +2862,7 @@
 /// The uniquing structure for metatype type metadata.
 static SimpleGlobalCache<MetatypeCacheEntry> MetatypeTypes;
 
-/// \brief Fetch a uniqued metadata for a metatype type.
+/// Fetch a uniqued metadata for a metatype type.
 SWIFT_RUNTIME_EXPORT
 const MetatypeMetadata *
 swift::swift_getMetatypeMetadata(const Metadata *instanceMetadata) {
@@ -2986,7 +2986,7 @@
   assert(getNumWitnessTables() == numWitnessTables);
 }
 
-/// \brief Fetch a uniqued metadata for a metatype type.
+/// Fetch a uniqued metadata for a metatype type.
 SWIFT_RUNTIME_EXPORT
 const ExistentialMetatypeMetadata *
 swift::swift_getExistentialMetatypeMetadata(const Metadata *instanceMetadata) {
@@ -3493,7 +3493,7 @@
                                           &protocolRef);
 }
 
-/// \brief Fetch a uniqued metadata for an existential type. The array
+/// Fetch a uniqued metadata for an existential type. The array
 /// referenced by \c protocols will be sorted in-place.
 const ExistentialTypeMetadata *
 swift::swift_getExistentialTypeMetadata(
@@ -3564,7 +3564,7 @@
   }
 }
 
-/// \brief Perform a copy-assignment from one existential container to another.
+/// Perform a copy-assignment from one existential container to another.
 /// Both containers must be of the same existential type representable with no
 /// witness tables.
 OpaqueValue *swift::swift_assignExistentialWithCopy0(OpaqueValue *dest,
@@ -3574,7 +3574,7 @@
   return Witnesses::assignWithCopy(dest, const_cast<OpaqueValue*>(src), type);
 }
 
-/// \brief Perform a copy-assignment from one existential container to another.
+/// Perform a copy-assignment from one existential container to another.
 /// Both containers must be of the same existential type representable with one
 /// witness table.
 OpaqueValue *swift::swift_assignExistentialWithCopy1(OpaqueValue *dest,
@@ -3584,7 +3584,7 @@
   return Witnesses::assignWithCopy(dest, const_cast<OpaqueValue*>(src), type);
 }
 
-/// \brief Perform a copy-assignment from one existential container to another.
+/// Perform a copy-assignment from one existential container to another.
 /// Both containers must be of the same existential type representable with the
 /// same number of witness tables.
 OpaqueValue *swift::swift_assignExistentialWithCopy(OpaqueValue *dest,
diff --git a/stdlib/public/runtime/SwiftObject.mm b/stdlib/public/runtime/SwiftObject.mm
index abea0bf..18ad41e 100644
--- a/stdlib/public/runtime/SwiftObject.mm
+++ b/stdlib/public/runtime/SwiftObject.mm
@@ -102,7 +102,7 @@
 
 #if SWIFT_OBJC_INTEROP
 
-/// \brief Replacement for ObjC object_isClass(), which is unavailable on
+/// Replacement for ObjC object_isClass(), which is unavailable on
 /// deployment targets macOS 10.9 and iOS 7.
 static bool objcObjectIsClass(id object) {
   // same as object_isClass(object)
@@ -114,7 +114,7 @@
   return class_const_cast(_swift_getClassOfAllocated(object));
 }
 
-/// \brief Fetch the ObjC class object associated with the formal dynamic
+/// Fetch the ObjC class object associated with the formal dynamic
 /// type of the given (possibly Objective-C) object.  The formal
 /// dynamic type ignores dynamic subclasses such as those introduced
 /// by KVO.
@@ -144,7 +144,7 @@
 }
 #endif
 
-/// \brief Fetch the type metadata associated with the formal dynamic
+/// Fetch the type metadata associated with the formal dynamic
 /// type of the given (possibly Objective-C) object.  The formal
 /// dynamic type ignores dynamic subclasses such as those introduced
 /// by KVO.
diff --git a/test/ClangImporter/inlinable_bitfields.swift b/test/ClangImporter/inlinable_bitfields.swift
index 14d2db2..5f992f2 100644
--- a/test/ClangImporter/inlinable_bitfields.swift
+++ b/test/ClangImporter/inlinable_bitfields.swift
@@ -2,6 +2,9 @@
 // RUN: %target-swift-frontend %clang-importer-sdk %S/Inputs/inlinable_bitfields_other.swift -emit-module -emit-module-path %t/inlinable_bitfields_other.swiftmodule
 // RUN: %target-swift-frontend %clang-importer-sdk -I %t %s -emit-ir -disable-llvm-optzns -O | %FileCheck %s -DINT=i%target-ptrsize
 
+// rdar://46486435
+// REQUIRES: CPU=x86_64
+
 import inlinable_bitfields_other
 
 public func g(_ m: MM) -> UInt32 {
@@ -10,4 +13,4 @@
 
 // Just make sure this is a definition and not a declaration...
 
-// CHECK: define internal i32 @"$ModRM$rm$getter"([[INT]] %.coerce)
+// CHECK: define internal i32 @"$ModRM$rm$getter"
diff --git a/test/Constraints/closures.swift b/test/Constraints/closures.swift
index 0eaff39..894bcc0 100644
--- a/test/Constraints/closures.swift
+++ b/test/Constraints/closures.swift
@@ -747,7 +747,7 @@
 func f20371273() {
   let x: [Int] = [1, 2, 3, 4]
   let y: UInt = 4
-  _ = x.filter { ($0 + y)  > 42 } // expected-error {{'+' is unavailable}}
+  _ = x.filter { ($0 + y)  > 42 } // expected-error {{binary operator '+' cannot be applied to operands of type 'Int' and 'UInt'}} expected-note {{overloads for '+' exist with these partially matching parameter lists: (UInt, UInt), (Int, Int)}}
 }
 
 // rdar://problem/42337247
diff --git a/test/Constraints/diagnostics.swift b/test/Constraints/diagnostics.swift
index b1bf0f4..42b1331 100644
--- a/test/Constraints/diagnostics.swift
+++ b/test/Constraints/diagnostics.swift
@@ -708,9 +708,10 @@
 func r24251022() {
   var a = 1
   var b: UInt32 = 2
-  _ = a + b // expected-error {{unavailable}}
-  a += a + // expected-error {{binary operator '+=' cannot be applied to operands of type 'Int' and 'UInt32'}} expected-note {{overloads for '+=' exist}}
+  _ = a + b // expected-error {{binary operator '+' cannot be applied to operands of type 'Int' and 'UInt32'}} expected-note {{overloads for '+' exist with these partially matching parameter lists: (UInt32, UInt32), (Int, Int)}}
+  a += a + // expected-error {{binary operator '+' cannot be applied to operands of type 'Int' and 'UInt32'}} expected-note {{overloads for '+' exist with these partially matching parameter lists:}}
     b
+  a += b  // expected-error {{binary operator '+=' cannot be applied to operands of type 'Int' and 'UInt32'}} expected-note {{overloads for '+=' exist with these partially matching parameter lists: (inout UInt32, UInt32), (inout Int, Int)}}
 }
 
 func overloadSetResultType(_ a : Int, b : Int) -> Int {
@@ -1183,6 +1184,14 @@
 
   let _ = [i, j, k].reduce(0 as Int?) {
     $0 && $1 ? $0! + $1! : ($0 ? $0! : ($1 ? $1! : nil))
+    // expected-error@-1 {{cannot force unwrap value of non-optional type 'Bool'}} {{18-19=}}
+    // expected-error@-2 {{cannot force unwrap value of non-optional type 'Bool'}} {{24-25=}}
+    // expected-error@-3 {{cannot force unwrap value of non-optional type 'Bool'}} {{36-37=}}
+    // expected-error@-4 {{cannot force unwrap value of non-optional type 'Bool'}} {{48-49=}}
+  }
+
+  let _ = [i, j, k].reduce(0 as Int?) {
+    $0 && $1 ? $0 + $1 : ($0 ? $0 : ($1 ? $1 : nil))
     // expected-error@-1 {{ambiguous use of operator '+'}}
   }
 }
diff --git a/test/Constraints/dynamic_lookup.swift b/test/Constraints/dynamic_lookup.swift
index 048902a..9888157 100644
--- a/test/Constraints/dynamic_lookup.swift
+++ b/test/Constraints/dynamic_lookup.swift
@@ -210,7 +210,6 @@
 
 // Checked casts to AnyObject
 var p: P = Y()
-// expected-warning @+1 {{forced cast from 'P' to 'AnyObject' always succeeds; did you mean to use 'as'?}}
 var obj3 : AnyObject = (p as! AnyObject)! // expected-error{{cannot force unwrap value of non-optional type 'AnyObject'}} {{41-42=}}
 
 // Implicit force of an implicitly unwrapped optional
diff --git a/test/Constraints/optional.swift b/test/Constraints/optional.swift
index 1948c7d..b255778 100644
--- a/test/Constraints/optional.swift
+++ b/test/Constraints/optional.swift
@@ -292,3 +292,13 @@
   _ = Q("who")!.foo // Ok
   _ = Q?("how") // Ok
 }
+
+func rdar45218255(_ i: Int) {
+  struct S<T> {
+    init(_:[T]) {}
+  }
+
+  _ = i!           // expected-error {{cannot force unwrap value of non-optional type 'Int'}} {{8-9=}}
+  _ = [i!]         // expected-error {{cannot force unwrap value of non-optional type 'Int'}} {{9-10=}}
+  _ = S<Int>([i!]) // expected-error {{cannot force unwrap value of non-optional type 'Int'}} {{16-17=}}
+}
diff --git a/test/DWARFImporter/Inputs/module.modulemap b/test/DWARFImporter/Inputs/module.modulemap
new file mode 100644
index 0000000..a9ef2ed
--- /dev/null
+++ b/test/DWARFImporter/Inputs/module.modulemap
@@ -0,0 +1,4 @@
+module ObjCModule {
+  header "objc-header.h"
+  export *
+}
\ No newline at end of file
diff --git a/test/DWARFImporter/Inputs/objc-header.h b/test/DWARFImporter/Inputs/objc-header.h
new file mode 100644
index 0000000..b87f766
--- /dev/null
+++ b/test/DWARFImporter/Inputs/objc-header.h
@@ -0,0 +1,7 @@
+struct Point {
+  int x, y;
+};
+
+@interface ObjCClass
+- (instancetype)init;
+@end
diff --git a/test/DWARFImporter/basic.swift b/test/DWARFImporter/basic.swift
new file mode 100644
index 0000000..c8fa29d
--- /dev/null
+++ b/test/DWARFImporter/basic.swift
@@ -0,0 +1,32 @@
+// REQUIRES: executable_test
+// REQUIRES: objc_interop
+
+// RUN: %empty-directory(%t)
+
+// RUN: cp %S/Inputs/objc-header.h %S/Inputs/module.modulemap  %t
+// RUN: %target-build-swift -emit-executable %s -g -o %t/a.out \
+// RUN:   -module-name basic -emit-module -I%t
+//        -DOBJC -module-name basic
+// RUN: %lldb-moduleimport-test -verbose -dump-module %t/a.out | %FileCheck %s
+
+// RUN: rm %t/objc-header.h
+// RUN: %lldb-moduleimport-test -verbose -dump-module %t/a.out \
+// RUN:    | %FileCheck %s --check-prefix=FAIL
+
+// RUN: %lldb-moduleimport-test -verbose -dump-module %t/a.out \
+// RUN:    -enable-dwarf-importer | %FileCheck %s --check-prefix=SWIFTONLY
+
+// CHECK: Importing basic... ok!
+// FAIL: Importing basic... ok!
+// SWIFTONLY: Importing basic... ok!
+import ObjCModule
+
+let pureSwift = Int32(42)
+// FAIL-NOT:  var_decl
+// CHECK:     var_decl "pureSwift" {{.*}} type='Int32'
+// SWIFTONLY: var_decl "pureSwift" {{.*}} type='Int32' 
+
+let point = Point(x: 1, y: 2)
+// CHECK:     var_decl "point" {{.*}} type='Point'
+// SWIFTONLY-NOT: var_decl "point"
+
diff --git a/test/DebugInfo/simple.sil b/test/DebugInfo/simple.sil
index a70202c..b5cb8f9 100644
--- a/test/DebugInfo/simple.sil
+++ b/test/DebugInfo/simple.sil
@@ -6,7 +6,7 @@
 import Swift
 
 sil @square : $@convention(thin) (Int32) -> Int32 {
-bb0(%0 : @trivial $Int32):
+bb0(%0 : $Int32):
   debug_value %0 : $Int32, let, name "x" // id: %1
   %3 = struct_extract %0 : $Int32, #Int32._value       // user: %6
   %4 = struct_extract %0 : $Int32, #Int32._value       // user: %6
diff --git a/test/Driver/Dependencies/README.txt b/test/Driver/Dependencies/README.txt
index 0d7ab5b..f10ee21 100644
--- a/test/Driver/Dependencies/README.txt
+++ b/test/Driver/Dependencies/README.txt
@@ -8,7 +8,8 @@
 
 Because of the way the tests are set up, the dependency information is put into the .swift files; any such test needs to start by "building" everything to copy that information into .swiftdeps files. To avoid timestamp issues, most of these tests start with:
 
-    // RUN: rm -rf %t && cp -r %S/Inputs/<TEST_GRAPH>/ %t
+    // RUN: %empty-directory(%t)
+    // RUN: cp -r %S/Inputs/<TEST_GRAPH>/* %t
     // RUN: touch -t 201401240005 %t/*
 
 
@@ -21,6 +22,7 @@
 
 Most of these tests start with:
 
-    // RUN: rm -rf %t && cp -r %S/Inputs/<TEST_GRAPH>/ %t
+    // RUN: %empty-directory(%t)
+    // RUN: cp -r %S/Inputs/<TEST_GRAPH>/* %t
     // RUN: touch -t 201401240005 %t/*.swift
     // RUN: touch -t 201401240006 %t/*.o
diff --git a/test/Driver/Dependencies/bindings-build-record-options.swift b/test/Driver/Dependencies/bindings-build-record-options.swift
index 550a454..3f8fd56 100644
--- a/test/Driver/Dependencies/bindings-build-record-options.swift
+++ b/test/Driver/Dependencies/bindings-build-record-options.swift
@@ -1,4 +1,5 @@
-// RUN: rm -rf %t && cp -r %S/Inputs/bindings-build-record/ %t
+// RUN: %empty-directory(%t)
+// RUN: cp -r %S/Inputs/bindings-build-record/* %t
 // RUN: touch -t 201401240005 %t/*
 
 // RUN: cd %t && %swiftc_driver -c -module-name main -driver-print-bindings ./main.swift ./other.swift ./yet-another.swift -incremental -output-file-map %t/output.json 2>&1 | %FileCheck %s -check-prefix=MUST-EXEC-INITIAL
diff --git a/test/Driver/Dependencies/bindings-build-record.swift b/test/Driver/Dependencies/bindings-build-record.swift
index 85d2751..bf52005 100644
--- a/test/Driver/Dependencies/bindings-build-record.swift
+++ b/test/Driver/Dependencies/bindings-build-record.swift
@@ -1,5 +1,6 @@
-// RUN: rm -rf %t && cp -r %S/Inputs/bindings-build-record/ %t
-// RUN: %S/Inputs/touch.py 443865900 %t/*
+// RUN: %empty-directory(%t)
+// RUN: cp -r %S/Inputs/bindings-build-record/* %t
+// RUN: %{python} %S/Inputs/touch.py 443865900 %t/*
 
 // RUN: cd %t && %swiftc_driver -driver-print-bindings ./main.swift ./other.swift ./yet-another.swift -incremental -output-file-map %t/output.json 2>&1 | %FileCheck %s -check-prefix=MUST-EXEC
 
@@ -29,13 +30,13 @@
 
 // FILE-ADDED: inputs: ["./added.swift"], output: {{[{].*[}]}}, condition: newly-added{{$}}
 
-// RUN: %S/Inputs/touch.py 443865960 %t/main.swift
+// RUN: %{python} %S/Inputs/touch.py 443865960 %t/main.swift
 // RUN: cd %t && %swiftc_driver -driver-print-bindings ./main.swift ./other.swift ./yet-another.swift -incremental -output-file-map %t/output.json 2>&1 | %FileCheck %s -check-prefix=BUILD-RECORD-PLUS-CHANGE
 // BUILD-RECORD-PLUS-CHANGE: inputs: ["./main.swift"], output: {{[{].*[}]}}, condition: run-without-cascading
 // BUILD-RECORD-PLUS-CHANGE: inputs: ["./other.swift"], output: {{[{].*[}]}}, condition: run-without-cascading{{$}}
 // BUILD-RECORD-PLUS-CHANGE: inputs: ["./yet-another.swift"], output: {{[{].*[}]$}}
 
-// RUN: %S/Inputs/touch.py 443865900 %t/*
+// RUN: %{python} %S/Inputs/touch.py 443865900 %t/*
 // RUN: cd %t && %swiftc_driver -driver-print-bindings ./main.swift ./other.swift -incremental -output-file-map %t/output.json 2>&1 | %FileCheck %s -check-prefix=FILE-REMOVED
 // FILE-REMOVED: inputs: ["./main.swift"], output: {{[{].*[}]$}}
 // FILE-REMOVED: inputs: ["./other.swift"], output: {{[{].*[}]$}}
diff --git a/test/Driver/Dependencies/build-record-invalid.swift b/test/Driver/Dependencies/build-record-invalid.swift
index 16ffbf8..5fa21b2 100644
--- a/test/Driver/Dependencies/build-record-invalid.swift
+++ b/test/Driver/Dependencies/build-record-invalid.swift
@@ -1,4 +1,5 @@
-// RUN: rm -rf %t && cp -r %S/Inputs/bindings-build-record/ %t
+// RUN: %empty-directory(%t)
+// RUN: cp -r %S/Inputs/bindings-build-record/* %t
 // RUN: touch -t 201401240005 %t/*
 
 // RUN: cd %t && %swiftc_driver -c -driver-use-frontend-path %S/Inputs/update-dependencies.py -output-file-map %t/output.json -incremental ./main.swift ./other.swift -module-name main -j1 -v 2>&1 | %FileCheck %s -check-prefix=CHECK-ALL-BUILT
diff --git a/test/Driver/Dependencies/chained-additional-kinds.swift b/test/Driver/Dependencies/chained-additional-kinds.swift
index 5aad8ab..7d8fb82 100644
--- a/test/Driver/Dependencies/chained-additional-kinds.swift
+++ b/test/Driver/Dependencies/chained-additional-kinds.swift
@@ -1,6 +1,7 @@
 // other ==> main ==> yet-another
 
-// RUN: rm -rf %t && cp -r %S/Inputs/chained-additional-kinds/ %t
+// RUN: %empty-directory(%t)
+// RUN: cp -r %S/Inputs/chained-additional-kinds/* %t
 // RUN: touch -t 201401240005 %t/*
 
 // RUN: cd %t && %swiftc_driver -c -driver-use-frontend-path %S/Inputs/update-dependencies.py -output-file-map %t/output.json -incremental -driver-always-rebuild-dependents ./main.swift ./other.swift ./yet-another.swift -module-name main -j1 -v 2>&1 | %FileCheck -check-prefix=CHECK-FIRST %s
diff --git a/test/Driver/Dependencies/chained-after.swift b/test/Driver/Dependencies/chained-after.swift
index 901fb3c..cc18a6d 100644
--- a/test/Driver/Dependencies/chained-after.swift
+++ b/test/Driver/Dependencies/chained-after.swift
@@ -1,7 +1,8 @@
 /// other ==> main | yet-another
 /// other ==> main +==> yet-another
 
-// RUN: rm -rf %t && cp -r %S/Inputs/chained-after/ %t
+// RUN: %empty-directory(%t)
+// RUN: cp -r %S/Inputs/chained-after/* %t
 // RUN: touch -t 201401240005 %t/*.swift
 
 // Generate the build record...
diff --git a/test/Driver/Dependencies/chained-private-after-multiple-nominal-members.swift b/test/Driver/Dependencies/chained-private-after-multiple-nominal-members.swift
index 5bc9173..c106897 100644
--- a/test/Driver/Dependencies/chained-private-after-multiple-nominal-members.swift
+++ b/test/Driver/Dependencies/chained-private-after-multiple-nominal-members.swift
@@ -1,7 +1,8 @@
 /// other --> main ==> yet-another
 /// other ==>+ main ==> yet-another
 
-// RUN: rm -rf %t && cp -r %S/Inputs/chained-private-after-multiple-nominal-members/ %t
+// RUN: %empty-directory(%t)
+// RUN: cp -r %S/Inputs/chained-private-after-multiple-nominal-members/* %t
 // RUN: touch -t 201401240005 %t/*.swift
 
 // Generate the build record...
diff --git a/test/Driver/Dependencies/chained-private-after-multiple.swift b/test/Driver/Dependencies/chained-private-after-multiple.swift
index a203d7d..04522f3 100644
--- a/test/Driver/Dependencies/chained-private-after-multiple.swift
+++ b/test/Driver/Dependencies/chained-private-after-multiple.swift
@@ -1,7 +1,8 @@
 /// other --> main ==> yet-another
 /// other ==>+ main ==> yet-another
 
-// RUN: rm -rf %t && cp -r %S/Inputs/chained-private-after-multiple/ %t
+// RUN: %empty-directory(%t)
+// RUN: cp -r %S/Inputs/chained-private-after-multiple/* %t
 // RUN: touch -t 201401240005 %t/*.swift
 
 // Generate the build record...
diff --git a/test/Driver/Dependencies/chained-private-after.swift b/test/Driver/Dependencies/chained-private-after.swift
index 555bd64..00b6b48 100644
--- a/test/Driver/Dependencies/chained-private-after.swift
+++ b/test/Driver/Dependencies/chained-private-after.swift
@@ -1,7 +1,8 @@
 /// other --> main ==> yet-another
 /// other ==>+ main ==> yet-another
 
-// RUN: rm -rf %t && cp -r %S/Inputs/chained-private-after/ %t
+// RUN: %empty-directory(%t)
+// RUN: cp -r %S/Inputs/chained-private-after/* %t
 // RUN: touch -t 201401240005 %t/*.swift
 
 // Generate the build record...
diff --git a/test/Driver/Dependencies/chained-private.swift b/test/Driver/Dependencies/chained-private.swift
index 9be747b..acc2f08 100644
--- a/test/Driver/Dependencies/chained-private.swift
+++ b/test/Driver/Dependencies/chained-private.swift
@@ -1,6 +1,7 @@
 /// other --> main ==> yet-another
 
-// RUN: rm -rf %t && cp -r %S/Inputs/chained-private/ %t
+// RUN: %empty-directory(%t)
+// RUN: cp -r %S/Inputs/chained-private/* %t
 // RUN: touch -t 201401240005 %t/*
 
 // RUN: cd %t && %swiftc_driver -c -driver-use-frontend-path %S/Inputs/update-dependencies.py -output-file-map %t/output.json -incremental -driver-always-rebuild-dependents ./main.swift ./other.swift ./yet-another.swift -module-name main -j1 -v 2>&1 | %FileCheck -check-prefix=CHECK-FIRST %s
diff --git a/test/Driver/Dependencies/chained.swift b/test/Driver/Dependencies/chained.swift
index f1bcf78..88738a5 100644
--- a/test/Driver/Dependencies/chained.swift
+++ b/test/Driver/Dependencies/chained.swift
@@ -1,6 +1,7 @@
 // other ==> main ==> yet-another
 
-// RUN: rm -rf %t && cp -r %S/Inputs/chained/ %t
+// RUN: %empty-directory(%t)
+// RUN: cp -r %S/Inputs/chained/* %t
 // RUN: touch -t 201401240005 %t/*
 
 // RUN: cd %t && %swiftc_driver -c -driver-use-frontend-path %S/Inputs/update-dependencies.py -output-file-map %t/output.json -incremental -driver-always-rebuild-dependents ./main.swift ./other.swift ./yet-another.swift -module-name main -j1 -v 2>&1 | %FileCheck -check-prefix=CHECK-FIRST %s
diff --git a/test/Driver/Dependencies/crash-added.swift b/test/Driver/Dependencies/crash-added.swift
index badb46a..854b7f1 100644
--- a/test/Driver/Dependencies/crash-added.swift
+++ b/test/Driver/Dependencies/crash-added.swift
@@ -1,6 +1,7 @@
 /// crash ==> main | crash --> other
 
-// RUN: rm -rf %t && cp -r %S/Inputs/crash-simple/ %t
+// RUN: %empty-directory(%t)
+// RUN: cp -r %S/Inputs/crash-simple/* %t
 // RUN: touch -t 201401240005 %t/*
 
 // RUN: cd %t && %swiftc_driver -c -driver-use-frontend-path %S/Inputs/update-dependencies.py -output-file-map %t/output.json -incremental -driver-always-rebuild-dependents ./main.swift ./other.swift -module-name main -j1 -v 2>&1 | %FileCheck -check-prefix=CHECK-INITIAL %s
@@ -21,7 +22,8 @@
 // CHECK-RECORD-ADDED-DAG: "./other.swift": [
 
 
-// RUN: rm -rf %t && cp -r %S/Inputs/crash-simple/ %t
+// RUN: %empty-directory(%t)
+// RUN: cp -r %S/Inputs/crash-simple/* %t
 // RUN: touch -t 201401240005 %t/*
 
 // RUN: cd %t && %swiftc_driver -c -driver-use-frontend-path %S/Inputs/update-dependencies.py -output-file-map %t/output.json -incremental -driver-always-rebuild-dependents ./main.swift ./other.swift -module-name main -j1 -v 2>&1 | %FileCheck -check-prefix=CHECK-INITIAL %s
diff --git a/test/Driver/Dependencies/crash-new.swift b/test/Driver/Dependencies/crash-new.swift
index c68c185..d5af216 100644
--- a/test/Driver/Dependencies/crash-new.swift
+++ b/test/Driver/Dependencies/crash-new.swift
@@ -1,6 +1,7 @@
 /// crash ==> main | crash --> other
 
-// RUN: rm -rf %t && cp -r %S/Inputs/crash-simple/ %t
+// RUN: %empty-directory(%t)
+// RUN: cp -r %S/Inputs/crash-simple/* %t
 // RUN: touch -t 201401240005 %t/*
 
 // RUN: cd %t && not %swiftc_driver -c -driver-use-frontend-path %S/Inputs/update-dependencies-bad.py -output-file-map %t/output.json -incremental -driver-always-rebuild-dependents ./main.swift ./crash.swift ./other.swift -module-name main -j1 -v 2>&1 | %FileCheck %s
diff --git a/test/Driver/Dependencies/crash-simple.swift b/test/Driver/Dependencies/crash-simple.swift
index 394aaa8..0771ae3 100644
--- a/test/Driver/Dependencies/crash-simple.swift
+++ b/test/Driver/Dependencies/crash-simple.swift
@@ -1,6 +1,7 @@
 /// crash ==> main | crash --> other
 
-// RUN: rm -rf %t && cp -r %S/Inputs/crash-simple/ %t
+// RUN: %empty-directory(%t)
+// RUN: cp -r %S/Inputs/crash-simple/* %t
 // RUN: touch -t 201401240005 %t/*
 
 // RUN: cd %t && %swiftc_driver -c -driver-use-frontend-path %S/Inputs/update-dependencies.py -output-file-map %t/output.json -incremental -driver-always-rebuild-dependents ./main.swift ./crash.swift ./other.swift -module-name main -j1 -v 2>&1 | %FileCheck -check-prefix=CHECK-FIRST %s
diff --git a/test/Driver/Dependencies/dependencies-preservation.swift b/test/Driver/Dependencies/dependencies-preservation.swift
index 6825100..79543b0 100644
--- a/test/Driver/Dependencies/dependencies-preservation.swift
+++ b/test/Driver/Dependencies/dependencies-preservation.swift
@@ -1,8 +1,9 @@
 // Verify that the top-level build record file from the last incremental
 // compilation is preserved with the same name, suffixed by a '~'.
 
-// RUN: rm -rf %t && cp -r %S/Inputs/one-way/ %t
-// RUN: %S/Inputs/touch.py 443865900 %t/*
+// RUN: %empty-directory(%t)
+// RUN: cp -r %S/Inputs/one-way/* %t
+// RUN: %{python} %S/Inputs/touch.py 443865900 %t/*
 // RUN: echo '{version: "'$(%swiftc_driver_plain -version | head -n1)'", inputs: {"./main.swift": [443865900, 0], "./other.swift": [443865900, 0]}}' > %t/main~buildrecord.swiftdeps
 // RUN: cd %t && %swiftc_driver -driver-use-frontend-path %S/Inputs/update-dependencies.py -c ./main.swift ./other.swift -module-name main -incremental -v -driver-show-incremental -output-file-map %t/output.json
 
diff --git a/test/Driver/Dependencies/driver-show-incremental-arguments.swift b/test/Driver/Dependencies/driver-show-incremental-arguments.swift
index 3a4c37f..73ce709 100644
--- a/test/Driver/Dependencies/driver-show-incremental-arguments.swift
+++ b/test/Driver/Dependencies/driver-show-incremental-arguments.swift
@@ -8,8 +8,9 @@
 // is disabled.
 
 
-// RUN: rm -rf %t && cp -r %S/Inputs/one-way/ %t
-// RUN: %S/Inputs/touch.py 443865900 %t/*
+// RUN: %empty-directory(%t)
+// RUN: cp -r %S/Inputs/one-way/* %t
+// RUN: %{python} %S/Inputs/touch.py 443865900 %t/*
 // RUN: echo '{version: "'$(%swiftc_driver_plain -version | head -n1)'", inputs: {"./main.swift": [443865900, 0], "./other.swift": [443865900, 0]}}' > %t/main~buildrecord.swiftdeps
 
 // RUN: cd %t && %swiftc_driver -driver-use-frontend-path %S/Inputs/update-dependencies.py -c ./main.swift ./other.swift -module-name main -incremental -v -driver-show-incremental -output-file-map %t/output.json | %FileCheck --check-prefix CHECK-INCREMENTAL %s
diff --git a/test/Driver/Dependencies/driver-show-incremental-conflicting-arguments.swift b/test/Driver/Dependencies/driver-show-incremental-conflicting-arguments.swift
index e9b2e93..b5522f5 100644
--- a/test/Driver/Dependencies/driver-show-incremental-conflicting-arguments.swift
+++ b/test/Driver/Dependencies/driver-show-incremental-conflicting-arguments.swift
@@ -8,8 +8,9 @@
 // is disabled. If both are specified, the driver should only print one message.
 
 
-// RUN: rm -rf %t && cp -r %S/Inputs/one-way/ %t
-// RUN: %S/Inputs/touch.py 443865900 %t/*
+// RUN: %empty-directory(%t)
+// RUN: cp -r %S/Inputs/one-way/* %t
+// RUN: %{python} %S/Inputs/touch.py 443865900 %t/*
 // RUN: echo '{version: "'$(%swiftc_driver_plain -version | head -n1)'", inputs: {"./main.swift": [443865900, 0], "./other.swift": [443865900, 0]}}' > %t/main~buildrecord.swiftdeps
 
 // RUN: cd %t && %swiftc_driver -driver-use-frontend-path %S/Inputs/update-dependencies.py -c ./main.swift ./other.swift -module-name main -incremental -v -driver-show-incremental -output-file-map %t/output.json | %FileCheck --check-prefix CHECK-INCREMENTAL %s
diff --git a/test/Driver/Dependencies/driver-show-incremental-inputs.swift b/test/Driver/Dependencies/driver-show-incremental-inputs.swift
index 931eff9..0e43db7 100644
--- a/test/Driver/Dependencies/driver-show-incremental-inputs.swift
+++ b/test/Driver/Dependencies/driver-show-incremental-inputs.swift
@@ -8,8 +8,9 @@
 // is disabled.
 
 
-// RUN: rm -rf %t && cp -r %S/Inputs/one-way/ %t
-// RUN: %S/Inputs/touch.py 443865900 %t/*
+// RUN: %empty-directory(%t)
+// RUN: cp -r %S/Inputs/one-way/* %t
+// RUN: %{python} %S/Inputs/touch.py 443865900 %t/*
 // RUN: echo '{version: "'$(%swiftc_driver_plain -version | head -n1)'", inputs: {"./main.swift": [443865900, 0], "./other.swift": [443865900, 0]}}' > %t/main~buildrecord.swiftdeps
 
 // RUN: cd %t && %swiftc_driver -driver-use-frontend-path %S/Inputs/update-dependencies.py -c ./main.swift ./other.swift -module-name main -incremental -v -driver-show-incremental -output-file-map %t/output.json | %FileCheck --check-prefix CHECK-INCREMENTAL %s
diff --git a/test/Driver/Dependencies/driver-show-incremental-malformed.swift b/test/Driver/Dependencies/driver-show-incremental-malformed.swift
index b3911ae..5f76b17 100644
--- a/test/Driver/Dependencies/driver-show-incremental-malformed.swift
+++ b/test/Driver/Dependencies/driver-show-incremental-malformed.swift
@@ -7,8 +7,9 @@
 // is disabled.
 
 
-// RUN: rm -rf %t && cp -r %S/Inputs/one-way/ %t
-// RUN: %S/Inputs/touch.py 443865900 %t/*
+// RUN: %empty-directory(%t)
+// RUN: cp -r %S/Inputs/one-way/* %t
+// RUN: %{python} %S/Inputs/touch.py 443865900 %t/*
 
 // RUN: echo '{version: "'$(%swiftc_driver_plain -version | head -n1)'", inputs: {"./main.swift": [443865900, 0], "./other.swift": [443865900, 0]}}' > %t/main~buildrecord.swiftdeps
 // RUN: cd %t && %swiftc_driver -driver-use-frontend-path %S/Inputs/update-dependencies.py -c ./main.swift ./other.swift -module-name main -incremental -v -driver-show-incremental -output-file-map %t/output.json | %FileCheck --check-prefix CHECK-INCREMENTAL %s
diff --git a/test/Driver/Dependencies/driver-show-incremental-mutual.swift b/test/Driver/Dependencies/driver-show-incremental-mutual.swift
index 2b8fd3b..c756477 100644
--- a/test/Driver/Dependencies/driver-show-incremental-mutual.swift
+++ b/test/Driver/Dependencies/driver-show-incremental-mutual.swift
@@ -1,6 +1,7 @@
 /// main <==> other
 
-// RUN: rm -rf %t && cp -r %S/Inputs/mutual/ %t
+// RUN: %empty-directory(%t)
+// RUN: cp -r %S/Inputs/mutual/* %t
 // RUN: touch -t 201401240005 %t/*
 
 // RUN: cd %t && %swiftc_driver -c -driver-use-frontend-path %S/Inputs/update-dependencies.py -output-file-map %t/output.json -incremental -driver-always-rebuild-dependents ./main.swift ./other.swift -module-name main -j1 -v -driver-show-incremental 2>&1 | %FileCheck -check-prefix=CHECK-FIRST %s
diff --git a/test/Driver/Dependencies/driver-show-incremental-swift-version.swift b/test/Driver/Dependencies/driver-show-incremental-swift-version.swift
index 79d2d37..0e1a30e 100644
--- a/test/Driver/Dependencies/driver-show-incremental-swift-version.swift
+++ b/test/Driver/Dependencies/driver-show-incremental-swift-version.swift
@@ -8,8 +8,9 @@
 // is disabled.
 
 
-// RUN: rm -rf %t && cp -r %S/Inputs/one-way/ %t
-// RUN: %S/Inputs/touch.py 443865900 %t/*
+// RUN: %empty-directory(%t)
+// RUN: cp -r %S/Inputs/one-way/* %t
+// RUN: %{python} %S/Inputs/touch.py 443865900 %t/*
 
 // RUN: echo '{version: "'$(%swiftc_driver_plain -version | head -n1)'", inputs: {"./main.swift": [443865900, 0], "./other.swift": [443865900, 0]}}' > %t/main~buildrecord.swiftdeps
 // RUN: cd %t && %swiftc_driver -driver-use-frontend-path %S/Inputs/update-dependencies.py -c ./main.swift ./other.swift -module-name main -incremental -v -driver-show-incremental -output-file-map %t/output.json | %FileCheck --check-prefix CHECK-INCREMENTAL %s
diff --git a/test/Driver/Dependencies/embed-bitcode-parallel.swift b/test/Driver/Dependencies/embed-bitcode-parallel.swift
index 3005bd4..15216de 100644
--- a/test/Driver/Dependencies/embed-bitcode-parallel.swift
+++ b/test/Driver/Dependencies/embed-bitcode-parallel.swift
@@ -1,4 +1,5 @@
-// RUN: rm -rf %t && cp -r %S/Inputs/one-way/ %t
+// RUN: %empty-directory(%t)
+// RUN: cp -r %S/Inputs/one-way/* %t
 // RUN: touch -t 201401240005 %t/*
 
 // RUN: cd %t && %swiftc_driver -c -driver-use-frontend-path %S/Inputs/fake-build-for-bitcode.py -output-file-map %t/output.json -incremental ./main.swift ./other.swift -embed-bitcode -module-name main -j1 -parseable-output 2>&1 | %FileCheck -check-prefix=CHECK-FIRST %s
diff --git a/test/Driver/Dependencies/fail-added.swift b/test/Driver/Dependencies/fail-added.swift
index e316a83..4cbd2db 100644
--- a/test/Driver/Dependencies/fail-added.swift
+++ b/test/Driver/Dependencies/fail-added.swift
@@ -1,6 +1,7 @@
 /// bad ==> main | bad --> other
 
-// RUN: rm -rf %t && cp -r %S/Inputs/fail-simple/ %t
+// RUN: %empty-directory(%t)
+// RUN: cp -r %S/Inputs/fail-simple/* %t
 // RUN: touch -t 201401240005 %t/*
 
 // RUN: cd %t && %swiftc_driver -c -driver-use-frontend-path %S/Inputs/update-dependencies.py -output-file-map %t/output.json -incremental -driver-always-rebuild-dependents ./main.swift ./other.swift -module-name main -j1 -v 2>&1 | %FileCheck -check-prefix=CHECK-INITIAL %s
@@ -21,7 +22,8 @@
 // CHECK-RECORD-ADDED-DAG: "./other.swift": [
 
 
-// RUN: rm -rf %t && cp -r %S/Inputs/fail-simple/ %t
+// RUN: %empty-directory(%t)
+// RUN: cp -r %S/Inputs/fail-simple/* %t
 // RUN: touch -t 201401240005 %t/*
 
 // RUN: cd %t && %swiftc_driver -c -driver-use-frontend-path %S/Inputs/update-dependencies.py -output-file-map %t/output.json -incremental -driver-always-rebuild-dependents ./main.swift ./other.swift -module-name main -j1 -v 2>&1 | %FileCheck -check-prefix=CHECK-INITIAL %s
diff --git a/test/Driver/Dependencies/fail-chained.swift b/test/Driver/Dependencies/fail-chained.swift
index 3bb7023..0202040 100644
--- a/test/Driver/Dependencies/fail-chained.swift
+++ b/test/Driver/Dependencies/fail-chained.swift
@@ -1,6 +1,7 @@
 /// a ==> bad ==> c ==> d | b --> bad --> e ==> f
 
-// RUN: rm -rf %t && cp -r %S/Inputs/fail-chained/ %t
+// RUN: %empty-directory(%t)
+// RUN: cp -r %S/Inputs/fail-chained/* %t
 // RUN: touch -t 201401240005 %t/*
 
 // RUN: cd %t && %swiftc_driver -c -driver-use-frontend-path %S/Inputs/update-dependencies.py -output-file-map %t/output.json -incremental -driver-always-rebuild-dependents ./a.swift ./b.swift ./c.swift ./d.swift ./e.swift ./f.swift ./bad.swift -module-name main -j1 -v 2>&1 | %FileCheck -check-prefix=CHECK-FIRST %s
@@ -60,7 +61,8 @@
 // NEGATIVE-A2-NOT: Handled f.swift
 
 
-// RUN: rm -rf %t && cp -r %S/Inputs/fail-chained/ %t
+// RUN: %empty-directory(%t)
+// RUN: cp -r %S/Inputs/fail-chained/* %t
 // RUN: touch -t 201401240005 %t/*
 
 // RUN: cd %t && %swiftc_driver -c -driver-use-frontend-path %S/Inputs/update-dependencies.py -output-file-map %t/output.json -incremental -driver-always-rebuild-dependents ./a.swift ./b.swift ./c.swift ./d.swift ./e.swift ./f.swift ./bad.swift -module-name main -j1 -v 2>&1 | %FileCheck -check-prefix=CHECK-FIRST %s
diff --git a/test/Driver/Dependencies/fail-interface-hash.swift b/test/Driver/Dependencies/fail-interface-hash.swift
index 618f7b4..b4c8d1f 100644
--- a/test/Driver/Dependencies/fail-interface-hash.swift
+++ b/test/Driver/Dependencies/fail-interface-hash.swift
@@ -1,6 +1,7 @@
 /// main ==> depends-on-main | bad ==> depends-on-bad
 
-// RUN: rm -rf %t && cp -r %S/Inputs/fail-interface-hash/ %t
+// RUN: %empty-directory(%t)
+// RUN: cp -r %S/Inputs/fail-interface-hash/* %t
 // RUN: touch -t 201401240005 %t/*
 
 // RUN: cd %t && %swiftc_driver -c -driver-use-frontend-path %S/Inputs/update-dependencies.py -output-file-map %t/output.json -incremental ./main.swift ./bad.swift ./depends-on-main.swift ./depends-on-bad.swift -module-name main -j1 -v 2>&1 | %FileCheck -check-prefix=CHECK-FIRST %s
diff --git a/test/Driver/Dependencies/fail-new.swift b/test/Driver/Dependencies/fail-new.swift
index 36b0395..3cd90c1 100644
--- a/test/Driver/Dependencies/fail-new.swift
+++ b/test/Driver/Dependencies/fail-new.swift
@@ -1,6 +1,7 @@
 /// bad ==> main | bad --> other
 
-// RUN: rm -rf %t && cp -r %S/Inputs/fail-simple/ %t
+// RUN: %empty-directory(%t)
+// RUN: cp -r %S/Inputs/fail-simple/* %t
 // RUN: touch -t 201401240005 %t/*
 
 // RUN: cd %t && not %swiftc_driver -c -driver-use-frontend-path %S/Inputs/update-dependencies-bad.py -output-file-map %t/output.json -incremental -driver-always-rebuild-dependents ./main.swift ./bad.swift ./other.swift -module-name main -j1 -v 2>&1 | %FileCheck %s
diff --git a/test/Driver/Dependencies/fail-simple.swift b/test/Driver/Dependencies/fail-simple.swift
index d228b65..6f81a0d 100644
--- a/test/Driver/Dependencies/fail-simple.swift
+++ b/test/Driver/Dependencies/fail-simple.swift
@@ -1,6 +1,7 @@
 /// bad ==> main | bad --> other
 
-// RUN: rm -rf %t && cp -r %S/Inputs/fail-simple/ %t
+// RUN: %empty-directory(%t)
+// RUN: cp -r %S/Inputs/fail-simple/* %t
 // RUN: touch -t 201401240005 %t/*
 
 // RUN: cd %t && %swiftc_driver -c -driver-use-frontend-path %S/Inputs/update-dependencies.py -output-file-map %t/output.json -incremental -driver-always-rebuild-dependents ./main.swift ./bad.swift ./other.swift -module-name main -j1 -v 2>&1 | %FileCheck -check-prefix=CHECK-FIRST %s
diff --git a/test/Driver/Dependencies/fail-with-bad-deps.swift b/test/Driver/Dependencies/fail-with-bad-deps.swift
index ee1e2da..663e56f 100644
--- a/test/Driver/Dependencies/fail-with-bad-deps.swift
+++ b/test/Driver/Dependencies/fail-with-bad-deps.swift
@@ -1,6 +1,7 @@
 /// main ==> depends-on-main | bad ==> depends-on-bad
 
-// RUN: rm -rf %t && cp -r %S/Inputs/fail-with-bad-deps/ %t
+// RUN: %empty-directory(%t)
+// RUN: cp -r %S/Inputs/fail-with-bad-deps/* %t
 // RUN: touch -t 201401240005 %t/*
 
 // RUN: cd %t && %swiftc_driver -c -driver-use-frontend-path %S/Inputs/update-dependencies.py -output-file-map %t/output.json -incremental ./main.swift ./bad.swift ./depends-on-main.swift ./depends-on-bad.swift -module-name main -j1 -v 2>&1 | %FileCheck -check-prefix=CHECK-FIRST %s
diff --git a/test/Driver/Dependencies/file-added.swift b/test/Driver/Dependencies/file-added.swift
index 726ca88..e50bffb 100644
--- a/test/Driver/Dependencies/file-added.swift
+++ b/test/Driver/Dependencies/file-added.swift
@@ -1,6 +1,7 @@
 /// other ==> main
 
-// RUN: rm -rf %t && cp -r %S/Inputs/one-way/ %t
+// RUN: %empty-directory(%t)
+// RUN: cp -r %S/Inputs/one-way/* %t
 // RUN: touch -t 201401240005 %t/*
 
 // RUN: cd %t && %swiftc_driver -c -driver-use-frontend-path %S/Inputs/update-dependencies.py -output-file-map %t/output.json -incremental -driver-always-rebuild-dependents ./other.swift -module-name main -j1 -v 2>&1 | %FileCheck -check-prefix=CHECK-FIRST %s
diff --git a/test/Driver/Dependencies/independent-half-dirty.swift b/test/Driver/Dependencies/independent-half-dirty.swift
index 964995d..4f8a2ac 100644
--- a/test/Driver/Dependencies/independent-half-dirty.swift
+++ b/test/Driver/Dependencies/independent-half-dirty.swift
@@ -1,4 +1,5 @@
-// RUN: rm -rf %t && cp -r %S/Inputs/independent/ %t
+// RUN: %empty-directory(%t)
+// RUN: cp -r %S/Inputs/independent/* %t
 // RUN: touch -t 201401240005 %t/*
 
 // RUN: cd %t && %swiftc_driver -c -driver-use-frontend-path %S/Inputs/update-dependencies.py -output-file-map %t/output.json -incremental -driver-always-rebuild-dependents ./main.swift ./other.swift -module-name main -j1 -v 2>&1 | %FileCheck -check-prefix=CHECK-FIRST %s
diff --git a/test/Driver/Dependencies/independent-parseable.swift b/test/Driver/Dependencies/independent-parseable.swift
index 1b86b80..6e0b7fd 100644
--- a/test/Driver/Dependencies/independent-parseable.swift
+++ b/test/Driver/Dependencies/independent-parseable.swift
@@ -1,4 +1,5 @@
-// RUN: rm -rf %t && cp -r %S/Inputs/independent/ %t
+// RUN: %empty-directory(%t)
+// RUN: cp -r %S/Inputs/independent/* %t
 // RUN: touch -t 201401240005 %t/*
 
 // RUN: cd %t && %swiftc_driver -c -driver-use-frontend-path %S/Inputs/update-dependencies.py -output-file-map %t/output.json -incremental -driver-always-rebuild-dependents ./main.swift -j1 -parseable-output 2>&1 | %FileCheck -check-prefix=CHECK-FIRST %s
@@ -28,7 +29,8 @@
 // RUN: cd %t && %swiftc_driver -c -driver-use-frontend-path %S/Inputs/update-dependencies.py -output-file-map %t/output.json -incremental -driver-always-rebuild-dependents ./main.swift -j1 -parseable-output 2>&1 | %FileCheck -check-prefix=CHECK-FIRST %s
 
 
-// RUN: rm -rf %t && cp -r %S/Inputs/independent/ %t
+// RUN: %empty-directory(%t)
+// RUN: cp -r %S/Inputs/independent/* %t
 // RUN: touch -t 201401240005 %t/*
 
 // RUN: cd %t && %swiftc_driver -c -driver-use-frontend-path %S/Inputs/update-dependencies.py -output-file-map %t/output.json -incremental -driver-always-rebuild-dependents ./main.swift ./other.swift -module-name main -j1 -parseable-output 2>&1 | %FileCheck -check-prefix=CHECK-FIRST-MULTI %s
diff --git a/test/Driver/Dependencies/independent.swift b/test/Driver/Dependencies/independent.swift
index 6f8cc8d..9f8688b 100644
--- a/test/Driver/Dependencies/independent.swift
+++ b/test/Driver/Dependencies/independent.swift
@@ -1,6 +1,7 @@
 // main | other
 
-// RUN: rm -rf %t && cp -r %S/Inputs/independent/ %t
+// RUN: %empty-directory(%t)
+// RUN: cp -r %S/Inputs/independent/* %t
 // RUN: touch -t 201401240005 %t/*
 
 // RUN: cd %t && %swiftc_driver -c -driver-use-frontend-path %S/Inputs/update-dependencies.py -output-file-map %t/output.json -incremental -driver-always-rebuild-dependents ./main.swift -j1 -v 2>&1 | %FileCheck -check-prefix=CHECK-FIRST %s
@@ -20,7 +21,8 @@
 // RUN: cd %t && %swiftc_driver -c -driver-use-frontend-path %S/Inputs/update-dependencies.py -output-file-map %t/output.json -incremental -driver-always-rebuild-dependents ./main.swift -j1 -v 2>&1 | %FileCheck -check-prefix=CHECK-FIRST %s
 
 
-// RUN: rm -rf %t && cp -r %S/Inputs/independent/ %t
+// RUN: %empty-directory(%t)
+// RUN: cp -r %S/Inputs/independent/* %t
 // RUN: touch -t 201401240005 %t/*
 
 // RUN: cd %t && %swiftc_driver -c -driver-use-frontend-path %S/Inputs/update-dependencies.py -output-file-map %t/output.json -incremental -driver-always-rebuild-dependents ./main.swift ./other.swift -module-name main -j1 -v 2>&1 | %FileCheck -check-prefix=CHECK-FIRST-MULTI %s
@@ -34,7 +36,8 @@
 // RUN: cd %t && %swiftc_driver -c -driver-use-frontend-path %S/Inputs/update-dependencies.py -output-file-map %t/output.json -incremental -driver-always-rebuild-dependents ./main.swift ./other.swift -module-name main -j1 -v 2>&1 | %FileCheck -check-prefix=CHECK-FIRST-MULTI %s
 
 
-// RUN: rm -rf %t && cp -r %S/Inputs/independent/ %t
+// RUN: %empty-directory(%t)
+// RUN: cp -r %S/Inputs/independent/* %t
 // RUN: touch -t 201401240005 %t/*
 
 // RUN: cd %t && %swiftc_driver -c -driver-use-frontend-path %S/Inputs/update-dependencies.py -output-file-map %t/output.json -incremental -driver-always-rebuild-dependents ./main.swift -module-name main -j1 -v 2>&1 | %FileCheck -check-prefix=CHECK-SINGLE %s
diff --git a/test/Driver/Dependencies/malformed-but-valid-yaml.swift b/test/Driver/Dependencies/malformed-but-valid-yaml.swift
index f00b5a7..0d88168 100644
--- a/test/Driver/Dependencies/malformed-but-valid-yaml.swift
+++ b/test/Driver/Dependencies/malformed-but-valid-yaml.swift
@@ -1,4 +1,5 @@
-// RUN: rm -rf %t && cp -r %S/Inputs/malformed-but-valid-yaml/ %t
+// RUN: %empty-directory(%t)
+// RUN: cp -r %S/Inputs/malformed-but-valid-yaml/* %t
 // RUN: touch -t 201401240005 %t/*.swift
 
 // Generate the build record...
@@ -24,7 +25,8 @@
 // CHECK-THIRD: Handled main.swift
 // CHECK-THIRD: Handled other.swift
 
-// RUN: rm -rf %t && cp -r %S/Inputs/malformed-but-valid-yaml/ %t
+// RUN: %empty-directory(%t)
+// RUN: cp -r %S/Inputs/malformed-but-valid-yaml/* %t
 // RUN: touch -t 201401240005 %t/*.swift
 
 // Generate the build record...
diff --git a/test/Driver/Dependencies/malformed.swift b/test/Driver/Dependencies/malformed.swift
index 0edcabb..6c13789 100644
--- a/test/Driver/Dependencies/malformed.swift
+++ b/test/Driver/Dependencies/malformed.swift
@@ -1,4 +1,5 @@
-// RUN: rm -rf %t && cp -r %S/Inputs/malformed-after/ %t
+// RUN: %empty-directory(%t)
+// RUN: cp -r %S/Inputs/malformed-after/* %t
 // RUN: touch -t 201401240005 %t/*.swift
 
 // Generate the build record...
@@ -24,7 +25,8 @@
 // CHECK-THIRD: Handled main.swift
 // CHECK-THIRD: Handled other.swift
 
-// RUN: rm -rf %t && cp -r %S/Inputs/malformed-after/ %t
+// RUN: %empty-directory(%t)
+// RUN: cp -r %S/Inputs/malformed-after/* %t
 // RUN: touch -t 201401240005 %t/*.swift
 
 // Generate the build record...
diff --git a/test/Driver/Dependencies/moduleonly.swift b/test/Driver/Dependencies/moduleonly.swift
index b06864c..a2c38a2 100644
--- a/test/Driver/Dependencies/moduleonly.swift
+++ b/test/Driver/Dependencies/moduleonly.swift
@@ -1,4 +1,5 @@
-// RUN: rm -rf %t && cp -r %S/Inputs/moduleonly/ %t
+// RUN: %empty-directory(%t)
+// RUN: cp -r %S/Inputs/moduleonly/* %t
 // RUN: touch -t 201801230045 %t/*.swift
 
 // RUN: cd %t && %target-build-swift -emit-module -output-file-map ./output.json -incremental ./foo.swift ./bar.swift ./baz.swift -module-name testmodule -v 2>&1 | %FileCheck -check-prefix=CHECK1 %s
@@ -48,7 +49,8 @@
 
 // '-c' (without '-emit-module') from clean environment.
 //
-// RUN: rm -rf %t && cp -r %S/Inputs/moduleonly/ %t
+// RUN: %empty-directory(%t)
+// RUN: cp -r %S/Inputs/moduleonly/* %t
 // RUN: touch -t 201801230045 %t/*.swift
 // RUN: cd %t && %target-build-swift -c -g -output-file-map ./output.json -incremental ./foo.swift ./bar.swift ./baz.swift -module-name testmodule -v 2>&1
 // RUN: test ! -f %t/buildrecord.swiftdeps~moduleonly
@@ -57,7 +59,8 @@
 
 // '-emit-library -g' (without '-emit-module') from clean environment.
 //
-// RUN: rm -rf %t && cp -r %S/Inputs/moduleonly/ %t
+// RUN: %empty-directory(%t)
+// RUN: cp -r %S/Inputs/moduleonly/* %t
 // RUN: touch -t 201801230045 %t/*.swift
 // RUN: cd %t && %target-build-swift -emit-library -g -output-file-map ./output.json -incremental ./foo.swift ./bar.swift ./baz.swift -module-name testmodule -v 2>&1
 // RUN: test ! -f %t/buildrecord.swiftdeps~moduleonly
@@ -68,12 +71,14 @@
 //
 // RUN: rm -f %t-moduleonly.swiftmodule
 // RUN: rm -f %t-moduleonly.swiftdoc
-// RUN: rm -rf %t && cp -r %S/Inputs/moduleonly/ %t
+// RUN: %empty-directory(%t)
+// RUN: cp -r %S/Inputs/moduleonly/* %t
 // RUN: touch -t 201801230045 %t/*.swift
 // RUN: cd %t && %target-build-swift -emit-module -output-file-map ./output.json -incremental ./foo.swift ./bar.swift ./baz.swift -module-name testmodule -v 2>&1
 // RUN: cp -f %t/testmodule.swiftmodule %t-moduleonly.swiftmodule
 // RUN: cp -f %t/testmodule.swiftdoc %t-moduleonly.swiftdoc
-// RUN: rm -rf %t && cp -r %S/Inputs/moduleonly/ %t
+// RUN: %empty-directory(%t)
+// RUN: cp -r %S/Inputs/moduleonly/* %t
 // RUN: touch -t 201801230045 %t/*.swift
 // RUN: cd %t && %target-build-swift -c -emit-module -output-file-map ./output.json -incremental ./foo.swift ./bar.swift ./baz.swift -module-name testmodule -v 2>&1
 // RUN: diff %t/testmodule.swiftmodule %t-moduleonly.swiftmodule
diff --git a/test/Driver/Dependencies/mutual-interface-hash.swift b/test/Driver/Dependencies/mutual-interface-hash.swift
index 13ec646..4e405f1 100644
--- a/test/Driver/Dependencies/mutual-interface-hash.swift
+++ b/test/Driver/Dependencies/mutual-interface-hash.swift
@@ -1,6 +1,7 @@
 /// does-change <==> does-not-change
 
-// RUN: rm -rf %t && cp -r %S/Inputs/mutual-interface-hash/ %t
+// RUN: %empty-directory(%t)
+// RUN: cp -r %S/Inputs/mutual-interface-hash/* %t
 // RUN: touch -t 201401240005 %t/*
 
 // Generate the build record...
diff --git a/test/Driver/Dependencies/mutual.swift b/test/Driver/Dependencies/mutual.swift
index 7db852b..66c9f25 100644
--- a/test/Driver/Dependencies/mutual.swift
+++ b/test/Driver/Dependencies/mutual.swift
@@ -1,6 +1,7 @@
 /// main <==> other
 
-// RUN: rm -rf %t && cp -r %S/Inputs/mutual/ %t
+// RUN: %empty-directory(%t)
+// RUN: cp -r %S/Inputs/mutual/* %t
 // RUN: touch -t 201401240005 %t/*
 
 // RUN: cd %t && %swiftc_driver -c -driver-use-frontend-path %S/Inputs/update-dependencies.py -output-file-map %t/output.json -incremental -driver-always-rebuild-dependents ./main.swift ./other.swift -module-name main -j1 -v 2>&1 | %FileCheck -check-prefix=CHECK-FIRST %s
diff --git a/test/Driver/Dependencies/nominal-members.swift b/test/Driver/Dependencies/nominal-members.swift
index 85cc635..1f2897c 100644
--- a/test/Driver/Dependencies/nominal-members.swift
+++ b/test/Driver/Dependencies/nominal-members.swift
@@ -1,6 +1,7 @@
 /// a ==> depends-on-a-ext, depends-on-a-foo | a-ext ==> depends-on-a-ext
 
-// RUN: rm -rf %t && cp -r %S/Inputs/nominal-members/ %t
+// RUN: %empty-directory(%t)
+// RUN: cp -r %S/Inputs/nominal-members/* %t
 // RUN: touch -t 201401240005 %t/*
 
 // RUN: cd %t && %swiftc_driver -c -driver-use-frontend-path %S/Inputs/update-dependencies.py -output-file-map %t/output.json -incremental -driver-always-rebuild-dependents ./a.swift ./a-ext.swift ./depends-on-a-foo.swift ./depends-on-a-ext.swift -module-name main -j1 -v 2>&1 | %FileCheck -check-prefix=CHECK-INITIAL %s
diff --git a/test/Driver/Dependencies/one-way-depends-after.swift b/test/Driver/Dependencies/one-way-depends-after.swift
index d6f3bca..21db914 100644
--- a/test/Driver/Dependencies/one-way-depends-after.swift
+++ b/test/Driver/Dependencies/one-way-depends-after.swift
@@ -1,7 +1,8 @@
 /// other | main
 /// other ==>+ main
 
-// RUN: rm -rf %t && cp -r %S/Inputs/one-way-depends-after/ %t
+// RUN: %empty-directory(%t)
+// RUN: cp -r %S/Inputs/one-way-depends-after/* %t
 // RUN: touch -t 201401240005 %t/*.swift
 
 // Generate the build record...
@@ -26,7 +27,8 @@
 // RUN: cd %t && %swiftc_driver -c -driver-use-frontend-path %S/Inputs/update-dependencies.py -output-file-map %t/output.json -incremental -driver-always-rebuild-dependents ./main.swift ./other.swift -module-name main -j1 -v 2>&1 | %FileCheck -check-prefix=CHECK-SECOND %s
 
 
-// RUN: rm -rf %t && cp -r %S/Inputs/one-way-depends-after/ %t
+// RUN: %empty-directory(%t)
+// RUN: cp -r %S/Inputs/one-way-depends-after/* %t
 // RUN: touch -t 201401240005 %t/*.swift
 
 // Generate the build record...
diff --git a/test/Driver/Dependencies/one-way-depends-before.swift b/test/Driver/Dependencies/one-way-depends-before.swift
index f6d0751..b046f21 100644
--- a/test/Driver/Dependencies/one-way-depends-before.swift
+++ b/test/Driver/Dependencies/one-way-depends-before.swift
@@ -1,7 +1,8 @@
 /// other ==>+ main
 /// other | main
 
-// RUN: rm -rf %t && cp -r %S/Inputs/one-way-depends-before/ %t
+// RUN: %empty-directory(%t)
+// RUN: cp -r %S/Inputs/one-way-depends-before/* %t
 // RUN: touch -t 201401240005 %t/*.swift
 
 // Generate the build record...
@@ -29,7 +30,8 @@
 // CHECK-THIRD-NOT: Handled main.swift
 
 
-// RUN: rm -rf %t && cp -r %S/Inputs/one-way-depends-before/ %t
+// RUN: %empty-directory(%t)
+// RUN: cp -r %S/Inputs/one-way-depends-before/* %t
 // RUN: touch -t 201401240005 %t/*.swift
 
 // Generate the build record...
diff --git a/test/Driver/Dependencies/one-way-external-delete.swift b/test/Driver/Dependencies/one-way-external-delete.swift
index 82bc5cc..07abe55 100644
--- a/test/Driver/Dependencies/one-way-external-delete.swift
+++ b/test/Driver/Dependencies/one-way-external-delete.swift
@@ -1,4 +1,5 @@
-// RUN: rm -rf %t && cp -r %S/Inputs/one-way-external/ %t
+// RUN: %empty-directory(%t)
+// RUN: cp -r %S/Inputs/one-way-external/* %t
 // RUN: touch -t 201401240005 %t/*
 
 // RUN: cd %t && %swiftc_driver -c -driver-use-frontend-path %S/Inputs/update-dependencies.py -output-file-map %t/output.json -incremental -driver-always-rebuild-dependents ./main.swift ./other.swift -module-name main -j1 -v 2>&1 | %FileCheck -check-prefix=CHECK-FIRST %s
@@ -22,7 +23,8 @@
 // CHECK-THIRD-DAG: Handled main.swift
 
 
-// RUN: rm -rf %t && cp -r %S/Inputs/one-way-external/ %t
+// RUN: %empty-directory(%t)
+// RUN: cp -r %S/Inputs/one-way-external/* %t
 // RUN: touch -t 201401240005 %t/*
 
 // RUN: cd %t && %swiftc_driver -c -driver-use-frontend-path %S/Inputs/update-dependencies.py -output-file-map %t/output.json -incremental -driver-always-rebuild-dependents ./main.swift ./other.swift -module-name main -j1 -v 2>&1 | %FileCheck -check-prefix=CHECK-FIRST %s
diff --git a/test/Driver/Dependencies/one-way-external.swift b/test/Driver/Dependencies/one-way-external.swift
index fdea22c..b6e9e96 100644
--- a/test/Driver/Dependencies/one-way-external.swift
+++ b/test/Driver/Dependencies/one-way-external.swift
@@ -4,7 +4,8 @@
 /// "./other1-external" ==> other
 /// "./other2-external" ==> other
 
-// RUN: rm -rf %t && cp -r %S/Inputs/one-way-external/ %t
+// RUN: %empty-directory(%t)
+// RUN: cp -r %S/Inputs/one-way-external/* %t
 // RUN: touch -t 201401240005 %t/*
 
 // RUN: cd %t && %swiftc_driver -c -driver-use-frontend-path %S/Inputs/update-dependencies.py -output-file-map %t/output.json -incremental -driver-always-rebuild-dependents ./main.swift ./other.swift -module-name main -j1 -v 2>&1 | %FileCheck -check-prefix=CHECK-FIRST %s
diff --git a/test/Driver/Dependencies/one-way-merge-module.swift b/test/Driver/Dependencies/one-way-merge-module.swift
index 90543bf..a7544cd 100644
--- a/test/Driver/Dependencies/one-way-merge-module.swift
+++ b/test/Driver/Dependencies/one-way-merge-module.swift
@@ -1,6 +1,7 @@
 /// other ==> main
 
-// RUN: rm -rf %t && cp -r %S/Inputs/one-way/ %t
+// RUN: %empty-directory(%t)
+// RUN: cp -r %S/Inputs/one-way/* %t
 // RUN: touch -t 201401240005 %t/*
 
 // RUN: cd %t && %swiftc_driver -driver-use-frontend-path %S/Inputs/update-dependencies.py -output-file-map %t/output.json -incremental -driver-always-rebuild-dependents ./main.swift ./other.swift -emit-module-path %t/master.swiftmodule -module-name main -j1 -v 2>&1 | %FileCheck -check-prefix=CHECK-FIRST %s
diff --git a/test/Driver/Dependencies/one-way-parallel.swift b/test/Driver/Dependencies/one-way-parallel.swift
index a617d13..e199390 100644
--- a/test/Driver/Dependencies/one-way-parallel.swift
+++ b/test/Driver/Dependencies/one-way-parallel.swift
@@ -1,4 +1,5 @@
-// RUN: rm -rf %t && cp -r %S/Inputs/one-way/ %t
+// RUN: %empty-directory(%t)
+// RUN: cp -r %S/Inputs/one-way/* %t
 // RUN: touch -t 201401240005 %t/*
 
 // RUN: cd %t && %swiftc_driver -c -driver-use-frontend-path %S/Inputs/update-dependencies.py -output-file-map %t/output.json -incremental -driver-always-rebuild-dependents ./main.swift ./other.swift -module-name main -j1 -parseable-output 2>&1 | %FileCheck -check-prefix=CHECK-FIRST %s
diff --git a/test/Driver/Dependencies/one-way-parseable.swift b/test/Driver/Dependencies/one-way-parseable.swift
index bd2946f..9be0ea5 100644
--- a/test/Driver/Dependencies/one-way-parseable.swift
+++ b/test/Driver/Dependencies/one-way-parseable.swift
@@ -1,4 +1,5 @@
-// RUN: rm -rf %t && cp -r %S/Inputs/one-way/ %t
+// RUN: %empty-directory(%t)
+// RUN: cp -r %S/Inputs/one-way/* %t
 // RUN: touch -t 201401240005 %t/*
 
 // RUN: cd %t && %swiftc_driver -c -driver-use-frontend-path %S/Inputs/update-dependencies.py -output-file-map %t/output.json -incremental -driver-always-rebuild-dependents ./main.swift ./other.swift -module-name main -j1 -parseable-output 2>&1 | %FileCheck -check-prefix=CHECK-FIRST %s
diff --git a/test/Driver/Dependencies/one-way-provides-after.swift b/test/Driver/Dependencies/one-way-provides-after.swift
index 561cf08..defc747 100644
--- a/test/Driver/Dependencies/one-way-provides-after.swift
+++ b/test/Driver/Dependencies/one-way-provides-after.swift
@@ -1,7 +1,8 @@
 /// other | main
 /// other +==> main
 
-// RUN: rm -rf %t && cp -r %S/Inputs/one-way-provides-after/ %t
+// RUN: %empty-directory(%t)
+// RUN: cp -r %S/Inputs/one-way-provides-after/* %t
 // RUN: touch -t 201401240005 %t/*.swift
 
 // Generate the build record...
@@ -24,7 +25,8 @@
 // RUN: touch -t 201401240007 %t/other.swift
 // RUN: cd %t && %swiftc_driver -c -driver-use-frontend-path %S/Inputs/update-dependencies.py -output-file-map %t/output.json -incremental -driver-always-rebuild-dependents ./main.swift ./other.swift -module-name main -j1 -v 2>&1 | %FileCheck -check-prefix=CHECK-SECOND %s
 
-// RUN: rm -rf %t && cp -r %S/Inputs/one-way-provides-after/ %t
+// RUN: %empty-directory(%t)
+// RUN: cp -r %S/Inputs/one-way-provides-after/* %t
 // RUN: touch -t 201401240005 %t/*.swift
 
 // Generate the build record...
diff --git a/test/Driver/Dependencies/one-way-provides-before.swift b/test/Driver/Dependencies/one-way-provides-before.swift
index a1b98d0..b24243f 100644
--- a/test/Driver/Dependencies/one-way-provides-before.swift
+++ b/test/Driver/Dependencies/one-way-provides-before.swift
@@ -1,7 +1,8 @@
 /// other +==> main
 /// other | main
 
-// RUN: rm -rf %t && cp -r %S/Inputs/one-way-provides-before/ %t
+// RUN: %empty-directory(%t)
+// RUN: cp -r %S/Inputs/one-way-provides-before/* %t
 // RUN: touch -t 201401240005 %t/*.swift
 
 // Generate the build record...
@@ -28,7 +29,8 @@
 // CHECK-THIRD: Handled other.swift
 // CHECK-THIRD-NOT: Handled main.swift
 
-// RUN: rm -rf %t && cp -r %S/Inputs/one-way-provides-before/ %t
+// RUN: %empty-directory(%t)
+// RUN: cp -r %S/Inputs/one-way-provides-before/* %t
 // RUN: touch -t 201401240005 %t/*.swift
 
 // Generate the build record...
diff --git a/test/Driver/Dependencies/one-way-while-editing.swift b/test/Driver/Dependencies/one-way-while-editing.swift
index 2e6295e..ef086de 100644
--- a/test/Driver/Dependencies/one-way-while-editing.swift
+++ b/test/Driver/Dependencies/one-way-while-editing.swift
@@ -1,6 +1,7 @@
 /// other ==> main
 
-// RUN: rm -rf %t && cp -r %S/Inputs/one-way/ %t
+// RUN: %empty-directory(%t)
+// RUN: cp -r %S/Inputs/one-way/* %t
 // RUN: touch -t 201401240005 %t/*
 
 // RUN: cd %t && not %swiftc_driver -c -driver-use-frontend-path %S/Inputs/modify-non-primary-files.py -output-file-map %t/output.json -incremental -driver-always-rebuild-dependents ./main.swift ./other.swift -module-name main -j1 -v 2>&1 | %FileCheck %s
diff --git a/test/Driver/Dependencies/one-way.swift b/test/Driver/Dependencies/one-way.swift
index ccacabb..d73cae4 100644
--- a/test/Driver/Dependencies/one-way.swift
+++ b/test/Driver/Dependencies/one-way.swift
@@ -1,6 +1,7 @@
 /// other ==> main
 
-// RUN: rm -rf %t && cp -r %S/Inputs/one-way/ %t
+// RUN: %empty-directory(%t)
+// RUN: cp -r %S/Inputs/one-way/* %t
 // RUN: touch -t 201401240005 %t/*
 
 // RUN: cd %t && %swiftc_driver -c -driver-use-frontend-path %S/Inputs/update-dependencies.py -output-file-map %t/output.json -incremental -driver-always-rebuild-dependents ./main.swift ./other.swift -module-name main -j1 -v 2>&1 | %FileCheck -check-prefix=CHECK-FIRST %s
@@ -37,7 +38,8 @@
 // CHECK-FIFTH-NOT: Handled main.swift
 
 
-// RUN: rm -rf %t && cp -r %S/Inputs/one-way/ %t
+// RUN: %empty-directory(%t)
+// RUN: cp -r %S/Inputs/one-way/* %t
 // RUN: touch -t 201401240005 %t/*
 // RUN: cd %t && %swiftc_driver -c -driver-use-frontend-path %S/Inputs/update-dependencies.py -output-file-map %t/output.json -incremental -driver-always-rebuild-dependents ./main.swift ./other.swift -module-name main -j1 -v 2>&1 | %FileCheck -check-prefix=CHECK-FIRST %s
 
@@ -49,7 +51,8 @@
 // RUN: cd %t && %swiftc_driver -c -driver-use-frontend-path %S/Inputs/update-dependencies.py -output-file-map %t/output.json -incremental -driver-always-rebuild-dependents ./main.swift ./other.swift -module-name main -j1 -v 2>&1 | %FileCheck -check-prefix=CHECK-FOURTH %s
 
 
-// RUN: rm -rf %t && cp -r %S/Inputs/one-way/ %t
+// RUN: %empty-directory(%t)
+// RUN: cp -r %S/Inputs/one-way/* %t
 // RUN: touch -t 201401240005 %t/*
 
 // RUN: cd %t && %swiftc_driver -c -driver-use-frontend-path %S/Inputs/update-dependencies.py -output-file-map %t/output.json -incremental -driver-always-rebuild-dependents ./other.swift ./main.swift -module-name main -j1 -v 2>&1 | %FileCheck -check-prefix=CHECK-REV-FIRST %s
diff --git a/test/Driver/Dependencies/only-skip-once.swift b/test/Driver/Dependencies/only-skip-once.swift
index b2647a4..8cb049b 100644
--- a/test/Driver/Dependencies/only-skip-once.swift
+++ b/test/Driver/Dependencies/only-skip-once.swift
@@ -1,5 +1,7 @@
 // XFAIL: linux
-// RUN: rm -rf %t && cp -r %S/Inputs/only-skip-once/ %t
+
+// RUN: %empty-directory(%t)
+// RUN: cp -r %S/Inputs/only-skip-once/* %t
 // RUN: touch -t 201401240005 %t/*
 
 // RUN: cd %t && %target-swiftc_driver -driver-show-job-lifecycle -output-file-map %t/output-file-map.json -incremental main.swift file1.swift file2.swift -j1 2>&1 | %FileCheck -check-prefix=CHECK-INITIAL %s
diff --git a/test/Driver/Dependencies/private-after.swift b/test/Driver/Dependencies/private-after.swift
index 0c2fbdc..de279f6 100644
--- a/test/Driver/Dependencies/private-after.swift
+++ b/test/Driver/Dependencies/private-after.swift
@@ -1,7 +1,8 @@
 /// a --> b ==> c | a ==> d |    e ==> b |       f ==> g
 /// a --> b ==> c | a ==> d +==> e +==> b, e --> f ==> g
 
-// RUN: rm -rf %t && cp -r %S/Inputs/private-after/ %t
+// RUN: %empty-directory(%t)
+// RUN: cp -r %S/Inputs/private-after/* %t
 // RUN: touch -t 201401240005 %t/*.swift
 
 // Generate the build record...
@@ -29,7 +30,8 @@
 // CHECK-A-NEG-NOT: Handled g.swift
 
 
-// RUN: rm -rf %t && cp -r %S/Inputs/private-after/ %t
+// RUN: %empty-directory(%t)
+// RUN: cp -r %S/Inputs/private-after/* %t
 // RUN: touch -t 201401240005 %t/*.swift
 
 // Generate the build record...
diff --git a/test/Driver/Dependencies/private.swift b/test/Driver/Dependencies/private.swift
index 90656c6..db8937f 100644
--- a/test/Driver/Dependencies/private.swift
+++ b/test/Driver/Dependencies/private.swift
@@ -1,6 +1,7 @@
 // a ==> b --> c ==> d | e ==> c
 
-// RUN: rm -rf %t && cp -r %S/Inputs/private/ %t
+// RUN: %empty-directory(%t)
+// RUN: cp -r %S/Inputs/private/* %t
 // RUN: touch -t 201401240005 %t/*
 
 // RUN: cd %t && %swiftc_driver -c -driver-use-frontend-path %S/Inputs/update-dependencies.py -output-file-map %t/output.json -incremental -driver-always-rebuild-dependents ./a.swift ./b.swift ./c.swift ./d.swift ./e.swift -module-name main -j1 -v 2>&1 | %FileCheck -check-prefix=CHECK-INITIAL %s
diff --git a/test/Driver/Dependencies/whole-module-build-record.swift b/test/Driver/Dependencies/whole-module-build-record.swift
index 4c53260..5375513 100644
--- a/test/Driver/Dependencies/whole-module-build-record.swift
+++ b/test/Driver/Dependencies/whole-module-build-record.swift
@@ -1,6 +1,7 @@
 /// other ==> main
 
-// RUN: rm -rf %t && cp -r %S/Inputs/one-way/ %t
+// RUN: %empty-directory(%t)
+// RUN: cp -r %S/Inputs/one-way/* %t
 // RUN: touch -t 201401240005 %t/*
 
 // RUN: cd %t && %swiftc_driver -c -driver-use-frontend-path %S/Inputs/fake-build-whole-module.py -output-file-map %t/output.json -whole-module-optimization ./main.swift ./other.swift -module-name main -j1 -v 2>&1 | %FileCheck -check-prefix=CHECK-FIRST %s
diff --git a/test/IDE/print_ast_tc_decls.swift b/test/IDE/print_ast_tc_decls.swift
index a21a42b..75a2158 100644
--- a/test/IDE/print_ast_tc_decls.swift
+++ b/test/IDE/print_ast_tc_decls.swift
@@ -1358,7 +1358,7 @@
 
   // FIXME: this same type requirement with Self should be printed here
   associatedtype A2 : QuxProtocol where A2.Qux == Self
-// PREFER_TYPE_REPR_PRINTING-DAG: {{^}}  associatedtype A2 : QuxProtocol where Self.A2.Qux == Self{{$}}
+// PREFER_TYPE_REPR_PRINTING-DAG: {{^}}  associatedtype A2 : QuxProtocol where Self == Self.A2.Qux{{$}}
 }
 
 #if true
diff --git a/test/IDE/print_synthesized_extensions.swift b/test/IDE/print_synthesized_extensions.swift
index e0deb86..2cfc033 100644
--- a/test/IDE/print_synthesized_extensions.swift
+++ b/test/IDE/print_synthesized_extensions.swift
@@ -237,21 +237,21 @@
   public func foo1() {}
 }
 
-// CHECK1: <synthesized>extension <ref:Struct>S1</ref> where T : <ref:Protocol>P2</ref> {
+// CHECK1: <synthesized>extension <ref:Struct>S1</ref> where <ref:GenericTypeParam>Self</ref>.P2T1 : <ref:Protocol>P2</ref> {
 // CHECK1-NEXT:     <decl:Func>public func <loc>p2member()</loc></decl>
 // CHECK1-NEXT:     <decl:Func>public func <loc>ef1(<decl:Param>t: T</decl>)</loc></decl>
 // CHECK1-NEXT:     <decl:Func>public func <loc>ef2(<decl:Param>t: <ref:Struct>S2</ref></decl>)</loc></decl>
 // CHECK1-NEXT: }</synthesized>
 
-// CHECK2:  <synthesized>extension <ref:Struct>S1</ref> where T : <ref:Protocol>P3</ref> {
+// CHECK2:  <synthesized>extension <ref:Struct>S1</ref> where <ref:GenericTypeParam>Self</ref>.T1 : <ref:Protocol>P3</ref>  {
 // CHECK2-NEXT:     <decl:Func>public func <loc>p3Func(<decl:Param>i: <ref:Struct>Int</ref></decl>)</loc> -> <ref:Struct>Int</ref></decl>
 // CHECK2-NEXT: }</synthesized>
 
-// CHECK3:  <synthesized>extension <ref:Struct>S1</ref> where T == <ref:Struct>Int</ref> {
+// CHECK3:  <synthesized>extension <ref:Struct>S1</ref> where <ref:GenericTypeParam>Self</ref>.T1 == <ref:Struct>Int</ref>  {
 // CHECK3-NEXT:     <decl:Func>public func <loc>p1IntFunc(<decl:Param>i: <ref:Struct>Int</ref></decl>)</loc> -> <ref:Struct>Int</ref></decl>
 // CHECK3-NEXT: }</synthesized>
 
-// CHECK4:  <synthesized>extension <ref:Struct>S1</ref> where T == <ref:Struct>S9</ref><<ref:Struct>Int</ref>> {
+// CHECK4:  <synthesized>extension <ref:Struct>S1</ref> where <ref:GenericTypeParam>Self</ref>.T1 == <ref:Struct>S9</ref><<ref:Struct>Int</ref>> {
 // CHECK4-NEXT:     <decl:Func>public func <loc>S9IntFunc()</loc></decl>
 // CHECK4-NEXT: }</synthesized>
 
diff --git a/test/IRGen/Inputs/ObjectiveC.swift b/test/IRGen/Inputs/ObjectiveC.swift
index d425d77..2a21acf 100644
--- a/test/IRGen/Inputs/ObjectiveC.swift
+++ b/test/IRGen/Inputs/ObjectiveC.swift
@@ -10,7 +10,7 @@
     self.value = value ? 1 : 0
   }
 
-  /// \brief Allow use in a Boolean context.
+  /// Allow use in a Boolean context.
   public var boolValue: Bool {
     return value != 0
   }
diff --git a/test/IRGen/archetype_resilience.sil b/test/IRGen/archetype_resilience.sil
index 242658d..0744407 100644
--- a/test/IRGen/archetype_resilience.sil
+++ b/test/IRGen/archetype_resilience.sil
@@ -20,7 +20,7 @@
 // CHECK: call %T20archetype_resilience36EnumWithClassArchetypeAndDynamicSizeO* @"$s20archetype_resilience36EnumWithClassArchetypeAndDynamicSizeOyxGRlzCr0_lWOc"(%T20archetype_resilience36EnumWithClassArchetypeAndDynamicSizeO* %0, %T20archetype_resilience36EnumWithClassArchetypeAndDynamicSizeO* {{.*}}, %swift.type* %"EnumWithClassArchetypeAndDynamicSize<T>")
 // CHECK: ret void
 sil @copyDynamicMultiEnum : $@convention(method) <T, U where T: AnyObject> (@in_guaranteed EnumWithClassArchetypeAndDynamicSize<T>) -> () {
-bb0(%0 : @trivial $*EnumWithClassArchetypeAndDynamicSize<T>):
+bb0(%0 : $*EnumWithClassArchetypeAndDynamicSize<T>):
   %1 = alloc_stack $EnumWithClassArchetypeAndDynamicSize<T> 
   copy_addr %0 to [initialization] %1 : $*EnumWithClassArchetypeAndDynamicSize<T>
   dealloc_stack %1 : $*EnumWithClassArchetypeAndDynamicSize<T>
diff --git a/test/IRGen/builtin_word.sil b/test/IRGen/builtin_word.sil
index 45bc3dc..10db401 100644
--- a/test/IRGen/builtin_word.sil
+++ b/test/IRGen/builtin_word.sil
@@ -36,7 +36,7 @@
 // ARM32:   ret { i32, i64 } %4
 // ARM32: }
 sil @word_zextOrBitCast : $(Builtin.Int32, Builtin.Word) -> (Builtin.Word, Builtin.Int64) {
-entry(%i : @trivial $Builtin.Int32, %w : @trivial $Builtin.Word):
+entry(%i : $Builtin.Int32, %w : $Builtin.Word):
   %j = builtin "zextOrBitCast_Int32_Word"(%i : $Builtin.Int32) : $Builtin.Word
   %v = builtin "zextOrBitCast_Word_Int64"(%w : $Builtin.Word) : $Builtin.Int64
   %t = tuple (%j : $Builtin.Word, %v : $Builtin.Int64)
@@ -58,7 +58,7 @@
 // ARM32:   ret { i32, i32 } %4
 // ARM32: }
 sil @word_truncOrBitCast : $(Builtin.Word, Builtin.Int64) -> (Builtin.Int32, Builtin.Word) {
-entry(%w : @trivial $Builtin.Word, %i : @trivial $Builtin.Int64):
+entry(%w : $Builtin.Word, %i : $Builtin.Int64):
   %v = builtin "truncOrBitCast_Word_Int32"(%w : $Builtin.Word) : $Builtin.Int32
   %j = builtin "truncOrBitCast_Int64_Word"(%i : $Builtin.Int64) : $Builtin.Word
   %t = tuple (%v : $Builtin.Int32, %j : $Builtin.Word)
diff --git a/test/IRGen/class_isa_pointers.sil b/test/IRGen/class_isa_pointers.sil
index 053d4e7..3e38f41 100644
--- a/test/IRGen/class_isa_pointers.sil
+++ b/test/IRGen/class_isa_pointers.sil
@@ -60,7 +60,7 @@
   unreachable
 }
 sil private @$s18class_isa_pointers7MongrelC7bellsOnACSgSi_tcfcTo : $@convention(objc_method) (Int, Purebred) -> () {
-entry(%0 : @trivial $Int, %1 : @unowned $Purebred):
+entry(%0 : $Int, %1 : @unowned $Purebred):
   unreachable
 }
 sil private @$s18class_isa_pointers7MongrelCACycfcTo : $@convention(objc_method) (Purebred) -> () {
diff --git a/test/IRGen/class_isa_pointers_armv7k_watchos.sil b/test/IRGen/class_isa_pointers_armv7k_watchos.sil
index e86931b..e258eaf 100644
--- a/test/IRGen/class_isa_pointers_armv7k_watchos.sil
+++ b/test/IRGen/class_isa_pointers_armv7k_watchos.sil
@@ -58,7 +58,7 @@
   unreachable
 }
 sil private @$s33class_isa_pointers_armv7k_watchos7MongrelC7bellsOnACSgSi_tcfcTo : $@convention(objc_method) (Int, Purebred) -> () {
-entry(%0 : @trivial $Int, %1 : @unowned $Purebred):
+entry(%0 : $Int, %1 : @unowned $Purebred):
   unreachable
 }
 sil private @$s33class_isa_pointers_armv7k_watchos7MongrelCACycfcTo : $@convention(objc_method) (Purebred) -> () {
diff --git a/test/IRGen/copy_value_destroy_value.sil b/test/IRGen/copy_value_destroy_value.sil
index fa4cea3..1846cb7 100644
--- a/test/IRGen/copy_value_destroy_value.sil
+++ b/test/IRGen/copy_value_destroy_value.sil
@@ -16,11 +16,11 @@
   var t3 : Builtin.Int32
 }
 
-// CHECK: define{{( protected)?}} swiftcc void @trivial(
+// CHECK: define{{( protected)?}} swiftcc void @trivial_arg(
 // CHECK-NEXT: entry
 // CHECK-NEXT: ret void
-sil @trivial : $@convention(thin) (Builtin.Int32) -> () {
-bb0(%0 : @trivial $Builtin.Int32):
+sil @trivial_arg : $@convention(thin) (Builtin.Int32) -> () {
+bb0(%0 : $Builtin.Int32):
   %1 = copy_value %0 : $Builtin.Int32
   destroy_value %1 : $Builtin.Int32
   %2 = tuple()
diff --git a/test/IRGen/error_self_conformance.sil b/test/IRGen/error_self_conformance.sil
new file mode 100644
index 0000000..8024181
--- /dev/null
+++ b/test/IRGen/error_self_conformance.sil
@@ -0,0 +1,19 @@
+// RUN: %target-swift-frontend -assume-parsing-unqualified-ownership-sil -emit-ir %s | %FileCheck %s -DINT=i%target-ptrsize
+
+import Swift
+
+sil @take_any_error : $@convention(thin) <T: Error> (@in T) -> ()
+
+// CHECK-LABEL: swiftcc void @test(%swift.error**
+sil @test : $@convention(thin) (@in Error) -> () {
+entry(%0 : $*Error):
+  // CHECK:      [[VALUE:%.*]] = bitcast %swift.error** %0 to %swift.opaque*
+  // CHECK-NEXT: [[T0:%.*]] = call swiftcc %swift.metadata_response @"$ss5Error_pMa"([[INT]] 0)
+  // CHECK-NEXT: [[ERROR_METADATA:%.*]] = extractvalue %swift.metadata_response [[T0]], 0
+  // CHECK-NEXT: call swiftcc void @take_any_error(%swift.opaque* noalias nocapture [[VALUE]], %swift.type* [[ERROR_METADATA]], i8** @"$ss5ErrorWS")
+  // CHECK-NEXT: ret void
+  %take = function_ref @take_any_error : $@convention(thin) <T: Error> (@in T) -> ()
+  apply %take<Error>(%0) : $@convention(thin) <T: Error> (@in T) -> ()
+  %ret = tuple ()
+  return %ret : $()
+}
diff --git a/test/IRGen/generic_classes.sil b/test/IRGen/generic_classes.sil
index 47d2548..6faabbf 100644
--- a/test/IRGen/generic_classes.sil
+++ b/test/IRGen/generic_classes.sil
@@ -280,7 +280,7 @@
 // CHECK:   [[Y_ADDR:%.*]] = getelementptr inbounds i8, i8* [[CLASS_BYTE_ARRAY]], i64 [[Y_OFFSET]]
 // CHECK:   bitcast i8* [[Y_ADDR]] to %swift.opaque*
 sil @RootGeneric_concrete_fragile_dependent_member_access_y : $<F> (RootGeneric<F>) -> @out F {
-entry(%z : @trivial $*F, %c : @unowned $RootGeneric<F>):
+entry(%z : $*F, %c : @unowned $RootGeneric<F>):
   %p = ref_element_addr %c : $RootGeneric<F>, #RootGeneric.y
   copy_addr %p to [initialization] %z : $*F
   %t = tuple ()
@@ -291,7 +291,7 @@
 // CHECK:   [[Y_ADDR:%.*]] = getelementptr inbounds {{.*}}, {{.*}}* %1, i32 0, i32 3
 // CHECK:   bitcast %TSi* [[Y_ADDR]] to i8*
 sil @RootGeneric_subst_concrete_fragile_dependent_member_access_y : $(RootGeneric<Int>) -> @out Int {
-entry(%z : @trivial $*Int, %c : @unowned $RootGeneric<Int>):
+entry(%z : $*Int, %c : @unowned $RootGeneric<Int>):
   %p = ref_element_addr %c : $RootGeneric<Int>, #RootGeneric.y
   copy_addr %p to [initialization] %z : $*Int
   %t = tuple ()
diff --git a/test/IRGen/generic_classes_objc.sil b/test/IRGen/generic_classes_objc.sil
index 213ac89..c02e162 100644
--- a/test/IRGen/generic_classes_objc.sil
+++ b/test/IRGen/generic_classes_objc.sil
@@ -33,7 +33,7 @@
 }
 
 sil @$s20generic_classes_objc19GenericInheritsObjCC7bellsOnACyxGSgSi_tcfcTo : $@convention(objc_method) <T> (Int, @owned GenericInheritsObjC<T>) -> @owned GenericInheritsObjC<T> {
-bb0(%0 : @trivial $Int, %1 : @owned $GenericInheritsObjC<T>):
+bb0(%0 : $Int, %1 : @owned $GenericInheritsObjC<T>):
   unreachable
 }
 
@@ -61,7 +61,7 @@
 }
 
 sil @$s20generic_classes_objc20GenericInheritsObjC2C7bellsOnACyxGSgSi_tcfcTo : $@convention(objc_method) <T> (Int, @owned GenericInheritsObjC<T>) -> @owned GenericInheritsObjC<T> {
-bb0(%0 : @trivial $Int, %1 : @owned $GenericInheritsObjC<T>):
+bb0(%0 : $Int, %1 : @owned $GenericInheritsObjC<T>):
   unreachable
 }
 
diff --git a/test/IRGen/integer_literal.sil b/test/IRGen/integer_literal.sil
index cf82300..1adec4a 100644
--- a/test/IRGen/integer_literal.sil
+++ b/test/IRGen/integer_literal.sil
@@ -87,7 +87,7 @@
 
 // CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc {{.*}} @trunc_s16
 sil @trunc_s16 : $(Builtin.IntLiteral) -> (Builtin.Int16, Builtin.Int1) {
-entry(%0 : @trivial $Builtin.IntLiteral):
+entry(%0 : $Builtin.IntLiteral):
   // CHECK:         [[WIDTH:%.*]] = lshr i32 %1, 8
   // CHECK-NEXT:    [[OVERFLOW:%.*]] = icmp ugt i32 [[WIDTH]], 16
   // CHECK-NEXT:    br i1 [[OVERFLOW]], label %[[INVALID:[a-z.]+]], label %[[VALID:[a-z.]+]]
@@ -107,7 +107,7 @@
 
 // CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc { i32, i1 } @trunc_s32
 sil @trunc_s32 : $(Builtin.IntLiteral) -> (Builtin.Int32, Builtin.Int1) {
-entry(%0 : @trivial $Builtin.IntLiteral):
+entry(%0 : $Builtin.IntLiteral):
   // CHECK:         [[WIDTH:%.*]] = lshr i32 %1, 8
   // CHECK-NEXT:    [[OVERFLOW:%.*]] = icmp ugt i32 [[WIDTH]], 32
   // CHECK-NEXT:    br i1 [[OVERFLOW]], label %[[INVALID:[a-z.]+]], label %[[VALID:[a-z.]+]]
@@ -126,7 +126,7 @@
 
 // CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc {{.*}} @trunc_s48
 sil @trunc_s48 : $(Builtin.IntLiteral) -> (Builtin.Int48, Builtin.Int1) {
-entry(%0 : @trivial $Builtin.IntLiteral):
+entry(%0 : $Builtin.IntLiteral):
   // CHECK:         [[WIDTH:%.*]] = lshr i32 %1, 8
   // CHECK-NEXT:    [[OVERFLOW:%.*]] = icmp ugt i32 [[WIDTH]], 48
   // CHECK-NEXT:    br i1 [[OVERFLOW]], label %[[INVALID:[a-z.]+]], label %[[VALID:[a-z.]+]]
@@ -157,7 +157,7 @@
 
 // CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc { i64, i1 } @trunc_s64
 sil @trunc_s64 : $(Builtin.IntLiteral) -> (Builtin.Int64, Builtin.Int1) {
-entry(%0 : @trivial $Builtin.IntLiteral):
+entry(%0 : $Builtin.IntLiteral):
   // CHECK:         [[WIDTH:%.*]] = lshr i32 %1, 8
   // CHECK-NEXT:    [[OVERFLOW:%.*]] = icmp ugt i32 [[WIDTH]], 64
   // CHECK-NEXT:    br i1 [[OVERFLOW]], label %[[INVALID:[a-z.]+]], label %[[VALID:[a-z.]+]]
@@ -194,7 +194,7 @@
 
 // CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc {{.*}} @trunc_u16
 sil @trunc_u16 : $(Builtin.IntLiteral) -> (Builtin.Int16, Builtin.Int1) {
-entry(%0 : @trivial $Builtin.IntLiteral):
+entry(%0 : $Builtin.IntLiteral):
   // CHECK:         [[WIDTH:%.*]] = lshr i32 %1, 8
   // CHECK-NEXT:    [[NEGATIVE:%.*]] = trunc i32 %1 to i1
   // CHECK-NEXT:    [[LARGE:%.*]] = icmp ugt i32 [[WIDTH]], 17
@@ -216,7 +216,7 @@
 
 // CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc { i32, i1 } @trunc_u32
 sil @trunc_u32 : $(Builtin.IntLiteral) -> (Builtin.Int32, Builtin.Int1) {
-entry(%0 : @trivial $Builtin.IntLiteral):
+entry(%0 : $Builtin.IntLiteral):
   // CHECK:         [[WIDTH:%.*]] = lshr i32 %1, 8
   // CHECK-NEXT:    [[NEGATIVE:%.*]] = trunc i32 %1 to i1
   // CHECK-NEXT:    [[LARGE:%.*]] = icmp ugt i32 [[WIDTH]], 33
@@ -237,7 +237,7 @@
 
 // CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc {{.*}} @trunc_u48
 sil @trunc_u48 : $(Builtin.IntLiteral) -> (Builtin.Int48, Builtin.Int1) {
-entry(%0 : @trivial $Builtin.IntLiteral):
+entry(%0 : $Builtin.IntLiteral):
   // CHECK:         [[WIDTH:%.*]] = lshr i32 %1, 8
   // CHECK-NEXT:    [[NEGATIVE:%.*]] = trunc i32 %1 to i1
   // CHECK-NEXT:    [[LARGE:%.*]] = icmp ugt i32 [[WIDTH]], 49
@@ -270,7 +270,7 @@
 
 // CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc { i64, i1 } @trunc_u64
 sil @trunc_u64 : $(Builtin.IntLiteral) -> (Builtin.Int64, Builtin.Int1) {
-entry(%0 : @trivial $Builtin.IntLiteral):
+entry(%0 : $Builtin.IntLiteral):
   // CHECK:         [[WIDTH:%.*]] = lshr i32 %1, 8
   // CHECK-NEXT:    [[NEGATIVE:%.*]] = trunc i32 %1 to i1
   // CHECK-NEXT:    [[LARGE:%.*]] = icmp ugt i32 [[WIDTH]], 65
@@ -309,7 +309,7 @@
 
 // CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc half @sitofp16
 sil @sitofp16 : $(Builtin.IntLiteral) -> Builtin.FPIEEE16 {
-entry(%0 : @trivial $Builtin.IntLiteral):
+entry(%0 : $Builtin.IntLiteral):
   // CHECK:      [[T0:%.*]] = call swiftcc float @swift_intToFloat32(i32* %0, i32 %1)
   // CHECK-NEXT: [[T1:%.*]] = fptrunc float [[T0]] to half
   // CHECK-NEXT: ret half [[T1]]
@@ -319,7 +319,7 @@
 
 // CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc float @sitofp32
 sil @sitofp32 : $(Builtin.IntLiteral) -> Builtin.FPIEEE32 {
-entry(%0 : @trivial $Builtin.IntLiteral):
+entry(%0 : $Builtin.IntLiteral):
   // CHECK:      [[T0:%.*]] = call swiftcc float @swift_intToFloat32(i32* %0, i32 %1)
   // CHECK-NEXT: ret float [[T0]]
   %result = builtin "itofp_with_overflow_IntLiteral_FPIEEE32"(%0 : $Builtin.IntLiteral) : $Builtin.FPIEEE32
@@ -328,7 +328,7 @@
 
 // CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc double @sitofp64
 sil @sitofp64 : $(Builtin.IntLiteral) -> Builtin.FPIEEE64 {
-entry(%0 : @trivial $Builtin.IntLiteral):
+entry(%0 : $Builtin.IntLiteral):
   // CHECK:      [[T0:%.*]] = call swiftcc double @swift_intToFloat64(i32* %0, i32 %1)
   // CHECK-NEXT: ret double [[T0]]
   %result = builtin "itofp_with_overflow_IntLiteral_FPIEEE64"(%0 : $Builtin.IntLiteral) : $Builtin.FPIEEE64
@@ -337,7 +337,7 @@
 
 // CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc x86_fp80 @sitofp80
 sil @sitofp80 : $(Builtin.IntLiteral) -> Builtin.FPIEEE80 {
-entry(%0 : @trivial $Builtin.IntLiteral):
+entry(%0 : $Builtin.IntLiteral):
   // CHECK:      [[T0:%.*]] = call swiftcc double @swift_intToFloat64(i32* %0, i32 %1)
   // CHECK-NEXT: [[T1:%.*]] = fpext double [[T0]] to x86_fp80
   // CHECK-NEXT: ret x86_fp80 [[T1]]
@@ -347,7 +347,7 @@
 
 // CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc fp128 @sitofp128
 sil @sitofp128 : $(Builtin.IntLiteral) -> Builtin.FPIEEE128 {
-entry(%0 : @trivial $Builtin.IntLiteral):
+entry(%0 : $Builtin.IntLiteral):
   // CHECK:      [[T0:%.*]] = call swiftcc double @swift_intToFloat64(i32* %0, i32 %1)
   // CHECK-NEXT: [[T1:%.*]] = fpext double [[T0]] to fp128
   // CHECK-NEXT: ret fp128 [[T1]]
diff --git a/test/IRGen/invariant_load.sil b/test/IRGen/invariant_load.sil
index 2961f1b..e931f71 100644
--- a/test/IRGen/invariant_load.sil
+++ b/test/IRGen/invariant_load.sil
@@ -11,7 +11,7 @@
 
 // CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc void @invariant_load
 sil @invariant_load : $@convention(thin) (Builtin.RawPointer) -> () {
-entry(%p : @trivial $Builtin.RawPointer):
+entry(%p : $Builtin.RawPointer):
   %a = pointer_to_address %p : $Builtin.RawPointer to [invariant] $*X
   // CHECK: load i32, {{.*}} !invariant.load
   // CHECK: load i32, {{.*}} !invariant.load
diff --git a/test/IRGen/keypaths.sil b/test/IRGen/keypaths.sil
index a0132be..709352b 100644
--- a/test/IRGen/keypaths.sil
+++ b/test/IRGen/keypaths.sil
@@ -241,27 +241,27 @@
 
 sil @k_id : $@convention(thin) () -> ()
 sil @k_get : $@convention(thin) (@in_guaranteed S) -> @out Int {
-bb0(%0 : @trivial $*Int, %1 : @trivial $*S):
+bb0(%0 : $*Int, %1 : $*S):
   unreachable
 }
 
 sil @l_get : $@convention(thin) (@in_guaranteed C) -> @out Int {
-bb0(%0 : @trivial $*Int, %1 : @trivial $*C):
+bb0(%0 : $*Int, %1 : $*C):
   unreachable
 }
 
 sil @l_set : $@convention(thin) (@in_guaranteed Int, @in_guaranteed C) -> () {
-bb0(%0 : @trivial $*Int, %1 : @trivial $*C):
+bb0(%0 : $*Int, %1 : $*C):
   unreachable
 }
 
 sil @m_get : $@convention(thin) (@in_guaranteed S) -> @out @callee_guaranteed () -> @out () {
-bb0(%0 : @trivial $*@callee_guaranteed () -> @out (), %1 : @trivial $*S):
+bb0(%0 : $*@callee_guaranteed () -> @out (), %1 : $*S):
   unreachable
 }
 
 sil @m_set : $@convention(thin) (@in_guaranteed @callee_guaranteed () -> @out (), @inout S) -> () {
-bb0(%0 : @trivial $*@callee_guaranteed () -> @out (), %1 : @trivial $*S):
+bb0(%0 : $*@callee_guaranteed () -> @out (), %1 : $*S):
   unreachable
 }
 
@@ -363,7 +363,7 @@
 sil @r_set : $@convention(thin) (@in_guaranteed S, @in_guaranteed C, UnsafeRawPointer) -> ()
 
 sil @generic_computed_property_indices : $@convention(thin) <A: Hashable, B: Hashable> (@in_guaranteed A, @in_guaranteed B, @in_guaranteed A, @in_guaranteed B, @in_guaranteed A, @in_guaranteed B) -> () {
-entry(%0 : @trivial $*A, %1 : @trivial $*B, %2 : @trivial $*A, %3 : @trivial $*B, %4 : @trivial $*A, %5 : @trivial $*B):
+entry(%0 : $*A, %1 : $*B, %2 : $*A, %3 : $*B, %4 : $*A, %5 : $*B):
   %s = keypath $WritableKeyPath<A, B>, <X: Hashable, Y: Hashable> (
     root $X;
     settable_property $Y,
diff --git a/test/IRGen/keypaths_external.sil b/test/IRGen/keypaths_external.sil
index e03f61c..3b06e79 100644
--- a/test/IRGen/keypaths_external.sil
+++ b/test/IRGen/keypaths_external.sil
@@ -10,7 +10,7 @@
 import keypaths_external_other
 
 sil @generic_external : $@convention(thin) <A: Hashable, B: Hashable> (@in_guaranteed A, @in_guaranteed B, @in_guaranteed A, @in_guaranteed B, @in_guaranteed A, @in_guaranteed B) -> () {
-entry(%0 : @trivial $*A, %1 : @trivial $*B, %2 : @trivial $*A, %3 : @trivial $*B, %4 : @trivial $*A, %5 : @trivial $*B):
+entry(%0 : $*A, %1 : $*B, %2 : $*A, %3 : $*B, %4 : $*A, %5 : $*B):
   %t = keypath $KeyPath<G<B>, B>, <Z> (
     root $G<Z>;
     gettable_property $Z,
diff --git a/test/IRGen/keypaths_objc.sil b/test/IRGen/keypaths_objc.sil
index 27d5da5..a14e06f 100644
--- a/test/IRGen/keypaths_objc.sil
+++ b/test/IRGen/keypaths_objc.sil
@@ -41,7 +41,7 @@
 }
 
 sil hidden @$s13keypaths_objc1CCACycfcTo : $@convention(objc_method) (@objc_metatype C.Type) -> @owned C {
-entry(%0 : @trivial $@objc_metatype C.Type):
+entry(%0 : $@objc_metatype C.Type):
   unreachable
 }
 
diff --git a/test/IRGen/multi_payload_shifting.swift b/test/IRGen/multi_payload_shifting.swift
new file mode 100644
index 0000000..44d9e0b
--- /dev/null
+++ b/test/IRGen/multi_payload_shifting.swift
@@ -0,0 +1,32 @@
+// RUN: %target-swift-frontend -enable-objc-interop -assume-parsing-unqualified-ownership-sil -primary-file %s -emit-ir | %FileCheck %s
+
+// REQUIRES: CPU=x86_64
+
+class Tag {}
+
+struct Scalar {
+  var str = ""
+  var x = Tag()
+  var style: BinaryChoice  = .zero
+  enum BinaryChoice: UInt32 {
+    case zero = 0
+    case one
+  }
+}
+
+public struct Sequence {
+  var tag: Tag = Tag()
+  var tag2: Tag = Tag()
+}
+
+enum Node {
+  case scalar(Scalar)
+  case sequence(Sequence)
+}
+
+// CHECK: define internal i32 @"$s22multi_payload_shifting4NodeOwet"(%swift.opaque* noalias %value, i32 %numEmptyCases, %swift.type* %Node)
+// CHECK:  [[ADDR:%.*]] = getelementptr inbounds { i64, i64, i64, i8 }, { i64, i64, i64, i8 }* {{.*}}, i32 0, i32 3
+// CHECK:  [[BYTE:%.*]] = load i8, i8* [[ADDR]]
+// Make sure we zext before we shift.
+// CHECK:  [[ZEXT:%.*]] = zext i8 [[BYTE]] to i32
+// CHECK:  shl i32 [[ZEXT]], 10
diff --git a/test/IRGen/objc_attr_NSManaged.sil b/test/IRGen/objc_attr_NSManaged.sil
index 17f4445..19b6bbb7 100644
--- a/test/IRGen/objc_attr_NSManaged.sil
+++ b/test/IRGen/objc_attr_NSManaged.sil
@@ -42,7 +42,7 @@
 }
 
 sil @$s19objc_attr_NSManaged10SwiftGizmoC7bellsOnACSgSi_tcfcTo : $@convention(objc_method) (Int, @owned SwiftGizmo) -> @owned SwiftGizmo? {
-bb0(%0 : @trivial $Int, %1 : @owned $SwiftGizmo):
+bb0(%0 : $Int, %1 : @owned $SwiftGizmo):
   unreachable
 }
 
@@ -52,7 +52,7 @@
 }
 
 sil @$s19objc_attr_NSManaged10SwiftGizmoC7bellsOnACSi_tcfc : $@convention(method) (Int, @owned SwiftGizmo) -> @owned SwiftGizmo {
-bb0(%0 : @trivial $Int, %1 : @owned $SwiftGizmo):
+bb0(%0 : $Int, %1 : @owned $SwiftGizmo):
   return %1 : $SwiftGizmo
 }
 
diff --git a/test/IRGen/objc_dealloc.sil b/test/IRGen/objc_dealloc.sil
index cfc2cb2..5567089 100644
--- a/test/IRGen/objc_dealloc.sil
+++ b/test/IRGen/objc_dealloc.sil
@@ -131,6 +131,6 @@
 }
 
 sil @$s12objc_dealloc10SwiftGizmoC7bellsOnACSgSi_tcfcTo : $@convention(objc_method) (Int, @owned SwiftGizmo) -> @owned SwiftGizmo? {
-bb0(%0 : @trivial $Int, %1 : @owned $SwiftGizmo):
+bb0(%0 : $Int, %1 : @owned $SwiftGizmo):
   unreachable
 }
diff --git a/test/IRGen/objc_factory_method.sil b/test/IRGen/objc_factory_method.sil
index 29a507b..e05c345 100644
--- a/test/IRGen/objc_factory_method.sil
+++ b/test/IRGen/objc_factory_method.sil
@@ -18,7 +18,7 @@
 
 // CHECK-LABEL: define {{.*}} @_TFCSo4HiveCfMS_FT5queenGSQCSo3Bee__S_
 sil @_TFCSo4HiveCfMS_FT5queenGSQCSo3Bee__S_ : $@convention(thin) (@owned Optional<Bee>, @thick Hive.Type) -> @owned Optional<Hive> {
-bb0(%0 : @owned $Optional<Bee>, %1 : @trivial $@thick Hive.Type):
+bb0(%0 : @owned $Optional<Bee>, %1 : $@thick Hive.Type):
   %2 = thick_to_objc_metatype %1 : $@thick Hive.Type to $@objc_metatype Hive.Type // users: %3, %4
   // CHECK: load i8*, i8** @"\01L_selector(hiveWithQueen:)"
   %3 = objc_method %2 : $@objc_metatype Hive.Type, #Hive.init!allocator.1.foreign : (Hive.Type) -> (Bee!) -> Hive!, $@convention(objc_method) (Optional<Bee>, @objc_metatype Hive.Type) -> @autoreleased Optional<Hive> // user: %4
diff --git a/test/IRGen/objc_generic_class_convention.sil b/test/IRGen/objc_generic_class_convention.sil
index fc98fd0..841081c 100644
--- a/test/IRGen/objc_generic_class_convention.sil
+++ b/test/IRGen/objc_generic_class_convention.sil
@@ -15,12 +15,12 @@
 
 // CHECK-LABEL: define swiftcc void @method(i64, %TSo12GenericClassC* swiftself)
 sil @method : $@convention(method) @pseudogeneric <T: AnyObject> (Int64, @guaranteed GenericClass<T>) -> () {
-entry(%0 : @trivial $Int64, %1 : @guaranteed $GenericClass<T>):
+entry(%0 : $Int64, %1 : @guaranteed $GenericClass<T>):
   return undef : $()
 }
 
 // CHECK-LABEL: define void @objcMethod(i8*, i8*, i64)
 sil @objcMethod : $@convention(objc_method) @pseudogeneric <T: AnyObject> (Int64, @guaranteed GenericClass<T>) -> () {
-entry(%0 : @trivial $Int64, %1 : @guaranteed $GenericClass<T>):
+entry(%0 : $Int64, %1 : @guaranteed $GenericClass<T>):
   return undef : $()
 }
diff --git a/test/IRGen/objc_implicit_with.sil b/test/IRGen/objc_implicit_with.sil
index d05221c..dc3a770 100644
--- a/test/IRGen/objc_implicit_with.sil
+++ b/test/IRGen/objc_implicit_with.sil
@@ -23,12 +23,12 @@
 sil_vtable SwiftGizmo {}
 
 sil @$s18objc_implicit_with10SwiftGizmoC3red5green4blueACSf_S2ftcfcTo : $@convention(objc_method) (Float, Float, Float, @owned SwiftGizmo) -> @owned SwiftGizmo {
-bb0(%0 : @trivial $Float, %1 : @trivial $Float, %2 : @trivial $Float, %3 : @owned $SwiftGizmo):
+bb0(%0 : $Float, %1 : $Float, %2 : $Float, %3 : @owned $SwiftGizmo):
   return %3 : $SwiftGizmo
 }
 
 sil @$s18objc_implicit_with10SwiftGizmoC7bellsOnACSgSi_tcfcTo : $@convention(objc_method) (Int, @owned SwiftGizmo) -> @owned SwiftGizmo? {
-bb0(%0 : @trivial $Int, %1 : @owned $SwiftGizmo):
+bb0(%0 : $Int, %1 : @owned $SwiftGizmo):
   unreachable
 }
 
@@ -38,11 +38,11 @@
 }
 
 sil @$s18objc_implicit_with10SwiftGizmoC5color3red5green4blueySf_S2ftFTo : $@convention(objc_method) (Float, Float, Float, @owned SwiftGizmo) -> @owned SwiftGizmo {
-bb0(%0 : @trivial $Float, %1 : @trivial $Float, %2 : @trivial $Float, %3 : @owned $SwiftGizmo):
+bb0(%0 : $Float, %1 : $Float, %2 : $Float, %3 : @owned $SwiftGizmo):
   return %3 : $SwiftGizmo
 }
 
 sil @$s18objc_implicit_with10SwiftGizmoC13otherColorFor3red5green4blueySf_S2ftFTo : $@convention(objc_method) (Float, Float, Float, @owned SwiftGizmo) -> @owned SwiftGizmo {
-bb0(%0 : @trivial $Float, %1 : @trivial $Float, %2 : @trivial $Float, %3 : @owned $SwiftGizmo):
+bb0(%0 : $Float, %1 : $Float, %2 : $Float, %3 : @owned $SwiftGizmo):
   return %3 : $SwiftGizmo
 }
diff --git a/test/IRGen/objc_int_encoding.sil b/test/IRGen/objc_int_encoding.sil
index 67f4546..125cc9b 100644
--- a/test/IRGen/objc_int_encoding.sil
+++ b/test/IRGen/objc_int_encoding.sil
@@ -20,7 +20,7 @@
 }
 
 sil hidden @$s17objc_int_encoding3FooC3foo1xSuSi_tFTo : $@convention(objc_method) (Int, @guaranteed Foo) -> UInt {
-entry(%0 : @trivial $Int, %1 : @owned $Foo):
+entry(%0 : $Int, %1 : @owned $Foo):
   unreachable
 }
 sil @$s17objc_int_encoding3FooCACycfcTo : $@convention(objc_method) (@owned Foo) -> @owned Foo {
diff --git a/test/IRGen/objc_simd.sil b/test/IRGen/objc_simd.sil
index c2fb90f..d257c4f 100644
--- a/test/IRGen/objc_simd.sil
+++ b/test/IRGen/objc_simd.sil
@@ -25,7 +25,7 @@
 // powerpc64le-LABEL: define{{( dllexport)?}}{{( protected)?}} <4 x float> @simd_c_args(<4 x float>)
 // s390x-LABEL: define{{( dllexport)?}}{{( protected)?}} <4 x float> @simd_c_args(<4 x float>)
 sil @simd_c_args : $@convention(c) (float4) -> float4 {
-entry(%x : @trivial $float4):
+entry(%x : $float4):
   return %x : $float4
 }
 
@@ -41,7 +41,7 @@
 // powerpc64le-LABEL: define{{( dllexport)?}}{{( protected)?}} <3 x float> @simd_c_args_float3(<3 x float>)
 // s390x-LABEL: define{{( dllexport)?}}{{( protected)?}} <3 x float> @simd_c_args_float3(<3 x float>)
 sil @simd_c_args_float3 : $@convention(c) (float3) -> float3 {
-entry(%x : @trivial $float3):
+entry(%x : $float3):
 // x86_64: [[COERCE:%.*]] = alloca <3 x float>, align 16
 // x86_64: store <3 x float> %0, <3 x float>* [[COERCE]]
 // x86_64: [[COERCED:%.*]] = bitcast <3 x float>* [[COERCE]] to %T4simd6float3V*
@@ -60,7 +60,7 @@
 // powerpc64le-LABEL: define{{( dllexport)?}}{{( protected)?}} void @simd_native_args(%T4simd6float4V* noalias nocapture sret, %T4simd6float4V* noalias nocapture dereferenceable({{.*}}))
 // s390x-LABEL: define{{( dllexport)?}}{{( protected)?}} void @simd_native_args(%T4simd6float4V* noalias nocapture sret, %T4simd6float4V* noalias nocapture dereferenceable({{.*}}))
 sil @simd_native_args : $@convention(thin) (float4) -> float4 {
-entry(%x : @trivial $float4):
+entry(%x : $float4):
   %f = function_ref @simd_c_args : $@convention(c) (float4) -> float4
   %y = apply %f(%x) : $@convention(c) (float4) -> float4
   return %y : $float4
@@ -78,7 +78,7 @@
 // powerpc64le-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc { float, float, float } @simd_native_args_float3(float, float, float)
 // s390x-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc { float, float, float } @simd_native_args_float3(float, float, float)
 sil @simd_native_args_float3 : $@convention(thin) (float3) -> float3 {
-entry(%x : @trivial $float3):
+entry(%x : $float3):
   %f = function_ref @simd_c_args_float3 : $@convention(c) (float3) -> float3
   %y = apply %f(%x) : $@convention(c) (float3) -> float3
   return %y : $float3
diff --git a/test/IRGen/ownership_qualified_memopts.sil b/test/IRGen/ownership_qualified_memopts.sil
index 620f526..5597f83 100644
--- a/test/IRGen/ownership_qualified_memopts.sil
+++ b/test/IRGen/ownership_qualified_memopts.sil
@@ -9,7 +9,7 @@
 // CHECK-NOT: retain
 // CHECK: ret void
 sil @take_load : $@convention(thin) (@in Builtin.NativeObject) -> () {
-bb0(%0 : @trivial $*Builtin.NativeObject):
+bb0(%0 : $*Builtin.NativeObject):
   load [take] %0 : $*Builtin.NativeObject
   %1 = tuple()
   return %1 : $()
@@ -20,7 +20,7 @@
 // CHECK: retain
 // CHECK: ret void
 sil @copy_load : $@convention(thin) (@in Builtin.NativeObject) -> () {
-bb0(%0 : @trivial $*Builtin.NativeObject):
+bb0(%0 : $*Builtin.NativeObject):
   load [copy] %0 : $*Builtin.NativeObject
   %1 = tuple()
   return %1 : $()
@@ -32,7 +32,7 @@
 // CHECK-NOT: retain
 // CHECK: ret void
 sil @trivial_load : $@convention(thin) (@in Builtin.Int32) -> () {
-bb0(%0 : @trivial $*Builtin.Int32):
+bb0(%0 : $*Builtin.Int32):
   load [trivial] %0 : $*Builtin.Int32
   %1 = tuple()
   return %1 : $()
@@ -46,7 +46,7 @@
 // CHECK-NOT: release
 // CHECK: ret void
 sil @init_store : $@convention(thin) (@in Builtin.NativeObject, Builtin.NativeObject) -> () {
-bb0(%0 : @trivial $*Builtin.NativeObject, %1 : @trivial $Builtin.NativeObject):
+bb0(%0 : $*Builtin.NativeObject, %1 : $Builtin.NativeObject):
   store %1 to [init] %0 : $*Builtin.NativeObject
   %2 = tuple()
   return %2 : $()
@@ -58,7 +58,7 @@
 // CHECK: release
 // CHECK: ret void
 sil @assign_store : $@convention(thin) (@in Builtin.NativeObject, Builtin.NativeObject) -> () {
-bb0(%0 : @trivial $*Builtin.NativeObject, %1 : @unowned $Builtin.NativeObject):
+bb0(%0 : $*Builtin.NativeObject, %1 : @unowned $Builtin.NativeObject):
   store %1 to [assign] %0 : $*Builtin.NativeObject
   %2 = tuple()
   return %2 : $()
@@ -70,7 +70,7 @@
 }
 
 sil @assign_store_2 : $@convention(thin) (@in Foo, Foo) -> () {
-bb0(%0 : @trivial $*Foo, %1 : @trivial $Foo):
+bb0(%0 : $*Foo, %1 : $Foo):
   %2 = load [copy] %0 : $*Foo
   store %1 to [assign] %0 : $*Foo
   %3 = tuple()
@@ -85,7 +85,7 @@
 // CHECK-NOT: release
 // CHECK: ret void
 sil @trivial_store : $@convention(thin) (@in Builtin.Int32, Builtin.Int32) -> () {
-bb0(%0 : @trivial $*Builtin.Int32, %1 : @trivial $Builtin.Int32):
+bb0(%0 : $*Builtin.Int32, %1 : $Builtin.Int32):
   store %1 to [trivial] %0 : $*Builtin.Int32
   %2 = tuple()
   return %2 : $()
diff --git a/test/IRGen/subclass_existentials.sil b/test/IRGen/subclass_existentials.sil
index 28d2b42..e2b7e8f 100644
--- a/test/IRGen/subclass_existentials.sil
+++ b/test/IRGen/subclass_existentials.sil
@@ -182,7 +182,7 @@
 
 // CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc void @checkExistentialMetatypeDowncast(%swift.type*, %swift.type*, i8**)
 sil @checkExistentialMetatypeDowncast : $@convention(thin) (@owned @thick C.Type, @owned @thick (C & P).Type) -> () {
-bb0(%0 : @trivial $@thick C.Type, %1 : @trivial $@thick (C & P).Type):
+bb0(%0 : $@thick C.Type, %1 : $@thick (C & P).Type):
 
 // CHECK:       [[METATYPE:%.*]] = bitcast %swift.type* %0 to i8*
 // CHECK-NEXT:  [[TMP:%.*]] = call swiftcc %swift.metadata_response @"$s21subclass_existentials1DCMa"([[INT]] 0)
@@ -203,7 +203,7 @@
 
 // CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc void @checkExistentialSameClassMetatypeDowncast(%swift.type*)
 sil @checkExistentialSameClassMetatypeDowncast : $@convention(thin) (@owned @thick C.Type) -> () {
-bb0(%0 : @trivial $@thick C.Type):
+bb0(%0 : $@thick C.Type):
 
 // CHECK:       [[METATYPE:%.*]] = bitcast %swift.type* %0 to i8*
 // CHECK-NEXT:  [[RESULT:%.*]] = call { i8*, i8** } @dynamic_cast_existential_1_unconditional(i8* [[METATYPE]], %swift.type* %0, {{.*}} @"$s21subclass_existentials1PMp"
diff --git a/test/IRGen/yield_once.sil b/test/IRGen/yield_once.sil
index b0b0b50..45d46a8 100644
--- a/test/IRGen/yield_once.sil
+++ b/test/IRGen/yield_once.sil
@@ -48,7 +48,7 @@
 
 // CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc void @test_simple_call(i1)
 sil @test_simple_call : $(Builtin.Int1) -> () {
-entry(%flag : @trivial $Builtin.Int1):
+entry(%flag : $Builtin.Int1):
   //   Allocate the buffer.
   // CHECK:         [[T0:%.*]] = alloca {{\[}}[[BUFFER_SIZE]] x i8], align [[BUFFER_ALIGN]]
   // CHECK-NEXT:    [[BUFFER:%.*]] = getelementptr inbounds {{\[}}[[BUFFER_SIZE]] x i8], {{\[}}[[BUFFER_SIZE]] x i8]* [[T0]], i32 0, i32 0
diff --git a/test/IRGen/yield_once_big.sil b/test/IRGen/yield_once_big.sil
index 1889cab..dd54abb 100644
--- a/test/IRGen/yield_once_big.sil
+++ b/test/IRGen/yield_once_big.sil
@@ -91,7 +91,7 @@
 
 // CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc void @test_simple_call(i1)
 sil @test_simple_call : $(Builtin.Int1) -> () {
-entry(%flag : @trivial $Builtin.Int1):
+entry(%flag : $Builtin.Int1):
   //   Allocate the buffer.
   // CHECK:         [[T0:%.*]] = alloca {{\[}}[[BUFFER_SIZE]] x i8], align [[BUFFER_ALIGN]]
   // CHECK-NEXT:    [[BUFFER:%.*]] = getelementptr inbounds {{\[}}[[BUFFER_SIZE]] x i8], {{\[}}[[BUFFER_SIZE]] x i8]* [[T0]], i32 0, i32 0
diff --git a/test/IRGen/yield_once_biggish.sil b/test/IRGen/yield_once_biggish.sil
index 9ba6d00..72bf6b4 100644
--- a/test/IRGen/yield_once_biggish.sil
+++ b/test/IRGen/yield_once_biggish.sil
@@ -99,7 +99,7 @@
 
 // CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc void @test_simple_call(i1)
 sil @test_simple_call : $(Builtin.Int1) -> () {
-entry(%flag : @trivial $Builtin.Int1):
+entry(%flag : $Builtin.Int1):
   //   Allocate the buffer.
   // CHECK:         [[T0:%.*]] = alloca {{\[}}[[BUFFER_SIZE]] x i8], align [[BUFFER_ALIGN]]
   // CHECK-NEXT:    [[BUFFER:%.*]] = getelementptr inbounds {{\[}}[[BUFFER_SIZE]] x i8], {{\[}}[[BUFFER_SIZE]] x i8]* [[T0]], i32 0, i32 0
diff --git a/test/IRGen/yield_once_indirect.sil b/test/IRGen/yield_once_indirect.sil
index 63643ea..27d54ab 100644
--- a/test/IRGen/yield_once_indirect.sil
+++ b/test/IRGen/yield_once_indirect.sil
@@ -88,7 +88,7 @@
 
 // CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc void @test_simple_call(i1)
 sil @test_simple_call : $(Builtin.Int1) -> () {
-entry(%flag : @trivial $Builtin.Int1):
+entry(%flag : $Builtin.Int1):
   //   Allocate the buffer.
   // CHECK:         [[T0:%.*]] = alloca {{\[}}[[BUFFER_SIZE]] x i8], align [[BUFFER_ALIGN]]
   // CHECK-NEXT:    [[BUFFER:%.*]] = getelementptr inbounds {{\[}}[[BUFFER_SIZE]] x i8], {{\[}}[[BUFFER_SIZE]] x i8]* [[T0]], i32 0, i32 0
diff --git a/test/Interpreter/dynamic_replacement_chaining.swift b/test/Interpreter/dynamic_replacement_chaining.swift
index b15ac9b..de36972 100644
--- a/test/Interpreter/dynamic_replacement_chaining.swift
+++ b/test/Interpreter/dynamic_replacement_chaining.swift
@@ -16,6 +16,7 @@
 // RUN: %target-codesign %t/main %t/libA.%target-dylib-extension %t/libB.%target-dylib-extension %t/libC.%target-dylib-extension
 // RUN: %target-run %t/main %t/libA.%target-dylib-extension %t/libB.%target-dylib-extension %t/libC.%target-dylib-extension
 
+// REQUIRES: executable_test
 
 import A
 
diff --git a/test/Interpreter/error_self_conformance.swift b/test/Interpreter/error_self_conformance.swift
new file mode 100644
index 0000000..73b4268
--- /dev/null
+++ b/test/Interpreter/error_self_conformance.swift
@@ -0,0 +1,75 @@
+// RUN: %target-run-simple-swift | %FileCheck %s
+// REQUIRES: executable_test
+
+struct BoxedError<T: Error> {
+  var contents: T
+}
+
+enum MyError: Error {
+  case nothingImportant
+  case reallyImportant(String)
+}
+
+// CHECK: start
+print("start")
+
+let value = MyError.reallyImportant("hello")
+
+// CHECK-NEXT: reallyImportant("hello")
+print(value)
+
+func takeBoxedError<T>(error: BoxedError<T>) -> Error {
+  return error.contents
+}
+
+func makeBoxedError<T: Error>(error: T) -> BoxedError<Error> {
+  return BoxedError(contents: error)
+}
+
+let unboxedValue = takeBoxedError(error: makeBoxedError(error: value))
+
+// CHECK-NEXT: reallyImportant("hello")
+print(unboxedValue)
+
+let errorValue: Error = MyError.reallyImportant("goodbye")
+
+func castValueToError<T>(error: T) -> Error? {
+  return error as? Error
+}
+
+// CHECK-NEXT: reallyImportant("goodbye")
+print(castValueToError(error: errorValue) ?? value)
+
+struct Carrier<T> {
+  var name: String
+}
+protocol ErrorCarrier {}
+extension Carrier: ErrorCarrier where T: Error {}
+
+func castValueToErrorCarrier<T>(_ value: T) -> ErrorCarrier? {
+  return value as? ErrorCarrier
+}
+
+// CHECK-NEXT: nil
+print(castValueToErrorCarrier(Carrier<Int>(name: "A carrier of numbers")))
+
+// CHECK-NEXT: A carrier of my errors
+print(castValueToErrorCarrier(Carrier<MyError>(name: "A carrier of my errors")))
+
+// CHECK-NEXT: A carrier of all errors
+print(castValueToErrorCarrier(Carrier<Error>(name: "A carrier of all errors")))
+
+// CHECK-NEXT: nil
+protocol ErrorRefinement : Error {}
+print(castValueToErrorCarrier(Carrier<ErrorRefinement>(name: "A carrier of refined errors")))
+
+// CHECK-NEXT: nil
+protocol OtherProtocol {}
+print(castValueToErrorCarrier(Carrier<Error & OtherProtocol>(name: "A carrier of composed errors")))
+
+// CHECK-NEXT: nil
+class C {}
+print(castValueToErrorCarrier(Carrier<Error & C>(name: "A carrier of classic composed errors")))
+
+// CHECK-NEXT: end
+print("end")
diff --git a/test/Interpreter/multi_payload_shifting.swift b/test/Interpreter/multi_payload_shifting.swift
new file mode 100644
index 0000000..71c9a34
--- /dev/null
+++ b/test/Interpreter/multi_payload_shifting.swift
@@ -0,0 +1,50 @@
+// RUN: %target-run-simple-swift
+
+// REQUIRES: executable_test
+
+import Swift
+import StdlibUnittest
+
+class Tag {}
+
+struct Scalar {
+  var str = ""
+  var x = Tag()
+  var style: BinaryChoice  = .zero
+  enum BinaryChoice: UInt32 {
+    case zero = 0
+    case one
+  }
+}
+
+public struct Sequence {
+  var tag: Tag = Tag()
+  var tag2: Tag = Tag()
+}
+
+enum Node {
+  case scalar(Scalar)
+  case sequence(Sequence)
+}
+
+func createOptionalNodeNil<T>(_ t: T) -> T? {
+  return nil
+}
+
+func isNil<T>(_ t: T?) -> Bool {
+  return t == nil
+}
+
+var tests = TestSuite("extra inhabitants shifts")
+
+
+tests.test("test-shift-fix") {
+  let opt = createOptionalNodeNil(Node.scalar(Scalar()))
+  var res = false
+  if isNil(opt) {
+    res = true
+  }
+  expectEqual(true, res)
+}
+
+runAllTests()
diff --git a/test/Interpreter/patternmatch_on_enum_protocol_leak.swift b/test/Interpreter/patternmatch_on_enum_protocol_leak.swift
new file mode 100644
index 0000000..9187cdd
--- /dev/null
+++ b/test/Interpreter/patternmatch_on_enum_protocol_leak.swift
@@ -0,0 +1,46 @@
+// RUN: %target-run-simple-swift
+
+// REQUIRES: executable_test
+
+import StdlibUnittest
+
+// Make sure that in the following code we do not leak the case of the enum.
+
+protocol MyProtocol {}
+
+// An enum that wraps LeakingClass
+enum LeakingEnum1: MyProtocol {
+case eNone1
+case eLeakingClass1(LifetimeTracked)
+}
+
+// An enum that wraps LeakingClass
+enum LeakingEnum2 : MyProtocol {
+case eNone2
+case eLeakingClass2(LifetimeTracked)
+}
+
+var Tests = TestSuite("patternmatch_on_enum_protocol_leak")
+
+Tests.test("dontLeak") {
+  do {
+    let leakingClass = LifetimeTracked(0)
+    let leakEnum = LeakingEnum1.eLeakingClass1(leakingClass)
+    let control: MyProtocol = leakEnum
+
+    // This switch case order, interleaving LeakingEnum1 and LeakingEnum2 cases triggers the leak.
+    switch control
+    {
+    case LeakingEnum1.eNone1:               break
+    case LeakingEnum2.eNone2:               break
+
+    case LeakingEnum1.eLeakingClass1:       break
+    case LeakingEnum2.eLeakingClass2:       break
+
+    default:                                break
+    }
+  }
+  expectEqual(0, LifetimeTracked.instances)
+}
+
+runAllTests()
diff --git a/test/Misc/tbi.sil b/test/Misc/tbi.sil
index aa4f559..63e81ec 100644
--- a/test/Misc/tbi.sil
+++ b/test/Misc/tbi.sil
@@ -33,7 +33,7 @@
 import Builtin
 
 sil @testTBI : $@convention(thin) (Builtin.Int64) -> Builtin.Int64 {
-bb0(%0 : @trivial $Builtin.Int64):
+bb0(%0 : $Builtin.Int64):
   %1 = integer_literal $Builtin.Int64, 0x00FFFFFFFFFFFFFF
   %2 = builtin "and_Int64"(%0 : $Builtin.Int64, %1 : $Builtin.Int64) : $Builtin.Int64
   %3 = builtin "inttoptr_Int64"(%2 : $Builtin.Int64) : $Builtin.RawPointer
diff --git a/test/Parse/operators.swift b/test/Parse/operators.swift
index c73bba7..73694cd 100644
--- a/test/Parse/operators.swift
+++ b/test/Parse/operators.swift
@@ -116,8 +116,11 @@
 func !!(x: Man, y: Man) {}
 let foo = Man()
 let bar = TheDevil()
-foo!!foo // expected-error{{cannot force unwrap value of non-optional type 'Man'}} {{4-5=}} expected-error{{consecutive statements}} {{6-6=;}}
-// expected-warning @-1 {{expression of type 'Man' is unused}}
+foo!!foo
+// expected-error@-1 {{cannot force unwrap value of non-optional type 'Man'}} {{4-5=}}
+// expected-error@-2 {{cannot force unwrap value of non-optional type 'Man'}} {{5-6=}}
+// expected-error@-3 {{consecutive statements}} {{6-6=;}}
+// expected-warning@-4 {{expression of type 'Man' is unused}}
 
 foo??bar // expected-error{{broken standard library}} expected-error{{consecutive statements}} {{6-6=;}}
 // expected-warning @-1 {{expression of type 'TheDevil' is unused}}
diff --git a/test/Parse/strange_interpolation.swift b/test/Parse/strange_interpolation.swift
index bf07d60..0c558f4 100644
--- a/test/Parse/strange_interpolation.swift
+++ b/test/Parse/strange_interpolation.swift
@@ -1,5 +1,10 @@
 // RUN: %target-typecheck-verify-swift -swift-version 4.2
-// RUN: %target-run-simple-swift -swift-version 4.2 %s | %FileCheck %s
+
+// RUN: %empty-directory(%t)
+// RUN: %target-build-swift -swift-version 4.2 %s -o %t/main
+// RUN: %target-run %t/main | %FileCheck %s
+
+// REQUIRES: executable_test
 
  let x = 1
 
diff --git a/test/Reflection/capture_descriptors.sil b/test/Reflection/capture_descriptors.sil
index 8ad5da2..dc11634 100644
--- a/test/Reflection/capture_descriptors.sil
+++ b/test/Reflection/capture_descriptors.sil
@@ -19,13 +19,13 @@
 extension Int: P {}
 
 sil @concrete_callee1 : $@convention(thin) (Int, @owned <τ_0_0> { var τ_0_0 } <Int>, @thin Int.Type, @thick P.Type) -> () {
-bb0(%i : @trivial $Int, %b : @owned $<τ_0_0> { var τ_0_0 } <Int>, %m : @trivial $@thin Int.Type, %p : @trivial $@thick P.Type):
+bb0(%i : $Int, %b : @owned $<τ_0_0> { var τ_0_0 } <Int>, %m : $@thin Int.Type, %p : $@thick P.Type):
   %12 = tuple ()
   return %12 : $()
 }
 
 sil @concrete_caller1 : $@convention(thin) (Int, @thick P.Type) -> @owned @callee_guaranteed () -> () {
-bb0(%i : @trivial $Int, %p : @trivial $@thick P.Type):
+bb0(%i : $Int, %p : $@thick P.Type):
   %f = function_ref @concrete_callee1 : $@convention(thin) (Int, @owned <τ_0_0> { var τ_0_0 } <Int>, @thin Int.Type, @thick P.Type) -> ()
   %b = alloc_box $<τ_0_0> { var τ_0_0 } <Int>
   %m = metatype $@thin Int.Type
@@ -52,7 +52,7 @@
 // and there are no metadata bindings
 
 sil @generic_callee2 : $@convention(thin) <T, U> (@in T, @owned <τ_0_0> { var τ_0_0 } <U>) -> () {
-bb0(%i : @trivial $*T, %b : @owned $<τ_0_0> { var τ_0_0 } <U>):
+bb0(%i : $*T, %b : @owned $<τ_0_0> { var τ_0_0 } <U>):
   %12 = tuple ()
   return %12 : $()
 }
@@ -85,7 +85,7 @@
 // contain the caller's generic parameters.
 
 sil @generic_callee3 : $@convention(thin) <T, U> (@in_guaranteed T) -> () {
-bb0(%t : @trivial $*T):
+bb0(%t : $*T):
   %12 = tuple ()
   return %12 : $()
 }
@@ -123,7 +123,7 @@
 // fulfilled by a thick metatype value.
 
 sil @generic_callee4 : $@convention(thin) <T, U> (@thick Optional<T>.Type) -> () {
-bb0(%t : @trivial $@thick Optional<T>.Type):
+bb0(%t : $@thick Optional<T>.Type):
   %12 = tuple ()
   return %12 : $()
 }
@@ -224,13 +224,13 @@
 // Capturing lowered function types
 
 sil @function_callee : $@convention(thin) (@convention(thin) () -> (), @convention(c) () -> (), @convention(block) () -> (), @convention(thick) () -> (), @convention(method) () -> (), @convention(witness_method: P) (Int) -> ()) -> () {
-bb0(%thin : @trivial $@convention(thin) () -> (), %c : @trivial $@convention(c) () -> (), %block : @unowned $@convention(block) () -> (), %thick : @unowned $@convention(thick) () -> (), %method : @trivial $@convention(method) () -> (), %witness_method : @trivial $@convention(witness_method: P) (Int) -> ()):
+bb0(%thin : $@convention(thin) () -> (), %c : $@convention(c) () -> (), %block : @unowned $@convention(block) () -> (), %thick : @unowned $@convention(thick) () -> (), %method : $@convention(method) () -> (), %witness_method : $@convention(witness_method: P) (Int) -> ()):
   %12 = tuple ()
   return %12 : $()
 }
 
 sil @function_caller : $@convention(thin) (@convention(thin) () -> (), @convention(c) () -> (), @convention(block) () -> (), @convention(thick) () -> (), @convention(method) () -> (), @convention(witness_method: P) (Int) -> ()) -> @owned @callee_guaranteed () -> () {
-bb0(%thin: @trivial $@convention(thin) () -> (), %c: @trivial $@convention(c) () -> (), %block: @unowned $@convention(block) () -> (), %thick: @unowned $@convention(thick) () -> (), %method: @trivial $@convention(method) () -> (), %witness_method: @trivial $@convention(witness_method: P) (Int) -> ()):
+bb0(%thin: $@convention(thin) () -> (), %c: $@convention(c) () -> (), %block: @unowned $@convention(block) () -> (), %thick: @unowned $@convention(thick) () -> (), %method: $@convention(method) () -> (), %witness_method: $@convention(witness_method: P) (Int) -> ()):
   %f = function_ref @function_callee : $@convention(thin) (@convention(thin) () -> (), @convention(c) () -> (), @convention(block) () -> (), @convention(thick) () -> (), @convention(method) () -> (), @convention(witness_method: P) (Int) -> ()) -> ()
   %result = partial_apply [callee_guaranteed] %f(%thin, %c, %block, %thick, %method, %witness_method) : $@convention(thin) (@convention(thin) () -> (), @convention(c) () -> (), @convention(block) () -> (), @convention(thick) () -> (), @convention(method) () -> (), @convention(witness_method: P) (Int) -> ()) -> ()
   return %result : $@callee_guaranteed () -> ()
@@ -271,13 +271,13 @@
 // for this case.
 
 sil @existential_callee : $@convention(thin) <τ_0_0 where τ_0_0 : P> () -> @out P {
-bb0(%0 : @trivial $*P):
+bb0(%0 : $*P):
   unreachable
 }
 
 
 sil @existential_caller : $@convention(thin) (@in P) -> () {
-bb0(%0 : @trivial $*P):
+bb0(%0 : $*P):
   %payload = open_existential_addr immutable_access %0 : $*P to $*@opened("2D7A8F84-2973-11E7-838D-34363BD08DA0") P
   %f = function_ref @existential_callee : $@convention(thin) <τ_0_0 where τ_0_0 : P> () -> @out P
   %result = partial_apply [callee_guaranteed] %f<@opened("2D7A8F84-2973-11E7-838D-34363BD08DA0") P>() : $@convention(thin) <τ_0_0 where τ_0_0 : P> () -> @out P
diff --git a/test/SIL/Parser/basic_objc.sil b/test/SIL/Parser/basic_objc.sil
index 4ef1ba8..471ef29 100644
--- a/test/SIL/Parser/basic_objc.sil
+++ b/test/SIL/Parser/basic_objc.sil
@@ -25,7 +25,7 @@
 // CHECK:         {{%.*}} = objc_metatype_to_object {{%.*}} : $@objc_metatype SomeClass.Type to $AnyObject
 // CHECK:         {{%.*}} = objc_existential_metatype_to_object {{%.*}} : $@objc_metatype SomeClassProtocol.Type to $AnyObject
 sil @metatype_to_object : $@convention(thin) (@objc_metatype SomeClass.Type, @objc_metatype SomeClassProtocol.Type) -> @owned (AnyObject, AnyObject) {
-entry(%a : @trivial $@objc_metatype SomeClass.Type, %b : @trivial $@objc_metatype SomeClassProtocol.Type):
+entry(%a : $@objc_metatype SomeClass.Type, %b : $@objc_metatype SomeClassProtocol.Type):
   %x = objc_metatype_to_object %a : $@objc_metatype SomeClass.Type to $AnyObject
   %y = objc_existential_metatype_to_object %b : $@objc_metatype SomeClassProtocol.Type to $AnyObject
   %z = tuple (%x : $AnyObject, %y : $AnyObject)
diff --git a/test/SIL/Parser/borrow.sil b/test/SIL/Parser/borrow.sil
index aab94d9..daa1b91 100644
--- a/test/SIL/Parser/borrow.sil
+++ b/test/SIL/Parser/borrow.sil
@@ -6,7 +6,7 @@
 
 // We do not verify here, but just make sure that all of the combinations parse and print correctly.
 // CHECK-LABEL: sil @borrow_test : $@convention(thin) (@in Builtin.NativeObject, Builtin.NativeObject) -> () {
-// CHECK: bb0([[ARG1:%[0-9]+]] : @trivial $*Builtin.NativeObject, [[ARG2:%[0-9]+]] : @unowned $Builtin.NativeObject):
+// CHECK: bb0([[ARG1:%[0-9]+]] : $*Builtin.NativeObject, [[ARG2:%[0-9]+]] : @unowned $Builtin.NativeObject):
 // CHECK: begin_borrow [[ARG2]]
 // CHECK: [[MEM:%.*]] = alloc_stack $Builtin.NativeObject
 // CHECK: store_borrow [[ARG2]] to [[MEM]] : $*Builtin.NativeObject
@@ -15,7 +15,7 @@
 // CHECK: end_borrow [[ARG1]] : $*Builtin.NativeObject
 // CHECK: end_borrow [[ARG2]] : $Builtin.NativeObject
 sil @borrow_test : $@convention(thin) (@in Builtin.NativeObject, Builtin.NativeObject) -> () {
-bb0(%0 : @trivial $*Builtin.NativeObject, %1 : @unowned $Builtin.NativeObject):
+bb0(%0 : $*Builtin.NativeObject, %1 : @unowned $Builtin.NativeObject):
   %2 = begin_borrow %1 : $Builtin.NativeObject
   end_borrow %2 : $Builtin.NativeObject
 
diff --git a/test/SIL/Parser/boxes.sil b/test/SIL/Parser/boxes.sil
index 6a0e312..2ea077c 100644
--- a/test/SIL/Parser/boxes.sil
+++ b/test/SIL/Parser/boxes.sil
@@ -85,7 +85,7 @@
 
 // CHECK-LABEL: sil @address_of_box
 sil @address_of_box : $@convention(thin) (@in { var Int }, @in <T> { let T } <Int>) -> () {
-// CHECK: %0 : @trivial $*{ var Int }, %1 : @trivial $*<τ_0_0> { let τ_0_0 } <Int>
-entry(%0 : @trivial $*{ var Int }, %1 : @trivial $*<T> { let T } <Int>):
+// CHECK: %0 : $*{ var Int }, %1 : $*<τ_0_0> { let τ_0_0 } <Int>
+entry(%0 : $*{ var Int }, %1 : $*<T> { let T } <Int>):
   unreachable
 }
diff --git a/test/SIL/Parser/coroutines.sil b/test/SIL/Parser/coroutines.sil
index 69d93eb..37e8c9c 100644
--- a/test/SIL/Parser/coroutines.sil
+++ b/test/SIL/Parser/coroutines.sil
@@ -20,7 +20,7 @@
 }
 
 sil @yield : $@yield_once (Int, Float) -> (@yields Int, @yields Float) {
-bb0(%0 : @trivial $Int, %1 : @trivial $Float):
+bb0(%0 : $Int, %1 : $Float):
   yield (%0 : $Int, %1 : $Float), resume bb1, unwind bb2
 
 bb1:
@@ -32,7 +32,7 @@
 }
 
 sil @yield_many : $@yield_many (Int, Float) -> (@yields Int, @yields Float) {
-bb0(%0 : @trivial $Int, %1 : @trivial $Float):
+bb0(%0 : $Int, %1 : $Float):
   yield (%0 : $Int, %1 : $Float), resume bb1, unwind bb3
 
 bb1:
@@ -53,7 +53,7 @@
 }
 
 sil @begin_apply : $(Int, Float) -> () {
-bb0(%0 : @trivial $Int, %1 : @trivial $Float):
+bb0(%0 : $Int, %1 : $Float):
   %coro = function_ref @yield : $@convention(thin) @yield_once (Int, Float) -> (@yields Int, @yields Float)
   (%int, %float, %token) = begin_apply %coro(%0, %1) : $@convention(thin) @yield_once (Int, Float) -> (@yields Int, @yields Float)
 
diff --git a/test/SIL/Parser/coroutines_failure_merge.sil b/test/SIL/Parser/coroutines_failure_merge.sil
index 1329b52..e95cc0d 100644
--- a/test/SIL/Parser/coroutines_failure_merge.sil
+++ b/test/SIL/Parser/coroutines_failure_merge.sil
@@ -6,7 +6,7 @@
 import Swift
 
 sil @yield : $@yield_many (Int, Float) -> (@yields Int, @yields Float) {
-bb0(%0 : @trivial $Int, %1 : @trivial $Float):
+bb0(%0 : $Int, %1 : $Float):
   yield (%0 : $Int, %1 : $Float), resume bb1, unwind bb2
 
 bb1:
diff --git a/test/SIL/Parser/coroutines_failure_unwind_return.sil b/test/SIL/Parser/coroutines_failure_unwind_return.sil
index 2371509..c79c645 100644
--- a/test/SIL/Parser/coroutines_failure_unwind_return.sil
+++ b/test/SIL/Parser/coroutines_failure_unwind_return.sil
@@ -6,7 +6,7 @@
 import Swift
 
 sil @yield : $@yield_once (Int, Float) -> (@yields Int, @yields Float) {
-bb0(%0 : @trivial $Int, %1 : @trivial $Float):
+bb0(%0 : $Int, %1 : $Float):
   yield (%0 : $Int, %1 : $Float), resume bb1, unwind bb2
 
 bb1:
diff --git a/test/SIL/Parser/coroutines_failure_unwind_reuse.sil b/test/SIL/Parser/coroutines_failure_unwind_reuse.sil
index ca4bceb..adfe6d6 100644
--- a/test/SIL/Parser/coroutines_failure_unwind_reuse.sil
+++ b/test/SIL/Parser/coroutines_failure_unwind_reuse.sil
@@ -6,7 +6,7 @@
 import Swift
 
 sil @yield : $@yield_many (Int, Float) -> (@yields Int, @yields Float) {
-bb0(%0 : @trivial $Int, %1 : @trivial $Float):
+bb0(%0 : $Int, %1 : $Float):
   yield (%0 : $Int, %1 : $Float), resume bb1, unwind bb3
 
 bb1:
diff --git a/test/SIL/Parser/coroutines_failure_yieldonce_twice.sil b/test/SIL/Parser/coroutines_failure_yieldonce_twice.sil
index 1002d5d..e14b74f 100644
--- a/test/SIL/Parser/coroutines_failure_yieldonce_twice.sil
+++ b/test/SIL/Parser/coroutines_failure_yieldonce_twice.sil
@@ -6,7 +6,7 @@
 import Swift
 
 sil @yield : $@yield_once (Int, Float) -> (@yields Int, @yields Float) {
-bb0(%0 : @trivial $Int, %1 : @trivial $Float):
+bb0(%0 : $Int, %1 : $Float):
   yield (%0 : $Int, %1 : $Float), resume bb1, unwind bb3
 
 bb1:
diff --git a/test/SIL/Parser/enum_in_class.sil b/test/SIL/Parser/enum_in_class.sil
index a09339e..0d2dfab 100644
--- a/test/SIL/Parser/enum_in_class.sil
+++ b/test/SIL/Parser/enum_in_class.sil
@@ -15,7 +15,7 @@
 
 // CHECK: @test_declref_enum
 sil [transparent] @test_declref_enum : $@convention(thin) (UInt8, @thin Task.State.Type) -> Task.State {
-bb0(%0 : @trivial $UInt8, %1 : @trivial $@thin Task.State.Type):
+bb0(%0 : $UInt8, %1 : $@thin Task.State.Type):
 // CHECK: enum $Task.State, #Task.State.Bits!enumelt
   %2 = enum $Task.State, #Task.State.Bits!enumelt.1, %0 : $UInt8
   return %2 : $Task.State
diff --git a/test/SIL/Parser/errors.sil b/test/SIL/Parser/errors.sil
index 7205a8d..2d801fa 100644
--- a/test/SIL/Parser/errors.sil
+++ b/test/SIL/Parser/errors.sil
@@ -47,7 +47,7 @@
 sil_stage nonsense // expected-error {{expected 'raw' or 'canonical' after 'sil_stage'}}
 
 sil @missing_type : $@convention(thin) (Int) -> () {
-bb0(%0 : @trivial $Int):
+bb0(%0 : $Int):
   br bb3(%0) // expected-error {{expected ':' before type in SIL value reference}}
   // FIXME: The next error is unexpected.
 } // expected-error {{extraneous '}' at top level}} {{1-3=}}
diff --git a/test/SIL/Parser/generics.sil b/test/SIL/Parser/generics.sil
index d0c23d4..765e2eb 100644
--- a/test/SIL/Parser/generics.sil
+++ b/test/SIL/Parser/generics.sil
@@ -4,12 +4,12 @@
 import Builtin
 
 // CHECK-LABEL: sil @foo : $@convention(thin) <T> (@in T) -> @out T {
-// CHECK: bb0(%0 : @trivial $*T, %1 : @trivial $*T):
+// CHECK: bb0(%0 : $*T, %1 : $*T):
 // CHECK:   copy_addr [take] %1 to [initialization] %0 : $*T
 // CHECK:   return undef : $()
 // CHECK: }
 sil @foo : $@convention(thin) <T> (@in T) -> @out T {
-entry(%o : @trivial $*T, %i : @trivial $*T):
+entry(%o : $*T, %i : $*T):
   copy_addr [take] %i to [initialization] %o : $*T
   return undef : $()
 }
@@ -97,7 +97,7 @@
 
 // These generic parameters used to crash the compiler.
 sil @protocol_extension_with_constrained_associated_type : $@convention(method) <Self where Self : FooProto, Self.Assoc : FooProtoHelper><I where I : FooProto, I.Assoc == Self.Assoc> (@in I, @in_guaranteed Self) -> () {
-bb0(%0 : @trivial $*I, %1 : @trivial $*Self):
+bb0(%0 : $*I, %1 : $*Self):
   %2 = alloc_stack $I                             // users: %3, %6, %7, %9
   copy_addr %0 to [initialization] %2 : $*I     // id: %3
   %4 = witness_method $I, #FooProto.value!getter.1 : $@convention(witness_method: FooProto) <τ_0_0 where τ_0_0 : FooProto, τ_0_0.Assoc : FooProtoHelper> (@in_guaranteed τ_0_0) -> @out τ_0_0.Assoc // user: %6
diff --git a/test/SIL/Parser/indirect_enum.sil b/test/SIL/Parser/indirect_enum.sil
index be748c8..ae81ecd 100644
--- a/test/SIL/Parser/indirect_enum.sil
+++ b/test/SIL/Parser/indirect_enum.sil
@@ -33,7 +33,7 @@
 }
 
 sil @indirect_enum_case_addr_only : $@convention(thin) <T> (@in TreeB<T>) -> () {
-entry(%e : @trivial $*TreeB<T>):
+entry(%e : $*TreeB<T>):
   %a = unchecked_take_enum_data_addr %e : $*TreeB<T>, #TreeB.Leaf!enumelt.1
   destroy_addr %a : $*T
 
diff --git a/test/SIL/Parser/overloaded_member.sil b/test/SIL/Parser/overloaded_member.sil
index 3840cdf..3867f2a 100644
--- a/test/SIL/Parser/overloaded_member.sil
+++ b/test/SIL/Parser/overloaded_member.sil
@@ -17,7 +17,7 @@
 
 // CHECK-LABEL: sil @_TFCSo1XcfMS_FT1aV11peer_method1A_S_
 sil @_TFCSo1XcfMS_FT1aV11peer_method1A_S_ : $@convention(method) (A, @owned X) -> @owned X {
-bb0(%0 : @trivial $A, %1 : @owned $X):
+bb0(%0 : $A, %1 : @owned $X):
   %2 = alloc_box $<τ_0_0> { var τ_0_0 } <X>
   %2a = project_box %2 : $<τ_0_0> { var τ_0_0 } <X>, 0
   %3 = alloc_box $<τ_0_0> { var τ_0_0 } <A>
diff --git a/test/SIL/Parser/ownership_arguments.sil b/test/SIL/Parser/ownership_arguments.sil
index 309a6b1..55a0012 100644
--- a/test/SIL/Parser/ownership_arguments.sil
+++ b/test/SIL/Parser/ownership_arguments.sil
@@ -5,14 +5,14 @@
 import Builtin
 
 // CHECK-LABEL: sil @simple : $@convention(thin) (@owned Builtin.NativeObject, Builtin.NativeObject, @guaranteed Builtin.NativeObject, Builtin.Int32) -> () {
-// CHECK: bb0({{%.*}} : @owned $Builtin.NativeObject, {{%.*}} : @unowned $Builtin.NativeObject, {{%.*}} : @guaranteed $Builtin.NativeObject, {{%.*}} : @trivial $Builtin.Int32):
-// CHECK: bb1({{%[0-9][0-9]*}} : @owned $Builtin.NativeObject, {{%[0-9][0-9]*}} : @unowned $Builtin.NativeObject, {{%[0-9][0-9]*}} : @guaranteed $Builtin.NativeObject, {{%[0-9][0-9]*}} : @trivial $Builtin.Int32):
+// CHECK: bb0({{%.*}} : @owned $Builtin.NativeObject, {{%.*}} : @unowned $Builtin.NativeObject, {{%.*}} : @guaranteed $Builtin.NativeObject, {{%.*}} : $Builtin.Int32):
+// CHECK: bb1({{%[0-9][0-9]*}} : @owned $Builtin.NativeObject, {{%[0-9][0-9]*}} : @unowned $Builtin.NativeObject, {{%[0-9][0-9]*}} : @guaranteed $Builtin.NativeObject, {{%[0-9][0-9]*}} : $Builtin.Int32):
 
 sil @simple : $@convention(thin) (@owned Builtin.NativeObject, Builtin.NativeObject, @guaranteed Builtin.NativeObject, Builtin.Int32) -> () {
-bb0(%0 : @owned $Builtin.NativeObject, %1 : @unowned $Builtin.NativeObject, %2 : @guaranteed $Builtin.NativeObject, %3 : @trivial $Builtin.Int32):
+bb0(%0 : @owned $Builtin.NativeObject, %1 : @unowned $Builtin.NativeObject, %2 : @guaranteed $Builtin.NativeObject, %3 : $Builtin.Int32):
   br bb1(%0 : $Builtin.NativeObject, %1 : $Builtin.NativeObject, %2 : $Builtin.NativeObject, %3 : $Builtin.Int32)
 
-bb1(%4 : @owned $Builtin.NativeObject, %5 : @unowned $Builtin.NativeObject, %6 : @guaranteed $Builtin.NativeObject, %7 : @trivial $Builtin.Int32):
+bb1(%4 : @owned $Builtin.NativeObject, %5 : @unowned $Builtin.NativeObject, %6 : @guaranteed $Builtin.NativeObject, %7 : $Builtin.Int32):
   destroy_value %4 : $Builtin.NativeObject
   end_borrow %6 : $Builtin.NativeObject
   %9999 = tuple()
diff --git a/test/SIL/Parser/ownership_qualified_memopts.sil b/test/SIL/Parser/ownership_qualified_memopts.sil
index 305d0df..1c04d50 100644
--- a/test/SIL/Parser/ownership_qualified_memopts.sil
+++ b/test/SIL/Parser/ownership_qualified_memopts.sil
@@ -4,13 +4,13 @@
 import Builtin
 
 // CHECK-LABEL: sil @non_trivial : $@convention(thin) (@in Builtin.NativeObject, Builtin.NativeObject) -> () {
-// CHECK: bb0([[ARG1:%[0-9]+]] : @trivial $*Builtin.NativeObject, [[ARG2:%[0-9]+]] : @unowned $Builtin.NativeObject):
+// CHECK: bb0([[ARG1:%[0-9]+]] : $*Builtin.NativeObject, [[ARG2:%[0-9]+]] : @unowned $Builtin.NativeObject):
 // CHECK: load [take] [[ARG1]] : $*Builtin.NativeObject
 // CHECK: load [copy] [[ARG1]] : $*Builtin.NativeObject
 // CHECK: store [[ARG2]] to [init] [[ARG1]] : $*Builtin.NativeObject
 // CHECK: store [[ARG2]] to [assign] [[ARG1]] : $*Builtin.NativeObject
 sil @non_trivial : $@convention(thin) (@in Builtin.NativeObject, Builtin.NativeObject) -> () {
-bb0(%0 : @trivial $*Builtin.NativeObject, %1 : @unowned $Builtin.NativeObject):
+bb0(%0 : $*Builtin.NativeObject, %1 : @unowned $Builtin.NativeObject):
   load [take] %0 : $*Builtin.NativeObject
   load [copy] %0 : $*Builtin.NativeObject
   store %1 to [init] %0 : $*Builtin.NativeObject
@@ -19,14 +19,14 @@
   return %2 : $()
 }
 
-// CHECK-LABEL: sil @trivial : $@convention(thin) (@in Builtin.Int32, Builtin.Int32) -> () {
-// CHECK: bb0([[ARG1:%[0-9]+]] : @trivial $*Builtin.Int32, [[ARG2:%[0-9]+]] : @trivial $Builtin.Int32):
+// CHECK-LABEL: sil @trivial_args : $@convention(thin) (@in Builtin.Int32, Builtin.Int32) -> () {
+// CHECK: bb0([[ARG1:%[0-9]+]] : $*Builtin.Int32, [[ARG2:%[0-9]+]] : $Builtin.Int32):
 // CHECK: load [trivial] [[ARG1]] : $*Builtin.Int32
 // CHECK: store [[ARG2]] to [trivial] [[ARG1]] : $*Builtin.Int32
-sil @trivial : $@convention(thin) (@in Builtin.Int32, Builtin.Int32) -> () {
-bb0(%0 : @trivial $*Builtin.Int32, %1 : @trivial $Builtin.Int32):
+sil @trivial_args : $@convention(thin) (@in Builtin.Int32, Builtin.Int32) -> () {
+bb0(%0 : $*Builtin.Int32, %1 : $Builtin.Int32):
   load [trivial] %0 : $*Builtin.Int32
   store %1 to [trivial] %0 : $*Builtin.Int32
   %2 = tuple()
   return %2 : $()
-}
\ No newline at end of file
+}
diff --git a/test/SIL/Parser/typed_boxes.sil b/test/SIL/Parser/typed_boxes.sil
index 24a4ba6..22453d1 100644
--- a/test/SIL/Parser/typed_boxes.sil
+++ b/test/SIL/Parser/typed_boxes.sil
@@ -4,7 +4,7 @@
 
 // CHECK-LABEL: sil @alloc_dealloc : $@convention(thin) (Int) -> () {
 sil @alloc_dealloc : $@convention(thin) (Int) -> () {
-entry(%x : @trivial $Int):
+entry(%x : $Int):
   // CHECK: [[B:%.*]] = alloc_box $<τ_0_0> { var τ_0_0 } <Int>
   %b = alloc_box $<τ_0_0> { var τ_0_0 } <Int>
   // CHECK: [[PB:%.*]] = project_box [[B]] : $<τ_0_0> { var τ_0_0 } <Int>, 0
diff --git a/test/SIL/Parser/unmanaged.sil b/test/SIL/Parser/unmanaged.sil
index 3ef1b5f..f182d43 100644
--- a/test/SIL/Parser/unmanaged.sil
+++ b/test/SIL/Parser/unmanaged.sil
@@ -6,7 +6,7 @@
 class C {}
 
 sil @test : $@convention(thin) <U where U : AnyObject> (@inout Optional<U>) -> () {
-bb0(%0 : @trivial $*Optional<U>):
+bb0(%0 : $*Optional<U>):
   %1 = load [copy] %0 : $*Optional<U>
   %2 = ref_to_unmanaged %1 : $Optional<U> to $@sil_unmanaged Optional<U>
   %3 = unmanaged_to_ref %2 : $@sil_unmanaged Optional<U> to $Optional<U>
@@ -23,4 +23,4 @@
   unmanaged_release_value %1 : $Optional<C>
   %9999 = tuple()
   return %9999 : $()
-}
\ No newline at end of file
+}
diff --git a/test/SIL/Parser/where_clause.sil b/test/SIL/Parser/where_clause.sil
index d3a5f39..5b4addb 100644
--- a/test/SIL/Parser/where_clause.sil
+++ b/test/SIL/Parser/where_clause.sil
@@ -12,6 +12,6 @@
 
 // CHECK: sil @foo : $@convention(thin) <T where T : Runcible, T == T.Mince> () -> @out Spoon<T>
 sil @foo : $@convention(thin) <T where T: Runcible, T == T.Mince> () -> @out Spoon<T> {
-entry(%0 : @trivial $*Spoon<T>):
+entry(%0 : $*Spoon<T>):
   return undef : $()
 }
diff --git a/test/SIL/Serialization/Inputs/function_param_convention_input.sil b/test/SIL/Serialization/Inputs/function_param_convention_input.sil
index b024853..c5897ce 100644
--- a/test/SIL/Serialization/Inputs/function_param_convention_input.sil
+++ b/test/SIL/Serialization/Inputs/function_param_convention_input.sil
@@ -4,7 +4,7 @@
 // Make sure that we can deserialize an apply with various parameter calling
 // conventions.
 sil [serialized] @foo : $@convention(thin) (@in X, @inout X, @in_guaranteed X, @owned X, X, @guaranteed X) -> @out X {
-bb0(%0 : @trivial $*X, %1 : @trivial $*X, %2 : @trivial $*X, %3 : @trivial $*X, %4 : @owned $X, %5 : @unowned $X, %6 : @guaranteed $X):
+bb0(%0 : $*X, %1 : $*X, %2 : $*X, %3 : $*X, %4 : @owned $X, %5 : @unowned $X, %6 : @guaranteed $X):
   %9999 = tuple()
   return %9999 : $()
 }
diff --git a/test/SIL/Serialization/Inputs/generic_shared_function_helper.sil b/test/SIL/Serialization/Inputs/generic_shared_function_helper.sil
index e9f07b8..d46c7cb 100644
--- a/test/SIL/Serialization/Inputs/generic_shared_function_helper.sil
+++ b/test/SIL/Serialization/Inputs/generic_shared_function_helper.sil
@@ -6,7 +6,7 @@
 sil public_external @impl_func : $@convention(thin) <T> () -> @out Optional<T>
 
 sil shared [serialized] @shared_func : $@convention(thin) <T> () -> @out Optional<T> {
-bb0(%0 : @trivial $*Optional<T>):
+bb0(%0 : $*Optional<T>):
   %1 = function_ref @impl_func : $@convention(thin) <τ_0_0> () -> @out Optional<τ_0_0> // user: %2
   %2 = apply %1<T>(%0) : $@convention(thin) <τ_0_0> () -> @out Optional<τ_0_0>
   %3 = tuple ()                                   // user: %4
@@ -14,7 +14,7 @@
 }
 
 sil public [serialized] @public_func : $@convention(thin) <T> () -> @out Optional<T> {
-bb0(%0 : @trivial $*Optional<T>):
+bb0(%0 : $*Optional<T>):
   %1 = function_ref @shared_func : $@convention(thin) <τ_0_0> () -> @out Optional<τ_0_0> // user: %2
   %2 = apply %1<T>(%0) : $@convention(thin) <τ_0_0> () -> @out Optional<τ_0_0>
   %3 = tuple ()                                   // user: %4
diff --git a/test/SIL/Serialization/borrow.sil b/test/SIL/Serialization/borrow.sil
index c1fa49d..5c37b11 100644
--- a/test/SIL/Serialization/borrow.sil
+++ b/test/SIL/Serialization/borrow.sil
@@ -10,7 +10,7 @@
 
 // We do not verify here, but just make sure that all of the combinations parse and print correctly.
 // CHECK-LABEL: sil [serialized] @borrow_test : $@convention(thin) (@in Builtin.NativeObject, Builtin.NativeObject) -> () {
-// CHECK: bb0([[ARG1:%[0-9]+]] : @trivial $*Builtin.NativeObject, [[ARG2:%[0-9]+]] : @unowned $Builtin.NativeObject):
+// CHECK: bb0([[ARG1:%[0-9]+]] : $*Builtin.NativeObject, [[ARG2:%[0-9]+]] : @unowned $Builtin.NativeObject):
 // CHECK: begin_borrow [[ARG2]]
 // CHECK: [[MEM:%.*]] = alloc_stack $Builtin.NativeObject
 // CHECK: store_borrow [[ARG2]] to [[MEM]] : $*Builtin.NativeObject
@@ -19,7 +19,7 @@
 // CHECK: end_borrow [[ARG1]] : $*Builtin.NativeObject
 // CHECK: end_borrow [[ARG2]] : $Builtin.NativeObject
 sil [serialized] @borrow_test : $@convention(thin) (@in Builtin.NativeObject, Builtin.NativeObject) -> () {
-bb0(%0 : @trivial $*Builtin.NativeObject, %1 : @unowned $Builtin.NativeObject):
+bb0(%0 : $*Builtin.NativeObject, %1 : @unowned $Builtin.NativeObject):
   %2 = begin_borrow %1 : $Builtin.NativeObject
   end_borrow %2 : $Builtin.NativeObject
 
diff --git a/test/SIL/Serialization/boxes.sil b/test/SIL/Serialization/boxes.sil
index 2f51af4..ee13f2a 100644
--- a/test/SIL/Serialization/boxes.sil
+++ b/test/SIL/Serialization/boxes.sil
@@ -89,8 +89,8 @@
 
 // CHECK-LABEL: sil hidden [serialized] @address_of_box
 sil hidden [serialized] @address_of_box : $@convention(thin) (@in { var Int }, @in <T> { let T } <Int>) -> () {
-// CHECK: %0 : @trivial $*{ var Int }, %1 : @trivial $*<τ_0_0> { let τ_0_0 } <Int>
-entry(%0 : @trivial $*{ var Int }, %1 : @trivial $*<T> { let T } <Int>):
+// CHECK: %0 : $*{ var Int }, %1 : $*<τ_0_0> { let τ_0_0 } <Int>
+entry(%0 : $*{ var Int }, %1 : $*<T> { let T } <Int>):
   unreachable
 }
 
diff --git a/test/SIL/Serialization/ownership_qualified_memopts.sil b/test/SIL/Serialization/ownership_qualified_memopts.sil
index a140da4..cc3a1c0 100644
--- a/test/SIL/Serialization/ownership_qualified_memopts.sil
+++ b/test/SIL/Serialization/ownership_qualified_memopts.sil
@@ -9,12 +9,12 @@
 import Builtin
 
 
-// CHECK-LABEL: sil [serialized] @trivial : $@convention(thin) (@in Builtin.Int32, Builtin.Int32) -> () {
-// CHECK: bb0([[ARG1:%[0-9]+]] : @trivial $*Builtin.Int32, [[ARG2:%[0-9]+]] : @trivial $Builtin.Int32):
+// CHECK-LABEL: sil [serialized] @trivial_args : $@convention(thin) (@in Builtin.Int32, Builtin.Int32) -> () {
+// CHECK: bb0([[ARG1:%[0-9]+]] : $*Builtin.Int32, [[ARG2:%[0-9]+]] : $Builtin.Int32):
 // CHECK: load [trivial] [[ARG1]] : $*Builtin.Int32
 // CHECK: store [[ARG2]] to [trivial] [[ARG1]] : $*Builtin.Int32
-sil [serialized] @trivial : $@convention(thin) (@in Builtin.Int32, Builtin.Int32) -> () {
-bb0(%0 : @trivial $*Builtin.Int32, %1 : @trivial $Builtin.Int32):
+sil [serialized] @trivial_args : $@convention(thin) (@in Builtin.Int32, Builtin.Int32) -> () {
+bb0(%0 : $*Builtin.Int32, %1 : $Builtin.Int32):
   load [trivial] %0 : $*Builtin.Int32
   store %1 to [trivial] %0 : $*Builtin.Int32
   %2 = tuple()
@@ -22,13 +22,13 @@
 }
 
 // CHECK-LABEL: sil [serialized] @non_trivial : $@convention(thin) (@in Builtin.NativeObject, Builtin.NativeObject) -> () {
-// CHECK: bb0([[ARG1:%[0-9]+]] : @trivial $*Builtin.NativeObject, [[ARG2:%[0-9]+]] : @unowned $Builtin.NativeObject):
+// CHECK: bb0([[ARG1:%[0-9]+]] : $*Builtin.NativeObject, [[ARG2:%[0-9]+]] : @unowned $Builtin.NativeObject):
 // CHECK: load [take] [[ARG1]] : $*Builtin.NativeObject
 // CHECK: load [copy] [[ARG1]] : $*Builtin.NativeObject
 // CHECK: store [[ARG2]] to [init] [[ARG1]] : $*Builtin.NativeObject
 // CHECK: store [[ARG2]] to [assign] [[ARG1]] : $*Builtin.NativeObject
 sil [serialized] @non_trivial : $@convention(thin) (@in Builtin.NativeObject, Builtin.NativeObject) -> () {
-bb0(%0 : @trivial $*Builtin.NativeObject, %1 : @unowned $Builtin.NativeObject):
+bb0(%0 : $*Builtin.NativeObject, %1 : @unowned $Builtin.NativeObject):
   load [take] %0 : $*Builtin.NativeObject
   load [copy] %0 : $*Builtin.NativeObject
   store %1 to [init] %0 : $*Builtin.NativeObject
diff --git a/test/SIL/Serialization/unmanaged.sil b/test/SIL/Serialization/unmanaged.sil
index 73ec38f..487fb1e 100644
--- a/test/SIL/Serialization/unmanaged.sil
+++ b/test/SIL/Serialization/unmanaged.sil
@@ -10,7 +10,7 @@
 class C {}
 
 // CHECK-LABEL: sil [serialized] @retain_release : $@convention(thin) (@sil_unmanaged Optional<C>) -> () {
-// CHECK: bb0([[ARG:%.*]] : @trivial $@sil_unmanaged Optional<C>):
+// CHECK: bb0([[ARG:%.*]] : $@sil_unmanaged Optional<C>):
 // CHECK: [[REF:%.*]] = unmanaged_to_ref [[ARG]] : $@sil_unmanaged Optional<C> to $Optional<C>
 // CHECK: unmanaged_retain_value [[REF]]
 // CHECK: unmanaged_autorelease_value [[REF]]
@@ -26,13 +26,13 @@
 }
 
 // CHECK-LABEL: sil [serialized] @test : $@convention(thin) <U where U : AnyObject> (@inout Optional<U>) -> () {
-// CHECK: bb0([[ARG:%.*]] : @trivial $*Optional<U>):
+// CHECK: bb0([[ARG:%.*]] : $*Optional<U>):
 // CHECK: [[LOADED_ARG:%.*]] = load [copy] [[ARG]]
 // CHECK: [[UNMANAGED_LOADED_ARG:%.*]] = ref_to_unmanaged [[LOADED_ARG]] : $Optional<U> to $@sil_unmanaged Optional<U>
 // CHECK: {{%.*}} = unmanaged_to_ref [[UNMANAGED_LOADED_ARG]] : $@sil_unmanaged Optional<U> to $Optional<U>
 // CHECK: destroy_value [[LOADED_ARG]]
 sil [serialized] @test : $@convention(thin) <U where U : AnyObject> (@inout Optional<U>) -> () {
-bb0(%0 : @trivial $*Optional<U>):
+bb0(%0 : $*Optional<U>):
   %1 = load [copy] %0 : $*Optional<U>
   %2 = ref_to_unmanaged %1 : $Optional<U> to $@sil_unmanaged Optional<U>
   %3 = unmanaged_to_ref %2 : $@sil_unmanaged Optional<U> to $Optional<U>
diff --git a/test/SIL/ownership-verifier/definite_init.sil b/test/SIL/ownership-verifier/definite_init.sil
index 9a52669..c3c923f 100644
--- a/test/SIL/ownership-verifier/definite_init.sil
+++ b/test/SIL/ownership-verifier/definite_init.sil
@@ -31,7 +31,7 @@
 //  return (t, a)
 //}
 sil @used_by_inout : $@convention(thin) (Builtin.Int32) -> (Builtin.Int32, Builtin.Int32) {
-bb0(%0 : @trivial $Builtin.Int32):
+bb0(%0 : $Builtin.Int32):
   %91 = alloc_box $<τ_0_0> { var τ_0_0 } <Builtin.Int32>
   %91a = project_box %91 : $<τ_0_0> { var τ_0_0 } <Builtin.Int32>, 0
   %1 = mark_uninitialized [var] %91a : $*Builtin.Int32
@@ -68,7 +68,7 @@
 }
 
 sil @copy_addr1 : $@convention(thin) <T> (@in T) -> @out T {
-bb0(%0 : @trivial $*T, %1 : @trivial $*T):
+bb0(%0 : $*T, %1 : $*T):
   %3 = alloc_box $<τ_0_0> { var τ_0_0 } <T>
   %3a = project_box %3 : $<τ_0_0> { var τ_0_0 } <T>, 0
   %4 = mark_uninitialized [var] %3a : $*T
@@ -85,7 +85,7 @@
 sil @getSomeOptionalClass : $@convention(thin) () -> Optional<SomeClass>
 
 sil @assign_test_trivial : $@convention(thin) (Builtin.Int32) -> Builtin.Int32 {
-bb0(%0 : @trivial $Builtin.Int32):
+bb0(%0 : $Builtin.Int32):
   %7 = alloc_box $<τ_0_0> { var τ_0_0 } <Builtin.Int32>
   %7a = project_box %7 : $<τ_0_0> { var τ_0_0 } <Builtin.Int32>, 0
   %1 = mark_uninitialized [var] %7a : $*Builtin.Int32
@@ -123,7 +123,7 @@
 
 
 sil @assign_test_addressonly : $@convention(thin) <T> (@in T) -> @out T {
-bb0(%0 : @trivial $*T, %1 : @trivial $*T):
+bb0(%0 : $*T, %1 : $*T):
   %b = alloc_box $<τ_0_0> { var τ_0_0 } <T>
   %ba = project_box %b : $<τ_0_0> { var τ_0_0 } <T>, 0
   %2 = mark_uninitialized [var] %ba : $*T
@@ -169,7 +169,7 @@
 }
 
 sil @test_struct : $@convention(thin) (@inout ContainsNativeObject) -> () {
-bb0(%0 : @trivial $*ContainsNativeObject):
+bb0(%0 : $*ContainsNativeObject):
   %b = alloc_box $<τ_0_0> { var τ_0_0 } <ContainsNativeObject>
   %ba = project_box %b : $<τ_0_0> { var τ_0_0 } <ContainsNativeObject>, 0
   %c = mark_uninitialized [var] %ba : $*ContainsNativeObject
@@ -182,13 +182,13 @@
 }
 
 sil @non_box_assign_trivial : $@convention(thin) (@inout Bool, Bool) -> () {
-bb0(%0 : @trivial $*Bool, %1 : @trivial $Bool):
+bb0(%0 : $*Bool, %1 : $Bool):
   assign %1 to %0 : $*Bool
   %9 = tuple ()
   return %9 : $()
 }
 sil @non_box_assign : $@convention(thin) (@inout SomeClass, @owned SomeClass) -> () {
-bb0(%0 : @trivial $*SomeClass, %1 : @owned $SomeClass):
+bb0(%0 : $*SomeClass, %1 : @owned $SomeClass):
   assign %1 to %0 : $*SomeClass
   %9 = tuple ()
   return %9 : $()
@@ -245,7 +245,7 @@
 }
 
 sil @init_existential_with_class : $@convention(thin) (@inout C) -> () {
-entry(%a : @trivial $*C):
+entry(%a : $*C):
   %p = alloc_stack $P
   %b = mark_uninitialized [var] %p : $*P
   %q = init_existential_addr %b : $*P, $C
@@ -258,7 +258,7 @@
 }
 
 sil @conditional_init : $@convention(thin) (Bool) -> () {
-bb0(%0 : @trivial $Bool):
+bb0(%0 : $Bool):
   %2 = alloc_stack $SomeClass
   %3 = mark_uninitialized [var] %2 : $*SomeClass
   %5 = integer_literal $Builtin.Int1, 1
@@ -278,7 +278,7 @@
 }
 
 sil @conditionalInitOrAssign : $@convention(thin) (Builtin.Int1) -> () {
-bb0(%0 : @trivial $Builtin.Int1):
+bb0(%0 : $Builtin.Int1):
   %5 = alloc_stack $SomeClass
   %6 = mark_uninitialized [var] %5 : $*SomeClass
   cond_br %0, bb1, bb2
@@ -308,7 +308,7 @@
 
 /// Root class tests.
 sil @rootclass_test1 : $@convention(method) (@owned RootClassWithIVars, Builtin.Int32) -> @owned RootClassWithIVars {
-bb0(%0 : @owned $RootClassWithIVars, %1 : @trivial $Builtin.Int32):
+bb0(%0 : @owned $RootClassWithIVars, %1 : $Builtin.Int32):
   %3 = mark_uninitialized [rootself] %0 : $RootClassWithIVars
   %4 = begin_borrow %3 : $RootClassWithIVars
   %10 = ref_element_addr %4 : $RootClassWithIVars, #RootClassWithIVars.x
@@ -366,7 +366,7 @@
 struct MyStruct : P {}
 
 sil @self_init_assert_instruction : $@convention(thin) (Builtin.Int32, @thin MyStruct.Type) -> MyStruct {
-bb0(%0 : @trivial $Builtin.Int32, %1 : @trivial $@thin MyStruct.Type):
+bb0(%0 : $Builtin.Int32, %1 : $@thin MyStruct.Type):
   %2 = alloc_stack $MyStruct, var, name "sf"
   %3 = mark_uninitialized [delegatingself] %2 : $*MyStruct
   %6 = function_ref @selfinit : $@convention(thin) () -> MyStruct
@@ -388,7 +388,7 @@
 sil @selfinit_delegate : $@convention(thin) (@thin MyStruct2.Type) -> @out MyStruct2
 
 sil @self_init_copyaddr : $@convention(thin) (@thin MyStruct2.Type) -> @out MyStruct2 {
-bb0(%0 : @trivial $*MyStruct2, %1 : @trivial $@thin MyStruct2.Type):
+bb0(%0 : $*MyStruct2, %1 : $@thin MyStruct2.Type):
   %2 = alloc_stack $MyStruct2, var, name "sf"
   %3 = mark_uninitialized [delegatingself] %2 : $*MyStruct2
   %6 = metatype $@thin MyStruct2.Type
@@ -500,7 +500,7 @@
 }
 
 sil @super_init_out_of_order :  $@convention(method) (@owned DerivedClassWithIVars, Builtin.Int32) -> @owned DerivedClassWithIVars {
-bb0(%0 : @owned $DerivedClassWithIVars, %i : @trivial $Builtin.Int32):
+bb0(%0 : @owned $DerivedClassWithIVars, %i : $Builtin.Int32):
   %1 = alloc_box $<τ_0_0> { var τ_0_0 } <DerivedClassWithIVars>
   %1a = project_box %1 : $<τ_0_0> { var τ_0_0 } <DerivedClassWithIVars>, 0
   %3 = mark_uninitialized [derivedself] %1a : $*DerivedClassWithIVars
@@ -534,7 +534,7 @@
 sil @selfinit_mystruct3 : $@convention(thin) () -> @owned MyStruct3
 
 sil hidden @test_conditional_destroy_delegating_init : $@convention(thin) (Builtin.Int1) -> () {
-bb0(%0 : @trivial $Builtin.Int1):
+bb0(%0 : $Builtin.Int1):
   %2 = alloc_stack $MyStruct3
   %3 = mark_uninitialized [delegatingself] %2 : $*MyStruct3
   cond_br %0, bb1, bb2
@@ -557,7 +557,7 @@
 sil @selfinit_myclass3 : $@convention(thin) (@owned MyClass3) -> @owned MyClass3
 
 sil hidden @test_conditional_destroy_class_delegating_init : $@convention(thin) (Builtin.Int1) -> () {
-bb0(%0 : @trivial $Builtin.Int1):
+bb0(%0 : $Builtin.Int1):
   %2 = alloc_stack $MyClass3
   %3 = mark_uninitialized [delegatingself] %2 : $*MyClass3
   cond_br %0, bb1, bb2
diff --git a/test/SIL/ownership-verifier/false_positive_leaks.sil b/test/SIL/ownership-verifier/false_positive_leaks.sil
index 3051cdc..c7adf53 100644
--- a/test/SIL/ownership-verifier/false_positive_leaks.sil
+++ b/test/SIL/ownership-verifier/false_positive_leaks.sil
@@ -60,7 +60,7 @@
   %0 = function_ref @error_func : $@convention(thin) () -> (Builtin.Int32, @error Error)
   try_apply %0() : $@convention(thin) () -> (Builtin.Int32, @error Error), normal bb1, error bb2
 
-bb1(%2 : @trivial $Builtin.Int32):
+bb1(%2 : $Builtin.Int32):
   %9999 = tuple()
   return %9999 : $()
 
diff --git a/test/SIL/ownership-verifier/objc_use_verifier.sil b/test/SIL/ownership-verifier/objc_use_verifier.sil
index c6621af..56e2e91 100644
--- a/test/SIL/ownership-verifier/objc_use_verifier.sil
+++ b/test/SIL/ownership-verifier/objc_use_verifier.sil
@@ -23,7 +23,7 @@
 }
 
 sil hidden @test_objc_super_method : $@convention(method) (@thick Hoozit.Type) -> () {
-bb0(%0 : @trivial $@thick Hoozit.Type):
+bb0(%0 : $@thick Hoozit.Type):
   %2 = upcast %0 : $@thick Hoozit.Type to $@thick Gizmo.Type
   %3 = objc_super_method %0 : $@thick Hoozit.Type, #Gizmo.runce!1.foreign : (Gizmo.Type) -> () -> (), $@convention(objc_method) (@objc_metatype Gizmo.Type) -> ()
   %4 = tuple()
diff --git a/test/SIL/ownership-verifier/opaque_use_verifier.sil b/test/SIL/ownership-verifier/opaque_use_verifier.sil
index 273ec38..41a62d0 100644
--- a/test/SIL/ownership-verifier/opaque_use_verifier.sil
+++ b/test/SIL/ownership-verifier/opaque_use_verifier.sil
@@ -10,7 +10,7 @@
 import Builtin
 
 sil @unconditional_checked_cast_value_test : $@convention(thin) <T> (Builtin.Int32) -> @out T {
-bb0(%0 : @trivial $Builtin.Int32):
+bb0(%0 : $Builtin.Int32):
   %1 = unconditional_checked_cast_value %0 : $Builtin.Int32 to $T
   return %1 : $T
 }
@@ -61,7 +61,7 @@
 typealias AnyObject = Builtin.AnyObject
 
 sil @takeType : $@convention(thin) (@thick AnyObject.Type) -> () {
-bb0(%0 : @trivial $@thick AnyObject.Type):
+bb0(%0 : $@thick AnyObject.Type):
   %18 = tuple ()
   return %18 : $()
 }
@@ -81,7 +81,7 @@
 }
 
 sil @passTrivialAsOpaqueValue : $@convention(thin) (Builtin.Int64) -> () {
-bb0(%0 : @trivial $Builtin.Int64):
+bb0(%0 : $Builtin.Int64):
   %1 = function_ref @opaque_copy : $@convention(thin) <T> (@in_guaranteed T) -> @out T
   %2 = apply %1<Builtin.Int64>(%0) : $@convention(thin) <T> (@in_guaranteed T) -> @out T
   %3 = function_ref @opaque_arg_copy : $@convention(thin) <T> (@in T) -> @out T
diff --git a/test/SIL/ownership-verifier/over_consume.sil b/test/SIL/ownership-verifier/over_consume.sil
index be04631..6a5406e 100644
--- a/test/SIL/ownership-verifier/over_consume.sil
+++ b/test/SIL/ownership-verifier/over_consume.sil
@@ -186,7 +186,6 @@
 // CHECK: Conv: guaranteed
 // CHECK: OwnershipMap:
 // CHECK: -- OperandOwnershipKindMap --
-// CHECK: trivial:  Yes. Liveness: MustBeLive
 // CHECK: unowned:  No.
 // CHECK: owned: Yes. Liveness: MustBeInvalidated
 // CHECK: guaranteed:  No.
@@ -214,7 +213,6 @@
 // CHECK: Conv: owned
 // CHECK: OwnershipMap:
 // CHECK: -- OperandOwnershipKindMap --
-// CHECK: trivial:  Yes. Liveness: MustBeLive
 // CHECK: unowned:  No.
 // CHECK: owned:  No.
 // CHECK: guaranteed: Yes. Liveness: MustBeLive
@@ -269,7 +267,6 @@
 // CHECK: Conv: guaranteed
 // CHECK: OwnershipMap:
 // CHECK: -- OperandOwnershipKindMap --
-// CHECK: trivial:  No.
 // CHECK: unowned:  No.
 // CHECK: owned: Yes. Liveness: MustBeInvalidated
 // CHECK: guaranteed:  No.
@@ -344,7 +341,6 @@
 // CHECK: Conv: owned
 // CHECK: OwnershipMap:
 // CHECK: -- OperandOwnershipKindMap --
-// CHECK: trivial:  No.
 // CHECK: unowned:  No.
 // CHECK: owned:  No.
 // CHECK: guaranteed: Yes. Liveness: MustBeLive
diff --git a/test/SIL/ownership-verifier/use_verifier.sil b/test/SIL/ownership-verifier/use_verifier.sil
index b398493..6b5fed2 100644
--- a/test/SIL/ownership-verifier/use_verifier.sil
+++ b/test/SIL/ownership-verifier/use_verifier.sil
@@ -142,14 +142,14 @@
 }
 
 sil @trivial_struct_extract_from_trivial : $@convention(thin) (TrivialStruct) -> () {
-bb0(%0 : @trivial $TrivialStruct):
+bb0(%0 : $TrivialStruct):
   %1 = struct_extract %0 : $TrivialStruct, #TrivialStruct.f1
   %9999 = tuple()
   return %9999 : $()
 }
 
 sil @in_address_arg : $@convention(thin) (@in Builtin.NativeObject) -> () {
-bb0(%0 : @trivial $*Builtin.NativeObject):
+bb0(%0 : $*Builtin.NativeObject):
   destroy_addr %0 : $*Builtin.NativeObject
   %9999 = tuple()
   return %9999 : $()
@@ -194,7 +194,7 @@
 }
 
 sil @alloc_value_buffer_dealloc_value_buffer : $@convention(thin) (@inout Builtin.UnsafeValueBuffer, Builtin.Int32) -> () {
-bb0(%0 : @trivial $*Builtin.UnsafeValueBuffer, %1 : @trivial $Builtin.Int32):
+bb0(%0 : $*Builtin.UnsafeValueBuffer, %1 : $Builtin.Int32):
   %2 = alloc_value_buffer $Builtin.Int32 in %0 : $*Builtin.UnsafeValueBuffer
   store %1 to [trivial] %2 : $*Builtin.Int32
   dealloc_value_buffer $Builtin.Int32 in %0 : $*Builtin.UnsafeValueBuffer
@@ -203,7 +203,7 @@
 }
 
 sil @builtins_test : $@convention(thin) (@owned Error, Builtin.Int1, Builtin.RawPointer, Builtin.Word) -> ((), @error Error) {
-bb0(%0 : @owned $Error, %1 : @trivial $Builtin.Int1, %2 : @trivial $Builtin.RawPointer, %3 : @trivial $Builtin.Word):
+bb0(%0 : @owned $Error, %1 : $Builtin.Int1, %2 : $Builtin.RawPointer, %3 : $Builtin.Word):
   %4 = metatype $@thick Builtin.Int32.Type
   builtin "willThrow"(%0 : $Error) : $()
   builtin "onFastPath"() : $()
@@ -238,7 +238,7 @@
 }
 
 sil @tail_allocated_alloc_ref : $@convention(thin) (Builtin.Word, Builtin.Word, @thick SuperKlass.Type) -> () {
-bb0(%0 : @trivial $Builtin.Word, %1 : @trivial $Builtin.Word, %2 : @trivial $@thick SuperKlass.Type):
+bb0(%0 : $Builtin.Word, %1 : $Builtin.Word, %2 : $@thick SuperKlass.Type):
   %3 = alloc_ref [tail_elems $Val * %0 : $Builtin.Word] [tail_elems $Aleph * %1 : $Builtin.Word] $SuperKlass
   dealloc_ref %3 : $SuperKlass
 
@@ -252,7 +252,7 @@
 
 // All of these uses should not be consuming except for the destroy.
 sil @select_enum_test : $@convention(thin) (@owned ThreeDifferingPayloadEnum, @owned Builtin.NativeObject, Optional<Builtin.Int32>, @owned Builtin.NativeObject) -> () {
-bb0(%0 : @owned $ThreeDifferingPayloadEnum, %1 : @owned $Builtin.NativeObject, %2 : @trivial $Optional<Builtin.Int32>, %3 : @owned $Builtin.NativeObject):
+bb0(%0 : @owned $ThreeDifferingPayloadEnum, %1 : @owned $Builtin.NativeObject, %2 : $Optional<Builtin.Int32>, %3 : @owned $Builtin.NativeObject):
   %4 = integer_literal $Builtin.Int32, 2
   select_enum %0 : $ThreeDifferingPayloadEnum, case #ThreeDifferingPayloadEnum.nopayload!enumelt: %4, case #ThreeDifferingPayloadEnum.trivial_payload!enumelt.1: %4, case #ThreeDifferingPayloadEnum.nontrivial_payload!enumelt.1: %4 : $Builtin.Int32
   %5 = select_enum %2 : $Optional<Builtin.Int32>, case #Optional.none!enumelt: %1, case #Optional.some!enumelt.1: %3 : $Builtin.NativeObject
@@ -272,7 +272,7 @@
 }
 
 sil @existential_metatype_test : $@convention(thin) (@owned SwiftKlassP, @in SwiftKlassP) -> () {
-bb0(%0 : @owned $SwiftKlassP, %1 : @trivial $*SwiftKlassP):
+bb0(%0 : @owned $SwiftKlassP, %1 : $*SwiftKlassP):
   %2 = existential_metatype $@thick SwiftKlassP.Type, %0 : $SwiftKlassP
   %3 = existential_metatype $@thick SwiftKlassP.Type, %1 : $*SwiftKlassP
   destroy_value %0 : $SwiftKlassP
@@ -282,7 +282,7 @@
 }
 
 sil @value_metatype_test : $@convention(thin) (@owned Ref, @in Ref) -> () {
-bb0(%0 : @owned $Ref, %1 : @trivial $*Ref):
+bb0(%0 : @owned $Ref, %1 : $*Ref):
   %2 = value_metatype $@thick Ref.Type, %0 : $Ref
   %3 = value_metatype $@thick Ref.Type, %1 : $*Ref
   destroy_value %0 : $Ref
@@ -367,7 +367,7 @@
 }
 
 sil @class_method_metatype_test : $@convention(thin) (@thick SuperKlass.Type) -> () {
-bb0(%0 : @trivial $@thick SuperKlass.Type):
+bb0(%0 : $@thick SuperKlass.Type):
   %1 = class_method %0 : $@thick SuperKlass.Type, #SuperKlass.d!1 : (SuperKlass) -> () -> (), $@convention(method) (@guaranteed SuperKlass) -> ()
   %9999 = tuple()
   return %9999 : $()
@@ -393,7 +393,7 @@
 }
 
 sil @test_store_weak : $@convention(thin) (@owned Optional<SuperKlass>, @in @sil_weak Optional<SuperKlass>, @guaranteed Optional<SuperKlass>) -> () {
-bb0(%0 : @owned $Optional<SuperKlass>, %1 : @trivial $*@sil_weak Optional<SuperKlass>, %2 : @guaranteed $Optional<SuperKlass>):
+bb0(%0 : @owned $Optional<SuperKlass>, %1 : $*@sil_weak Optional<SuperKlass>, %2 : @guaranteed $Optional<SuperKlass>):
   store_weak %0 to %1 : $*@sil_weak Optional<SuperKlass>
   store_weak %2 to %1 : $*@sil_weak Optional<SuperKlass>
   destroy_value %0 : $Optional<SuperKlass>
@@ -423,11 +423,11 @@
   %1 = integer_literal $Builtin.Int32, 0
   br bb2(%1 : $Builtin.Int32, %1 : $Builtin.Int32)
 
-bb2(%2 : @trivial $Builtin.Int32, %3 : @trivial $Builtin.Int32):
+bb2(%2 : $Builtin.Int32, %3 : $Builtin.Int32):
   // Branch with mixed trivial and owned argument
   br bb3(%1 : $Builtin.Int32, %0 : $Builtin.NativeObject, %2 : $Builtin.Int32)
 
-bb3(%4 : @trivial $Builtin.Int32, %5 : @owned $Builtin.NativeObject, %6 : @trivial $Builtin.Int32):
+bb3(%4 : $Builtin.Int32, %5 : @owned $Builtin.NativeObject, %6 : $Builtin.Int32):
   destroy_value %5 : $Builtin.NativeObject
   %9999 = tuple()
   return %9999 : $()
@@ -613,7 +613,7 @@
 //
 // The reason why this is interesting is that we do a loop over enum cases to
 // determine if we have all trivial cases. If we do, then we only accept a
-// @trivial ownership kind to the switch enum. Otherwise, we only accept an
+// ownership kind to the switch enum. Otherwise, we only accept an
 // @owned trivial ownership kind. When we do the loop, we first skip over all
 // trivial enums and then process only the non-trivial enums. That is why we
 // need to make sure we handle all 3 cases.
@@ -632,7 +632,7 @@
   destroy_value %10 : $Builtin.NativeObject
   br bb5
 
-bb3(%11 : @trivial $Builtin.Int32):
+bb3(%11 : $Builtin.Int32):
   br bb5
 
 bb4:
@@ -647,7 +647,7 @@
   destroy_value %12 : $Builtin.NativeObject
   br bb9
 
-bb7(%13 : @trivial $Builtin.Int32):
+bb7(%13 : $Builtin.Int32):
   br bb9
 
 bb8:
@@ -662,7 +662,7 @@
   destroy_value %14 : $Builtin.NativeObject
   br bb13
 
-bb11(%15 : @trivial $Builtin.Int32):
+bb11(%15 : $Builtin.Int32):
   br bb13
 
 bb12:
@@ -676,7 +676,7 @@
   destroy_value %17 : $Builtin.NativeObject
   br bb21
 
-bb18(%19 : @trivial $Builtin.Int32):
+bb18(%19 : $Builtin.Int32):
   br bb21
 
 bb20:
@@ -689,7 +689,7 @@
   destroy_value %23 : $Builtin.NativeObject
   br bb27
 
-bb24(%25 : @trivial $Builtin.Int32):
+bb24(%25 : $Builtin.Int32):
   br bb27
 
 bb26:
@@ -702,7 +702,7 @@
   destroy_value %29 : $Builtin.NativeObject
   br bb33
 
-bb30(%31 : @trivial $Builtin.Int32):
+bb30(%31 : $Builtin.Int32):
   br bb33
 
 bb32:
@@ -716,7 +716,7 @@
   destroy_value %35 : $Builtin.NativeObject
   br bb39
 
-bb36(%37 : @trivial $Builtin.Int32):
+bb36(%37 : $Builtin.Int32):
   br bb39
 
 bb38:
@@ -729,7 +729,7 @@
   destroy_value %41 : $Builtin.NativeObject
   br bb45
 
-bb42(%43 : @trivial $Builtin.Int32):
+bb42(%43 : $Builtin.Int32):
   br bb45
 
 bb44:
@@ -742,7 +742,7 @@
   destroy_value %47 : $Builtin.NativeObject
   br bb51
 
-bb48(%49 : @trivial $Builtin.Int32):
+bb48(%49 : $Builtin.Int32):
   br bb51
 
 bb50:
@@ -770,10 +770,10 @@
   %3 = metatype $@thick SuperKlass.Type
   checked_cast_br %3 : $@thick SuperKlass.Type to $@thick SubKlass.Type, bb4, bb5
 
-bb4(%4 : @trivial $@thick SubKlass.Type):
+bb4(%4 : $@thick SubKlass.Type):
   br bb6
 
-bb5(%5 : @trivial $@thick SuperKlass.Type):
+bb5(%5 : $@thick SuperKlass.Type):
   br bb6
 
 bb6:
@@ -793,12 +793,12 @@
 }
 
 sil @dynamic_method_br_test : $@convention(thin) (@owned AnyObject, @thick AnyObject.Type) -> () {
-bb0(%0 : @owned $AnyObject, %1 : @trivial $@thick AnyObject.Type):
+bb0(%0 : @owned $AnyObject, %1 : $@thick AnyObject.Type):
   %2 = open_existential_ref %0 : $AnyObject to $@opened("01234567-89ab-cdef-0123-000000000000") AnyObject
   %3 = unchecked_ref_cast %2 : $@opened("01234567-89ab-cdef-0123-000000000000") AnyObject to $Builtin.UnknownObject
   dynamic_method_br %3 : $Builtin.UnknownObject, #X.f!1.foreign, bb1, bb2
 
-bb1(%4 : @trivial $@convention(objc_method) (Builtin.UnknownObject) -> ()):
+bb1(%4 : $@convention(objc_method) (Builtin.UnknownObject) -> ()):
   br bb3
 
 bb2:
@@ -809,7 +809,7 @@
   %5 = open_existential_metatype %1 : $@thick AnyObject.Type to $@thick (@opened("01234567-89ab-cdef-0123-000000000001") AnyObject).Type
   dynamic_method_br %5 : $@thick (@opened("01234567-89ab-cdef-0123-000000000001") AnyObject).Type, #X.g!1.foreign, bb4, bb5
 
-bb4(%6 : @trivial $@convention(objc_method) (@thick (@opened("01234567-89ab-cdef-0123-000000000001") AnyObject).Type) -> ()):
+bb4(%6 : $@convention(objc_method) (@thick (@opened("01234567-89ab-cdef-0123-000000000001") AnyObject).Type) -> ()):
   br bb6
 
 bb5:
@@ -1083,7 +1083,7 @@
 }
 
 sil @super_method_metatype_test : $@convention(thin) (@thick SubKlass.Type) -> () {
-bb0(%0 : @trivial $@thick SubKlass.Type):
+bb0(%0 : $@thick SubKlass.Type):
   %1 = upcast %0 : $@thick SubKlass.Type to $@thick SuperKlass.Type
   %2 = class_method %1 : $@thick SuperKlass.Type, #SuperKlass.f!1 : (SuperKlass.Type) -> () -> (), $@convention(method) (@thick SuperKlass.Type) -> ()
   apply %2(%1) : $@convention(method) (@thick SuperKlass.Type) -> ()
diff --git a/test/SILGen/address_only_types.swift b/test/SILGen/address_only_types.swift
index c2d81c3..3d08f59 100644
--- a/test/SILGen/address_only_types.swift
+++ b/test/SILGen/address_only_types.swift
@@ -15,7 +15,7 @@
 
 // CHECK-LABEL: sil hidden @$s18address_only_types0a1_B9_argument{{[_0-9a-zA-Z]*}}F
 func address_only_argument(_ x: Unloadable) {
-  // CHECK: bb0([[XARG:%[0-9]+]] : @trivial $*Unloadable):
+  // CHECK: bb0([[XARG:%[0-9]+]] : $*Unloadable):
   // CHECK: debug_value_addr [[XARG]]
   // CHECK-NEXT: tuple
   // CHECK-NEXT: return
@@ -23,14 +23,14 @@
 
 // CHECK-LABEL: sil hidden @$s18address_only_types0a1_B17_ignored_argument{{[_0-9a-zA-Z]*}}F
 func address_only_ignored_argument(_: Unloadable) {
-  // CHECK: bb0([[XARG:%[0-9]+]] : @trivial $*Unloadable):
+  // CHECK: bb0([[XARG:%[0-9]+]] : $*Unloadable):
   // CHECK-NOT: dealloc_stack {{.*}} [[XARG]]
   // CHECK: return
 }
 
 // CHECK-LABEL: sil hidden @$s18address_only_types0a1_B7_return{{[_0-9a-zA-Z]*}}F
 func address_only_return(_ x: Unloadable, y: Int) -> Unloadable {
-  // CHECK: bb0([[RET:%[0-9]+]] : @trivial $*Unloadable, [[XARG:%[0-9]+]] : @trivial $*Unloadable, [[YARG:%[0-9]+]] : @trivial $Builtin.Int64):
+  // CHECK: bb0([[RET:%[0-9]+]] : $*Unloadable, [[XARG:%[0-9]+]] : $*Unloadable, [[YARG:%[0-9]+]] : $Builtin.Int64):
   // CHECK-NEXT: debug_value_addr [[XARG]] : $*Unloadable, let, name "x"
   // CHECK-NEXT: debug_value [[YARG]] : $Builtin.Int64, let, name "y"
   // CHECK-NEXT: copy_addr [[XARG]] to [initialization] [[RET]]
@@ -46,7 +46,7 @@
 
 // CHECK-LABEL: sil hidden @$s18address_only_types0a1_B27_conditional_missing_return{{[_0-9a-zA-Z]*}}F
 func address_only_conditional_missing_return(_ x: Unloadable) -> Unloadable {
-  // CHECK: bb0({{%.*}} : @trivial $*Unloadable, {{%.*}} : @trivial $*Unloadable):
+  // CHECK: bb0({{%.*}} : $*Unloadable, {{%.*}} : $*Unloadable):
   // CHECK:   switch_enum {{%.*}}, case #Bool.true_!enumelt: [[TRUE:bb[0-9]+]], case #Bool.false_!enumelt: [[FALSE:bb[0-9]+]]
   switch Bool.true_ {
   case .true_:
@@ -63,7 +63,7 @@
 
 // CHECK-LABEL: sil hidden @$s18address_only_types0a1_B29_conditional_missing_return_2
 func address_only_conditional_missing_return_2(_ x: Unloadable) -> Unloadable {
-  // CHECK: bb0({{%.*}} : @trivial $*Unloadable, {{%.*}} : @trivial $*Unloadable):
+  // CHECK: bb0({{%.*}} : $*Unloadable, {{%.*}} : $*Unloadable):
   // CHECK:   switch_enum {{%.*}}, case #Bool.true_!enumelt: [[TRUE1:bb[0-9]+]], case #Bool.false_!enumelt: [[FALSE1:bb[0-9]+]]
   switch Bool.true_ {
   case .true_:
@@ -92,7 +92,7 @@
 
 // CHECK-LABEL: sil hidden @$s18address_only_types0a1_B7_call_1
 func address_only_call_1() -> Unloadable {
-  // CHECK: bb0([[RET:%[0-9]+]] : @trivial $*Unloadable):
+  // CHECK: bb0([[RET:%[0-9]+]] : $*Unloadable):
   return some_address_only_function_1()
   // FIXME emit into
   // CHECK: [[FUNC:%[0-9]+]] = function_ref @$s18address_only_types05some_a1_B11_function_1AA10Unloadable_pyF
@@ -114,7 +114,7 @@
 
 // CHECK-LABEL: sil hidden @$s18address_only_types0a1_B7_call_2{{[_0-9a-zA-Z]*}}F
 func address_only_call_2(_ x: Unloadable) {
-  // CHECK: bb0([[XARG:%[0-9]+]] : @trivial $*Unloadable):
+  // CHECK: bb0([[XARG:%[0-9]+]] : $*Unloadable):
   // CHECK: debug_value_addr [[XARG]] : $*Unloadable
   some_address_only_function_2(x)
   // CHECK: [[FUNC:%[0-9]+]] = function_ref @$s18address_only_types05some_a1_B11_function_2{{[_0-9a-zA-Z]*}}F
@@ -152,7 +152,7 @@
 
 // CHECK-LABEL: sil hidden @$s18address_only_types0a1_B21_assignment_from_temp{{[_0-9a-zA-Z]*}}F
 func address_only_assignment_from_temp(_ dest: inout Unloadable) {
-  // CHECK: bb0([[DEST:%[0-9]+]] : @trivial $*Unloadable):
+  // CHECK: bb0([[DEST:%[0-9]+]] : $*Unloadable):
   dest = some_address_only_function_1()
   // CHECK: [[TEMP:%[0-9]+]] = alloc_stack $Unloadable
   // CHECK: %[[ACCESS:.*]] = begin_access [modify] [unknown] %0 :
@@ -164,7 +164,7 @@
 // CHECK-LABEL: sil hidden @$s18address_only_types0a1_B19_assignment_from_lv{{[_0-9a-zA-Z]*}}F
 func address_only_assignment_from_lv(_ dest: inout Unloadable, v: Unloadable) {
   var v = v
-  // CHECK: bb0([[DEST:%[0-9]+]] : @trivial $*Unloadable, [[VARG:%[0-9]+]] : @trivial $*Unloadable):
+  // CHECK: bb0([[DEST:%[0-9]+]] : $*Unloadable, [[VARG:%[0-9]+]] : $*Unloadable):
   // CHECK: [[VBOX:%.*]] = alloc_box ${ var Unloadable }
   // CHECK: [[PBOX:%[0-9]+]] = project_box [[VBOX]]
   // CHECK: copy_addr [[VARG]] to [initialization] [[PBOX]] : $*Unloadable
@@ -196,7 +196,7 @@
 
 // CHECK-LABEL: sil hidden @$s18address_only_types0a1_B31_assignment_from_lv_to_property{{[_0-9a-zA-Z]*}}F
 func address_only_assignment_from_lv_to_property(_ v: Unloadable) {
-  // CHECK: bb0([[VARG:%[0-9]+]] : @trivial $*Unloadable):
+  // CHECK: bb0([[VARG:%[0-9]+]] : $*Unloadable):
   // CHECK: debug_value_addr [[VARG]] : $*Unloadable
   // CHECK: [[TEMP:%[0-9]+]] = alloc_stack $Unloadable
   // CHECK: copy_addr [[VARG]] to [initialization] [[TEMP]]
@@ -208,7 +208,7 @@
 
 // CHECK-LABEL: sil hidden @$s18address_only_types0a1_B4_varAA10Unloadable_pyF
 func address_only_var() -> Unloadable {
-  // CHECK: bb0([[RET:%[0-9]+]] : @trivial $*Unloadable):
+  // CHECK: bb0([[RET:%[0-9]+]] : $*Unloadable):
   var x = some_address_only_function_1()
   // CHECK: [[XBOX:%[0-9]+]] = alloc_box ${ var Unloadable }
   // CHECK: [[XPB:%.*]] = project_box [[XBOX]]
diff --git a/test/SILGen/addressors.swift b/test/SILGen/addressors.swift
index 1fdcdaa..863b460 100644
--- a/test/SILGen/addressors.swift
+++ b/test/SILGen/addressors.swift
@@ -200,7 +200,7 @@
 }
 // Setter.
 // SILGEN-LABEL: sil hidden [transparent] @$s10addressors1DVys5Int32VAEcis
-// SILGEN: bb0([[VALUE:%.*]] : @trivial $Int32, [[I:%.*]] : @trivial $Int32, [[SELF:%.*]] : @trivial $*D):
+// SILGEN: bb0([[VALUE:%.*]] : $Int32, [[I:%.*]] : $Int32, [[SELF:%.*]] : $*D):
 // SILGEN:   debug_value [[VALUE]] : $Int32
 // SILGEN:   debug_value [[I]] : $Int32
 // SILGEN:   debug_value_addr [[SELF]]
@@ -213,7 +213,7 @@
 // SILGEN:   assign [[VALUE]] to [[ACCESS]] : $*Int32
 
 // SILGEN-LABEL: sil hidden [transparent] @$s10addressors1DVys5Int32VAEciM
-// SILGEN: bb0([[I:%.*]] : @trivial $Int32, [[SELF:%.*]] : @trivial $*D):
+// SILGEN: bb0([[I:%.*]] : $Int32, [[SELF:%.*]] : $*D):
 // SILGEN:   [[SELF_ACCESS:%.*]] = begin_access [modify] [unknown] [[SELF]]
 // SILGEN:   [[T0:%.*]] = function_ref @$s10addressors1DVys5Int32VAEciau
 // SILGEN:   [[PTR:%.*]] = apply [[T0]]([[I]], [[SELF_ACCESS]])
diff --git a/test/SILGen/arguments.swift b/test/SILGen/arguments.swift
index 4ea567f..5a50f4a 100644
--- a/test/SILGen/arguments.swift
+++ b/test/SILGen/arguments.swift
@@ -20,13 +20,13 @@
 
 func arg_tuple(x: Int, y: Float) {}
 // CHECK-LABEL: sil hidden @$ss9arg_tuple1x1yySi_SftF
-// CHECK: bb0([[X:%[0-9]+]] : @trivial $Int, [[Y:%[0-9]+]] : @trivial $Float):
+// CHECK: bb0([[X:%[0-9]+]] : $Int, [[Y:%[0-9]+]] : $Float):
 
 arg_tuple(x: i, y: f)
 
 func arg_deep_tuples(x: Int, y: (Float, UnicodeScalar)) {}
 // CHECK-LABEL: sil hidden @$ss15arg_deep_tuples1x1yySi_Sf_ScttF
-// CHECK: bb0([[X:%[0-9]+]] : @trivial $Int, [[Y_0:%[0-9]+]] : @trivial $Float, [[Y_1:%[0-9]+]] : @trivial $UnicodeScalar):
+// CHECK: bb0([[X:%[0-9]+]] : $Int, [[Y_0:%[0-9]+]] : $Float, [[Y_1:%[0-9]+]] : $UnicodeScalar):
 
 arg_deep_tuples(x:i, y:(f, c))
 var unnamed_subtuple = (f, c)
@@ -38,7 +38,7 @@
 
 func arg_deep_tuples_2(x: Int, _: (y: Float, z: UnicodeScalar)) {}
 // CHECK-LABEL: sil hidden @$ss17arg_deep_tuples_21x_ySi_Sf1y_Sc1zttF
-// CHECK: bb0([[X:%[0-9]+]] : @trivial $Int, [[Y:%[0-9]+]] : @trivial $Float, [[Z:%[0-9]+]] : @trivial $UnicodeScalar):
+// CHECK: bb0([[X:%[0-9]+]] : $Int, [[Y:%[0-9]+]] : $Float, [[Z:%[0-9]+]] : $UnicodeScalar):
 
 arg_deep_tuples_2(x: i, (f, c))
 arg_deep_tuples_2(x: i, unnamed_subtuple)
@@ -49,7 +49,7 @@
 
 func arg_default_tuple(x x: Int = i, y: Float = f) {}
 // CHECK-LABEL: sil hidden @$ss17arg_default_tuple1x1yySi_SftF
-// CHECK: bb0([[X:%[0-9]+]] : @trivial $Int, [[Y:%[0-9]+]] : @trivial $Float):
+// CHECK: bb0([[X:%[0-9]+]] : $Int, [[Y:%[0-9]+]] : $Float):
 
 arg_default_tuple()
 arg_default_tuple(x:i)
@@ -59,7 +59,7 @@
 
 func variadic_arg_1(_ x: Int...) {}
 // CHECK-LABEL: sil hidden @$ss14variadic_arg_1{{[_0-9a-zA-Z]*}}F
-// CHECK: bb0([[X:%[0-9]+]] : @trivial $Array<Int>):
+// CHECK: bb0([[X:%[0-9]+]] : $Array<Int>):
 
 variadic_arg_1()
 variadic_arg_1(i)
@@ -68,7 +68,7 @@
 
 func variadic_arg_2(_ x: Int, _ y: Float...) {}
 // CHECK-LABEL: sil hidden @$ss14variadic_arg_2{{[_0-9a-zA-Z]*}}F
-// CHECK: bb0([[X:%[0-9]+]] : @trivial $Int, [[Y:%[0-9]+]] : @trivial $Array<Float>):
+// CHECK: bb0([[X:%[0-9]+]] : $Int, [[Y:%[0-9]+]] : $Array<Float>):
 
 variadic_arg_2(i)
 variadic_arg_2(i, f)
@@ -76,7 +76,7 @@
 
 func variadic_arg_3(_ y: Float..., x: Int) {}
 // CHECK-LABEL: sil hidden @$ss14variadic_arg_3{{[_0-9a-zA-Z]*}}F
-// CHECK: bb0([[Y:%[0-9]+]] : @trivial $Array<Float>, [[X:%[0-9]+]] : @trivial $Int):
+// CHECK: bb0([[Y:%[0-9]+]] : $Array<Float>, [[X:%[0-9]+]] : $Int):
 
 variadic_arg_3(x: i)
 variadic_arg_3(f, x: i)
diff --git a/test/SILGen/assignment.swift b/test/SILGen/assignment.swift
index 1d537af..e705c5d 100644
--- a/test/SILGen/assignment.swift
+++ b/test/SILGen/assignment.swift
@@ -40,7 +40,7 @@
 // RHS is formally evaluated.
 // CHECK-LABEL: sil hidden @$s10assignment15copyRightToLeft1pyAA1P_pz_tF : $@convention(thin) (@inout P) -> () {
 func copyRightToLeft(p: inout P) {
-  // CHECK: bb0(%0 : @trivial $*P):
+  // CHECK: bb0(%0 : $*P):
   // CHECK:   [[READ:%.*]] = begin_access [read] [unknown] %0 : $*P
   // CHECK:   [[READ_OPEN:%.*]] = open_existential_addr immutable_access [[READ]]
   // CHECK:   end_access [[READ]] : $*P
diff --git a/test/SILGen/auto_closures.swift b/test/SILGen/auto_closures.swift
index dc6977b..faa8c81 100644
--- a/test/SILGen/auto_closures.swift
+++ b/test/SILGen/auto_closures.swift
@@ -1,12 +1,12 @@
 
-// RUN: %target-swift-emit-silgen -module-name auto_closures -enable-sil-ownership -parse-stdlib %s | %FileCheck %s
+// RUN: %target-swift-emit-silgen -module-name auto_closures -enable-sil-ownership -parse-stdlib -swift-version 5 %s | %FileCheck %s
 
 struct Bool {}
 var false_ = Bool()
 
 // CHECK-LABEL: sil hidden @$s13auto_closures05call_A8_closureyAA4BoolVADyXKF : $@convention(thin) (@noescape @callee_guaranteed () -> Bool) -> Bool
 func call_auto_closure(_ x: @autoclosure () -> Bool) -> Bool {
-  // CHECK: bb0([[CLOSURE:%.*]] : @trivial $@noescape @callee_guaranteed () -> Bool):
+  // CHECK: bb0([[CLOSURE:%.*]] : $@noescape @callee_guaranteed () -> Bool):
   // CHECK: [[RET:%.*]] = apply [[CLOSURE]]()
   // CHECK: return [[RET]]
   return x()
diff --git a/test/SILGen/auto_closures_swift4.swift b/test/SILGen/auto_closures_swift4.swift
new file mode 100644
index 0000000..3dbb717
--- /dev/null
+++ b/test/SILGen/auto_closures_swift4.swift
@@ -0,0 +1,16 @@
+
+// RUN: %target-swift-emit-silgen -module-name auto_closures -enable-sil-ownership -parse-stdlib -swift-version 4 %s
+
+// Swift 4-style autoclosure forwarding should not crash - rdar://problem/44657505
+
+public struct Empty {}
+
+public func x(_: @autoclosure () -> Empty) {}
+
+public func y1(_ message: @autoclosure () -> Empty) {
+  x(message)
+}
+
+public func y2(_ message: @autoclosure @escaping () -> Empty) {
+  x(message)
+}
diff --git a/test/SILGen/boxed_existentials.swift b/test/SILGen/boxed_existentials.swift
index b7e7f04..c4f1ffa 100644
--- a/test/SILGen/boxed_existentials.swift
+++ b/test/SILGen/boxed_existentials.swift
@@ -192,7 +192,7 @@
 }
 
 // CHECK-LABEL: sil hidden @$s18boxed_existentials14erasure_to_anyyyps5Error_p_sAC_ptF
-// CHECK:       bb0([[OUT:%.*]] : @trivial $*Any, [[GUAR:%.*]] : @guaranteed $Error,
+// CHECK:       bb0([[OUT:%.*]] : $*Any, [[GUAR:%.*]] : @guaranteed $Error,
 func erasure_to_any(_ guaranteed: Error, _ immediate: Error) -> Any {
   var immediate = immediate
   // CHECK:       [[IMMEDIATE_BOX:%.*]] = alloc_box ${ var Error }
diff --git a/test/SILGen/builtins.swift b/test/SILGen/builtins.swift
index 11b7d36..8e49c95 100644
--- a/test/SILGen/builtins.swift
+++ b/test/SILGen/builtins.swift
@@ -507,7 +507,7 @@
 }
 
 // CHECK-LABEL: sil hidden @$s8builtins15reinterpretCast_1xBw_AA1DCAA1CCSgAGtAG_BwtF : $@convention(thin) (@guaranteed C, Builtin.Word) -> (Builtin.Word, @owned D, @owned Optional<C>, @owned C)
-// CHECK:       bb0([[ARG1:%.*]] : @guaranteed $C, [[ARG2:%.*]] : @trivial $Builtin.Word):
+// CHECK:       bb0([[ARG1:%.*]] : @guaranteed $C, [[ARG2:%.*]] : $Builtin.Word):
 // CHECK-NEXT:    debug_value
 // CHECK-NEXT:    debug_value
 // CHECK-NEXT:    [[ARG1_COPY1:%.*]] = copy_value [[ARG1]]
@@ -583,7 +583,7 @@
 
 // NativeObject
 // CHECK-LABEL: sil hidden @$s8builtins8isUnique{{[_0-9a-zA-Z]*}}F
-// CHECK: bb0(%0 : @trivial $*Optional<Builtin.NativeObject>):
+// CHECK: bb0(%0 : $*Optional<Builtin.NativeObject>):
 // CHECK: [[WRITE:%.*]] = begin_access [modify] [unknown] %0 : $*Optional<Builtin.NativeObject>
 // CHECK: [[BUILTIN:%.*]] = is_unique [[WRITE]] : $*Optional<Builtin.NativeObject>
 // CHECK: return
@@ -593,7 +593,7 @@
 
 // NativeObject nonNull
 // CHECK-LABEL: sil hidden @$s8builtins8isUnique{{[_0-9a-zA-Z]*}}F
-// CHECK: bb0(%0 : @trivial $*Builtin.NativeObject):
+// CHECK: bb0(%0 : $*Builtin.NativeObject):
 // CHECK: [[WRITE:%.*]] = begin_access [modify] [unknown] %0
 // CHECK: [[BUILTIN:%.*]] = is_unique [[WRITE]] : $*Builtin.NativeObject
 // CHECK: return
@@ -603,7 +603,7 @@
 
 // UnknownObject (ObjC)
 // CHECK-LABEL: sil hidden @$s8builtins8isUnique{{[_0-9a-zA-Z]*}}F
-// CHECK: bb0(%0 : @trivial $*Optional<Builtin.UnknownObject>):
+// CHECK: bb0(%0 : $*Optional<Builtin.UnknownObject>):
 // CHECK: [[WRITE:%.*]] = begin_access [modify] [unknown] %0
 // CHECK: [[BUILTIN:%.*]] = is_unique [[WRITE]] : $*Optional<Builtin.UnknownObject>
 // CHECK: return
@@ -613,7 +613,7 @@
 
 // UnknownObject (ObjC) nonNull
 // CHECK-LABEL: sil hidden @$s8builtins8isUnique{{[_0-9a-zA-Z]*}}F
-// CHECK: bb0(%0 : @trivial $*Builtin.UnknownObject):
+// CHECK: bb0(%0 : $*Builtin.UnknownObject):
 // CHECK: [[WRITE:%.*]] = begin_access [modify] [unknown] %0
 // CHECK: [[BUILTIN:%.*]] = is_unique [[WRITE]] : $*Builtin.UnknownObject
 // CHECK: return
@@ -623,7 +623,7 @@
 
 // BridgeObject nonNull
 // CHECK-LABEL: sil hidden @$s8builtins8isUnique{{[_0-9a-zA-Z]*}}F
-// CHECK: bb0(%0 : @trivial $*Builtin.BridgeObject):
+// CHECK: bb0(%0 : $*Builtin.BridgeObject):
 // CHECK: [[WRITE:%.*]] = begin_access [modify] [unknown] %0
 // CHECK: [[BUILTIN:%.*]] = is_unique [[WRITE]] : $*Builtin.BridgeObject
 // CHECK: return
@@ -633,7 +633,7 @@
 
 // BridgeObject nonNull native
 // CHECK-LABEL: sil hidden @$s8builtins15isUnique_native{{[_0-9a-zA-Z]*}}F
-// CHECK: bb0(%0 : @trivial $*Builtin.BridgeObject):
+// CHECK: bb0(%0 : $*Builtin.BridgeObject):
 // CHECK: [[WRITE:%.*]] = begin_access [modify] [unknown] %0
 // CHECK: [[CAST:%.*]] = unchecked_addr_cast [[WRITE]] : $*Builtin.BridgeObject to $*Builtin.NativeObject
 // CHECK: return
@@ -731,7 +731,7 @@
 }
 
 // CHECK-LABEL: sil hidden @$s8builtins19unsafeGuaranteedEnd{{[_0-9a-zA-Z]*}}F
-// CHECK: bb0([[P:%.*]] : @trivial $Builtin.Int8):
+// CHECK: bb0([[P:%.*]] : $Builtin.Int8):
 // CHECK:   builtin "unsafeGuaranteedEnd"([[P]] : $Builtin.Int8)
 // CHECK:   [[S:%.*]] = tuple ()
 // CHECK:   return [[S]] : $()
@@ -741,7 +741,7 @@
 }
 
 // CHECK-LABEL: sil hidden @$s8builtins10bindMemory{{[_0-9a-zA-Z]*}}F
-// CHECK: bb0([[P:%.*]] : @trivial $Builtin.RawPointer, [[I:%.*]] : @trivial $Builtin.Word, [[T:%.*]] : @trivial $@thick T.Type):
+// CHECK: bb0([[P:%.*]] : $Builtin.RawPointer, [[I:%.*]] : $Builtin.Word, [[T:%.*]] : $@thick T.Type):
 // CHECK: bind_memory [[P]] : $Builtin.RawPointer, [[I]] : $Builtin.Word to $*T
 // CHECK:   return {{%.*}} : $()
 // CHECK: }
@@ -808,7 +808,7 @@
 
 
 // CHECK-LABEL: sil hidden @$s8builtins19valueToBridgeObjectyBbSuF : $@convention(thin) (UInt) -> @owned Builtin.BridgeObject {
-// CHECK: bb0([[UINT:%.*]] : @trivial $UInt):
+// CHECK: bb0([[UINT:%.*]] : $UInt):
 // CHECK:   [[BI:%.*]] = struct_extract [[UINT]] : $UInt, #UInt._value
 // CHECK:   [[CAST:%.*]] = value_to_bridge_object [[BI]]
 // CHECK:   [[RET:%.*]] = copy_value [[CAST]] : $Builtin.BridgeObject
diff --git a/test/SILGen/c_function_pointers.swift b/test/SILGen/c_function_pointers.swift
index d3b1171..721e47d 100644
--- a/test/SILGen/c_function_pointers.swift
+++ b/test/SILGen/c_function_pointers.swift
@@ -4,7 +4,7 @@
   return arg
 }
 // CHECK-LABEL: sil hidden @$s19c_function_pointers6valuesyS2iXCS2iXCF
-// CHECK:       bb0(%0 : @trivial $@convention(c) (Int) -> Int):
+// CHECK:       bb0(%0 : $@convention(c) (Int) -> Int):
 // CHECK:         return %0 : $@convention(c) (Int) -> Int
 
 @discardableResult
@@ -12,7 +12,7 @@
   return arg(x)
 }
 // CHECK-LABEL: sil hidden @$s19c_function_pointers5callsyS3iXC_SitF
-// CHECK:       bb0(%0 : @trivial $@convention(c) @noescape (Int) -> Int, %1 : @trivial $Int):
+// CHECK:       bb0(%0 : $@convention(c) @noescape (Int) -> Int, %1 : $Int):
 // CHECK:         [[RESULT:%.*]] = apply %0(%1)
 // CHECK:         return [[RESULT]]
 
@@ -27,7 +27,7 @@
 
 // CHECK-LABEL: sil hidden @$s19c_function_pointers0B19_to_swift_functionsyySiF
 func pointers_to_swift_functions(_ x: Int) {
-// CHECK: bb0([[X:%.*]] : @trivial $Int):
+// CHECK: bb0([[X:%.*]] : $Int):
 
   func local(_ y: Int) -> Int { return y }
 
diff --git a/test/SILGen/capture_inout.swift b/test/SILGen/capture_inout.swift
index afdbefc..07158de 100644
--- a/test/SILGen/capture_inout.swift
+++ b/test/SILGen/capture_inout.swift
@@ -3,7 +3,7 @@
 typealias Int = Builtin.Int64
 
 // CHECK: sil hidden @$s13capture_inout8localFoo1xyBi64_z_tF
-// CHECK: bb0([[X_INOUT:%.*]] : @trivial $*Builtin.Int64):
+// CHECK: bb0([[X_INOUT:%.*]] : $*Builtin.Int64):
 // CHECK-NOT: alloc_box
 // CHECK:   [[FUNC:%.*]] = function_ref [[CLOSURE:@.*]] : $@convention(thin) (@inout_aliasable Builtin.Int64) -> Builtin.Int64
 // CHECK:   apply [[FUNC]]([[X_INOUT]])
@@ -17,7 +17,7 @@
 }
 
 // CHECK: sil hidden @$s13capture_inout7anonFoo1xyBi64_z_tF
-// CHECK: bb0([[X_INOUT:%.*]] : @trivial $*Builtin.Int64):
+// CHECK: bb0([[X_INOUT:%.*]] : $*Builtin.Int64):
 // CHECK-NOT: alloc_box
 // CHECK:   [[FUNC:%.*]] = function_ref [[CLOSURE:@.*]] : $@convention(thin) (@inout_aliasable Builtin.Int64) -> Builtin.Int64
 // CHECK:   apply [[FUNC]]([[X_INOUT]])
diff --git a/test/SILGen/capture_typed_boxes.swift b/test/SILGen/capture_typed_boxes.swift
index 117be0e..d01e694 100644
--- a/test/SILGen/capture_typed_boxes.swift
+++ b/test/SILGen/capture_typed_boxes.swift
@@ -17,7 +17,7 @@
   return bar(0)
 }
 // CHECK-LABEL: sil private @$s19capture_typed_boxes7closureyS3icF3barL_yS2iF : $@convention(thin) (Int, @guaranteed { var @callee_guaranteed (Int) -> Int }) -> Int {
-// CHECK:       bb0(%0 : @trivial $Int, %1 : @guaranteed ${ var @callee_guaranteed (Int) -> Int }):
+// CHECK:       bb0(%0 : $Int, %1 : @guaranteed ${ var @callee_guaranteed (Int) -> Int }):
 
 func closure_generic<T>(_ f: @escaping (T) -> T, x: T) -> T {
   var f = f
@@ -28,5 +28,5 @@
   return bar(x)
 }
 // CHECK-LABEL: sil private @$s19capture_typed_boxes15closure_generic{{.*}} : $@convention(thin) <T> (@in_guaranteed T, @guaranteed <τ_0_0> { var @callee_guaranteed (@in_guaranteed τ_0_0) -> @out τ_0_0 } <T>) -> @out T {
-// CHECK-LABEL: bb0(%0 : @trivial $*T, %1 : @trivial $*T, %2 : @guaranteed $<τ_0_0> { var @callee_guaranteed (@in_guaranteed τ_0_0) -> @out τ_0_0 } <T>):
+// CHECK-LABEL: bb0(%0 : $*T, %1 : $*T, %2 : @guaranteed $<τ_0_0> { var @callee_guaranteed (@in_guaranteed τ_0_0) -> @out τ_0_0 } <T>):
 
diff --git a/test/SILGen/casts.swift b/test/SILGen/casts.swift
index 401cd79..4a7278d 100644
--- a/test/SILGen/casts.swift
+++ b/test/SILGen/casts.swift
@@ -77,7 +77,7 @@
 struct S : P {}
 
 // CHECK: sil hidden @$s5casts32downcast_existential_conditional{{[_0-9a-zA-Z]*}}F
-// CHECK: bb0([[IN:%.*]] : @trivial $*P):
+// CHECK: bb0([[IN:%.*]] : $*P):
 // CHECK:   [[COPY:%.*]] = alloc_stack $P
 // CHECK:   copy_addr [[IN]] to [initialization] [[COPY]]
 // CHECK:   [[TMP:%.*]] = alloc_stack $S
@@ -94,7 +94,7 @@
 // CHECK:   dealloc_stack [[TMP]]
 // CHECK:   br bb3([[T0]] : $Optional<S>)
 //   Continuation block.
-// CHECK: bb3([[RESULT:%.*]] : @trivial $Optional<S>):
+// CHECK: bb3([[RESULT:%.*]] : $Optional<S>):
 // CHECK:   dealloc_stack [[COPY]]
 // CHECK:   return [[RESULT]]
 func downcast_existential_conditional(p: P) -> S? {
diff --git a/test/SILGen/cf_members.swift b/test/SILGen/cf_members.swift
index 380aa65..5926ace 100644
--- a/test/SILGen/cf_members.swift
+++ b/test/SILGen/cf_members.swift
@@ -14,7 +14,7 @@
 
 // CHECK-LABEL: sil @$s10cf_members3foo{{[_0-9a-zA-Z]*}}F
 public func foo(_ x: Double) {
-// CHECK: bb0([[X:%.*]] : @trivial $Double):
+// CHECK: bb0([[X:%.*]] : $Double):
   // CHECK: [[GLOBALVAR:%.*]] = global_addr @IAMStruct1GlobalVar
   // CHECK: [[READ:%.*]] = begin_access [read] [dynamic] [[GLOBALVAR]] : $*Double
   // CHECK: [[ZZ:%.*]] = load [trivial] [[READ]]
@@ -237,37 +237,37 @@
 // CHECK: } // end sil function '$s10cf_members3foo{{[_0-9a-zA-Z]*}}F'
 
 // CHECK-LABEL: sil shared [serializable] [thunk] @$sSo10IAMStruct1V5valueABSd_tcfCTO
-// CHECK:       bb0([[X:%.*]] : @trivial $Double, [[SELF:%.*]] : @trivial $@thin Struct1.Type):
+// CHECK:       bb0([[X:%.*]] : $Double, [[SELF:%.*]] : $@thin Struct1.Type):
 // CHECK:         [[CFUNC:%.*]] = function_ref @IAMStruct1CreateSimple
 // CHECK:         [[RET:%.*]] = apply [[CFUNC]]([[X]])
 // CHECK:         return [[RET]]
 
 // CHECK-LABEL: sil shared [serializable] [thunk] @$sSo10IAMStruct1V9translate7radiansABSd_tFTO
-// CHECK:       bb0([[X:%.*]] : @trivial $Double, [[SELF:%.*]] : @trivial $Struct1):
+// CHECK:       bb0([[X:%.*]] : $Double, [[SELF:%.*]] : $Struct1):
 // CHECK:         store [[SELF]] to [trivial] [[TMP:%.*]] :
 // CHECK:         [[CFUNC:%.*]] = function_ref @IAMStruct1Rotate
 // CHECK:         [[RET:%.*]] = apply [[CFUNC]]([[TMP]], [[X]])
 // CHECK:         return [[RET]]
 
 // CHECK-LABEL: sil shared [serializable] [thunk] @$sSo10IAMStruct1V5scaleyABSdFTO
-// CHECK:       bb0([[X:%.*]] : @trivial $Double, [[SELF:%.*]] : @trivial $Struct1):
+// CHECK:       bb0([[X:%.*]] : $Double, [[SELF:%.*]] : $Struct1):
 // CHECK:         [[CFUNC:%.*]] = function_ref @IAMStruct1Scale
 // CHECK:         [[RET:%.*]] = apply [[CFUNC]]([[SELF]], [[X]])
 // CHECK:         return [[RET]]
 
 // CHECK-LABEL: sil shared [serializable] [thunk] @$sSo10IAMStruct1V12staticMethods5Int32VyFZTO
-// CHECK:       bb0([[SELF:%.*]] : @trivial $@thin Struct1.Type):
+// CHECK:       bb0([[SELF:%.*]] : $@thin Struct1.Type):
 // CHECK:         [[CFUNC:%.*]] = function_ref @IAMStruct1StaticMethod
 // CHECK:         [[RET:%.*]] = apply [[CFUNC]]()
 // CHECK:         return [[RET]]
 
 // CHECK-LABEL: sil shared [serializable] [thunk] @$sSo10IAMStruct1V13selfComesLast1xySd_tFTO
-// CHECK:       bb0([[X:%.*]] : @trivial $Double, [[SELF:%.*]] : @trivial $Struct1):
+// CHECK:       bb0([[X:%.*]] : $Double, [[SELF:%.*]] : $Struct1):
 // CHECK:         [[CFUNC:%.*]] = function_ref @IAMStruct1SelfComesLast
 // CHECK:         apply [[CFUNC]]([[X]], [[SELF]])
 
 // CHECK-LABEL: sil shared [serializable] [thunk] @$sSo10IAMStruct1V14selfComesThird1a1b1xys5Int32V_SfSdtFTO
-// CHECK:       bb0([[X:%.*]] : @trivial $Int32, [[Y:%.*]] : @trivial $Float, [[Z:%.*]] : @trivial $Double, [[SELF:%.*]] : @trivial $Struct1):
+// CHECK:       bb0([[X:%.*]] : $Int32, [[Y:%.*]] : $Float, [[Z:%.*]] : $Double, [[SELF:%.*]] : $Struct1):
 // CHECK:         [[CFUNC:%.*]] = function_ref @IAMStruct1SelfComesThird
 // CHECK:         apply [[CFUNC]]([[X]], [[Y]], [[SELF]], [[Z]])
 
diff --git a/test/SILGen/class_bound_protocols.swift b/test/SILGen/class_bound_protocols.swift
index e8bcf0f..e2376cc 100644
--- a/test/SILGen/class_bound_protocols.swift
+++ b/test/SILGen/class_bound_protocols.swift
@@ -110,7 +110,7 @@
 // CHECK: } // end sil function '$ss30class_bound_existential_upcast1xs10ClassBound_psAC_s0E6Bound2p_tF'
 
 // CHECK-LABEL: sil hidden @$ss41class_bound_to_unbound_existential_upcast1xs13NotClassBound_ps0hI0_sACp_tF :
-// CHECK: bb0([[ARG0:%.*]] : @trivial $*NotClassBound, [[ARG1:%.*]] : @guaranteed $ClassBound & NotClassBound):
+// CHECK: bb0([[ARG0:%.*]] : $*NotClassBound, [[ARG1:%.*]] : @guaranteed $ClassBound & NotClassBound):
 // CHECK:   [[X_OPENED:%.*]] = open_existential_ref [[ARG1]] : $ClassBound & NotClassBound to [[OPENED_TYPE:\$@opened(.*) ClassBound & NotClassBound]]
 // CHECK:   [[PAYLOAD_ADDR:%.*]] = init_existential_addr [[ARG0]] : $*NotClassBound, [[OPENED_TYPE]]
 // CHECK:   [[X_OPENED_COPY:%.*]] = copy_value [[X_OPENED]]
diff --git a/test/SILGen/closures.swift b/test/SILGen/closures.swift
index 28e1978..28a6b3f 100644
--- a/test/SILGen/closures.swift
+++ b/test/SILGen/closures.swift
@@ -29,7 +29,7 @@
 // CHECK-LABEL: sil hidden @$s8closures17read_only_captureyS2iF : $@convention(thin) (Int) -> Int {
 func read_only_capture(_ x: Int) -> Int {
   var x = x
-  // CHECK: bb0([[X:%[0-9]+]] : @trivial $Int):
+  // CHECK: bb0([[X:%[0-9]+]] : $Int):
   // CHECK:   [[XBOX:%[0-9]+]] = alloc_box ${ var Int }
   // SEMANTIC ARC TODO: This is incorrect. We need to do the project_box on the copy.
   // CHECK:   [[PROJECT:%.*]] = project_box [[XBOX]]
@@ -63,7 +63,7 @@
 // CHECK-LABEL: sil hidden @$s8closures16write_to_captureyS2iF : $@convention(thin) (Int) -> Int {
 func write_to_capture(_ x: Int) -> Int {
   var x = x
-  // CHECK: bb0([[X:%[0-9]+]] : @trivial $Int):
+  // CHECK: bb0([[X:%[0-9]+]] : $Int):
   // CHECK:   [[XBOX:%[0-9]+]] = alloc_box ${ var Int }
   // CHECK:   [[XBOX_PB:%.*]] = project_box [[XBOX]]
   // CHECK:   store [[X]] to [trivial] [[XBOX_PB]]
@@ -121,7 +121,7 @@
 
 // CHECK-LABEL: sil hidden @$s8closures18capture_local_funcySiycycSiF : $@convention(thin) (Int) -> @owned @callee_guaranteed () -> @owned @callee_guaranteed () -> Int {
 func capture_local_func(_ x: Int) -> () -> () -> Int {
-  // CHECK: bb0([[ARG:%.*]] : @trivial $Int):
+  // CHECK: bb0([[ARG:%.*]] : $Int):
   var x = x
   // CHECK:   [[XBOX:%[0-9]+]] = alloc_box ${ var Int }
   // CHECK:   [[XBOX_PB:%.*]] = project_box [[XBOX]]
@@ -159,7 +159,7 @@
 // CHECK-LABEL: sil hidden @$s8closures22anon_read_only_capture{{[_0-9a-zA-Z]*}}F
 func anon_read_only_capture(_ x: Int) -> Int {
   var x = x
-  // CHECK: bb0([[X:%[0-9]+]] : @trivial $Int):
+  // CHECK: bb0([[X:%[0-9]+]] : $Int):
   // CHECK: [[XBOX:%[0-9]+]] = alloc_box ${ var Int }
   // CHECK: [[PB:%.*]] = project_box [[XBOX]]
 
@@ -173,7 +173,7 @@
   // CHECK: return [[RET]]
 }
 // CHECK: sil private @[[CLOSURE_NAME]]
-// CHECK: bb0([[XADDR:%[0-9]+]] : @trivial $*Int):
+// CHECK: bb0([[XADDR:%[0-9]+]] : $*Int):
 // CHECK: [[ACCESS:%.*]] = begin_access [read] [unknown] [[XADDR]] : $*Int
 // CHECK: [[X:%[0-9]+]] = load [trivial] [[ACCESS]]
 // CHECK: return [[X]]
@@ -181,7 +181,7 @@
 // CHECK-LABEL: sil hidden @$s8closures21small_closure_capture{{[_0-9a-zA-Z]*}}F
 func small_closure_capture(_ x: Int) -> Int {
   var x = x
-  // CHECK: bb0([[X:%[0-9]+]] : @trivial $Int):
+  // CHECK: bb0([[X:%[0-9]+]] : $Int):
   // CHECK: [[XBOX:%[0-9]+]] = alloc_box ${ var Int }
   // CHECK: [[PB:%.*]] = project_box [[XBOX]]
 
@@ -195,7 +195,7 @@
   // CHECK: return [[RET]]
 }
 // CHECK: sil private @[[CLOSURE_NAME]]
-// CHECK: bb0([[XADDR:%[0-9]+]] : @trivial $*Int):
+// CHECK: bb0([[XADDR:%[0-9]+]] : $*Int):
 // CHECK: [[ACCESS:%.*]] = begin_access [read] [unknown] [[XADDR]] : $*Int
 // CHECK: [[X:%[0-9]+]] = load [trivial] [[ACCESS]]
 // CHECK: return [[X]]
@@ -216,7 +216,7 @@
   // CHECK: return [[ANON_CLOSURE_APP]]
 }
 // CHECK: sil private @[[CLOSURE_NAME]] : $@convention(thin) (Int, @guaranteed { var Int }) -> Int
-// CHECK: bb0([[DOLLAR0:%[0-9]+]] : @trivial $Int, [[XBOX:%[0-9]+]] : @guaranteed ${ var Int }):
+// CHECK: bb0([[DOLLAR0:%[0-9]+]] : $Int, [[XBOX:%[0-9]+]] : @guaranteed ${ var Int }):
 // CHECK: [[XADDR:%[0-9]+]] = project_box [[XBOX]]
 // CHECK: [[INTTYPE:%[0-9]+]] = metatype $@thin Int.Type
 // CHECK: [[XACCESS:%[0-9]+]] = begin_access [read] [unknown] [[XADDR]] : $*Int
@@ -234,13 +234,13 @@
   return { $0 }
 }
 // CHECK: sil private @[[CLOSURE_NAME]] : $@convention(thin) (Int) -> Int
-// CHECK: bb0([[YARG:%[0-9]+]] : @trivial $Int):
+// CHECK: bb0([[YARG:%[0-9]+]] : $Int):
 
 // CHECK-LABEL: sil hidden @$s8closures17uncaptured_locals{{[_0-9a-zA-Z]*}}F :
 func uncaptured_locals(_ x: Int) -> (Int, Int) {
   var x = x
   // -- locals without captures are stack-allocated
-  // CHECK: bb0([[XARG:%[0-9]+]] : @trivial $Int):
+  // CHECK: bb0([[XARG:%[0-9]+]] : $Int):
   // CHECK:   [[XADDR:%[0-9]+]] = alloc_box ${ var Int }
   // CHECK:   [[PB:%.*]] = project_box [[XADDR]]
   // CHECK:   store [[XARG]] to [trivial] [[PB]]
@@ -417,13 +417,13 @@
 // Check that the address of self is passed in, but not the refcount pointer.
 
 // CHECK-LABEL: sil hidden @$s8closures24StructWithMutatingMethodV08mutatingE0{{[_0-9a-zA-Z]*}}F
-// CHECK: bb0(%0 : @trivial $*StructWithMutatingMethod):
+// CHECK: bb0(%0 : $*StructWithMutatingMethod):
 // CHECK: [[CLOSURE:%[0-9]+]] = function_ref @$s8closures24StructWithMutatingMethodV08mutatingE0{{.*}} : $@convention(thin) (@inout_aliasable StructWithMutatingMethod) -> Int
 // CHECK: partial_apply [callee_guaranteed] [[CLOSURE]](%0) : $@convention(thin) (@inout_aliasable StructWithMutatingMethod) -> Int
 
 // Check that the closure body only takes the pointer.
 // CHECK-LABEL: sil private @$s8closures24StructWithMutatingMethodV08mutatingE0{{.*}} : $@convention(thin) (@inout_aliasable StructWithMutatingMethod) -> Int {
-// CHECK:       bb0(%0 : @trivial $*StructWithMutatingMethod):
+// CHECK:       bb0(%0 : $*StructWithMutatingMethod):
 
 class SuperBase {
   func boom() {}
diff --git a/test/SILGen/closures_callee_guaranteed.swift b/test/SILGen/closures_callee_guaranteed.swift
index 463c4c8..0de6809 100644
--- a/test/SILGen/closures_callee_guaranteed.swift
+++ b/test/SILGen/closures_callee_guaranteed.swift
@@ -2,7 +2,7 @@
 import Swift
 
 // CHECK-LABEL: sil @{{.*}}apply{{.*}} : $@convention(thin) (@noescape @callee_guaranteed () -> Int)
-// bb0(%0 : @trivial $@noescape @callee_guaranteed () -> Int):
+// bb0(%0 : $@noescape @callee_guaranteed () -> Int):
 //   [[B1:%.*]] = begin_borrow %0 : $@noescape @callee_guaranteed () -> Int
 //   [[C1:%.*]] = copy_value %2 : $@noescape @callee_guaranteed () -> Int
 //
diff --git a/test/SILGen/codable/struct_codable_member_type_lookup.swift b/test/SILGen/codable/struct_codable_member_type_lookup.swift
index c8d4d38..27bc423 100644
--- a/test/SILGen/codable/struct_codable_member_type_lookup.swift
+++ b/test/SILGen/codable/struct_codable_member_type_lookup.swift
@@ -3,7 +3,7 @@
 // Make sure we have an int, not a float.
 //
 // CHECK-LABEL: sil hidden @$s33struct_codable_member_type_lookup32StaticInstanceNameDisambiguationV6encode2to{{.*}}F : $@convention(method) (@in_guaranteed Encoder, StaticInstanceNameDisambiguation) -> @error Error {
-// CHECK: bb0([[ENCODER:%.*]] : @trivial $*Encoder, [[INPUT:%.*]] : @trivial $StaticInstanceNameDisambiguation):
+// CHECK: bb0([[ENCODER:%.*]] : $*Encoder, [[INPUT:%.*]] : $StaticInstanceNameDisambiguation):
 // CHECK:   [[INT_VALUE:%.*]] = struct_extract [[INPUT]]
 // CHECK:   [[FUNC:%.*]] = function_ref @$ss22KeyedEncodingContainerV6encode_6forKeyySi_xtKF : $@convention(method) <τ_0_0 where τ_0_0 : CodingKey> (Int, @in_guaranteed τ_0_0, @inout KeyedEncodingContainer<τ_0_0>) -> @error Error
 // CHECK:   try_apply [[FUNC]]<StaticInstanceNameDisambiguation.CodingKeys>([[INT_VALUE]],
diff --git a/test/SILGen/complete_object_init.swift b/test/SILGen/complete_object_init.swift
index 4bcacd8..d50ef19 100644
--- a/test/SILGen/complete_object_init.swift
+++ b/test/SILGen/complete_object_init.swift
@@ -4,7 +4,7 @@
 
 class A {
 // CHECK-LABEL: sil hidden @$s20complete_object_init1AC{{[_0-9a-zA-Z]*}}fC : $@convention(method) (@thick A.Type) -> @owned A
-// CHECK: bb0([[SELF_META:%[0-9]+]] : @trivial $@thick A.Type):
+// CHECK: bb0([[SELF_META:%[0-9]+]] : $@thick A.Type):
 // CHECK:   [[SELF_BOX:%[0-9]+]] = alloc_box ${ var A }
 // CHECK:   [[UNINIT_SELF:%[0-9]+]] = mark_uninitialized [delegatingself] [[SELF_BOX]] : ${ var A }
 // CHECK:   [[PB:%.*]] = project_box [[UNINIT_SELF]]
diff --git a/test/SILGen/decls.swift b/test/SILGen/decls.swift
index 7b6299e..9fa4494 100644
--- a/test/SILGen/decls.swift
+++ b/test/SILGen/decls.swift
@@ -83,7 +83,7 @@
 }
 
 // CHECK-LABEL: sil hidden @$s5decls16simple_arguments{{[_0-9a-zA-Z]*}}F
-// CHECK: bb0(%0 : @trivial $Int, %1 : @trivial $Int):
+// CHECK: bb0(%0 : $Int, %1 : $Int):
 // CHECK: [[X:%[0-9]+]] = alloc_box ${ var Int }
 // CHECK-NEXT: [[PBX:%.*]] = project_box [[X]]
 // CHECK-NEXT: store %0 to [trivial] [[PBX]]
@@ -97,14 +97,14 @@
 }
 
 // CHECK-LABEL: sil hidden @$s5decls14tuple_argument{{[_0-9a-zA-Z]*}}F
-// CHECK: bb0(%0 : @trivial $Int, %1 : @trivial $Float):
+// CHECK: bb0(%0 : $Int, %1 : $Float):
 // CHECK: [[UNIT:%[0-9]+]] = tuple ()
 // CHECK: [[TUPLE:%[0-9]+]] = tuple (%0 : $Int, %1 : $Float, [[UNIT]] : $())
 func tuple_argument(x: (Int, Float, ())) {
 }
 
 // CHECK-LABEL: sil hidden @$s5decls14inout_argument{{[_0-9a-zA-Z]*}}F
-// CHECK: bb0(%0 : @trivial $*Int, %1 : @trivial $Int):
+// CHECK: bb0(%0 : $*Int, %1 : $Int):
 // CHECK: [[X_LOCAL:%[0-9]+]] = alloc_box ${ var Int }
 // CHECK: [[PBX:%.*]] = project_box [[X_LOCAL]]
 func inout_argument(x: inout Int, y: Int) {
diff --git a/test/SILGen/default_arguments.swift b/test/SILGen/default_arguments.swift
index 4731051..91b650d 100644
--- a/test/SILGen/default_arguments.swift
+++ b/test/SILGen/default_arguments.swift
@@ -189,7 +189,7 @@
 
 // CHECK-LABEL: sil hidden @$s17default_arguments25testTakeDefaultArgUnnamed{{[_0-9a-zA-Z]*}}F
 func testTakeDefaultArgUnnamed(_ i: Int) {
-  // CHECK: bb0([[I:%[0-9]+]] : @trivial $Int):
+  // CHECK: bb0([[I:%[0-9]+]] : $Int):
   // CHECK:   [[FN:%[0-9]+]] = function_ref @$s17default_arguments21takeDefaultArgUnnamedyySiF : $@convention(thin) (Int) -> ()
   // CHECK:   apply [[FN]]([[I]]) : $@convention(thin) (Int) -> ()
   takeDefaultArgUnnamed(i)
diff --git a/test/SILGen/dependent_member_lowering.swift b/test/SILGen/dependent_member_lowering.swift
index f9dcdfe..a883385 100644
--- a/test/SILGen/dependent_member_lowering.swift
+++ b/test/SILGen/dependent_member_lowering.swift
@@ -11,12 +11,12 @@
 
   func f(_ t: T.Type) {}
   // CHECK-LABEL: sil private [transparent] [thunk] @$s25dependent_member_lowering3FooVyxGAA1PA2aEP1fyy1AQzFTW : $@convention(witness_method: P) <τ_0_0> (@in_guaranteed @thick τ_0_0.Type, @in_guaranteed Foo<τ_0_0>) -> ()
-  // CHECK:       bb0(%0 : @trivial $*@thick τ_0_0.Type, %1 : @trivial $*Foo<τ_0_0>):
+  // CHECK:       bb0(%0 : $*@thick τ_0_0.Type, %1 : $*Foo<τ_0_0>):
 }
 struct Bar<T>: P {
   typealias A = (Int) -> T
 
   func f(_ t: @escaping (Int) -> T) {}
   // CHECK-LABEL: sil private [transparent] [thunk] @$s25dependent_member_lowering3BarVyxGAA1PA2aEP1fyy1AQzFTW : $@convention(witness_method: P) <τ_0_0> (@in_guaranteed @callee_guaranteed (@in_guaranteed Int) -> @out τ_0_0, @in_guaranteed Bar<τ_0_0>) -> ()
-  // CHECK:       bb0(%0 : @trivial $*@callee_guaranteed (@in_guaranteed Int) -> @out τ_0_0, %1 : @trivial $*Bar<τ_0_0>):
+  // CHECK:       bb0(%0 : $*@callee_guaranteed (@in_guaranteed Int) -> @out τ_0_0, %1 : $*Bar<τ_0_0>):
 }
diff --git a/test/SILGen/dynamic.swift b/test/SILGen/dynamic.swift
index 091ec68..1db1cf0 100644
--- a/test/SILGen/dynamic.swift
+++ b/test/SILGen/dynamic.swift
@@ -491,7 +491,7 @@
 // thunk.
 
 // CHECK-LABEL: sil private @$s7dynamic15ConcreteDerivedC6methodyySiFAA11GenericBaseCADyyxFTV : $@convention(method) (@in_guaranteed Int, @guaranteed ConcreteDerived) -> ()
-// CHECK: bb0(%0 : @trivial $*Int, %1 : @guaranteed $ConcreteDerived):
+// CHECK: bb0(%0 : $*Int, %1 : @guaranteed $ConcreteDerived):
 // CHECK-NEXT:  [[VALUE:%.*]] = load [trivial] %0 : $*Int
 // CHECK:       [[DYNAMIC_THUNK:%.*]] = function_ref @$s7dynamic15ConcreteDerivedC6methodyySiFTD : $@convention(method) (Int, @guaranteed ConcreteDerived) -> ()
 // CHECK-NEXT:  apply [[DYNAMIC_THUNK]]([[VALUE]], %1) : $@convention(method) (Int, @guaranteed ConcreteDerived) -> ()
diff --git a/test/SILGen/dynamic_callable_attribute.swift b/test/SILGen/dynamic_callable_attribute.swift
index 9bf9ae9..30e6f96 100644
--- a/test/SILGen/dynamic_callable_attribute.swift
+++ b/test/SILGen/dynamic_callable_attribute.swift
@@ -18,7 +18,7 @@
 }
 
 // CHECK-LABEL: sil @foo
-// CHECK: bb0(%0 : @trivial $Callable):
+// CHECK: bb0(%0 : $Callable):
 // CHECK: [[DYN_CALL_1:%.*]] = function_ref @$s26dynamic_callable_attribute8CallableV15dynamicallyCall13withArgumentsySaySiG_tF
 // CHECK-NEXT: apply [[DYN_CALL_1]]
 // CHECK: [[DYN_CALL_2:%.*]] = function_ref @$s26dynamic_callable_attribute8CallableV15dynamicallyCall13withArgumentsySaySiG_tF
diff --git a/test/SILGen/dynamic_init.swift b/test/SILGen/dynamic_init.swift
index 7014048..0058e52 100644
--- a/test/SILGen/dynamic_init.swift
+++ b/test/SILGen/dynamic_init.swift
@@ -6,7 +6,7 @@
 
 // CHECK-LABEL: sil hidden @$s12dynamic_init15testDynamicInit{{[_0-9a-zA-Z]*}}F
 func testDynamicInit(cm: C.Type) {
-  // CHECK: bb0([[CM:%[0-9]+]] : @trivial $@thick C.Type):
+  // CHECK: bb0([[CM:%[0-9]+]] : $@thick C.Type):
   // CHECK:   [[METHOD:%[0-9]+]] = class_method [[CM]] : $@thick C.Type, #C.init!allocator.1 : (C.Type) -> () -> C, $@convention(method) (@thick C.Type) -> @owned C
   // CHECK:   [[C_OBJ:%[0-9]+]] = apply [[METHOD]]([[CM]]) : $@convention(method) (@thick C.Type) -> @owned C
   // CHECK:   destroy_value [[C_OBJ]] : $C
diff --git a/test/SILGen/dynamic_lookup.swift b/test/SILGen/dynamic_lookup.swift
index ff7b604..d20c387 100644
--- a/test/SILGen/dynamic_lookup.swift
+++ b/test/SILGen/dynamic_lookup.swift
@@ -81,7 +81,7 @@
   // CHECK:   dynamic_method_br [[OBJ_SELF]] : $@opened({{.*}}) AnyObject, #X.f!1.foreign, [[HASBB:[a-zA-z0-9]+]], [[NOBB:[a-zA-z0-9]+]]
 
   // Has method BB:
-  // CHECK: [[HASBB]]([[UNCURRIED:%[0-9]+]] : @trivial $@convention(objc_method) (@opened({{.*}}) AnyObject) -> ()):
+  // CHECK: [[HASBB]]([[UNCURRIED:%[0-9]+]] : $@convention(objc_method) (@opened({{.*}}) AnyObject) -> ()):
   // CHECK:   [[OBJ_SELF_COPY:%.*]] = copy_value [[OBJ_SELF]]
   // CHECK:   [[PARTIAL:%[0-9]+]] = partial_apply [callee_guaranteed] [[UNCURRIED]]([[OBJ_SELF_COPY]]) : $@convention(objc_method) (@opened({{.*}}) AnyObject) -> ()
   // CHECK:   [[THUNK_PAYLOAD:%.*]] = init_enum_data_addr [[OPT_TMP]]
@@ -151,7 +151,7 @@
   // CHECK:   [[OPTTEMP:%.*]] = alloc_stack $Optional<Int>
   // CHECK:   dynamic_method_br [[RAWOBJ_SELF]] : $@opened({{.*}}) AnyObject, #X.value!getter.1.foreign, bb1, bb2
 
-  // CHECK: bb1([[METHOD:%[0-9]+]] : @trivial $@convention(objc_method) (@opened({{.*}}) AnyObject) -> Int):
+  // CHECK: bb1([[METHOD:%[0-9]+]] : $@convention(objc_method) (@opened({{.*}}) AnyObject) -> Int):
   // CHECK:   [[RAWOBJ_SELF_COPY:%.*]] = copy_value [[RAWOBJ_SELF]]
   // CHECK:   [[BOUND_METHOD:%[0-9]+]] = partial_apply [callee_guaranteed] [[METHOD]]([[RAWOBJ_SELF_COPY]]) : $@convention(objc_method) (@opened({{.*}}) AnyObject) -> Int
   // CHECK:   [[B:%.*]] = begin_borrow [[BOUND_METHOD]]
@@ -180,7 +180,7 @@
   // GUARANTEED:   [[OPTTEMP:%.*]] = alloc_stack $Optional<Int>
   // GUARANTEED:   dynamic_method_br [[RAWOBJ_SELF]] : $@opened({{.*}}) AnyObject, #X.value!getter.1.foreign, bb1, bb2
 
-  // GUARANTEED: bb1([[METHOD:%[0-9]+]] : @trivial $@convention(objc_method) (@opened({{.*}}) AnyObject) -> Int):
+  // GUARANTEED: bb1([[METHOD:%[0-9]+]] : $@convention(objc_method) (@opened({{.*}}) AnyObject) -> Int):
   // GUARANTEED:   [[RAWOBJ_SELF_COPY:%.*]] = copy_value [[RAWOBJ_SELF]]
   // GUARANTEED:   [[BOUND_METHOD:%[0-9]+]] = partial_apply [callee_guaranteed] [[METHOD]]([[RAWOBJ_SELF_COPY]])
   // GUARANTEED:   [[BEGIN_BORROW:%.*]] = begin_borrow [[BOUND_METHOD]]
@@ -196,7 +196,7 @@
 func direct_to_subscript(_ obj: AnyObject, i: Int) {
   var obj = obj
   var i = i
-  // CHECK: bb0([[OBJ:%[0-9]+]] : @guaranteed $AnyObject, [[I:%[0-9]+]] : @trivial $Int):
+  // CHECK: bb0([[OBJ:%[0-9]+]] : @guaranteed $AnyObject, [[I:%[0-9]+]] : $Int):
   // CHECK:   [[OBJ_BOX:%[0-9]+]] = alloc_box ${ var AnyObject }
   // CHECK:   [[PBOBJ:%[0-9]+]] = project_box [[OBJ_BOX]]
   // CHECK:   [[OBJ_COPY:%.*]] = copy_value [[OBJ]]
@@ -214,7 +214,7 @@
   // CHECK:   [[OPTTEMP:%.*]] = alloc_stack $Optional<Int>
   // CHECK:   dynamic_method_br [[OBJ_REF]] : $@opened({{.*}}) AnyObject, #X.subscript!getter.1.foreign, bb1, bb2
 
-  // CHECK: bb1([[GETTER:%[0-9]+]] : @trivial $@convention(objc_method) (Int, @opened({{.*}}) AnyObject) -> Int):
+  // CHECK: bb1([[GETTER:%[0-9]+]] : $@convention(objc_method) (Int, @opened({{.*}}) AnyObject) -> Int):
   // CHECK:   [[OBJ_REF_COPY:%.*]] = copy_value [[OBJ_REF]]
   // CHECK:   [[GETTER_WITH_SELF:%[0-9]+]] = partial_apply [callee_guaranteed] [[GETTER]]([[OBJ_REF_COPY]]) : $@convention(objc_method) (Int, @opened({{.*}}) AnyObject) -> Int
   // CHECK:   [[B:%.*]] = begin_borrow [[GETTER_WITH_SELF]]
@@ -230,7 +230,7 @@
 // CHECK: } // end sil function '$s14dynamic_lookup19direct_to_subscript{{[_0-9a-zA-Z]*}}F'
 
 // GUARANTEED-LABEL: sil hidden @$s14dynamic_lookup19direct_to_subscript{{[_0-9a-zA-Z]*}}F
-  // GUARANTEED: bb0([[OBJ:%[0-9]+]] : @guaranteed $AnyObject, [[I:%[0-9]+]] : @trivial $Int):
+  // GUARANTEED: bb0([[OBJ:%[0-9]+]] : @guaranteed $AnyObject, [[I:%[0-9]+]] : $Int):
   // GUARANTEED:   [[OBJ_BOX:%[0-9]+]] = alloc_box ${ var AnyObject }
   // GUARANTEED:   [[PBOBJ:%[0-9]+]] = project_box [[OBJ_BOX]]
   // GUARANTEED:   [[OBJ_COPY:%.*]] = copy_value [[OBJ]]
@@ -248,7 +248,7 @@
   // GUARANTEED:   [[OPTTEMP:%.*]] = alloc_stack $Optional<Int>
   // GUARANTEED:   dynamic_method_br [[OBJ_REF]] : $@opened({{.*}}) AnyObject, #X.subscript!getter.1.foreign, bb1, bb2
 
-  // GUARANTEED: bb1([[GETTER:%[0-9]+]] : @trivial $@convention(objc_method) (Int, @opened({{.*}}) AnyObject) -> Int):
+  // GUARANTEED: bb1([[GETTER:%[0-9]+]] : $@convention(objc_method) (Int, @opened({{.*}}) AnyObject) -> Int):
   // GUARANTEED:   [[OBJ_REF_COPY:%.*]] = copy_value [[OBJ_REF]]
   // GUARANTEED:   [[GETTER_WITH_SELF:%[0-9]+]] = partial_apply [callee_guaranteed] [[GETTER]]([[OBJ_REF_COPY]])
   // GUARANTEED:   [[BORROW:%.*]] = begin_borrow [[GETTER_WITH_SELF]]
@@ -264,7 +264,7 @@
 func opt_to_subscript(_ obj: AnyObject, i: Int) {
   var obj = obj
   var i = i
-  // CHECK: bb0([[OBJ:%[0-9]+]] : @guaranteed $AnyObject, [[I:%[0-9]+]] : @trivial $Int):
+  // CHECK: bb0([[OBJ:%[0-9]+]] : @guaranteed $AnyObject, [[I:%[0-9]+]] : $Int):
   // CHECK:   [[OBJ_BOX:%[0-9]+]] = alloc_box ${ var AnyObject }
   // CHECK:   [[PBOBJ:%[0-9]+]] = project_box [[OBJ_BOX]]
   // CHECK:   [[OBJ_COPY:%.*]] = copy_value [[OBJ]]
@@ -280,7 +280,7 @@
   // CHECK:   [[OPTTEMP:%.*]] = alloc_stack $Optional<Int>
   // CHECK:   dynamic_method_br [[OBJ_REF]] : $@opened({{.*}}) AnyObject, #X.subscript!getter.1.foreign, bb1, bb2
 
-  // CHECK: bb1([[GETTER:%[0-9]+]] : @trivial $@convention(objc_method) (Int, @opened({{.*}}) AnyObject) -> Int):
+  // CHECK: bb1([[GETTER:%[0-9]+]] : $@convention(objc_method) (Int, @opened({{.*}}) AnyObject) -> Int):
   // CHECK:   [[OBJ_REF_COPY:%.*]] = copy_value [[OBJ_REF]]
   // CHECK:   [[GETTER_WITH_SELF:%[0-9]+]] = partial_apply [callee_guaranteed] [[GETTER]]([[OBJ_REF_COPY]]) : $@convention(objc_method) (Int, @opened({{.*}}) AnyObject) -> Int
   // CHECK:   [[B:%.*]] = begin_borrow [[GETTER_WITH_SELF]]
@@ -321,7 +321,7 @@
 // CHECK:        [[BOX:%.*]] = alloc_stack $Optional<Juice>
 // CHECK:        dynamic_method_br [[SELF:%.*]] : $@opened("{{.*}}") Fruit, #Fruit.juice!getter.1.foreign, bb1, bb2
 
-// CHECK: bb1([[FN:%.*]] : @trivial $@convention(objc_method) (@opened("{{.*}}") Fruit) -> @autoreleased Juice):
+// CHECK: bb1([[FN:%.*]] : $@convention(objc_method) (@opened("{{.*}}") Fruit) -> @autoreleased Juice):
 // CHECK:   [[SELF_COPY:%.*]] = copy_value [[SELF]]
 // CHECK:   [[METHOD:%.*]] = partial_apply [callee_guaranteed] [[FN]]([[SELF_COPY]]) : $@convention(objc_method) (@opened("{{.*}}") Fruit) -> @autoreleased Juice
 // CHECK:   [[B:%.*]] = begin_borrow [[METHOD]]
diff --git a/test/SILGen/dynamic_self.swift b/test/SILGen/dynamic_self.swift
index fcc2ec3..7fe93d4 100644
--- a/test/SILGen/dynamic_self.swift
+++ b/test/SILGen/dynamic_self.swift
@@ -17,7 +17,7 @@
   func f() -> Self { return self }
 
   // CHECK-LABEL: sil hidden @$s12dynamic_self1XC7factory{{[_0-9a-zA-Z]*}}FZ : $@convention(method) (Int, @thick X.Type) -> @owned X
-  // CHECK: bb0([[I:%[0-9]+]] : @trivial $Int, [[SELF:%[0-9]+]] : @trivial $@thick X.Type):
+  // CHECK: bb0([[I:%[0-9]+]] : $Int, [[SELF:%[0-9]+]] : $@thick X.Type):
   // CHECK: [[DYNAMIC_SELF:%[0-9]+]] = unchecked_trivial_bit_cast [[SELF]] : $@thick X.Type to $@thick @dynamic_self X.Type
   // CHECK: [[STATIC_SELF:%[0-9]+]] = upcast [[DYNAMIC_SELF]] : $@thick @dynamic_self X.Type to $@thick X.Type
   // CHECK: [[CTOR:%[0-9]+]] = class_method [[STATIC_SELF]] : $@thick X.Type, #X.init!allocator.1 : (X.Type) -> (Int) -> X, $@convention(method) (Int, @thick X.Type) -> @owned X
@@ -61,7 +61,7 @@
 
 // CHECK-LABEL: sil hidden @$s12dynamic_self21testArchetypeDispatch{{[_0-9a-zA-Z]*}}F : $@convention(thin) <T where T : P> (@in_guaranteed T) -> ()
 func testArchetypeDispatch<T: P>(t: T) {
-  // CHECK: bb0([[T:%[0-9]+]] : @trivial $*T):
+  // CHECK: bb0([[T:%[0-9]+]] : $*T):
   // CHECK:   [[T_RESULT:%[0-9]+]] = alloc_stack $T
   // CHECK:   [[ARCHETYPE_F:%[0-9]+]] = witness_method $T, #P.f!1 : {{.*}} : $@convention(witness_method: P) <τ_0_0 where τ_0_0 : P> (@in_guaranteed τ_0_0) -> @out τ_0_0
   // CHECK:   [[SELF_RESULT:%[0-9]+]] = apply [[ARCHETYPE_F]]<T>([[T_RESULT]], [[T]]) : $@convention(witness_method: P) <τ_0_0 where τ_0_0 : P> (@in_guaranteed τ_0_0) -> @out τ_0_0
@@ -70,7 +70,7 @@
 
 // CHECK-LABEL: sil hidden @$s12dynamic_self23testExistentialDispatch{{[_0-9a-zA-Z]*}}F
 func testExistentialDispatch(p: P) {
-// CHECK: bb0([[P:%[0-9]+]] : @trivial $*P):
+// CHECK: bb0([[P:%[0-9]+]] : $*P):
 // CHECK:   [[PCOPY_ADDR:%[0-9]+]] = open_existential_addr immutable_access [[P]] : $*P to $*@opened([[N:".*"]]) P
 // CHECK:   [[P_RESULT:%[0-9]+]] = alloc_stack $P
 // CHECK:   [[P_F_METHOD:%[0-9]+]] = witness_method $@opened([[N]]) P, #P.f!1 : {{.*}}, [[PCOPY_ADDR]]{{.*}} : $@convention(witness_method: P) <τ_0_0 where τ_0_0 : P> (@in_guaranteed τ_0_0) -> @out τ_0_0
@@ -100,7 +100,7 @@
 func testAnyObjectDispatch(o: AnyObject) {
   // CHECK: dynamic_method_br [[O_OBJ:%[0-9]+]] : $@opened({{.*}}) AnyObject, #ObjC.method!1.foreign, bb1, bb2
 
-  // CHECK: bb1([[METHOD:%[0-9]+]] : @trivial $@convention(objc_method) (@opened({{.*}}) AnyObject) -> @autoreleased AnyObject):
+  // CHECK: bb1([[METHOD:%[0-9]+]] : $@convention(objc_method) (@opened({{.*}}) AnyObject) -> @autoreleased AnyObject):
   // CHECK:   [[O_OBJ_COPY:%.*]] = copy_value [[O_OBJ]]
   // CHECK:   [[VAR_9:%[0-9]+]] = partial_apply [callee_guaranteed] [[METHOD]]([[O_OBJ_COPY]]) : $@convention(objc_method) (@opened({{.*}}) AnyObject) -> @autoreleased AnyObject
   var _ = o.method
@@ -115,7 +115,7 @@
 
 // CHECK-LABEL: sil hidden @$s12dynamic_self12testObjCInit{{[_0-9a-zA-Z]*}}F : $@convention(thin) (@thick ObjCInit.Type) -> ()
 func testObjCInit(meta: ObjCInit.Type) {
-// CHECK: bb0([[THICK_META:%[0-9]+]] : @trivial $@thick ObjCInit.Type):
+// CHECK: bb0([[THICK_META:%[0-9]+]] : $@thick ObjCInit.Type):
 // CHECK:   [[OBJC_META:%[0-9]+]] = thick_to_objc_metatype [[THICK_META]] : $@thick ObjCInit.Type to $@objc_metatype ObjCInit.Type
 // CHECK:   [[OBJ:%[0-9]+]] = alloc_ref_dynamic [objc] [[OBJC_META]] : $@objc_metatype ObjCInit.Type, $ObjCInit
 // CHECK:   [[INIT:%[0-9]+]] = objc_method [[OBJ]] : $ObjCInit, #ObjCInit.init!initializer.1.foreign : (ObjCInit.Type) -> () -> ObjCInit, $@convention(objc_method) (@owned ObjCInit) -> @owned ObjCInit
@@ -276,7 +276,7 @@
 
   // CHECK-LABEL: sil hidden @$s12dynamic_self07FactoryC0C11newInstanceACXDyFZ : $@convention(method) (@thick FactoryFactory.Type) -> @owned FactoryFactory
   static func newInstance() -> Self {
-    // CHECK: bb0(%0 : @trivial $@thick FactoryFactory.Type):
+    // CHECK: bb0(%0 : $@thick FactoryFactory.Type):
 
     // CHECK: [[DYNAMIC_SELF:%.*]] = unchecked_trivial_bit_cast %0 : $@thick FactoryFactory.Type to $@thick @dynamic_self FactoryFactory.Type
     // CHECK: [[METATYPE:%.*]] = value_metatype $@thick @dynamic_self FactoryFactory.Type.Type, [[DYNAMIC_SELF]] : $@thick @dynamic_self FactoryFactory.Type
diff --git a/test/SILGen/dynamically_replaceable.swift b/test/SILGen/dynamically_replaceable.swift
index 6a89342..82a54c9 100644
--- a/test/SILGen/dynamically_replaceable.swift
+++ b/test/SILGen/dynamically_replaceable.swift
@@ -107,7 +107,7 @@
 // CHECK:   apply [[ORIG]]([[ARG]]) : $@convention(method) (@guaranteed Klass) -> Int
 
 // CHECK-LABEL: sil hidden [dynamic_replacement_for "$s23dynamically_replaceable5KlassC08dynamic_B4_varSivs"] @$s23dynamically_replaceable5KlassC1rSivs : $@convention(method) (Int, @guaranteed Klass) -> () {
-// CHECK: bb0({{.*}} : @trivial $Int, [[SELF:%.*]] : @guaranteed $Klass):
+// CHECK: bb0({{.*}} : $Int, [[SELF:%.*]] : @guaranteed $Klass):
 // CHECK:   [[ORIG:%.*]] = prev_dynamic_function_ref @$s23dynamically_replaceable5KlassC1rSivs
 // CHECK:   apply [[ORIG]]({{.*}}, [[SELF]]) : $@convention(method)
   @_dynamicReplacement(for: dynamic_replaceable_var)
@@ -121,12 +121,12 @@
   }
 
 // CHECK-LABEL: sil hidden [dynamic_replacement_for "$s23dynamically_replaceable5KlassCyS2icig"] @$s23dynamically_replaceable5KlassC1xS2i_tcig
-// CHECK: bb0({{.*}} : @trivial $Int, [[SELF:%.*]] : @guaranteed $Klass):
+// CHECK: bb0({{.*}} : $Int, [[SELF:%.*]] : @guaranteed $Klass):
 // CHECK:   [[ORIG:%.*]] = prev_dynamic_function_ref @$s23dynamically_replaceable5KlassC1xS2i_tcig
 // CHECK:   apply [[ORIG]]({{.*}}, [[SELF]]) : $@convention(method) (Int, @guaranteed Klass) -> Int
 
 // CHECK-LABEL: sil hidden [dynamic_replacement_for "$s23dynamically_replaceable5KlassCyS2icis"] @$s23dynamically_replaceable5KlassC1xS2i_tcis
-// CHECK: bb0({{.*}} : @trivial $Int, {{.*}} : @trivial $Int, [[SELF:%.*]] : @guaranteed $Klass):
+// CHECK: bb0({{.*}} : $Int, {{.*}} : $Int, [[SELF:%.*]] : @guaranteed $Klass):
 // CHECK:   [[ORIG:%.*]] = prev_dynamic_function_ref @$s23dynamically_replaceable5KlassC1xS2i_tcis
 // CHECK:   apply [[ORIG]]({{.*}}, {{.*}}, [[SELF]]) : $@convention(method) (Int, Int, @guaranteed Klass) -> ()
 
@@ -159,12 +159,12 @@
   }
 
 // CHECK-LABEL: sil hidden [dynamic_replacement_for "$s23dynamically_replaceable6StruktV08dynamic_B4_varSivg"] @$s23dynamically_replaceable6StruktV1rSivg
-// CHECK: bb0([[ARG:%.*]] : @trivial $Strukt):
+// CHECK: bb0([[ARG:%.*]] : $Strukt):
 // CHECK:   [[ORIG:%.*]] = prev_dynamic_function_ref @$s23dynamically_replaceable6StruktV1rSivg
 // CHECK:   apply [[ORIG]]([[ARG]]) : $@convention(method) (Strukt) -> Int
 
 // CHECK-LABEL: sil hidden [dynamic_replacement_for "$s23dynamically_replaceable6StruktV08dynamic_B4_varSivs"] @$s23dynamically_replaceable6StruktV1rSivs
-// CHECK: bb0({{.*}} : @trivial $Int, [[ARG:%.*]] : @trivial $*Strukt):
+// CHECK: bb0({{.*}} : $Int, [[ARG:%.*]] : $*Strukt):
 // CHECK:   [[BA:%.*]] = begin_access [modify] [unknown] [[ARG]] : $*Strukt
 // CHECK:   [[ORIG:%.*]] = prev_dynamic_function_ref @$s23dynamically_replaceable6StruktV1rSivs
 // CHECK:   apply [[ORIG]]({{.*}}, [[BA]]) : $@convention(method) (Int, @inout Strukt) -> ()
@@ -180,12 +180,12 @@
   }
 
 // CHECK-LABEL: sil hidden [dynamic_replacement_for "$s23dynamically_replaceable6StruktVyS2icig"] @$s23dynamically_replaceable6StruktV1xS2i_tcig
-// CHECK: bb0({{.*}} : @trivial $Int, [[SELF:%.*]] : @trivial $Strukt):
+// CHECK: bb0({{.*}} : $Int, [[SELF:%.*]] : $Strukt):
 // CHECK:   [[ORIG:%.*]] = prev_dynamic_function_ref @$s23dynamically_replaceable6StruktV1xS2i_tcig
 // CHECK:   apply [[ORIG]]({{.*}}, [[SELF]]) : $@convention(method) (Int, Strukt) -> Int
 
 // CHECK-LABEL: sil hidden [dynamic_replacement_for "$s23dynamically_replaceable6StruktVyS2icis"] @$s23dynamically_replaceable6StruktV1xS2i_tcis
-// CHECK: bb0({{.*}} : @trivial $Int, {{.*}} : @trivial $Int, [[SELF:%.*]] : @trivial $*Strukt):
+// CHECK: bb0({{.*}} : $Int, {{.*}} : $Int, [[SELF:%.*]] : $*Strukt):
 // CHECK:   [[BA:%.*]] = begin_access [modify] [unknown] [[SELF]] : $*Strukt
 // CHECK:   [[ORIG:%.*]] = prev_dynamic_function_ref @$s23dynamically_replaceable6StruktV1xS2i_tcis
 // CHECK:   apply [[ORIG]]({{.*}}, {{.*}}, [[BA]]) : $@convention(method) (Int, Int, @inout Strukt) -> ()
diff --git a/test/SILGen/enum.swift b/test/SILGen/enum.swift
index 6dfc948..eaa3572 100644
--- a/test/SILGen/enum.swift
+++ b/test/SILGen/enum.swift
@@ -115,7 +115,7 @@
 // CHECK-NEXT: }
 
 // CHECK-LABEL: sil shared [transparent] @$ss11AddressOnlyO4mereyABs1P_pcABmF : $@convention
-// CHECK: bb0([[ARG0:%.*]] : @trivial $*AddressOnly, [[ARG1:%.*]] : @trivial $*P, [[ARG2:%.*]] : @trivial $@thin AddressOnly.Type):
+// CHECK: bb0([[ARG0:%.*]] : $*AddressOnly, [[ARG1:%.*]] : $*P, [[ARG2:%.*]] : $@thin AddressOnly.Type):
 // CHECK:        [[RET_DATA:%.*]] = init_enum_data_addr [[ARG0]] : $*AddressOnly, #AddressOnly.mere!enumelt.1
 // CHECK-NEXT:   copy_addr [take] [[ARG1]] to [initialization] [[RET_DATA]] : $*P
 // CHECK-NEXT:   inject_enum_addr [[ARG0]] : $*AddressOnly, #AddressOnly.mere!enumelt.1
@@ -189,7 +189,7 @@
 
 // Foo.A(_:)
 // CHECK-LABEL: sil shared [transparent] @$ss3FooO1AyABs1P_p_SStcABmF
-// CHECK: bb0([[ARG0:%.*]] : @trivial $*Foo, [[ARG1:%.*]] : @trivial $*P, [[ARG2:%.*]] : @owned $String, [[ARG3:%.*]] : @trivial $@thin Foo.Type):
+// CHECK: bb0([[ARG0:%.*]] : $*Foo, [[ARG1:%.*]] : $*P, [[ARG2:%.*]] : @owned $String, [[ARG3:%.*]] : $@thin Foo.Type):
 // CHECK:         [[PAYLOAD:%.*]] = init_enum_data_addr [[ARG0]] : $*Foo, #Foo.A!enumelt.1
 // CHECK-NEXT:    [[LEFT:%.*]] = tuple_element_addr [[PAYLOAD]] : $*(P, String), 0
 // CHECK-NEXT:    [[RIGHT:%.*]] = tuple_element_addr [[PAYLOAD]] : $*(P, String), 1
diff --git a/test/SILGen/errors.swift b/test/SILGen/errors.swift
index 0cd08ce..1191377 100644
--- a/test/SILGen/errors.swift
+++ b/test/SILGen/errors.swift
@@ -53,7 +53,7 @@
 }
 
 // CHECK:    sil hidden @$s6errors16all_together_nowyAA3CatCSbF : $@convention(thin) (Bool) -> @owned Cat {
-// CHECK:    bb0(%0 : @trivial $Bool):
+// CHECK:    bb0(%0 : $Bool):
 // CHECK:      [[RET_TEMP:%.*]] = alloc_stack $Cat
 
 //   Branch on the flag.
@@ -79,7 +79,7 @@
 // CHECK-NEXT: store [[T0]] to [init] [[ARG_TEMP]]
 // CHECK:      [[DR_FN:%.*]] = function_ref @$s6errors11dont_return{{.*}} :
 // CHECK-NEXT: try_apply [[DR_FN]]<Cat>([[RET_TEMP]], [[ARG_TEMP]]) : $@convention(thin) <τ_0_0> (@in_guaranteed τ_0_0) -> (@out τ_0_0, @error Error), normal [[DR_NORMAL:bb[0-9]+]], error [[DR_ERROR:bb[0-9]+]]
-// CHECK:    [[DR_NORMAL]]({{%.*}} : @trivial $()):
+// CHECK:    [[DR_NORMAL]]({{%.*}} : $()):
 // CHECK-NEXT: destroy_addr [[ARG_TEMP]]
 // CHECK-NEXT: dealloc_stack [[ARG_TEMP]]
 // CHECK-NEXT: [[T0:%.*]] = load [take] [[RET_TEMP]] : $*Cat
@@ -316,7 +316,7 @@
 // CHECK:      [[SELF:%.*]] = load [trivial] %0 : $*DoomedStruct
 // CHECK:      [[T0:%.*]] = function_ref @$s6errors12DoomedStructV5checkyyKF : $@convention(method) (DoomedStruct) -> @error Error
 // CHECK-NEXT: try_apply [[T0]]([[SELF]])
-// CHECK:    bb1([[T0:%.*]] : @trivial $()):
+// CHECK:    bb1([[T0:%.*]] : $()):
 // CHECK:      [[T0:%.*]] = tuple ()
 // CHECK:      return [[T0]] : $()
 // CHECK:    bb2([[T0:%.*]] : @owned $Error):
@@ -330,7 +330,7 @@
 // CHECK:      [[BORROWED_SELF:%.*]] = load_borrow %0
 // CHECK:      [[T0:%.*]] = class_method [[BORROWED_SELF]] : $DoomedClass, #DoomedClass.check!1 : (DoomedClass) -> () throws -> (), $@convention(method) (@guaranteed DoomedClass) -> @error Error
 // CHECK-NEXT: try_apply [[T0]]([[BORROWED_SELF]])
-// CHECK:    bb1([[T0:%.*]] : @trivial $()):
+// CHECK:    bb1([[T0:%.*]] : $()):
 // CHECK:      [[T0:%.*]] = tuple ()
 // CHECK:      end_borrow [[BORROWED_SELF]]
 // CHECK:      return [[T0]] : $()
@@ -369,9 +369,9 @@
   return try create(fn)
 }
 // CHECK-LABEL: sil shared [transparent] [serializable] [reabstraction_thunk] @$sSis5Error_pIgdzo_SisAA_pIegrzo_TR : $@convention(thin) (@noescape @callee_guaranteed () -> (Int, @error Error)) -> (@out Int, @error Error)
-// CHECK: bb0(%0 : @trivial $*Int, %1 : @trivial $@noescape @callee_guaranteed () -> (Int, @error Error)):
+// CHECK: bb0(%0 : $*Int, %1 : $@noescape @callee_guaranteed () -> (Int, @error Error)):
 // CHECK:   try_apply %1()
-// CHECK: bb1([[T0:%.*]] : @trivial $Int):
+// CHECK: bb1([[T0:%.*]] : $Int):
 // CHECK:   store [[T0]] to [trivial] %0 : $*Int
 // CHECK:   [[T0:%.*]] = tuple ()
 // CHECK:   return [[T0]]
@@ -384,7 +384,7 @@
   try! createInt(fn)
 }
 // CHECK-LABEL: sil hidden @$s6errors12testForceTryyySiyXEF : $@convention(thin) (@noescape @callee_guaranteed () -> Int) -> ()
-// CHECK: bb0([[ARG:%.*]] : @trivial $@noescape @callee_guaranteed () -> Int):
+// CHECK: bb0([[ARG:%.*]] : $@noescape @callee_guaranteed () -> Int):
 // CHECK: [[FUNC:%.*]] = function_ref @$s6errors9createIntyySiyXEKF : $@convention(thin) (@noescape @callee_guaranteed () -> Int) -> @error Error
 // CHECK: try_apply [[FUNC]]([[ARG]])
 // CHECK: return
@@ -442,7 +442,7 @@
 // CHECK: debug_value undef : $Error, var, name "$error", argno 1
 // CHECK:   %1 = function_ref @$s6errors13preferredFoodAA03CatC0OyKF : $@convention(thin) () -> (CatFood, @error Error)
 // CHECK:   try_apply %1() : $@convention(thin) () -> (CatFood, @error Error), normal bb1, error bb5
-// CHECK: bb1([[VAL:%.*]] : @trivial $CatFood):
+// CHECK: bb1([[VAL:%.*]] : $CatFood):
 // CHECK:   switch_enum [[VAL]] : $CatFood, case #CatFood.Canned!enumelt: bb2, case #CatFood.Dry!enumelt: bb3
 // CHECK: bb5([[ERROR:%.*]] : @owned $Error)
 // CHECK:   throw [[ERROR]] : $Error
@@ -458,7 +458,7 @@
 }
 // errors.getHungryCat throws (errors.CatFood) -> errors.Cat
 // CHECK-LABEL: sil hidden @$s6errors12getHungryCatyAA0D0CAA0D4FoodOKF : $@convention(thin) (CatFood) -> (@owned Cat, @error Error)
-// CHECK: bb0(%0 : @trivial $CatFood):
+// CHECK: bb0(%0 : $CatFood):
 // CHECK:   debug_value undef : $Error, var, name "$error", argno 2
 // CHECK:   switch_enum %0 : $CatFood, case #CatFood.Canned!enumelt: bb1, case #CatFood.Dry!enumelt: bb3
 // CHECK: bb1:
@@ -516,7 +516,7 @@
 //   Complete the call and return.
 // CHECK:         [[TAKE_FN:%.*]] = function_ref @$s6errors14take_many_catsyyAA3CatCd_tKF : $@convention(thin) (@guaranteed Array<Cat>) -> @error Error
 // CHECK-NEXT:    try_apply [[TAKE_FN]]([[ARRAY]]) : $@convention(thin) (@guaranteed Array<Cat>) -> @error Error, normal [[NORM_CALL:bb[0-9]+]], error [[ERR_CALL:bb[0-9]+]]
-// CHECK:       [[NORM_CALL]]([[T0:%.*]] : @trivial $()):
+// CHECK:       [[NORM_CALL]]([[T0:%.*]] : $()):
 // CHECK-NEXT:    destroy_value [[ARRAY]]
 // CHECK-NEXT:    [[T0:%.*]] = tuple ()
 // CHECK-NEXT:    return
@@ -652,7 +652,7 @@
   try b[name].support()
 }
 // CHECK:    sil hidden @$s6errors16supportStructure_4nameyAA6BridgeVz_SStKF : $@convention(thin) (@inout Bridge, @guaranteed String) -> @error Error {
-// CHECK:    bb0([[ARG1:%.*]] : @trivial $*Bridge, [[ARG2:%.*]] : @guaranteed $String):
+// CHECK:    bb0([[ARG1:%.*]] : $*Bridge, [[ARG2:%.*]] : @guaranteed $String):
 // CHECK:      [[INDEX_COPY_1:%.*]] = copy_value [[ARG2]] : $String
 // CHECK-NEXT: [[WRITE:%.*]] = begin_access [modify] [unknown] [[ARG1]] : $*Bridge
 // CHECK-NEXT: [[INDEX_COPY_2:%.*]] = copy_value [[INDEX_COPY_1]] : $String
@@ -755,12 +755,12 @@
 }
 
 // CHECK-LABEL: sil hidden @$s6errors26testOptionalTryAddressOnly{{.*}}F
-// CHECK: bb0(%0 : @trivial $*T):
+// CHECK: bb0(%0 : $*T):
 // CHECK: [[BOX:%.+]] = alloc_stack $Optional<T>
 // CHECK-NEXT: [[BOX_DATA:%.+]] = init_enum_data_addr [[BOX]] : $*Optional<T>, #Optional.some!enumelt.1
 // CHECK: [[FN:%.+]] = function_ref @$s6errors11dont_return{{.*}}F
 // CHECK-NEXT: try_apply [[FN]]<T>([[BOX_DATA]], %0) : $@convention(thin) <τ_0_0> (@in_guaranteed τ_0_0) -> (@out τ_0_0, @error Error), normal [[SUCCESS:[^ ]+]], error [[CLEANUPS:[^ ]+]],
-// CHECK: [[SUCCESS]]({{%.+}} : @trivial $()):
+// CHECK: [[SUCCESS]]({{%.+}} : $()):
 // CHECK-NEXT: inject_enum_addr [[BOX]] : $*Optional<T>, #Optional.some!enumelt.1
 // CHECK-NEXT: br [[DONE:[^ ]+]],
 // CHECK: [[DONE]]:
@@ -779,13 +779,13 @@
 }
 
 // CHECK-LABEL: sil hidden @$s6errors29testOptionalTryAddressOnlyVar{{.*}}F
-// CHECK: bb0(%0 : @trivial $*T):
+// CHECK: bb0(%0 : $*T):
 // CHECK: [[BOX:%.+]] = alloc_box $<τ_0_0> { var Optional<τ_0_0> } <T>
 // CHECK-NEXT: [[PB:%.*]] = project_box [[BOX]]
 // CHECK-NEXT: [[BOX_DATA:%.+]] = init_enum_data_addr [[PB]] : $*Optional<T>, #Optional.some!enumelt.1
 // CHECK: [[FN:%.+]] = function_ref @$s6errors11dont_return{{.*}}F
 // CHECK-NEXT: try_apply [[FN]]<T>([[BOX_DATA]], %0) : $@convention(thin) <τ_0_0> (@in_guaranteed τ_0_0) -> (@out τ_0_0, @error Error), normal [[SUCCESS:[^ ]+]], error [[CLEANUPS:[^ ]+]],
-// CHECK: [[SUCCESS]]({{%.+}} : @trivial $()):
+// CHECK: [[SUCCESS]]({{%.+}} : $()):
 // CHECK-NEXT: inject_enum_addr [[PB]] : $*Optional<T>, #Optional.some!enumelt.1
 // CHECK-NEXT: br [[DONE:[^ ]+]],
 // CHECK: [[DONE]]:
@@ -858,7 +858,7 @@
 }
 
 // CHECK-LABEL: sil hidden @$s6errors36testOptionalTryNeverFailsAddressOnly{{.*}}F
-// CHECK: bb0(%0 : @trivial $*T):
+// CHECK: bb0(%0 : $*T):
 // CHECK:   [[BOX:%.+]] = alloc_stack $Optional<T>
 // CHECK-NEXT:   [[BOX_DATA:%.+]] = init_enum_data_addr [[BOX]] : $*Optional<T>, #Optional.some!enumelt.1
 // CHECK-NEXT:   copy_addr %0 to [initialization] [[BOX_DATA]] : $*T
@@ -874,7 +874,7 @@
 }
 
 // CHECK-LABEL: sil hidden @$s6errors39testOptionalTryNeverFailsAddressOnlyVar{{.*}}F
-// CHECK: bb0(%0 : @trivial $*T):
+// CHECK: bb0(%0 : $*T):
 // CHECK:   [[BOX:%.+]] = alloc_box $<τ_0_0> { var Optional<τ_0_0> } <T>
 // CHECK-NEXT:   [[PB:%.*]] = project_box [[BOX]]
 // CHECK-NEXT:   [[BOX_DATA:%.+]] = init_enum_data_addr [[PB]] : $*Optional<T>, #Optional.some!enumelt.1
diff --git a/test/SILGen/existential_erasure.swift b/test/SILGen/existential_erasure.swift
index f57fa1c..176ebfb 100644
--- a/test/SILGen/existential_erasure.swift
+++ b/test/SILGen/existential_erasure.swift
@@ -41,13 +41,13 @@
 
 // CHECK-LABEL: sil hidden @$s19existential_erasure19openExistentialToP1yyAA1P_pKF
 func openExistentialToP1(_ p: P) throws {
-// CHECK: bb0(%0 : @trivial $*P):
+// CHECK: bb0(%0 : $*P):
 // CHECK:   [[OPEN:%.*]] = open_existential_addr immutable_access %0 : $*P to $*[[OPEN_TYPE:@opened\(.*\) P]]
 // CHECK:   [[RESULT:%.*]] = alloc_stack $P
 // CHECK:   [[FUNC:%.*]] = function_ref @$s19existential_erasure12throwingFuncSbyKF
 // CHECK:   try_apply [[FUNC]]()
 //
-// CHECK: bb1([[SUCCESS:%.*]] : @trivial $Bool):
+// CHECK: bb1([[SUCCESS:%.*]] : $Bool):
 // CHECK:   [[METHOD:%.*]] = witness_method $[[OPEN_TYPE]], #P.downgrade!1 : {{.*}}, [[OPEN]]
 // CHECK:   [[RESULT_ADDR:%.*]] = init_existential_addr [[RESULT]] : $*P, $[[OPEN_TYPE]]
 // CHECK:   apply [[METHOD]]<[[OPEN_TYPE]]>([[RESULT_ADDR]], [[SUCCESS]], [[OPEN]])
@@ -63,7 +63,7 @@
 
 // CHECK-LABEL: sil hidden @$s19existential_erasure19openExistentialToP2yyAA1P_pKF
 func openExistentialToP2(_ p: P) throws {
-// CHECK: bb0(%0 : @trivial $*P):
+// CHECK: bb0(%0 : $*P):
 // CHECK:   [[OPEN:%.*]] = open_existential_addr immutable_access %0 : $*P to $*[[OPEN_TYPE:@opened\(.*\) P]]
 // CHECK:   [[RESULT:%.*]] = alloc_stack $P
 // CHECK:   [[METHOD:%.*]] = witness_method $[[OPEN_TYPE]], #P.upgrade!1 : {{.*}}, [[OPEN]]
diff --git a/test/SILGen/existential_metatypes.swift b/test/SILGen/existential_metatypes.swift
index 2e3d5f3..6029999 100644
--- a/test/SILGen/existential_metatypes.swift
+++ b/test/SILGen/existential_metatypes.swift
@@ -20,7 +20,7 @@
 }
 
 // CHECK-LABEL: sil hidden @$s21existential_metatypes0A8MetatypeyyAA1P_pF
-// CHECK: bb0([[X:%.*]] : @trivial $*P):
+// CHECK: bb0([[X:%.*]] : $*P):
 func existentialMetatype(_ x: P) {
   // CHECK: [[TYPE1:%.*]] = existential_metatype $@thick P.Type, [[X]]
   let type1 = type(of: x)
diff --git a/test/SILGen/expressions.swift b/test/SILGen/expressions.swift
index 0b2386e..1e8aeb2 100644
--- a/test/SILGen/expressions.swift
+++ b/test/SILGen/expressions.swift
@@ -205,7 +205,7 @@
 
 // CHECK-LABEL: sil hidden @$s11expressions18generic_member_ref{{[_0-9a-zA-Z]*}}F
 func generic_member_ref<T>(_ x: Generic<T>) -> Int {
-  // CHECK: bb0([[XADDR:%[0-9]+]] : @trivial $*Generic<T>):
+  // CHECK: bb0([[XADDR:%[0-9]+]] : $*Generic<T>):
   return x.mono_member
   // CHECK: [[MEMBER_ADDR:%[0-9]+]] = struct_element_addr {{.*}}, #Generic.mono_member
   // CHECK: load [trivial] [[MEMBER_ADDR]]
@@ -214,7 +214,7 @@
 // CHECK-LABEL: sil hidden @$s11expressions24bound_generic_member_ref{{[_0-9a-zA-Z]*}}F
 func bound_generic_member_ref(_ x: Generic<UnicodeScalar>) -> Int {
   var x = x
-  // CHECK: bb0([[XADDR:%[0-9]+]] : @trivial $Generic<Unicode.Scalar>):
+  // CHECK: bb0([[XADDR:%[0-9]+]] : $Generic<Unicode.Scalar>):
   return x.mono_member
   // CHECK: [[MEMBER_ADDR:%[0-9]+]] = struct_element_addr {{.*}}, #Generic.mono_member
   // CHECK: load [trivial] [[MEMBER_ADDR]]
@@ -463,9 +463,9 @@
   // CHECK:   [[READ:%.*]] = begin_access [read] [unknown] [[PBZ]]
   // CHECK:   [[ZVAL:%[0-9]+]] = load [trivial] [[READ]]
   // CHECK:   br [[CONT_B:bb[0-9]+]]([[ZVAL]] : $Int)
-  // CHECK: [[CONT_B]]([[B_RES:%[0-9]+]] : @trivial $Int):
+  // CHECK: [[CONT_B]]([[B_RES:%[0-9]+]] : $Int):
   // CHECK:   br [[CONT_A:bb[0-9]+]]([[B_RES]] : $Int)
-  // CHECK: [[CONT_A]]([[A_RES:%[0-9]+]] : @trivial $Int):
+  // CHECK: [[CONT_A]]([[A_RES:%[0-9]+]] : $Int):
   // CHECK:   return [[A_RES]]
 }
 
@@ -544,7 +544,7 @@
   return type(of: a!)
 }
 // CHECK-LABEL: dontLoadIgnoredLValueForceUnwrap
-// CHECK: bb0(%0 : @trivial $*Optional<NonTrivialStruct>):
+// CHECK: bb0(%0 : $*Optional<NonTrivialStruct>):
 // CHECK-NEXT: debug_value_addr %0
 // CHECK-NEXT: [[READ:%[0-9]+]] = begin_access [read] [unknown] %0
 // CHECK-NEXT: switch_enum_addr [[READ]] : $*Optional<NonTrivialStruct>, case #Optional.some!enumelt.1: bb2, case #Optional.none!enumelt: bb1
@@ -560,7 +560,7 @@
   return type(of: a!!)
 }
 // CHECK-LABEL: dontLoadIgnoredLValueDoubleForceUnwrap
-// CHECK: bb0(%0 : @trivial $*Optional<Optional<NonTrivialStruct>>):
+// CHECK: bb0(%0 : $*Optional<Optional<NonTrivialStruct>>):
 // CHECK-NEXT: debug_value_addr %0
 // CHECK-NEXT: [[READ:%[0-9]+]] = begin_access [read] [unknown] %0
 // CHECK-NEXT: switch_enum_addr [[READ]] : $*Optional<Optional<NonTrivialStruct>>, case #Optional.some!enumelt.1: bb2, case #Optional.none!enumelt: bb1
@@ -581,7 +581,7 @@
   return type(of: a.x!)
 }
 // CHECK-LABEL: loadIgnoredLValueForceUnwrap
-// CHECK: bb0(%0 : @trivial $*NonTrivialStruct):
+// CHECK: bb0(%0 : $*NonTrivialStruct):
 // CHECK-NEXT: debug_value_addr %0
 // CHECK-NEXT: [[READ:%[0-9]+]] = begin_access [read] [unknown] %0
 // CHECK-NEXT: [[BORROW:%[0-9]+]] = load_borrow [[READ]]
@@ -602,7 +602,7 @@
   return type(of: a!.x!)
 }
 // CHECK-LABEL: loadIgnoredLValueThroughForceUnwrap
-// CHECK: bb0(%0 : @trivial $*Optional<NonTrivialStruct>):
+// CHECK: bb0(%0 : $*Optional<NonTrivialStruct>):
 // CHECK-NEXT: debug_value_addr %0
 // CHECK-NEXT: [[READ:%[0-9]+]] = begin_access [read] [unknown] %0
 // CHECK-NEXT: switch_enum_addr [[READ]] : $*Optional<NonTrivialStruct>, case #Optional.some!enumelt.1: bb2, case #Optional.none!enumelt: bb1
@@ -628,7 +628,7 @@
   return type(of: s[keyPath: kp])
 }
 // CHECK-LABEL: evaluateIgnoredKeyPathExpr
-// CHECK: bb0(%0 : @trivial $*NonTrivialStruct, %1 : @guaranteed $WritableKeyPath<NonTrivialStruct, Int>):
+// CHECK: bb0(%0 : $*NonTrivialStruct, %1 : @guaranteed $WritableKeyPath<NonTrivialStruct, Int>):
 // CHECK-NEXT: debug_value_addr %0
 // CHECK-NEXT: debug_value %1
 // CHECK-NEXT: [[KP_TEMP:%[0-9]+]] = copy_value %1
@@ -654,10 +654,10 @@
 
 // <rdar://problem/18851497> Swiftc fails to compile nested destructuring tuple binding
 // CHECK-LABEL: sil hidden @$s11expressions21implodeRecursiveTupleyySi_Sit_SitSgF
-// CHECK: bb0(%0 : @trivial $Optional<((Int, Int), Int)>):
+// CHECK: bb0(%0 : $Optional<((Int, Int), Int)>):
 func implodeRecursiveTuple(_ expr: ((Int, Int), Int)?) {
 
-  // CHECK: bb2([[WHOLE:%.*]] : @trivial $((Int, Int), Int)):
+  // CHECK: bb2([[WHOLE:%.*]] : $((Int, Int), Int)):
   // CHECK-NEXT: ([[X:%[0-9]+]], [[Y:%[0-9]+]]) = destructure_tuple [[WHOLE]]
   // CHECK-NEXT: ([[X0:%[0-9]+]], [[X1:%[0-9]+]]) = destructure_tuple [[X]]
   // CHECK-NEXT: [[X:%[0-9]+]] = tuple ([[X0]] : $Int, [[X1]] : $Int)
diff --git a/test/SILGen/extensions.swift b/test/SILGen/extensions.swift
index 9e43691..cc3bddf 100644
--- a/test/SILGen/extensions.swift
+++ b/test/SILGen/extensions.swift
@@ -43,7 +43,7 @@
 // Extensions of generic types with stored property initializers
 
 // CHECK-LABEL: sil hidden [transparent] @$s10extensions3BoxV1txSgvpfi : $@convention(thin) <T> () -> @out Optional<T>
-// CHECK:      bb0(%0 : @trivial $*Optional<T>):
+// CHECK:      bb0(%0 : $*Optional<T>):
 // CHECK-NEXT: [[METATYPE:%.*]] = metatype $@thin Optional<T>.Type
 // CHECK:      inject_enum_addr %0 : $*Optional<T>, #Optional.none!enumelt
 // CHECK-NEXT: [[RESULT:%.*]] = tuple ()
diff --git a/test/SILGen/foreach.swift b/test/SILGen/foreach.swift
index 789534e..9c77cbd 100644
--- a/test/SILGen/foreach.swift
+++ b/test/SILGen/foreach.swift
@@ -59,7 +59,7 @@
 // CHECK: [[LOOP_DEST]]:
 // CHECK:   switch_enum [[IND_VAR:%.*]] : $Optional<Int>, case #Optional.some!enumelt.1: [[SOME_BB:bb[0-9]+]], case #Optional.none!enumelt: [[NONE_BB:bb[0-9]+]]
 //
-// CHECK: [[SOME_BB]]([[VAR:%.*]] : @trivial $Int):
+// CHECK: [[SOME_BB]]([[VAR:%.*]] : $Int):
 // CHECK:   [[LOOP_END_FUNC:%.*]] = function_ref @loopBodyEnd : $@convention(thin) () -> ()
 // CHECK:   apply [[LOOP_END_FUNC]]()
 // CHECK:   br [[LOOP_DEST]]
@@ -120,7 +120,7 @@
 // CHECK:   [[IND_VAR:%.*]] = load [trivial] [[GET_ELT_STACK]]
 // CHECK:   switch_enum [[IND_VAR]] : $Optional<Int>, case #Optional.some!enumelt.1: [[SOME_BB:bb[0-9]+]], case #Optional.none!enumelt: [[NONE_BB:bb[0-9]+]]
 //
-// CHECK: [[SOME_BB]]([[VAR:%.*]] : @trivial $Int):
+// CHECK: [[SOME_BB]]([[VAR:%.*]] : $Int):
 // CHECK:   cond_br {{%.*}}, [[LOOP_BREAK_END_BLOCK:bb[0-9]+]], [[CONTINUE_CHECK_BLOCK:bb[0-9]+]]
 //
 // CHECK: [[LOOP_BREAK_END_BLOCK]]:
@@ -471,7 +471,7 @@
 }
 
 // CHECK-LABEL: sil hidden @$s7foreach30genericCollectionContinueBreakyyxSlRzlF : $@convention(thin) <T where T : Collection> (@in_guaranteed T) -> () {
-// CHECK: bb0([[COLLECTION:%.*]] : @trivial $*T):
+// CHECK: bb0([[COLLECTION:%.*]] : $*T):
 // CHECK:   [[ITERATOR_BOX:%.*]] = alloc_box $<τ_0_0 where τ_0_0 : Collection> { var τ_0_0.Iterator } <T>, var, name "$x$generator"
 // CHECK:   [[PROJECT_ITERATOR_BOX:%.*]] = project_box [[ITERATOR_BOX]]
 // CHECK:   [[MAKE_ITERATOR_FUNC:%.*]] = witness_method $T, #Sequence.makeIterator!1
@@ -584,7 +584,7 @@
 // CHECK: [[LOOP_DEST]]:
 // CHECK:   switch_enum [[OPT_VAL:%.*]] : $Optional<Int>, case #Optional.some!enumelt.1: [[SOME_BB:bb[0-9]+]], case #Optional.none!enumelt: [[NONE_BB:bb[0-9]+]]
 //
-// CHECK: [[SOME_BB]]([[VAL:%.*]]  : @trivial $Int):
+// CHECK: [[SOME_BB]]([[VAL:%.*]]  : $Int):
 // CHECK:   [[LOOP_END_FUNC:%.*]] = function_ref @loopBodyEnd : $@convention(thin) () -> ()
 // CHECK:   apply [[LOOP_END_FUNC]]
 func unusedArgPattern(_ xx: [Int]) {
diff --git a/test/SILGen/foreign_errors.swift b/test/SILGen/foreign_errors.swift
index 89c6a1a..6ea4efb 100644
--- a/test/SILGen/foreign_errors.swift
+++ b/test/SILGen/foreign_errors.swift
@@ -68,7 +68,7 @@
 // CHECK:   br bb6([[BOOL]] : $ObjCBool)
 // CHECK: bb2([[ERR:%.*]] : @owned $Error):
 // CHECK:   switch_enum %0 : $Optional<AutoreleasingUnsafeMutablePointer<Optional<NSError>>>, case #Optional.some!enumelt.1: bb3, case #Optional.none!enumelt: bb4
-// CHECK: bb3([[UNWRAPPED_OUT:%.+]] : @trivial $AutoreleasingUnsafeMutablePointer<Optional<NSError>>):
+// CHECK: bb3([[UNWRAPPED_OUT:%.+]] : $AutoreleasingUnsafeMutablePointer<Optional<NSError>>):
 // CHECK:   [[T0:%.*]] = function_ref @$s10Foundation22_convertErrorToNSErrorySo0E0Cs0C0_pF : $@convention(thin) (@guaranteed Error) -> @owned NSError
 // CHECK:   [[T1:%.*]] = apply [[T0]]([[ERR]])
 // CHECK:   [[OBJCERR:%.*]] = enum $Optional<NSError>, #Optional.some!enumelt.1, [[T1]] : $NSError
@@ -86,14 +86,14 @@
 // CHECK:   [[VALUE:%.*]] = struct ${{Bool|UInt8}} ([[BITS]] : $Builtin.Int{{[18]}})
 // CHECK:   [[BOOL:%.*]] = struct $ObjCBool ([[VALUE]] : ${{Bool|UInt8}})
 // CHECK:   br bb6([[BOOL]] : $ObjCBool)
-// CHECK: bb6([[BOOL:%.*]] : @trivial $ObjCBool):
+// CHECK: bb6([[BOOL:%.*]] : $ObjCBool):
 // CHECK:   return [[BOOL]] : $ObjCBool
 
   @objc func badDescription() throws -> String {
     throw NSError(domain: "", code: 1, userInfo: [:])
   }
 // CHECK-LABEL: sil hidden [thunk] @$sSo8NSObjectC14foreign_errorsE14badDescriptionSSyKFTo : $@convention(objc_method) (Optional<AutoreleasingUnsafeMutablePointer<Optional<NSError>>>, NSObject) -> @autoreleased Optional<NSString> {
-// CHECK: bb0([[UNOWNED_ARG0:%.*]] : @trivial $Optional<AutoreleasingUnsafeMutablePointer<Optional<NSError>>>, [[UNOWNED_ARG1:%.*]] : @unowned $NSObject):
+// CHECK: bb0([[UNOWNED_ARG0:%.*]] : $Optional<AutoreleasingUnsafeMutablePointer<Optional<NSError>>>, [[UNOWNED_ARG1:%.*]] : @unowned $NSObject):
 // CHECK: [[ARG1:%.*]] = copy_value [[UNOWNED_ARG1]]
 // CHECK: [[BORROWED_ARG1:%.*]] = begin_borrow [[ARG1]]
 // CHECK: [[T0:%.*]] = function_ref @$sSo8NSObjectC14foreign_errorsE14badDescriptionSSyKF : $@convention(method) (@guaranteed NSObject) -> (@owned String, @error Error)
@@ -111,7 +111,7 @@
 // CHECK: [[ERROR_BB]]([[ERR:%.*]] : @owned $Error):
 // CHECK:   switch_enum [[UNOWNED_ARG0]] : $Optional<AutoreleasingUnsafeMutablePointer<Optional<NSError>>>, case #Optional.some!enumelt.1: [[SOME_BB:bb[0-9][0-9]*]], case #Optional.none!enumelt: [[NONE_BB:bb[0-9][0-9]*]]
 //
-// CHECK: [[SOME_BB]]([[UNWRAPPED_OUT:%.+]] : @trivial $AutoreleasingUnsafeMutablePointer<Optional<NSError>>):
+// CHECK: [[SOME_BB]]([[UNWRAPPED_OUT:%.+]] : $AutoreleasingUnsafeMutablePointer<Optional<NSError>>):
 // CHECK:   [[T0:%.*]] = function_ref @$s10Foundation22_convertErrorToNSErrorySo0E0Cs0C0_pF : $@convention(thin) (@guaranteed Error) -> @owned NSError
 // CHECK:   [[T1:%.*]] = apply [[T0]]([[ERR]])
 // CHECK:   [[OBJCERR:%.*]] = enum $Optional<NSError>, #Optional.some!enumelt.1, [[T1]] : $NSError
@@ -136,11 +136,11 @@
 // CHECK:   return [[T0]] : $Optional<NSString>
 
 // CHECK-LABEL: sil hidden [thunk] @$sSo8NSObjectC14foreign_errorsE7takeIntyySiKFTo : $@convention(objc_method) (Int, Optional<AutoreleasingUnsafeMutablePointer<Optional<NSError>>>, NSObject) -> ObjCBool
-// CHECK: bb0([[I:%[0-9]+]] : @trivial $Int, [[ERROR:%[0-9]+]] : @trivial $Optional<AutoreleasingUnsafeMutablePointer<Optional<NSError>>>, [[SELF:%[0-9]+]] : @unowned $NSObject)
+// CHECK: bb0([[I:%[0-9]+]] : $Int, [[ERROR:%[0-9]+]] : $Optional<AutoreleasingUnsafeMutablePointer<Optional<NSError>>>, [[SELF:%[0-9]+]] : @unowned $NSObject)
   @objc func takeInt(_ i: Int) throws { }
 
 // CHECK-LABEL: sil hidden [thunk] @$sSo8NSObjectC14foreign_errorsE10takeDouble_3int7closureySd_S3iXEtKFTo : $@convention(objc_method) (Double, Int, Optional<AutoreleasingUnsafeMutablePointer<Optional<NSError>>>, @convention(block) @noescape (Int) -> Int, NSObject) -> ObjCBool
-// CHECK: bb0([[D:%[0-9]+]] : @trivial $Double, [[INT:%[0-9]+]] : @trivial $Int, [[ERROR:%[0-9]+]] : @trivial $Optional<AutoreleasingUnsafeMutablePointer<Optional<NSError>>>, [[CLOSURE:%[0-9]+]] : @unowned $@convention(block) @noescape (Int) -> Int, [[SELF:%[0-9]+]] : @unowned $NSObject):
+// CHECK: bb0([[D:%[0-9]+]] : $Double, [[INT:%[0-9]+]] : $Int, [[ERROR:%[0-9]+]] : $Optional<AutoreleasingUnsafeMutablePointer<Optional<NSError>>>, [[CLOSURE:%[0-9]+]] : @unowned $@convention(block) @noescape (Int) -> Int, [[SELF:%[0-9]+]] : @unowned $NSObject):
   @objc func takeDouble(_ d: Double, int: Int, closure: (Int) -> Int) throws {
     throw NSError(domain: "", code: 1, userInfo: [:])
   }
diff --git a/test/SILGen/function_conversion.swift b/test/SILGen/function_conversion.swift
index a7ee744..1308e0e 100644
--- a/test/SILGen/function_conversion.swift
+++ b/test/SILGen/function_conversion.swift
@@ -206,7 +206,7 @@
 
 // CHECK-LABEL: sil shared [transparent] [serializable] [reabstraction_thunk] @$s19function_conversion1Q_pSgAA7TrivialVIegnd_AESgAA1P_pIegyr_TR
 // CHECK:         switch_enum
-// CHECK: bb1([[TRIVIAL:%.*]] : @trivial $Trivial):
+// CHECK: bb1([[TRIVIAL:%.*]] : $Trivial):
 // CHECK:         init_existential_addr
 // CHECK:         init_enum_data_addr
 // CHECK:         copy_addr
@@ -258,7 +258,7 @@
 
 // CHECK-LABEL: sil shared [transparent] [serializable] [reabstraction_thunk] @$s19function_conversion1Q_pXmTSgAA7TrivialVXMtIegyd_AEXMtSgAA1P_pXmTIegyd_TR : $@convention(thin) (Optional<@thin Trivial.Type>, @guaranteed @callee_guaranteed (Optional<@thick Q.Type>) -> @thin Trivial.Type) -> @thick P.Type
 // CHECK:         switch_enum %0 : $Optional<@thin Trivial.Type>
-// CHECK: bb1([[META:%.*]] : @trivial $@thin Trivial.Type):
+// CHECK: bb1([[META:%.*]] : $@thin Trivial.Type):
 // CHECK-NEXT:    metatype $@thick Trivial.Type
 // CHECK-NEXT:    init_existential_metatype {{.*}} : $@thick Trivial.Type, $@thick Q.Type
 // CHECK-NEXT:    enum $Optional<@thick Q.Type>
@@ -426,7 +426,7 @@
 // CHECK-NEXT: } // end sil function '$s19function_conversion25convTupleToOptionalDirectySi_SitSgSicSi_SitSicF'
 
 // CHECK-LABEL: sil shared [transparent] [serializable] [reabstraction_thunk] @$sS3iIegydd_S2i_SitSgIegyd_TR : $@convention(thin) (Int, @guaranteed @callee_guaranteed (Int) -> (Int, Int)) -> Optional<(Int, Int)>
-// CHECK:         bb0(%0 : @trivial $Int, %1 : @guaranteed $@callee_guaranteed (Int) -> (Int, Int)):
+// CHECK:         bb0(%0 : $Int, %1 : @guaranteed $@callee_guaranteed (Int) -> (Int, Int)):
 // CHECK:           [[RESULT:%.*]] = apply %1(%0)
 // CHECK-NEXT:      ([[LEFT:%.*]], [[RIGHT:%.*]]) = destructure_tuple [[RESULT]]
 // CHECK-NEXT:      [[RESULT:%.*]] = tuple ([[LEFT]] : $Int, [[RIGHT]] : $Int)
@@ -447,7 +447,7 @@
 // CHECK-NEXT: } // end sil function '$s19function_conversion27convTupleToOptionalIndirectyx_xtSgxcx_xtxclF'
 
 // CHECK:       sil shared [transparent] [serializable] [reabstraction_thunk] @$sxxxIegnrr_xx_xtSgIegnr_lTR : $@convention(thin) <T> (@in_guaranteed T, @guaranteed @callee_guaranteed (@in_guaranteed T) -> (@out T, @out T)) -> @out Optional<(T, T)>
-// CHECK:       bb0(%0 : @trivial $*Optional<(T, T)>, %1 : @trivial $*T, %2 : @guaranteed $@callee_guaranteed (@in_guaranteed T) -> (@out T, @out T)):
+// CHECK:       bb0(%0 : $*Optional<(T, T)>, %1 : $*T, %2 : @guaranteed $@callee_guaranteed (@in_guaranteed T) -> (@out T, @out T)):
 // CHECK:         [[OPTIONAL:%.*]] = init_enum_data_addr %0 : $*Optional<(T, T)>, #Optional.some!enumelt.1
 // CHECK-NEXT:    [[LEFT:%.*]] = tuple_element_addr [[OPTIONAL]] : $*(T, T), 0
 // CHECK-NEXT:    [[RIGHT:%.*]] = tuple_element_addr [[OPTIONAL]] : $*(T, T), 1
diff --git a/test/SILGen/function_conversion_se0110.swift b/test/SILGen/function_conversion_se0110.swift
index d055043..6c30cbf 100644
--- a/test/SILGen/function_conversion_se0110.swift
+++ b/test/SILGen/function_conversion_se0110.swift
@@ -50,7 +50,7 @@
 }
 
 // CHECK-LABEL: sil shared [transparent] [serializable] [reabstraction_thunk] @$syXlyXlIgxx_yXlyXlIeggg_TR : $@convention(thin) (@guaranteed AnyObject, @guaranteed AnyObject, @noescape @callee_guaranteed (@owned AnyObject, @owned AnyObject) -> ()) -> () {
-// CHECK: bb0(%0 : @guaranteed $AnyObject, %1 : @guaranteed $AnyObject, %2 : @trivial $@noescape @callee_guaranteed (@owned AnyObject, @owned AnyObject) -> ()):
+// CHECK: bb0(%0 : @guaranteed $AnyObject, %1 : @guaranteed $AnyObject, %2 : $@noescape @callee_guaranteed (@owned AnyObject, @owned AnyObject) -> ()):
 // CHECK-NEXT: [[FIRST:%.*]] = copy_value %0
 // CHECK-NEXT: [[SECOND:%.*]] = copy_value %1
 // CHECK-NEXT: apply %2([[FIRST]], [[SECOND]]) : $@noescape @callee_guaranteed (@owned AnyObject, @owned AnyObject) -> ()
diff --git a/test/SILGen/functions.swift b/test/SILGen/functions.swift
index ead4e21..ce1bbd0 100644
--- a/test/SILGen/functions.swift
+++ b/test/SILGen/functions.swift
@@ -42,18 +42,18 @@
   // -- Instance methods use 'method' cc
 
   // CHECK-LABEL: sil hidden @$s9functions9SomeClassC{{[_0-9a-zA-Z]*}}fC : $@convention(method) (Builtin.Int64, Builtin.Int64, @thick SomeClass.Type) -> @owned SomeClass
-  // CHECK: bb0(%0 : @trivial $Builtin.Int64, %1 : @trivial $Builtin.Int64, %2 : @trivial $@thick SomeClass.Type):
+  // CHECK: bb0(%0 : $Builtin.Int64, %1 : $Builtin.Int64, %2 : $@thick SomeClass.Type):
 
   // CHECK-LABEL: sil hidden @$s9functions9SomeClassC{{[_0-9a-zA-Z]*}}fc : $@convention(method) (Builtin.Int64, Builtin.Int64, @owned SomeClass) -> @owned SomeClass
-  // CHECK: bb0(%0 : @trivial $Builtin.Int64, %1 : @trivial $Builtin.Int64, %2 : @owned $SomeClass):
+  // CHECK: bb0(%0 : $Builtin.Int64, %1 : $Builtin.Int64, %2 : @owned $SomeClass):
   init(x:Int, y:Int) {}
 
   // CHECK-LABEL: sil hidden @$s9functions9SomeClassC6method{{[_0-9a-zA-Z]*}}F : $@convention(method) (Builtin.Int64, @guaranteed SomeClass) -> () 
-  // CHECK: bb0(%0 : @trivial $Builtin.Int64, %1 : @guaranteed $SomeClass):
+  // CHECK: bb0(%0 : $Builtin.Int64, %1 : @guaranteed $SomeClass):
   func method(_ x: Int) {}
 
   // CHECK-LABEL: sil hidden @$s9functions9SomeClassC13static_method{{[_0-9a-zA-Z]*}}FZ : $@convention(method) (Builtin.Int64, @thick SomeClass.Type) -> ()
-  // CHECK: bb0(%0 : @trivial $Builtin.Int64, %1 : @trivial $@thick SomeClass.Type):
+  // CHECK: bb0(%0 : $Builtin.Int64, %1 : $@thick SomeClass.Type):
   class func static_method(_ x: Int) {}
 
   var someProperty: Int {
@@ -101,7 +101,7 @@
   var i = i
   var j = j
   var k = k
-  // CHECK: bb0(%0 : @trivial $Builtin.Int64, %1 : @trivial $Builtin.Int64, %2 : @trivial $Builtin.Int64):
+  // CHECK: bb0(%0 : $Builtin.Int64, %1 : $Builtin.Int64, %2 : $Builtin.Int64):
   // CHECK: [[IBOX:%[0-9]+]] = alloc_box ${ var Builtin.Int64 }
   // CHECK: [[IADDR:%.*]] = project_box [[IBOX]]
   // CHECK: [[JBOX:%[0-9]+]] = alloc_box ${ var Builtin.Int64 }
diff --git a/test/SILGen/generic_casts.swift b/test/SILGen/generic_casts.swift
index 7790caf..36b286c 100644
--- a/test/SILGen/generic_casts.swift
+++ b/test/SILGen/generic_casts.swift
@@ -12,7 +12,7 @@
 func opaque_archetype_to_opaque_archetype
 <T:NotClassBound, U>(_ t:T) -> U {
   return t as! U
-  // CHECK: bb0([[RET:%.*]] : @trivial $*U, {{%.*}}: @trivial $*T):
+  // CHECK: bb0([[RET:%.*]] : $*U, {{%.*}}: $*T):
   // CHECK:   unconditional_checked_cast_addr T in {{%.*}} : $*T to U in [[RET]] : $*U
 }
 
@@ -28,7 +28,7 @@
   // CHECK: [[NO]]:
   // CHECK:   [[N:%.*]] = integer_literal $Builtin.Int1, 0
   // CHECK:   br [[CONT]]([[N]] : $Builtin.Int1)
-  // CHECK: [[CONT]]([[I1:%.*]] : @trivial $Builtin.Int1):
+  // CHECK: [[CONT]]([[I1:%.*]] : $Builtin.Int1):
   // CHECK-NEXT:  [[META:%.*]] = metatype $@thin Bool.Type
   // CHECK-NEXT:  function_ref Swift.Bool.init(_builtinBooleanLiteral: Builtin.Int1)
   // CHECK-NEXT:  [[BOOL:%.*]] = function_ref @$sSb22_builtinBooleanLiteralSbBi1__tcfC :
@@ -76,7 +76,7 @@
 func opaque_archetype_to_addr_only_concrete
 <T:NotClassBound> (_ t:T) -> Unloadable {
   return t as! Unloadable
-  // CHECK: bb0([[RET:%.*]] : @trivial $*Unloadable, {{%.*}}: @trivial $*T):
+  // CHECK: bb0([[RET:%.*]] : $*Unloadable, {{%.*}}: $*T):
   // CHECK:   unconditional_checked_cast_addr T in {{%.*}} : $*T to Unloadable in [[RET]] : $*Unloadable
 }
 
@@ -122,7 +122,7 @@
 func opaque_existential_to_opaque_archetype
 <T:NotClassBound>(_ p:NotClassBound) -> T {
   return p as! T
-  // CHECK: bb0([[RET:%.*]] : @trivial $*T, [[ARG:%.*]] : @trivial $*NotClassBound):
+  // CHECK: bb0([[RET:%.*]] : $*T, [[ARG:%.*]] : $*NotClassBound):
   // CHECK:      [[TEMP:%.*]] = alloc_stack $NotClassBound
   // CHECK-NEXT: copy_addr [[ARG]] to [initialization] [[TEMP]]
   // CHECK-NEXT: unconditional_checked_cast_addr NotClassBound in [[TEMP]] : $*NotClassBound to T in [[RET]] : $*T
@@ -173,7 +173,7 @@
 // CHECK-LABEL: sil hidden @$s13generic_casts40opaque_existential_to_addr_only_concrete{{[_0-9a-zA-Z]*}}F
 func opaque_existential_to_addr_only_concrete(_ p: NotClassBound) -> Unloadable {
   return p as! Unloadable
-  // CHECK: bb0([[RET:%.*]] : @trivial $*Unloadable, {{%.*}}: @trivial $*NotClassBound):
+  // CHECK: bb0([[RET:%.*]] : $*Unloadable, {{%.*}}: $*NotClassBound):
   // CHECK:   unconditional_checked_cast_addr NotClassBound in {{%.*}} : $*NotClassBound to Unloadable in [[RET]] : $*Unloadable
 }
 
@@ -222,7 +222,7 @@
 // CHECK-LABEL: sil hidden @$s13generic_casts32optional_any_to_opaque_archetype{{[_0-9a-zA-Z]*}}F
 func optional_any_to_opaque_archetype<T>(_ x: Any?) -> T {
   return x as! T
-  // CHECK: bb0([[RET:%.*]] : @trivial $*T, {{%.*}} : @trivial $*Optional<Any>):
+  // CHECK: bb0([[RET:%.*]] : $*T, {{%.*}} : $*Optional<Any>):
   // CHECK: unconditional_checked_cast_addr Optional<Any> in {{%.*}} : $*Optional<Any> to T in [[RET]] : $*T
 }
 
diff --git a/test/SILGen/generic_casts_swift4.swift b/test/SILGen/generic_casts_swift4.swift
index 47565b0..2322261 100644
--- a/test/SILGen/generic_casts_swift4.swift
+++ b/test/SILGen/generic_casts_swift4.swift
@@ -8,7 +8,7 @@
 // CHECK-LABEL: sil hidden @$s13generic_casts32optional_any_to_opaque_archetype{{[_0-9a-zA-Z]*}}F
 func optional_any_to_opaque_archetype<T>(_ x: Any?) -> T {
   return x as! T
-  // CHECK: bb0([[RET:%.*]] : @trivial $*T, {{%.*}} : @trivial $*Optional<Any>):
+  // CHECK: bb0([[RET:%.*]] : $*T, {{%.*}} : $*Optional<Any>):
   // CHECK: unconditional_checked_cast_addr Any in {{%.*}} : $*Any to T in [[RET]] : $*T
 }
 
diff --git a/test/SILGen/generic_closures.swift b/test/SILGen/generic_closures.swift
index b1f6608..7f2f26b 100644
--- a/test/SILGen/generic_closures.swift
+++ b/test/SILGen/generic_closures.swift
@@ -207,7 +207,7 @@
 protocol HasClassAssoc { associatedtype Assoc : Class }
 
 // CHECK-LABEL: sil hidden @$s16generic_closures027captures_class_constrained_A0_1fyx_5AssocQzAEctAA08HasClassF0RzlF
-// CHECK: bb0([[ARG1:%.*]] : @trivial $*T, [[ARG2:%.*]] : @guaranteed $@callee_guaranteed (@guaranteed T.Assoc) -> @owned T.Assoc):
+// CHECK: bb0([[ARG1:%.*]] : $*T, [[ARG2:%.*]] : @guaranteed $@callee_guaranteed (@guaranteed T.Assoc) -> @owned T.Assoc):
 // CHECK: [[GENERIC_FN:%.*]] = function_ref @$s16generic_closures027captures_class_constrained_A0_1fyx_5AssocQzAEctAA08HasClassF0RzlFA2EcycfU_
 // CHECK: [[ARG2_COPY:%.*]] = copy_value [[ARG2]]
 // CHECK: [[CONCRETE_FN:%.*]] = partial_apply [callee_guaranteed] [[GENERIC_FN]]<T>([[ARG2_COPY]])
diff --git a/test/SILGen/generic_tuples.swift b/test/SILGen/generic_tuples.swift
index c21c921..863487c 100644
--- a/test/SILGen/generic_tuples.swift
+++ b/test/SILGen/generic_tuples.swift
@@ -4,7 +4,7 @@
 
 func dup<T>(_ x: T) -> (T, T) { return (x,x) }
 // CHECK-LABEL:      sil hidden @$s14generic_tuples3dup{{[_0-9a-zA-Z]*}}F
-// CHECK:      ([[RESULT_0:%.*]] : @trivial $*T, [[RESULT_1:%.*]] : @trivial $*T, [[XVAR:%.*]] : @trivial $*T):
+// CHECK:      ([[RESULT_0:%.*]] : $*T, [[RESULT_1:%.*]] : $*T, [[XVAR:%.*]] : $*T):
 // CHECK-NEXT: debug_value_addr [[XVAR]] : $*T, let, name "x"
 // CHECK-NEXT: copy_addr [[XVAR]] to [initialization] [[RESULT_0]]
 // CHECK-NEXT: copy_addr [[XVAR]] to [initialization] [[RESULT_1]]
diff --git a/test/SILGen/guaranteed_normal_args_curry_thunks.swift b/test/SILGen/guaranteed_normal_args_curry_thunks.swift
index e267bae..ec0ed57 100644
--- a/test/SILGen/guaranteed_normal_args_curry_thunks.swift
+++ b/test/SILGen/guaranteed_normal_args_curry_thunks.swift
@@ -192,7 +192,7 @@
 // CHECK: } // end sil function '$ss25AddrOnlyStructInitGenericVyAByxGxcfCTc'
 
 // CHECK-LABEL: sil shared [transparent] [serializable] [thunk] @$sxs25AddrOnlyStructInitGenericVyxGIegir_xACIegnr_lTR : $@convention(thin) <T> (@in_guaranteed T, @guaranteed @callee_guaranteed (@in T) -> @out AddrOnlyStructInitGeneric<T>) -> @out AddrOnlyStructInitGeneric<T> {
-// CHECK: bb0([[ARG0:%.*]] : @trivial $*AddrOnlyStructInitGeneric<T>, [[ARG1:%.*]] : @trivial $*T, [[ARG2:%.*]] : @guaranteed $@callee_guaranteed (@in T) -> @out AddrOnlyStructInitGeneric<T>):
+// CHECK: bb0([[ARG0:%.*]] : $*AddrOnlyStructInitGeneric<T>, [[ARG1:%.*]] : $*T, [[ARG2:%.*]] : @guaranteed $@callee_guaranteed (@in T) -> @out AddrOnlyStructInitGeneric<T>):
 // CHECK:   [[STACK:%.*]] = alloc_stack $T
 // CHECK:   copy_addr [[ARG1]] to [initialization] [[STACK]] : $*T
 // CHECK:   apply [[ARG2]]([[ARG0]], [[STACK]]) : $@callee_guaranteed (@in T) -> @out AddrOnlyStructInitGeneric<T>
@@ -256,7 +256,7 @@
 // Canonical thunk
 //
 // CHECK-LABEL: sil shared [transparent] [serializable] [thunk] @$ss5KlassCxIegxr_ABxIeggr_s20ProtocolInitLoadableRzlTR : $@convention(thin) <Self where Self : ProtocolInitLoadable> (@guaranteed Klass, @guaranteed @callee_guaranteed (@owned Klass) -> @out Self) -> @out Self {
-// CHECK: bb0([[ARG0:%.*]] : @trivial $*Self, [[ARG1:%.*]] : @guaranteed $Klass, [[ARG2:%.*]] : @guaranteed $@callee_guaranteed (@owned Klass) -> @out Self):
+// CHECK: bb0([[ARG0:%.*]] : $*Self, [[ARG1:%.*]] : @guaranteed $Klass, [[ARG2:%.*]] : @guaranteed $@callee_guaranteed (@owned Klass) -> @out Self):
 // CHECK:   [[ARG1_COPY:%.*]] = copy_value [[ARG1]]
 // CHECK:   apply [[ARG2]]([[ARG0]], [[ARG1_COPY]])
 // CHECK: } // end sil function '$ss5KlassCxIegxr_ABxIeggr_s20ProtocolInitLoadableRzlTR'
diff --git a/test/SILGen/guaranteed_self.swift b/test/SILGen/guaranteed_self.swift
index 56f485b..0d13173 100644
--- a/test/SILGen/guaranteed_self.swift
+++ b/test/SILGen/guaranteed_self.swift
@@ -42,7 +42,7 @@
   }
 
   // CHECK-LABEL: sil hidden @$s15guaranteed_self1SV3bar{{[_0-9a-zA-Z]*}}F : $@convention(method) (@inout S) -> ()
-  // CHECK:       bb0([[SELF:%.*]] : @trivial $*S):
+  // CHECK:       bb0([[SELF:%.*]] : $*S):
   // CHECK-NOT:     destroy_addr [[SELF]]
   mutating func bar() {
     self.bar()
@@ -64,13 +64,13 @@
 
   // Setter for prop1
   // CHECK-LABEL: sil hidden [transparent] @$s15guaranteed_self1SV5prop1Sivs : $@convention(method) (Int, @inout S) -> ()
-  // CHECK:       bb0({{.*}} [[SELF_ADDR:%.*]] : @trivial $*S):
+  // CHECK:       bb0({{.*}} [[SELF_ADDR:%.*]] : $*S):
   // CHECK-NOT:     load [[SELF_ADDR]]
   // CHECK-NOT:     destroy_addr [[SELF_ADDR]]
 
   // modify for prop1
   // CHECK-LABEL: sil hidden [transparent] @$s15guaranteed_self1SV5prop1SivM : $@yield_once @convention(method) (@inout S) -> @yields @inout Int
-  // CHECK:       bb0([[SELF_ADDR:%.*]] : @trivial $*S):
+  // CHECK:       bb0([[SELF_ADDR:%.*]] : $*S):
   // CHECK-NOT:     load [[SELF_ADDR]]
   // CHECK-NOT:     destroy_addr [[SELF_ADDR]]
 
@@ -101,76 +101,76 @@
 
 // Witness thunk for nonmutating 'foo'
 // CHECK-LABEL: sil private [transparent] [thunk] @$s15guaranteed_self1SVAA7FooableA2aDP3foo{{[_0-9a-zA-Z]*}}FTW : $@convention(witness_method: Fooable) (Int, @in_guaranteed S) -> () {
-// CHECK:       bb0({{.*}} [[SELF_ADDR:%.*]] : @trivial $*S):
+// CHECK:       bb0({{.*}} [[SELF_ADDR:%.*]] : $*S):
 // CHECK:         [[SELF:%.*]] = load_borrow [[SELF_ADDR]]
 // CHECK-NOT:     destroy_value [[SELF]]
 // CHECK-NOT:     destroy_addr [[SELF_ADDR]]
 
 // Witness thunk for mutating 'bar'
 // CHECK-LABEL: sil private [transparent] [thunk] @$s15guaranteed_self1SVAA7FooableA2aDP3bar{{[_0-9a-zA-Z]*}}FTW : $@convention(witness_method: Fooable) (@inout S) -> () {
-// CHECK:       bb0([[SELF_ADDR:%.*]] : @trivial $*S):
+// CHECK:       bb0([[SELF_ADDR:%.*]] : $*S):
 // CHECK-NOT:     load [[SELF_ADDR]]
 // CHECK-NOT:     destroy_addr [[SELF_ADDR]]
 
 // Witness thunk for 'bas', which is mutating in the protocol, but nonmutating
 // in the implementation
 // CHECK-LABEL: sil private [transparent] [thunk] @$s15guaranteed_self1SVAA7FooableA2aDP3bas{{[_0-9a-zA-Z]*}}FTW : $@convention(witness_method: Fooable) (@inout S) -> ()
-// CHECK:       bb0([[SELF_ADDR:%.*]] : @trivial $*S):
+// CHECK:       bb0([[SELF_ADDR:%.*]] : $*S):
 // CHECK:         [[SELF:%.*]] = load_borrow [[SELF_ADDR]]
 // CHECK:         end_borrow [[SELF]]
 // CHECK-NOT:     destroy_value [[SELF]]
 
 // Witness thunk for prop1 getter
 // CHECK-LABEL: sil private [transparent] [thunk] @$s15guaranteed_self1SVAA7FooableA2aDP5prop1SivgTW : $@convention(witness_method: Fooable) (@in_guaranteed S) -> Int
-// CHECK:       bb0([[SELF_ADDR:%.*]] : @trivial $*S):
+// CHECK:       bb0([[SELF_ADDR:%.*]] : $*S):
 // CHECK:         [[SELF:%.*]] = load_borrow [[SELF_ADDR]]
 // CHECK-NOT:     destroy_value [[SELF]]
 // CHECK-NOT:     destroy_value [[SELF]]
 
 // Witness thunk for prop1 setter
 // CHECK-LABEL: sil private [transparent] [thunk] @$s15guaranteed_self1SVAA7FooableA2aDP5prop1SivsTW : $@convention(witness_method: Fooable) (Int, @inout S) -> () {
-// CHECK:       bb0({{.*}} [[SELF_ADDR:%.*]] : @trivial $*S):
+// CHECK:       bb0({{.*}} [[SELF_ADDR:%.*]] : $*S):
 // CHECK-NOT:     destroy_addr [[SELF_ADDR]]
 
 // Witness thunk for prop1 modify
 // CHECK-LABEL: sil private [transparent] [thunk] @$s15guaranteed_self1SVAA7FooableA2aDP5prop1SivMTW : $@yield_once @convention(witness_method: Fooable) (@inout S) -> @yields @inout Int {
-// CHECK:       bb0([[SELF_ADDR:%.*]] : @trivial $*S):
+// CHECK:       bb0([[SELF_ADDR:%.*]] : $*S):
 // CHECK-NOT:     destroy_addr [[SELF_ADDR]]
 
 // Witness thunk for prop2 getter
 // CHECK-LABEL: sil private [transparent] [thunk] @$s15guaranteed_self1SVAA7FooableA2aDP5prop2SivgTW : $@convention(witness_method: Fooable) (@in_guaranteed S) -> Int
-// CHECK:       bb0([[SELF_ADDR:%.*]] : @trivial $*S):
+// CHECK:       bb0([[SELF_ADDR:%.*]] : $*S):
 // CHECK:         [[SELF:%.*]] = load_borrow [[SELF_ADDR]]
 // CHECK-NOT:     destroy_value [[SELF]]
 // CHECK-NOT:     destroy_addr [[SELF_ADDR]]
 
 // Witness thunk for prop2 setter
 // CHECK-LABEL: sil private [transparent] [thunk] @$s15guaranteed_self1SVAA7FooableA2aDP5prop2SivsTW : $@convention(witness_method: Fooable) (Int, @inout S) -> () {
-// CHECK:       bb0({{.*}} [[SELF_ADDR:%.*]] : @trivial $*S):
+// CHECK:       bb0({{.*}} [[SELF_ADDR:%.*]] : $*S):
 // CHECK-NOT:     destroy_addr [[SELF_ADDR]]
 
 // Witness thunk for prop2 modify
 // CHECK-LABEL: sil private [transparent] [thunk] @$s15guaranteed_self1SVAA7FooableA2aDP5prop2SivMTW : $@yield_once @convention(witness_method: Fooable) (@inout S) -> @yields @inout Int {
-// CHECK:       bb0([[SELF_ADDR:%.*]] : @trivial $*S):
+// CHECK:       bb0([[SELF_ADDR:%.*]] : $*S):
 // CHECK-NOT:     destroy_addr [[SELF_ADDR]]
 
 // Witness thunk for prop3 getter
 // CHECK-LABEL: sil private [transparent] [thunk] @$s15guaranteed_self1SVAA7FooableA2aDP5prop3SivgTW : $@convention(witness_method: Fooable) (@in_guaranteed S) -> Int
-// CHECK:       bb0([[SELF_ADDR:%.*]] : @trivial $*S):
+// CHECK:       bb0([[SELF_ADDR:%.*]] : $*S):
 // CHECK:         [[SELF:%.*]] = load_borrow [[SELF_ADDR]]
 // CHECK-NOT:     destroy_value [[SELF]]
 // CHECK-NOT:     destroy_addr [[SELF_ADDR]]
 
 // Witness thunk for prop3 nonmutating setter
 // CHECK-LABEL: sil private [transparent] [thunk] @$s15guaranteed_self1SVAA7FooableA2aDP5prop3SivsTW : $@convention(witness_method: Fooable) (Int, @in_guaranteed S) -> ()
-// CHECK:       bb0({{.*}} [[SELF_ADDR:%.*]] : @trivial $*S):
+// CHECK:       bb0({{.*}} [[SELF_ADDR:%.*]] : $*S):
 // CHECK:         [[SELF:%.*]] = load_borrow [[SELF_ADDR]]
 // CHECK-NOT:     destroy_value [[SELF]]
 // CHECK-NOT:     destroy_addr [[SELF_ADDR]]
 
 // Witness thunk for prop3 nonmutating modify
 // CHECK-LABEL: sil private [transparent] [thunk] @$s15guaranteed_self1SVAA7FooableA2aDP5prop3SivMTW : $@yield_once @convention(witness_method: Fooable) (@in_guaranteed S) -> @yields @inout Int
-// CHECK:       bb0([[SELF_ADDR:%.*]] : @trivial $*S):
+// CHECK:       bb0([[SELF_ADDR:%.*]] : $*S):
 // CHECK:         [[SELF:%.*]] = load_borrow [[SELF_ADDR]]
 // CHECK-NOT:     destroy_value [[SELF]]
 // CHECK-NOT:     destroy_addr [[SELF_ADDR]]
@@ -185,7 +185,7 @@
 
   init() {}
   // CHECK-LABEL: sil hidden @$s15guaranteed_self2AOV3foo{{[_0-9a-zA-Z]*}}F : $@convention(method) <T> (Int, @in_guaranteed AO<T>) -> ()
-  // CHECK:       bb0({{.*}} [[SELF_ADDR:%.*]] : @trivial $*AO<T>):
+  // CHECK:       bb0({{.*}} [[SELF_ADDR:%.*]] : $*AO<T>):
   // CHECK:         apply {{.*}} [[SELF_ADDR]]
   // CHECK-NOT:     destroy_addr [[SELF_ADDR]]
   // CHECK:       }
@@ -196,7 +196,7 @@
     self.bar()
   }
   // CHECK-LABEL: sil hidden @$s15guaranteed_self2AOV3bas{{[_0-9a-zA-Z]*}}F : $@convention(method) <T> (@in_guaranteed AO<T>) -> ()
-  // CHECK:       bb0([[SELF_ADDR:%.*]] : @trivial $*AO<T>):
+  // CHECK:       bb0([[SELF_ADDR:%.*]] : $*AO<T>):
   // CHECK-NOT:     destroy_addr [[SELF_ADDR]]
   func bas() {
     self.bas()
@@ -206,21 +206,21 @@
   var prop1: Int = 0
   var prop2: Int {
     // CHECK-LABEL: sil hidden @$s15guaranteed_self2AOV5prop2Sivg : $@convention(method) <T> (@in_guaranteed AO<T>) -> Int {
-    // CHECK:       bb0([[SELF_ADDR:%.*]] : @trivial $*AO<T>):
+    // CHECK:       bb0([[SELF_ADDR:%.*]] : $*AO<T>):
     // CHECK-NOT:     destroy_addr [[SELF_ADDR]]
     get { return 0 }
     set { }
   }
   var prop3: Int {
     // CHECK-LABEL: sil hidden @$s15guaranteed_self2AOV5prop3Sivg : $@convention(method) <T> (@in_guaranteed AO<T>) -> Int
-    // CHECK:       bb0([[SELF_ADDR:%.*]] : @trivial $*AO<T>):
+    // CHECK:       bb0([[SELF_ADDR:%.*]] : $*AO<T>):
     // CHECK-NOT:     destroy_addr [[SELF_ADDR]]
     get { return 0 }
     // CHECK-LABEL: sil hidden @$s15guaranteed_self2AOV5prop3Sivs : $@convention(method) <T> (Int, @in_guaranteed AO<T>) -> ()
-    // CHECK:       bb0({{.*}} [[SELF_ADDR:%.*]] : @trivial $*AO<T>):
+    // CHECK:       bb0({{.*}} [[SELF_ADDR:%.*]] : $*AO<T>):
     // CHECK-NOT:     destroy_addr [[SELF_ADDR]]
     // CHECK-LABEL: sil hidden [transparent] @$s15guaranteed_self2AOV5prop3SivM : $@yield_once @convention(method) <T> (@in_guaranteed AO<T>) -> @yields @inout Int
-    // CHECK:       bb0([[SELF_ADDR:%.*]] : @trivial $*AO<T>):
+    // CHECK:       bb0([[SELF_ADDR:%.*]] : $*AO<T>):
     // CHECK-NOT:     destroy_addr [[SELF_ADDR]]
     // CHECK:       }
     nonmutating set { }
@@ -229,13 +229,13 @@
 
 // Witness for nonmutating 'foo'
 // CHECK-LABEL: sil private [transparent] [thunk] @$s15guaranteed_self2AOVyxGAA7FooableA2aEP3foo{{[_0-9a-zA-Z]*}}FTW : $@convention(witness_method: Fooable) <τ_0_0> (Int, @in_guaranteed AO<τ_0_0>) -> ()
-// CHECK:       bb0({{.*}} [[SELF_ADDR:%.*]] : @trivial $*AO<τ_0_0>):
+// CHECK:       bb0({{.*}} [[SELF_ADDR:%.*]] : $*AO<τ_0_0>):
 // CHECK:         apply {{.*}} [[SELF_ADDR]]
 // CHECK-NOT:     destroy_addr [[SELF_ADDR]]
 
 // Witness for 'bar', which is mutating in protocol but nonmutating in impl
 // CHECK-LABEL: sil private [transparent] [thunk] @$s15guaranteed_self2AOVyxGAA7FooableA2aEP3bar{{[_0-9a-zA-Z]*}}FTW : $@convention(witness_method: Fooable) <τ_0_0> (@inout AO<τ_0_0>) -> ()
-// CHECK:       bb0([[SELF_ADDR:%.*]] : @trivial $*AO<τ_0_0>):
+// CHECK:       bb0([[SELF_ADDR:%.*]] : $*AO<τ_0_0>):
 // -- NB: This copy is not necessary, since we're willing to assume an inout
 //        parameter is not mutably aliased.
 // CHECK:         apply {{.*}}([[SELF_ADDR]])
@@ -390,7 +390,7 @@
 
 
 // CHECK-LABEL: sil shared [transparent] [serialized] [thunk] @$s15guaranteed_self9FakeArrayVAA8SequenceA2aDP17_constrainElement{{[_0-9a-zA-Z]*}}FTW : $@convention(witness_method: Sequence) (@in_guaranteed FakeElement, @in_guaranteed FakeArray) -> () {
-// CHECK: bb0([[ARG0_PTR:%.*]] : @trivial $*FakeElement, [[ARG1_PTR:%.*]] : @trivial $*FakeArray):
+// CHECK: bb0([[ARG0_PTR:%.*]] : $*FakeElement, [[ARG1_PTR:%.*]] : $*FakeArray):
 // CHECK: [[ARG0:%.*]] = load [trivial] [[ARG0_PTR]]
 // CHECK: function_ref (extension in guaranteed_self):guaranteed_self.SequenceDefaults._constrainElement
 // CHECK: [[FUN:%.*]] = function_ref @{{.*}}
diff --git a/test/SILGen/if_expr.swift b/test/SILGen/if_expr.swift
index dfb7230..ff4aa6a 100644
--- a/test/SILGen/if_expr.swift
+++ b/test/SILGen/if_expr.swift
@@ -31,7 +31,7 @@
 
 // CHECK: sil hidden @$s7if_expr19addr_only_ternary_1{{[_0-9a-zA-Z]*}}F
 func addr_only_ternary_1(x: Bool) -> AddressOnly {
-  // CHECK: bb0([[RET:%.*]] : @trivial $*AddressOnly, {{.*}}):
+  // CHECK: bb0([[RET:%.*]] : $*AddressOnly, {{.*}}):
   // CHECK: [[a:%[0-9]+]] = alloc_box ${ var AddressOnly }, var, name "a"
   // CHECK: [[PBa:%.*]] = project_box [[a]]
   var a : AddressOnly = A()
diff --git a/test/SILGen/if_while_binding.swift b/test/SILGen/if_while_binding.swift
index 65db13d..6f311bf 100644
--- a/test/SILGen/if_while_binding.swift
+++ b/test/SILGen/if_while_binding.swift
@@ -350,13 +350,13 @@
 // <rdar://problem/22312114> if case crashes swift - bools not supported in let/else yet
 // CHECK-LABEL: sil hidden @$s16if_while_binding12testCaseBoolyySbSgF
 func testCaseBool(_ value : Bool?) {
-  // CHECK: bb0([[ARG:%.*]] : @trivial $Optional<Bool>):
+  // CHECK: bb0([[ARG:%.*]] : $Optional<Bool>):
   // CHECK: switch_enum [[ARG]] : $Optional<Bool>, case #Optional.some!enumelt.1: [[SOME_BB:bb[0-9]+]], case #Optional.none!enumelt: [[NONE_TRAMPOLINE:bb[0-9]+]]
   //
   // CHECK: [[NONE_TRAMPOLINE]]:
   // CHECK:   br [[CONT_BB:bb[0-9]+]]
   //
-  // CHECK: [[SOME_BB]]([[PAYLOAD:%.*]] : @trivial $Bool):
+  // CHECK: [[SOME_BB]]([[PAYLOAD:%.*]] : $Bool):
   // CHECK:   [[ISTRUE:%[0-9]+]] = struct_extract [[PAYLOAD]] : $Bool, #Bool._value
   // CHECK:   cond_br [[ISTRUE]], [[TRUE_BB:bb[0-9]+]], [[FALSE_TRAMPOLINE:bb[0-9]+]]
 
@@ -376,7 +376,7 @@
   // CHECK: [[NO_TRAMPOLINE_2]]:
   // CHECK:   br [[EPILOG_BB:bb[0-9]+]]
 
-  // CHECK: [[SUCC_BB_2]]([[PAYLOAD2:%.*]] : @trivial $Bool):
+  // CHECK: [[SUCC_BB_2]]([[PAYLOAD2:%.*]] : $Bool):
   // CHECK:   [[ISTRUE:%[0-9]+]] = struct_extract [[PAYLOAD2]] : $Bool, #Bool._value
   // CHECK:   cond_br [[ISTRUE]], [[TRUE3_BB:bb[0-9]+]], [[FALSE2_BB:bb[0-9]+]]
 
diff --git a/test/SILGen/import_as_member.swift b/test/SILGen/import_as_member.swift
index 1f2c258..d931849 100644
--- a/test/SILGen/import_as_member.swift
+++ b/test/SILGen/import_as_member.swift
@@ -39,7 +39,7 @@
 // CHECK-NEXT: }
 
 // CHECK-LABEL: sil {{.*}}useClass{{.*}}
-// CHECK: bb0([[D:%[0-9]+]] : @trivial $Double, [[OPTS:%[0-9]+]] : @trivial $SomeClass.Options):
+// CHECK: bb0([[D:%[0-9]+]] : $Double, [[OPTS:%[0-9]+]] : $SomeClass.Options):
 public func useClass(d: Double, opts: SomeClass.Options) {
   // CHECK: [[CTOR:%[0-9]+]] = function_ref @MakeIAMSomeClass : $@convention(c) (Double) -> @autoreleased SomeClass
   // CHECK: [[OBJ:%[0-9]+]] = apply [[CTOR]]([[D]])
@@ -55,7 +55,7 @@
 
 extension SomeClass {
   // CHECK-LABEL: sil hidden @$sSo12IAMSomeClassC16import_as_memberE6doubleABSd_tcfC
-  // CHECK: bb0([[DOUBLE:%[0-9]+]] : @trivial $Double
+  // CHECK: bb0([[DOUBLE:%[0-9]+]] : $Double
   // CHECK-NOT: value_metatype
   // CHECK: [[FNREF:%[0-9]+]] = function_ref @MakeIAMSomeClass
   // CHECK: apply [[FNREF]]([[DOUBLE]])
diff --git a/test/SILGen/indirect_enum.swift b/test/SILGen/indirect_enum.swift
index d0d91ed..2ef47ba 100644
--- a/test/SILGen/indirect_enum.swift
+++ b/test/SILGen/indirect_enum.swift
@@ -9,7 +9,7 @@
 
 // CHECK-LABEL: sil hidden @$s13indirect_enum11TreeA_cases_1l1ryx_AA0C1AOyxGAGtlF : $@convention(thin) <T> (@in_guaranteed T, @guaranteed TreeA<T>, @guaranteed TreeA<T>) -> () {
 func TreeA_cases<T>(_ t: T, l: TreeA<T>, r: TreeA<T>) {
-// CHECK: bb0([[ARG1:%.*]] : @trivial $*T, [[ARG2:%.*]] : @guaranteed $TreeA<T>, [[ARG3:%.*]] : @guaranteed $TreeA<T>):
+// CHECK: bb0([[ARG1:%.*]] : $*T, [[ARG2:%.*]] : @guaranteed $TreeA<T>, [[ARG3:%.*]] : @guaranteed $TreeA<T>):
 // CHECK:         [[METATYPE:%.*]] = metatype $@thin TreeA<T>.Type
 // CHECK-NEXT:    [[NIL:%.*]] = enum $TreeA<T>, #TreeA.Nil!enumelt
 // CHECK-NOT:     destroy_value [[NIL]]
@@ -103,7 +103,7 @@
 
 // CHECK-LABEL: sil hidden @$s13indirect_enum13TreeInt_cases_1l1rySi_AA0cD0OAFtF : $@convention(thin) (Int, @guaranteed TreeInt, @guaranteed TreeInt) -> ()
 func TreeInt_cases(_ t: Int, l: TreeInt, r: TreeInt) {
-// CHECK: bb0([[ARG1:%.*]] : @trivial $Int, [[ARG2:%.*]] : @guaranteed $TreeInt, [[ARG3:%.*]] : @guaranteed $TreeInt):
+// CHECK: bb0([[ARG1:%.*]] : $Int, [[ARG2:%.*]] : @guaranteed $TreeInt, [[ARG3:%.*]] : @guaranteed $TreeInt):
 // CHECK:         [[METATYPE:%.*]] = metatype $@thin TreeInt.Type
 // CHECK-NEXT:    [[NIL:%.*]] = enum $TreeInt, #TreeInt.Nil!enumelt
 // CHECK-NOT:     destroy_value [[NIL]]
@@ -525,14 +525,14 @@
   //
   guard case .Direct(let foo) = x else { return }
 
-  // CHECK: [[YES]]({{%.*}} : @trivial $Int):
+  // CHECK: [[YES]]({{%.*}} : $Int):
   // CHECK:   [[ARG_COPY:%.*]] = copy_value [[ARG]]
   // CHECK:   switch_enum [[ARG_COPY]] : $TrivialButIndirect, case #TrivialButIndirect.Indirect!enumelt.1:  [[YES:bb[0-9]+]], case #TrivialButIndirect.Direct!enumelt.1: [[NO2:bb[0-9]+]]
 
   // CHECK: [[YES]]([[BOX:%.*]] : @owned ${ var Int }):
   // CHECK:   destroy_value [[BOX]]
 
-  // CHECK: [[NO2]]({{%.*}} : @trivial $Int):
+  // CHECK: [[NO2]]({{%.*}} : $Int):
   // CHECK-NOT: destroy_value
 
   // CHECK: [[NO]]([[PAYLOAD:%.*]] : @owned ${ var Int }):
diff --git a/test/SILGen/init_ref_delegation.swift b/test/SILGen/init_ref_delegation.swift
index 241607c..4e15400 100644
--- a/test/SILGen/init_ref_delegation.swift
+++ b/test/SILGen/init_ref_delegation.swift
@@ -6,7 +6,7 @@
 struct S {
   // CHECK-LABEL: sil hidden @$s19init_ref_delegation1SV{{[_0-9a-zA-Z]*}}fC : $@convention(method) (@thin S.Type) -> S {
   init() {
-    // CHECK: bb0([[SELF_META:%[0-9]+]] : @trivial $@thin S.Type):
+    // CHECK: bb0([[SELF_META:%[0-9]+]] : $@thin S.Type):
     // CHECK-NEXT:   [[SELF_BOX:%[0-9]+]] = alloc_box ${ var S }
     // CHECK-NEXT:   [[MARKED_SELF_BOX:%[0-9]+]] = mark_uninitialized [delegatingself] [[SELF_BOX]]
     // CHECK-NEXT:   [[PB:%.*]] = project_box [[MARKED_SELF_BOX]]
@@ -33,7 +33,7 @@
 
   // CHECK-LABEL: sil hidden @$s19init_ref_delegation1EO{{[_0-9a-zA-Z]*}}fC : $@convention(method) (@thin E.Type) -> E
   init() {
-    // CHECK: bb0([[E_META:%[0-9]+]] : @trivial $@thin E.Type):
+    // CHECK: bb0([[E_META:%[0-9]+]] : $@thin E.Type):
     // CHECK:   [[E_BOX:%[0-9]+]] = alloc_box ${ var E }
     // CHECK:   [[MARKED_E_BOX:%[0-9]+]] = mark_uninitialized [delegatingself] [[E_BOX]]
     // CHECK:   [[PB:%.*]] = project_box [[MARKED_E_BOX]]
@@ -57,7 +57,7 @@
 struct S2 {
   // CHECK-LABEL: sil hidden @$s19init_ref_delegation2S2V{{[_0-9a-zA-Z]*}}fC : $@convention(method) (@thin S2.Type) -> S2
   init() {
-    // CHECK: bb0([[S2_META:%[0-9]+]] : @trivial $@thin S2.Type):
+    // CHECK: bb0([[S2_META:%[0-9]+]] : $@thin S2.Type):
     // CHECK:   [[SELF_BOX:%[0-9]+]] = alloc_box ${ var S2 }
     // CHECK:   [[MARKED_SELF_BOX:%[0-9]+]] = mark_uninitialized [delegatingself] [[SELF_BOX]]
     // CHECK:   [[PB:%.*]] = project_box [[MARKED_SELF_BOX]]
@@ -87,7 +87,7 @@
 
  // CHECK-LABEL: sil hidden @$s19init_ref_delegation2C1C{{[_0-9a-zA-Z]*}}fC
   convenience init(x: X) {
-    // CHECK: bb0([[X:%[0-9]+]] : @trivial $X, [[SELF_META:%[0-9]+]] : @trivial $@thick C1.Type):
+    // CHECK: bb0([[X:%[0-9]+]] : $X, [[SELF_META:%[0-9]+]] : $@thick C1.Type):
     // CHECK:   [[SELF_BOX:%[0-9]+]] = alloc_box ${ var C1 }
     // CHECK:   [[MARKED_SELF_BOX:%[0-9]+]] = mark_uninitialized [delegatingself] [[SELF_BOX]]
     // CHECK:   [[PB:%.*]] = project_box [[MARKED_SELF_BOX]]
@@ -109,7 +109,7 @@
 
   // CHECK-LABEL: sil hidden @$s19init_ref_delegation2C2C{{[_0-9a-zA-Z]*}}fC
   convenience init(x: X) {
-    // CHECK: bb0([[X:%[0-9]+]] : @trivial $X, [[SELF_META:%[0-9]+]] : @trivial $@thick C2.Type):
+    // CHECK: bb0([[X:%[0-9]+]] : $X, [[SELF_META:%[0-9]+]] : $@thick C2.Type):
     // CHECK:   [[SELF_BOX:%[0-9]+]] = alloc_box ${ var C2 }
     // CHECK:   [[MARKED_SELF_BOX:%[0-9]+]] = mark_uninitialized [delegatingself] [[SELF_BOX]]
     // CHECK:   [[PB_SELF:%.*]] = project_box [[MARKED_SELF_BOX]]
diff --git a/test/SILGen/initializers.swift b/test/SILGen/initializers.swift
index b5e97c6..72a241e 100644
--- a/test/SILGen/initializers.swift
+++ b/test/SILGen/initializers.swift
@@ -359,7 +359,7 @@
   }
 
   // CHECK-LABEL: sil hidden @$s21failable_initializers17FailableBaseClassC19failAfterDelegationACSgyt_tcfC
-  // CHECK: bb0([[SELF_META:%.*]] : @trivial $@thick FailableBaseClass.Type):
+  // CHECK: bb0([[SELF_META:%.*]] : $@thick FailableBaseClass.Type):
   // CHECK:   [[SELF_BOX:%.*]] = alloc_box ${ var FailableBaseClass }, let, name "self"
   // CHECK:   [[MARKED_SELF_BOX:%.*]] = mark_uninitialized [delegatingself] [[SELF_BOX]]
   // CHECK:   [[PB_BOX:%.*]] = project_box [[MARKED_SELF_BOX]]
@@ -378,7 +378,7 @@
   // Optional to optional
   //
   // CHECK-LABEL: sil hidden @$s21failable_initializers17FailableBaseClassC20failDuringDelegationACSgyt_tcfC
-  // CHECK: bb0([[SELF_META:%.*]] : @trivial $@thick FailableBaseClass.Type):
+  // CHECK: bb0([[SELF_META:%.*]] : $@thick FailableBaseClass.Type):
   // CHECK:   [[SELF_BOX:%.*]] = alloc_box ${ var FailableBaseClass }, let, name "self"
   // CHECK:   [[MARKED_SELF_BOX:%.*]] = mark_uninitialized [delegatingself] [[SELF_BOX]]
   // CHECK:   [[PB_BOX:%.*]] = project_box [[MARKED_SELF_BOX]]
@@ -411,7 +411,7 @@
   // IUO to optional
   //
   // CHECK-LABEL: sil hidden @$s21failable_initializers17FailableBaseClassC21failDuringDelegation2ACSgyt_tcfC
-  // CHECK: bb0([[SELF_META:%.*]] : @trivial $@thick FailableBaseClass.Type):
+  // CHECK: bb0([[SELF_META:%.*]] : $@thick FailableBaseClass.Type):
   // CHECK:   [[SELF_BOX:%.*]] = alloc_box ${ var FailableBaseClass }, let, name "self"
   // CHECK:   [[MARKED_SELF_BOX:%.*]] = mark_uninitialized [delegatingself] [[SELF_BOX]]
   // CHECK:   [[PB_BOX:%.*]] = project_box [[MARKED_SELF_BOX]]
@@ -751,7 +751,7 @@
   // CHECK:   try_apply [[UNWRAP_FN2]]({{%.*}}) : $@convention(thin) (Int) -> (Int, @error Error), normal [[UNWRAP_NORMAL_BB2:bb[0-9]+]], error [[UNWRAP_ERROR_BB2:bb[0-9]+]]
   //
   // Then since this example has a
-  // CHECK: [[UNWRAP_NORMAL_BB2]]([[INT:%.*]] : @trivial $Int):
+  // CHECK: [[UNWRAP_NORMAL_BB2]]([[INT:%.*]] : $Int):
   // CHECK:   [[INIT_FN2:%.*]] = function_ref @$s21failable_initializers14ThrowBaseClassC6noFailACSi_tcfc : $@convention(method) (Int, @owned ThrowBaseClass) -> @owned ThrowBaseClass
   // CHECK:   [[NEW_SELF_CAST:%.*]] = apply [[INIT_FN2]]([[INT]], [[SELF_CAST]]) : $@convention(method) (Int, @owned ThrowBaseClass) -> @owned ThrowBaseClass
   // CHECK:   [[NEW_SELF:%.*]] = unchecked_ref_cast [[NEW_SELF_CAST]] : $ThrowBaseClass to $ThrowDerivedClass
@@ -868,7 +868,7 @@
   }
 
   // CHECK-LABEL: sil hidden @$s21failable_initializers17ThrowDerivedClassC39chainingFailDuringDelegationArgEmission0fghI4CallACSi_SitKcfC
-  // CHECK: bb0({{.*}}, [[SELF_META:%.*]] : @trivial $@thick ThrowDerivedClass.Type):
+  // CHECK: bb0({{.*}}, [[SELF_META:%.*]] : $@thick ThrowDerivedClass.Type):
   // CHECK:   [[SELF_BOX:%.*]] = alloc_box ${ var ThrowDerivedClass }, let, name "self"
   // CHECK:   [[MARKED_SELF_BOX:%.*]] = mark_uninitialized [delegatingself] [[SELF_BOX]]
   // CHECK:   [[PB_BOX:%.*]] = project_box [[MARKED_SELF_BOX]]
@@ -902,7 +902,7 @@
   }
 
   // CHECK-LABEL: sil hidden @$s21failable_initializers17ThrowDerivedClassC32chainingFailDuringDelegationCall0fg5AfterI0ACSi_SitKcfC
-  // CHECK: bb0({{.*}}, [[SELF_META:%.*]] : @trivial $@thick ThrowDerivedClass.Type):
+  // CHECK: bb0({{.*}}, [[SELF_META:%.*]] : $@thick ThrowDerivedClass.Type):
   // CHECK:   [[SELF_BOX:%.*]] = alloc_box ${ var ThrowDerivedClass }, let, name "self"
   // CHECK:   [[MARKED_SELF_BOX:%.*]] = mark_uninitialized [delegatingself] [[SELF_BOX]]
   // CHECK:   [[PB_BOX:%.*]] = project_box [[MARKED_SELF_BOX]]
@@ -1111,7 +1111,7 @@
 
 class InOutInitializer {
 // CHECK-LABEL: sil hidden @$s21failable_initializers16InOutInitializerC1xACSiz_tcfC : $@convention(method) (@inout Int, @thick InOutInitializer.Type) -> @owned InOutInitializer {
-// CHECK: bb0(%0 : @trivial $*Int, %1 : @trivial $@thick InOutInitializer.Type):
+// CHECK: bb0(%0 : $*Int, %1 : $@thick InOutInitializer.Type):
   init(x: inout Int) {}
 }
 
diff --git a/test/SILGen/lazy_global_access.swift b/test/SILGen/lazy_global_access.swift
index 836f34d..5f09180 100644
--- a/test/SILGen/lazy_global_access.swift
+++ b/test/SILGen/lazy_global_access.swift
@@ -22,3 +22,16 @@
   return (globalProp, Fooo.staticProp)
 }
 
+// rdar://46472759
+// We used to crash tying to double-emit the setter.
+struct Bar {
+  mutating func mutate() {}
+}
+func useGlobalBar() -> Bar {
+  globalBar = Bar()
+  globalBar.mutate()
+  return globalBar
+}
+private var globalBar = Bar() {
+  willSet {}
+}
diff --git a/test/SILGen/let_decls.swift b/test/SILGen/let_decls.swift
index 189e198..79f2909 100644
--- a/test/SILGen/let_decls.swift
+++ b/test/SILGen/let_decls.swift
@@ -41,7 +41,7 @@
 // The closure just returns its value, which it captured directly.
 
 // CHECK: sil private @$s9let_decls5test2yyFSiyXEfU_ : $@convention(thin) (Int) -> Int
-// CHECK: bb0(%0 : @trivial $Int):
+// CHECK: bb0(%0 : $Int):
 // CHECK:  return %0 : $Int
 
 // Verify that we can close over let decls of tuple type.
@@ -90,7 +90,7 @@
 func produceAddressOnlyStruct<T>(_ x : T) -> AddressOnlyStruct<T> {}
 
 // CHECK-LABEL: sil hidden @{{.*}}testAddressOnlyStructString
-// CHECK: bb0([[FUNC_ARG:%.*]] : @trivial $*T):
+// CHECK: bb0([[FUNC_ARG:%.*]] : $*T):
 func testAddressOnlyStructString<T>(_ a : T) -> String {
   return produceAddressOnlyStruct(a).str
   
@@ -107,7 +107,7 @@
 // CHECK-LABEL: sil hidden @{{.*}}testAddressOnlyStructElt
 func testAddressOnlyStructElt<T>(_ a : T) -> T {
   return produceAddressOnlyStruct(a).elt
-  // CHECK: bb0([[ARG0:%.*]] : @trivial $*T, [[ARG1:%.*]] : @trivial $*T):
+  // CHECK: bb0([[ARG0:%.*]] : $*T, [[ARG1:%.*]] : $*T):
   // CHECK: [[TMPSTRUCT:%[0-9]+]] = alloc_stack $AddressOnlyStruct<T>
   // CHECK: [[PRODFN:%[0-9]+]] = function_ref @{{.*}}produceAddressOnlyStruct
   // CHECK: apply [[PRODFN]]<T>([[TMPSTRUCT]], [[ARG1]])
@@ -182,7 +182,7 @@
 }
 
 // CHECK-LABEL: sil hidden @{{.*}}pass_address_only_rvalue_result
-// CHECK: bb0(%0 : @trivial $*T,
+// CHECK: bb0(%0 : $*T,
 // CHECK: [[FN:%[0-9]+]] = function_ref @{{.*}}GenericTestStructV{{.*}}ig
 // CHECK: apply [[FN]]<T>(%0,
 
@@ -199,7 +199,7 @@
 
 
 // CHECK-LABEL: sil hidden @{{.*}}test_nm_subscript_get
-// CHECK: bb0(%0 : @trivial $Int):
+// CHECK: bb0(%0 : $Int):
 // CHECK: [[FR1:%[0-9]+]] = function_ref @{{.*}}produceNMSubscriptableRValue
 // CHECK-NEXT: [[RES:%[0-9]+]] = apply [[FR1]]()
 // CHECK: [[GETFN:%[0-9]+]] = function_ref @$s9let_decls23NonMutableSubscriptableV{{[_0-9a-zA-Z]*}}ig
@@ -210,7 +210,7 @@
 }
 
 // CHECK-LABEL: sil hidden @{{.*}}test_nm_subscript_set
-// CHECK: bb0(%0 : @trivial $Int):
+// CHECK: bb0(%0 : $Int):
 // CHECK: [[FR1:%[0-9]+]] = function_ref @{{.*}}produceNMSubscriptableRValue
 // CHECK-NEXT: [[RES:%[0-9]+]] = apply [[FR1]]()
 // CHECK: [[SETFN:%[0-9]+]] = function_ref @$s9let_decls23NonMutableSubscriptableV{{[_0-9a-zA-Z]*}}is
@@ -253,7 +253,7 @@
 
 
 // CHECK-LABEL: sil hidden @{{.*}}generic_identity
-// CHECK: bb0(%0 : @trivial $*T, %1 : @trivial $*T):
+// CHECK: bb0(%0 : $*T, %1 : $*T):
 // CHECK-NEXT: debug_value_addr %1 : $*T
 // CHECK-NEXT: copy_addr %1 to [initialization] %0 : $*T
 // CHECK-NOT: destroy_addr %1
@@ -284,7 +284,7 @@
 // methods on protocol and archetypes calls.
 
 // CHECK-LABEL: sil hidden @{{.*}}testLetProtocolBases
-// CHECK: bb0(%0 : @trivial $*SimpleProtocol):
+// CHECK: bb0(%0 : $*SimpleProtocol):
 func testLetProtocolBases(_ p : SimpleProtocol) {
   // CHECK-NEXT: debug_value_addr
   // CHECK-NEXT: open_existential_addr
@@ -303,7 +303,7 @@
 }
 
 // CHECK-LABEL: sil hidden @{{.*}}testLetArchetypeBases
-// CHECK: bb0(%0 : @trivial $*T):
+// CHECK: bb0(%0 : $*T):
 func testLetArchetypeBases<T : SimpleProtocol>(_ p : T) {
   // CHECK-NEXT: debug_value_addr
   // CHECK-NEXT: witness_method $T
@@ -319,7 +319,7 @@
 }
 
 // CHECK-LABEL: sil hidden @{{.*}}testDebugValue
-// CHECK: bb0(%0 : @trivial $Int, %1 : @trivial $*SimpleProtocol):
+// CHECK: bb0(%0 : $Int, %1 : $*SimpleProtocol):
 // CHECK-NEXT: debug_value %0 : $Int, let, name "a"
 // CHECK-NEXT: debug_value_addr %1 : $*SimpleProtocol, let, name "b"
 func testDebugValue(_ a : Int, b : SimpleProtocol) -> Int {
@@ -339,7 +339,7 @@
 
 // CHECK-LABEL: sil hidden @{{.*}}testAddressOnlyTupleArgument
 func testAddressOnlyTupleArgument(_ bounds: (start: SimpleProtocol, pastEnd: Int)) {
-// CHECK:       bb0(%0 : @trivial $*SimpleProtocol, %1 : @trivial $Int):
+// CHECK:       bb0(%0 : $*SimpleProtocol, %1 : $Int):
 // CHECK-NEXT:    %2 = alloc_stack $(start: SimpleProtocol, pastEnd: Int), let, name "bounds", argno 1
 // CHECK-NEXT:    %3 = tuple_element_addr %2 : $*(start: SimpleProtocol, pastEnd: Int), 0
 // CHECK-NEXT:    copy_addr %0 to [initialization] %3 : $*SimpleProtocol
@@ -367,7 +367,7 @@
 }
 
 // CHECK-LABEL: sil hidden @{{.*}}call_auto_closure
-// CHECK: bb0([[CLOSURE:%.*]] : @trivial $@noescape @callee_guaranteed () -> Bool):
+// CHECK: bb0([[CLOSURE:%.*]] : $@noescape @callee_guaranteed () -> Bool):
 // CHECK:   apply [[CLOSURE]]() : $@noescape @callee_guaranteed () -> Bool
 // CHECK: } // end sil function '{{.*}}call_auto_closure{{.*}}'
 func call_auto_closure(x: @autoclosure () -> Bool) -> Bool {
@@ -434,7 +434,7 @@
     return a
   }
   // CHECK-LABEL: sil hidden @{{.*}}GenericStructV4getA{{.*}} : $@convention(method) <T> (@in_guaranteed GenericStruct<T>) -> @out T
-  // CHECK: bb0(%0 : @trivial $*T, %1 : @trivial $*GenericStruct<T>):
+  // CHECK: bb0(%0 : $*T, %1 : $*GenericStruct<T>):
   // CHECK-NEXT: debug_value_addr %1 : $*GenericStruct<T>, let, name "self"
   // CHECK-NEXT: %3 = struct_element_addr %1 : $*GenericStruct<T>, #GenericStruct.a
   // CHECK-NEXT: copy_addr %3 to [initialization] %0 : $*T
@@ -446,7 +446,7 @@
   }
   
   // CHECK-LABEL: sil hidden @{{.*}}GenericStructV4getB{{.*}} : $@convention(method) <T> (@in_guaranteed GenericStruct<T>) -> Int
-  // CHECK: bb0([[SELF_ADDR:%.*]] : @trivial $*GenericStruct<T>):
+  // CHECK: bb0([[SELF_ADDR:%.*]] : $*GenericStruct<T>):
   // CHECK-NEXT: debug_value_addr [[SELF_ADDR]] : $*GenericStruct<T>, let, name "self"
   // CHECK-NEXT: [[PROJ_ADDR:%.*]] = struct_element_addr [[SELF_ADDR]] : $*GenericStruct<T>, #GenericStruct.b
   // CHECK-NEXT: [[PROJ_VAL:%.*]] = load [trivial] [[PROJ_ADDR]] : $*Int
@@ -461,7 +461,7 @@
 }
 
 // CHECK-LABEL: sil hidden @{{.*}}testLetPropertyAccessOnLValueBase
-// CHECK: bb0(%0 : @trivial $LetPropertyStruct):
+// CHECK: bb0(%0 : $LetPropertyStruct):
 // CHECK:  [[ABOX:%[0-9]+]] = alloc_box ${ var LetPropertyStruct }
 // CHECK:  [[A:%[0-9]+]] = project_box [[ABOX]]
 // CHECK:   store %0 to [trivial] [[A]] : $*LetPropertyStruct
@@ -479,7 +479,7 @@
 var addressOnlyGetOnlyGlobalProperty : SimpleProtocol { get {} }
 
 // CHECK-LABEL: sil hidden @$s9let_decls018testAddressOnlyGetE14GlobalPropertyAA14SimpleProtocol_pyF
-// CHECK: bb0(%0 : @trivial $*SimpleProtocol):
+// CHECK: bb0(%0 : $*SimpleProtocol):
 // CHECK-NEXT:   // function_ref
 // CHECK-NEXT:  %1 = function_ref @$s9let_decls014addressOnlyGetD14GlobalPropertyAA14SimpleProtocol_pvg
 // CHECK-NEXT:  %2 = apply %1(%0) : $@convention(thin) () -> @out SimpleProtocol
diff --git a/test/SILGen/lifetime.swift b/test/SILGen/lifetime.swift
index 15ea1e6..0d9dca2 100644
--- a/test/SILGen/lifetime.swift
+++ b/test/SILGen/lifetime.swift
@@ -201,7 +201,7 @@
 // CHECK-LABEL: sil hidden @$s8lifetime16reftype_reassign{{[_0-9a-zA-Z]*}}F
 func reftype_reassign(_ a: inout Ref, b: Ref) {
     var b = b
-    // CHECK: bb0([[AADDR:%[0-9]+]] : @trivial $*Ref, [[B1:%[0-9]+]] : @guaranteed $Ref):
+    // CHECK: bb0([[AADDR:%[0-9]+]] : $*Ref, [[B1:%[0-9]+]] : @guaranteed $Ref):
     // CHECK: [[BADDR:%[0-9]+]] = alloc_box ${ var Ref }
     // CHECK: [[PBB:%.*]] = project_box [[BADDR]]
     a = b
@@ -229,7 +229,7 @@
 
   // -- loadable value constructor:
   // CHECK-LABEL: sil hidden @$s8lifetime5AlephV{{[_0-9a-zA-Z]*}}fC : $@convention(method) (@owned Ref, Val, @thin Aleph.Type) -> @owned Aleph
-  // CHECK: bb0([[A:%.*]] : @owned $Ref, [[B:%.*]] : @trivial $Val, {{%.*}} : @trivial $@thin Aleph.Type):
+  // CHECK: bb0([[A:%.*]] : @owned $Ref, [[B:%.*]] : $Val, {{%.*}} : $@thin Aleph.Type):
   // CHECK-NEXT:   [[RET:%.*]] = struct $Aleph ([[A]] : {{.*}}, [[B]] : {{.*}})
   // CHECK-NEXT:   return [[RET]]
 }
@@ -251,7 +251,7 @@
 
   // -- address-only value constructor:
   // CHECK-LABEL: sil hidden @$s8lifetime6DalethV{{[_0-9a-zA-Z]*}}fC : $@convention(method) (@owned Aleph, @owned Beth, @in Unloadable, @thin Daleth.Type) -> @out Daleth {
-  // CHECK: bb0([[THIS:%.*]] : @trivial $*Daleth, [[A:%.*]] : @owned $Aleph, [[B:%.*]] : @owned $Beth, [[C:%.*]] : @trivial $*Unloadable, {{%.*}} : @trivial $@thin Daleth.Type):
+  // CHECK: bb0([[THIS:%.*]] : $*Daleth, [[A:%.*]] : @owned $Aleph, [[B:%.*]] : @owned $Beth, [[C:%.*]] : $*Unloadable, {{%.*}} : $@thin Daleth.Type):
   // CHECK-NEXT:   [[A_ADDR:%.*]] = struct_element_addr [[THIS]] : $*Daleth, #Daleth.a
   // CHECK-NEXT:   store [[A]] to [init] [[A_ADDR]]
   // CHECK-NEXT:   [[B_ADDR:%.*]] = struct_element_addr [[THIS]] : $*Daleth, #Daleth.b
@@ -266,7 +266,7 @@
   
   // -- default allocator:
   // CHECK-LABEL: sil hidden @$s8lifetime2HeC{{[_0-9a-zA-Z]*}}fC : $@convention(method) (@thick He.Type) -> @owned He {
-  // CHECK: bb0({{%.*}} : @trivial $@thick He.Type):
+  // CHECK: bb0({{%.*}} : $@thick He.Type):
   // CHECK-NEXT:   [[THIS:%.*]] = alloc_ref $He
   // CHECK-NEXT:   // function_ref lifetime.He.init
   // CHECK-NEXT:   [[INIT:%.*]] = function_ref @$s8lifetime2HeC{{[_0-9a-zA-Z]*}}fc : $@convention(method) (@owned He) -> @owned He
@@ -293,7 +293,7 @@
 
   // -- loadable value initializer with tuple destructuring:
   // CHECK-LABEL: sil hidden @$s8lifetime3WawV{{[_0-9a-zA-Z]*}}fC : $@convention(method) (@owned Ref, Val, Val, @thin Waw.Type) -> @owned Waw 
-  // CHECK: bb0([[A0:%.*]] : @owned $Ref, [[A1:%.*]] : @trivial $Val, [[B:%.*]] : @trivial $Val, {{%.*}} : @trivial $@thin Waw.Type):
+  // CHECK: bb0([[A0:%.*]] : @owned $Ref, [[A1:%.*]] : $Val, [[B:%.*]] : $Val, {{%.*}} : $@thin Waw.Type):
   // CHECK-NEXT:   [[A:%.*]] = tuple ([[A0]] : {{.*}}, [[A1]] : {{.*}})
   // CHECK-NEXT:   [[RET:%.*]] = struct $Waw ([[A]] : {{.*}}, [[B]] : {{.*}})
   // CHECK-NEXT:   return [[RET]]
@@ -305,7 +305,7 @@
 
   // -- address-only value initializer with tuple destructuring:
   // CHECK-LABEL: sil hidden @$s8lifetime5ZayinV{{[_0-9a-zA-Z]*}}fC : $@convention(method) (@in Unloadable, Val, @in Unloadable, @thin Zayin.Type) -> @out Zayin
-  // CHECK: bb0([[THIS:%.*]] : @trivial $*Zayin, [[A0:%.*]] : @trivial $*Unloadable, [[A1:%.*]] : @trivial $Val, [[B:%.*]] : @trivial $*Unloadable, {{%.*}} : @trivial $@thin Zayin.Type):
+  // CHECK: bb0([[THIS:%.*]] : $*Zayin, [[A0:%.*]] : $*Unloadable, [[A1:%.*]] : $Val, [[B:%.*]] : $*Unloadable, {{%.*}} : $@thin Zayin.Type):
   // CHECK-NEXT:   [[THIS_A_ADDR:%.*]] = struct_element_addr [[THIS]] : $*Zayin, #Zayin.a
   // CHECK-NEXT:   [[THIS_A0_ADDR:%.*]] = tuple_element_addr [[THIS_A_ADDR]] : {{.*}}, 0
   // CHECK-NEXT:   [[THIS_A1_ADDR:%.*]] = tuple_element_addr [[THIS_A_ADDR]] : {{.*}}, 1
@@ -386,7 +386,7 @@
   init() {
   // -- allocating entry point
   // CHECK-LABEL: sil hidden @$s8lifetime3FooC{{[_0-9a-zA-Z]*}}fC :
-    // CHECK: bb0([[METATYPE:%[0-9]+]] : @trivial $@thick Foo<T>.Type):
+    // CHECK: bb0([[METATYPE:%[0-9]+]] : $@thick Foo<T>.Type):
     // CHECK: [[THIS:%[0-9]+]] = alloc_ref $Foo<T>
     // CHECK: [[INIT_METHOD:%[0-9]+]] = function_ref @$s8lifetime3FooC{{[_0-9a-zA-Z]*}}fc
     // CHECK: [[INIT_THIS:%[0-9]+]] = apply [[INIT_METHOD]]<{{.*}}>([[THIS]])
@@ -448,7 +448,7 @@
 
   // -- allocating entry point
   // CHECK-LABEL: sil hidden @$s8lifetime3FooC{{[_0-9a-zA-Z]*}}fC :
-    // CHECK: bb0([[CHI:%[0-9]+]] : @trivial $Int, [[METATYPE:%[0-9]+]] : @trivial $@thick Foo<T>.Type):
+    // CHECK: bb0([[CHI:%[0-9]+]] : $Int, [[METATYPE:%[0-9]+]] : $@thick Foo<T>.Type):
     // CHECK: [[THIS:%[0-9]+]] = alloc_ref $Foo<T>
     // CHECK: [[INIT_METHOD:%[0-9]+]] = function_ref @$s8lifetime3FooC{{[_0-9a-zA-Z]*}}fc
     // CHECK: [[INIT_THIS:%[0-9]+]] = apply [[INIT_METHOD]]<{{.*}}>([[CHI]], [[THIS]])
@@ -456,7 +456,7 @@
 
   // -- initializing entry point
   // CHECK-LABEL: sil hidden @$s8lifetime3FooC3chiACyxGSi_tcfc : $@convention(method) <T> (Int, @owned Foo<T>) -> @owned Foo<T> {
-    // CHECK: bb0([[CHI:%[0-9]+]] : @trivial $Int, [[THISIN:%[0-9]+]] : @owned $Foo<T>):
+    // CHECK: bb0([[CHI:%[0-9]+]] : $Int, [[THISIN:%[0-9]+]] : @owned $Foo<T>):
     // CHECK:   [[THIS:%[0-9]+]] = mark_uninitialized [rootself] [[THISIN]]
 
     // -- First we initialize #Foo.y.
@@ -641,7 +641,7 @@
   // Loadable struct initializer
   // CHECK-LABEL: sil hidden @$s8lifetime3BarV{{[_0-9a-zA-Z]*}}fC
   init() {
-    // CHECK: bb0([[METATYPE:%[0-9]+]] : @trivial $@thin Bar.Type):
+    // CHECK: bb0([[METATYPE:%[0-9]+]] : $@thin Bar.Type):
     // CHECK: [[SELF_BOX:%[0-9]+]] = alloc_box ${ var Bar }
     // CHECK: [[MARKED_SELF_BOX:%[0-9]+]] = mark_uninitialized [rootself] [[SELF_BOX]]
     // CHECK: [[PB_BOX:%.*]] = project_box [[MARKED_SELF_BOX]]
@@ -669,7 +669,7 @@
   // Address-only struct initializer
   // CHECK-LABEL: sil hidden @$s8lifetime3BasV{{[_0-9a-zA-Z]*}}fC
   init(yy:T) {
-    // CHECK: bb0([[THISADDRPTR:%[0-9]+]] : @trivial $*Bas<T>, [[YYADDR:%[0-9]+]] : @trivial $*T, [[META:%[0-9]+]] : @trivial $@thin Bas<T>.Type):
+    // CHECK: bb0([[THISADDRPTR:%[0-9]+]] : $*Bas<T>, [[YYADDR:%[0-9]+]] : $*T, [[META:%[0-9]+]] : $@thin Bas<T>.Type):
     // CHECK: [[SELF_BOX:%[0-9]+]] = alloc_box $<τ_0_0> { var Bas<τ_0_0> } <T>
     // CHECK: [[MARKED_SELF_BOX:%[0-9]+]] = mark_uninitialized [rootself] [[SELF_BOX]]
     // CHECK: [[PB_BOX:%.*]] = project_box [[MARKED_SELF_BOX]]
@@ -698,7 +698,7 @@
 class B { init(y:Int) {} }
 class D : B {
   // CHECK-LABEL: sil hidden @$s8lifetime1DC1x1yACSi_Sitcfc
-  // CHECK: bb0([[X:%[0-9]+]] : @trivial $Int, [[Y:%[0-9]+]] : @trivial $Int, [[SELF:%[0-9]+]] : @owned $D):
+  // CHECK: bb0([[X:%[0-9]+]] : $Int, [[Y:%[0-9]+]] : $Int, [[SELF:%[0-9]+]] : @owned $D):
   init(x: Int, y: Int) {
     var x = x
     var y = y
diff --git a/test/SILGen/local_recursion.swift b/test/SILGen/local_recursion.swift
index 29e65e8..822bbd4 100644
--- a/test/SILGen/local_recursion.swift
+++ b/test/SILGen/local_recursion.swift
@@ -2,7 +2,7 @@
 // RUN: %target-swift-emit-silgen -enable-astscope-lookup  -parse-as-library -enable-sil-ownership %s | %FileCheck %s
 
 // CHECK-LABEL: sil hidden @$s15local_recursionAA_1yySi_SitF : $@convention(thin) (Int, Int) -> () {
-// CHECK:       bb0([[X:%0]] : @trivial $Int, [[Y:%1]] : @trivial $Int):
+// CHECK:       bb0([[X:%0]] : $Int, [[Y:%1]] : $Int):
 func local_recursion(_ x: Int, y: Int) {
   func self_recursive(_ a: Int) {
     self_recursive(x + a)
@@ -86,25 +86,25 @@
 }
 
 // CHECK: sil private [[SELF_RECURSIVE]]
-// CHECK: bb0([[A:%0]] : @trivial $Int, [[X:%1]] : @trivial $Int):
+// CHECK: bb0([[A:%0]] : $Int, [[X:%1]] : $Int):
 // CHECK:   [[SELF_REF:%.*]] = function_ref [[SELF_RECURSIVE]]
 // CHECK:   apply [[SELF_REF]]({{.*}}, [[X]])
 
 // CHECK: sil private [[MUTUALLY_RECURSIVE_1]]
-// CHECK: bb0([[A:%0]] : @trivial $Int, [[Y:%1]] : @trivial $Int, [[X:%2]] : @trivial $Int):
+// CHECK: bb0([[A:%0]] : $Int, [[Y:%1]] : $Int, [[X:%2]] : $Int):
 // CHECK:   [[MUTUALLY_RECURSIVE_REF:%.*]] = function_ref [[MUTUALLY_RECURSIVE_2:@\$s15local_recursionAA_1yySi_SitF20mutually_recursive_2L_yySiF]]
 // CHECK:   apply [[MUTUALLY_RECURSIVE_REF]]({{.*}}, [[X]], [[Y]])
 // CHECK: sil private [[MUTUALLY_RECURSIVE_2]]
-// CHECK: bb0([[B:%0]] : @trivial $Int, [[X:%1]] : @trivial $Int, [[Y:%2]] : @trivial $Int):
+// CHECK: bb0([[B:%0]] : $Int, [[X:%1]] : $Int, [[Y:%2]] : $Int):
 // CHECK:   [[MUTUALLY_RECURSIVE_REF:%.*]] = function_ref [[MUTUALLY_RECURSIVE_1]]
 // CHECK:   apply [[MUTUALLY_RECURSIVE_REF]]({{.*}}, [[Y]], [[X]])
 
 
 // CHECK: sil private [[TRANS_CAPTURE_1:@\$s15local_recursionAA_1yySi_SitF20transitive_capture_1L_yS2iF]]
-// CHECK: bb0([[A:%0]] : @trivial $Int, [[X:%1]] : @trivial $Int):
+// CHECK: bb0([[A:%0]] : $Int, [[X:%1]] : $Int):
 
 // CHECK: sil private [[TRANS_CAPTURE]]
-// CHECK: bb0([[B:%0]] : @trivial $Int, [[X:%1]] : @trivial $Int, [[Y:%2]] : @trivial $Int):
+// CHECK: bb0([[B:%0]] : $Int, [[X:%1]] : $Int, [[Y:%2]] : $Int):
 // CHECK:   [[TRANS_CAPTURE_1_REF:%.*]] = function_ref [[TRANS_CAPTURE_1]]
 // CHECK:   apply [[TRANS_CAPTURE_1_REF]]({{.*}}, [[X]])
 
diff --git a/test/SILGen/metatype_object_conversion.swift b/test/SILGen/metatype_object_conversion.swift
index b4a232b..acfc327 100644
--- a/test/SILGen/metatype_object_conversion.swift
+++ b/test/SILGen/metatype_object_conversion.swift
@@ -10,7 +10,7 @@
 
 // CHECK-LABEL: sil hidden @$s26metatype_object_conversion0A8ToObjectyyXlAA1CCmF
 func metatypeToObject(_ x: C.Type) -> AnyObject {
-  // CHECK: bb0([[THICK:%.*]] : @trivial $@thick C.Type):
+  // CHECK: bb0([[THICK:%.*]] : $@thick C.Type):
   // CHECK:   [[OBJC:%.*]] = thick_to_objc_metatype [[THICK]]
   // CHECK:   [[OBJECT:%.*]] = objc_metatype_to_object [[OBJC]]
   // CHECK:   return [[OBJECT]]
@@ -19,7 +19,7 @@
 
 // CHECK-LABEL: sil hidden @$s26metatype_object_conversion27existentialMetatypeToObjectyyXlAA2CP_pXpF
 func existentialMetatypeToObject(_ x: CP.Type) -> AnyObject {
-  // CHECK: bb0([[THICK:%.*]] : @trivial $@thick CP.Type):
+  // CHECK: bb0([[THICK:%.*]] : $@thick CP.Type):
   // CHECK:   [[OBJC:%.*]] = thick_to_objc_metatype [[THICK]]
   // CHECK:   [[OBJECT:%.*]] = objc_existential_metatype_to_object [[OBJC]]
   // CHECK:   return [[OBJECT]]
diff --git a/test/SILGen/metatypes.swift b/test/SILGen/metatypes.swift
index d4ea64f..912dc64 100644
--- a/test/SILGen/metatypes.swift
+++ b/test/SILGen/metatypes.swift
@@ -53,7 +53,7 @@
 }
 
 // CHECK-LABEL: sil hidden @$s9metatypes010archetype_A0{{[_0-9a-zA-Z]*}}F
-// CHECK: bb0(%0 : @trivial $*T):
+// CHECK: bb0(%0 : $*T):
 func archetype_metatypes<T>(t: T) -> (T.Type, T.Type) {
   // CHECK: [[STATIC_T:%[0-9]+]] = metatype $@thick T.Type
   // CHECK: [[DYN_T:%[0-9]+]] = value_metatype $@thick T.Type, %0
diff --git a/test/SILGen/modify.swift b/test/SILGen/modify.swift
index 1b975ae..df939bf 100644
--- a/test/SILGen/modify.swift
+++ b/test/SILGen/modify.swift
@@ -59,7 +59,7 @@
 extension Derived : Abstractable {}
 
 // CHECK-LABEL: sil private [transparent] [thunk] @$s6modify7DerivedCAA12AbstractableA2aDP14storedFunction6ResultQzycvMTW
-// CHECK: bb0(%0 : @trivial $*Derived):
+// CHECK: bb0(%0 : $*Derived):
 // CHECK-NEXT: [[T0:%.*]] = load_borrow %0 : $*Derived
 // CHECK-NEXT: [[SELF:%.*]] = upcast [[T0]] : $Derived to $Base
 // CHECK-NEXT: [[FN:%.*]] = class_method [[SELF]] : $Base, #Base.storedFunction!modify.1
@@ -84,7 +84,7 @@
 // CHECK-NEXT: return
 
 // CHECK-LABEL: sil private [transparent] [thunk] @$s6modify7DerivedCAA12AbstractableA2aDP19finalStoredFunction6ResultQzycvMTW
-// CHECK: bb0(%0 : @trivial $*Derived):
+// CHECK: bb0(%0 : $*Derived):
 // CHECK-NEXT: [[T0:%.*]] = load_borrow %0 : $*Derived
 // CHECK-NEXT: [[SELF:%.*]] = upcast [[T0]] : $Derived to $Base
 // CHECK-NEXT: // function_ref
@@ -110,7 +110,7 @@
 // CHECK-NEXT: return
 
 // CHECK-LABEL: sil private [transparent] [thunk] @$s6modify7DerivedCAA12AbstractableA2aDP14staticFunction6ResultQzycvMZTW
-// CHECK: bb0(%0 : @trivial $@thick Derived.Type):
+// CHECK: bb0(%0 : $@thick Derived.Type):
 // CHECK-NEXT: [[SELF:%.*]] = upcast %0 : $@thick Derived.Type to $@thick Base.Type
 // CHECK-NEXT: // function_ref
 // CHECK-NEXT: [[FN:%.*]] = function_ref @$s6modify4BaseC14staticFunctionSiycvMZ
@@ -283,7 +283,7 @@
 }
 
 // CHECK-LABEL: sil hidden [transparent] @$s6modify4BillV5totalSivM : $@yield_once @convention(method) (@inout Bill) -> @yields @inout Int {
-// CHECK: bb0([[SELF:%.*]] : @trivial $*Bill):
+// CHECK: bb0([[SELF:%.*]] : $*Bill):
 // CHECK:   [[ACCESS:%.*]] = begin_access [modify] [unknown] [[SELF]]
 // CHECK:   [[T0:%.*]] = struct_element_addr [[ACCESS]] : $*Bill, #Bill.total
 // CHECK:   yield [[T0]]
@@ -291,7 +291,7 @@
 // CHECK: }
 
 // CHECK-LABEL:  sil private [transparent] [thunk] @$s6modify4BillVAA8TotalledA2aDP5totalSivMTW : $@yield_once @convention(witness_method: Totalled) (@inout Bill) -> @yields @inout Int {
-// CHECK:        bb0([[SELF:%.*]] : @trivial $*Bill):
+// CHECK:        bb0([[SELF:%.*]] : $*Bill):
 // CHECK:          [[T0:%.*]] = function_ref @$s6modify4BillV5totalSivM
 // CHECK-NEXT:     ([[T1:%.*]], [[TOKEN:%.*]]) = begin_apply [[T0]]([[SELF]])
 // CHECK-NEXT:     yield [[T1]] : $*Int, resume bb1, unwind bb2
diff --git a/test/SILGen/modify_objc.swift b/test/SILGen/modify_objc.swift
index c500948..95c3c34 100644
--- a/test/SILGen/modify_objc.swift
+++ b/test/SILGen/modify_objc.swift
@@ -18,7 +18,7 @@
 //   Protocol witness for 'block'.
 // CHECK-LABEL: sil shared [transparent] [serialized] [thunk] @$sSo22ClassWithBlockPropertyC11modify_objc08ProtocolbcD0A2cDP5blockySSSgcSgvMTW :
 // CHECK-SAME:    $@yield_once @convention(witness_method: ProtocolWithBlockProperty) (@inout ClassWithBlockProperty) -> @yields @inout Optional<@callee_guaranteed (@guaranteed Optional<String>) -> ()>
-// CHECK:    bb0([[SELF_INDIRECT:%.*]] : @trivial $*ClassWithBlockProperty):
+// CHECK:    bb0([[SELF_INDIRECT:%.*]] : $*ClassWithBlockProperty):
 // CHECK-NEXT: [[SELF:%.*]] = load_borrow [[SELF_INDIRECT]] : $*ClassWithBlockProperty
 // CHECK-NEXT: // function_ref
 // CHECK-NEXT: [[FN:%.*]] = function_ref @$sSo22ClassWithBlockPropertyC5blockySSSgcSgvM
@@ -31,7 +31,7 @@
 //   Protocol witness for 'dependentBlock'
 // CHECK-LABEL: sil shared [transparent] [serialized] [thunk] @$sSo22ClassWithBlockPropertyC11modify_objc08ProtocolbcD0A2cDP09dependentC0y14DependentInputQzcSgvMTW :
 // CHECK-SAME:    $@yield_once @convention(witness_method: ProtocolWithBlockProperty) (@inout ClassWithBlockProperty) -> @yields @inout Optional<@callee_guaranteed (@in_guaranteed Optional<String>) -> ()>
-// CHECK:    bb0([[SELF_INDIRECT:%.*]] : @trivial $*ClassWithBlockProperty):
+// CHECK:    bb0([[SELF_INDIRECT:%.*]] : $*ClassWithBlockProperty):
 // CHECK-NEXT: [[SELF:%.*]] = load_borrow [[SELF_INDIRECT]] : $*ClassWithBlockProperty
 // CHECK-NEXT: // function_ref
 // CHECK-NEXT: [[FN:%.*]] = function_ref @$sSo22ClassWithBlockPropertyC09dependentC0ySSSgcSgvM
diff --git a/test/SILGen/nested_generics.swift b/test/SILGen/nested_generics.swift
index 27dff93..3ec4bb8 100644
--- a/test/SILGen/nested_generics.swift
+++ b/test/SILGen/nested_generics.swift
@@ -227,7 +227,7 @@
 // CHECK-LABEL: sil shared [transparent] [serializable] [reabstraction_thunk] @$s15nested_generics6PizzasV7NewYorkCyAA6PepperV_GAA7HotDogsC8AmericanVIeggd_AhLIeggr_TR : $@convention(thin) (@guaranteed Pizzas<Pepper>.NewYork, @guaranteed @callee_guaranteed (@guaranteed Pizzas<Pepper>.NewYork) -> HotDogs.American) -> @out HotDogs.American
 
 // CHECK-LABEL: sil private [transparent] [thunk] @$s15nested_generics9OuterRingC05InnerD0Cyx_qd__GAA30ProtocolWithGenericRequirementA2aGP6method1t1u1v1TQz_1UQzqd__tAN_APqd__tlFTW : $@convention(witness_method: ProtocolWithGenericRequirement) <τ_0_0><τ_1_0><τ_2_0> (@in_guaranteed τ_0_0, @in_guaranteed τ_1_0, @in_guaranteed τ_2_0, @in_guaranteed OuterRing<τ_0_0>.InnerRing<τ_1_0>) -> (@out τ_0_0, @out τ_1_0, @out τ_2_0) {
-// CHECK: bb0([[T:%[0-9]+]] : @trivial $*τ_0_0, [[U:%[0-9]+]] : @trivial $*τ_1_0, [[V:%[0-9]+]] : @trivial $*τ_2_0, [[TOut:%[0-9]+]] : @trivial $*τ_0_0, [[UOut:%[0-9]+]] : @trivial $*τ_1_0, [[VOut:%[0-9]+]] : @trivial $*τ_2_0, [[SELF:%[0-9]+]] : @trivial $*OuterRing<τ_0_0>.InnerRing<τ_1_0>):
+// CHECK: bb0([[T:%[0-9]+]] : $*τ_0_0, [[U:%[0-9]+]] : $*τ_1_0, [[V:%[0-9]+]] : $*τ_2_0, [[TOut:%[0-9]+]] : $*τ_0_0, [[UOut:%[0-9]+]] : $*τ_1_0, [[VOut:%[0-9]+]] : $*τ_2_0, [[SELF:%[0-9]+]] : $*OuterRing<τ_0_0>.InnerRing<τ_1_0>):
 // CHECK:   [[SELF_COPY_VAL:%[0-9]+]] = load_borrow [[SELF]] : $*OuterRing<τ_0_0>.InnerRing<τ_1_0>
 // CHECK:   [[METHOD:%[0-9]+]] = class_method [[SELF_COPY_VAL]] : $OuterRing<τ_0_0>.InnerRing<τ_1_0>, #OuterRing.InnerRing.method!1 : <T><U><V> (OuterRing<T>.InnerRing<U>) -> (T, U, V) -> (T, U, V), $@convention(method) <τ_0_0><τ_1_0><τ_2_0> (@in_guaranteed τ_0_0, @in_guaranteed τ_1_0, @in_guaranteed τ_2_0, @guaranteed OuterRing<τ_0_0>.InnerRing<τ_1_0>) -> (@out τ_0_0, @out τ_1_0, @out τ_2_0)
 // CHECK:   apply [[METHOD]]<τ_0_0, τ_1_0, τ_2_0>([[T]], [[U]], [[V]], [[TOut]], [[UOut]], [[VOut]], [[SELF_COPY_VAL]]) : $@convention(method) <τ_0_0><τ_1_0><τ_2_0> (@in_guaranteed τ_0_0, @in_guaranteed τ_1_0, @in_guaranteed τ_2_0, @guaranteed OuterRing<τ_0_0>.InnerRing<τ_1_0>) -> (@out τ_0_0, @out τ_1_0, @out τ_2_0)
diff --git a/test/SILGen/objc_blocks_bridging.swift b/test/SILGen/objc_blocks_bridging.swift
index 1a7fe02..921ed4c 100644
--- a/test/SILGen/objc_blocks_bridging.swift
+++ b/test/SILGen/objc_blocks_bridging.swift
@@ -66,7 +66,7 @@
   }
 
   // CHECK-LABEL: sil hidden [thunk] @$s20objc_blocks_bridging3FooC16cFunctionPointer{{[_0-9a-zA-Z]*}}FTo
-  // CHECK:       bb0([[F:%.*]] : @trivial $@convention(c) @noescape (Int) -> Int, [[X:%.*]] : @trivial $Int, [[SELF:%.*]] : @unowned $Foo):
+  // CHECK:       bb0([[F:%.*]] : $@convention(c) @noescape (Int) -> Int, [[X:%.*]] : $Int, [[SELF:%.*]] : @unowned $Foo):
   // CHECK:         [[SELF_COPY:%.*]] = copy_value [[SELF]]
   // CHECK:         [[BORROWED_SELF_COPY:%.*]] = begin_borrow [[SELF_COPY]]
   // CHECK:         [[NATIVE:%.*]] = function_ref @$s20objc_blocks_bridging3FooC16cFunctionPointer{{[_0-9a-zA-Z]*}}F
@@ -96,7 +96,7 @@
   // CHECK-LABEL: sil hidden @$s20objc_blocks_bridging3FooC19optCFunctionPointer{{[_0-9a-zA-Z]*}}F
   // CHECK:         switch_enum %0
   //
-  // CHECK: bb1([[FP_BUF:%.*]] : @trivial $@convention(c) (NSString) -> @autoreleased NSString):
+  // CHECK: bb1([[FP_BUF:%.*]] : $@convention(c) (NSString) -> @autoreleased NSString):
   @objc dynamic func optCFunctionPointer(_ fp: (@convention(c) (String) -> String)?, x: String) -> String? {
     return fp?(x)
   }
diff --git a/test/SILGen/objc_bridging.swift b/test/SILGen/objc_bridging.swift
index d81fdee..25ae9bd 100644
--- a/test/SILGen/objc_bridging.swift
+++ b/test/SILGen/objc_bridging.swift
@@ -144,7 +144,7 @@
   f.setZim(b)
 }
 // CHECK-ios-i386-LABEL: sil hidden @$s13objc_bridging6setZim{{.*}}F
-// CHECK-ios-i386: bb0([[ARG0:%.*]] : @guaranteed $Foo, [[ARG1:%.*]] : @trivial $Bool):
+// CHECK-ios-i386: bb0([[ARG0:%.*]] : @guaranteed $Foo, [[ARG1:%.*]] : $Bool):
 // CHECK-ios-i386:   [[CONVERT:%.*]] = function_ref @swift_BoolToObjCBool : $@convention(thin) (Bool) -> ObjCBool
 // CHECK-ios-i386:   [[OBJC_BOOL:%.*]] = apply [[CONVERT]]([[ARG1]]) : $@convention(thin) (Bool) -> ObjCBool
 // CHECK-ios-i386:   [[METHOD:%.*]] = objc_method [[ARG0]] : $Foo, #Foo.setZim!1.foreign
@@ -153,7 +153,7 @@
 // CHECK-ios-i386: }
 
 // CHECK-macosx-x86_64-LABEL: sil hidden @$s13objc_bridging6setZim{{.*}}F
-// CHECK-macosx-x86_64: bb0([[ARG0:%.*]] : @guaranteed $Foo, [[ARG1:%.*]] : @trivial $Bool):
+// CHECK-macosx-x86_64: bb0([[ARG0:%.*]] : @guaranteed $Foo, [[ARG1:%.*]] : $Bool):
 // CHECK-macosx-x86_64:   [[CONVERT:%.*]] = function_ref @swift_BoolToObjCBool : $@convention(thin) (Bool) -> ObjCBool
 // CHECK-macosx-x86_64:   [[OBJC_BOOL:%.*]] = apply [[CONVERT]]([[ARG1]]) : $@convention(thin) (Bool) -> ObjCBool
 // CHECK-macosx-x86_64:   [[METHOD:%.*]] = objc_method [[ARG0]] : $Foo, #Foo.setZim!1.foreign
@@ -162,21 +162,21 @@
 // CHECK-macosx-x86_64: }
 
 // CHECK-ios-x86_64-LABEL: sil hidden @$s13objc_bridging6setZim{{.*}}F
-// CHECK-ios-x86_64: bb0([[ARG0:%.*]] : @guaranteed $Foo, [[ARG1:%.*]] : @trivial $Bool):
+// CHECK-ios-x86_64: bb0([[ARG0:%.*]] : @guaranteed $Foo, [[ARG1:%.*]] : $Bool):
 // CHECK-ios-x86_64:   [[METHOD:%.*]] = objc_method [[ARG0]] : $Foo, #Foo.setZim!1.foreign
 // CHECK-ios-x86_64:   apply [[METHOD]]([[ARG1]], [[ARG0]]) : $@convention(objc_method) (Bool, Foo) -> ()
 // CHECK-ios-x86_64-NOT:   destroy_value [[ARG0]]
 // CHECK-ios-x86_64: }
 
 // CHECK-arm64-LABEL: sil hidden @$s13objc_bridging6setZim{{.*}}F
-// CHECK-arm64: bb0([[ARG0:%.*]] : @guaranteed $Foo, [[ARG1:%.*]] : @trivial $Bool):
+// CHECK-arm64: bb0([[ARG0:%.*]] : @guaranteed $Foo, [[ARG1:%.*]] : $Bool):
 // CHECK-arm64:   [[METHOD:%.*]] = objc_method [[ARG0]] : $Foo, #Foo.setZim!1.foreign
 // CHECK-arm64:   apply [[METHOD]]([[ARG1]], [[ARG0]]) : $@convention(objc_method) (Bool, Foo) -> ()
 // CHECK-arm64-NOT:   destroy_value [[ARG0]]
 // CHECK-arm64: }
 
 // CHECK-watchos-i386-LABEL: sil hidden @$s13objc_bridging6setZim{{.*}}F
-// CHECK-watchos-i386: bb0([[ARG0:%.*]] : @guaranteed $Foo, [[ARG1:%.*]] : @trivial $Bool):
+// CHECK-watchos-i386: bb0([[ARG0:%.*]] : @guaranteed $Foo, [[ARG1:%.*]] : $Bool):
 // CHECK-watchos-i386:   [[METHOD:%.*]] = objc_method [[ARG0]] : $Foo, #Foo.setZim!1.foreign
 // CHECK-watchos-i386:   apply [[METHOD]]([[ARG1]], [[ARG0]]) : $@convention(objc_method) (Bool, Foo) -> ()
 // CHECK-watchos-i386-NOT:   destroy_value [[ARG0]]
@@ -198,7 +198,7 @@
   f.setZang(b)
 }
 // CHECK-LABEL: sil hidden @$s13objc_bridging7setZangyySo3FooC_SbtF
-// CHECK: bb0([[ARG0:%.*]] : @guaranteed $Foo, [[ARG1:%.*]] : @trivial $Bool):
+// CHECK: bb0([[ARG0:%.*]] : @guaranteed $Foo, [[ARG1:%.*]] : $Bool):
 // CHECK:   [[METHOD:%.*]] = objc_method [[ARG0]] : $Foo, #Foo.setZang!1.foreign
 // CHECK:   apply [[METHOD]]([[ARG1]], [[ARG0]]) : $@convention(objc_method) (Bool, Foo) -> ()
 // CHECK-NOT:   destroy_value [[ARG0]]
@@ -567,7 +567,7 @@
 }
 
 // CHECK-LABEL: sil hidden @$s13objc_bridging16updateFridgeTemp{{.*}}F
-// CHECK: bb0([[HOME:%[0-9]+]] : @guaranteed $APPHouse, [[DELTA:%[0-9]+]] : @trivial $Double):
+// CHECK: bb0([[HOME:%[0-9]+]] : @guaranteed $APPHouse, [[DELTA:%[0-9]+]] : $Double):
 func updateFridgeTemp(_ home: APPHouse, delta: Double) {
   // Temporary fridge
   // CHECK: [[TEMP_FRIDGE:%[0-9]+]]  = alloc_stack $Refrigerator
@@ -614,7 +614,7 @@
 }
 
 // CHECK-LABEL: sil shared [transparent] [serializable] [reabstraction_thunk] @$sypypIegnr_yXlyXlIeyBya_TR : $@convention(c) (@inout_aliasable @block_storage @callee_guaranteed (@in_guaranteed Any) -> @out Any, AnyObject) -> @autoreleased AnyObject
-// CHECK: bb0(%0 : @trivial $*@block_storage @callee_guaranteed (@in_guaranteed Any) -> @out Any, %1 : @unowned $AnyObject):
+// CHECK: bb0(%0 : $*@block_storage @callee_guaranteed (@in_guaranteed Any) -> @out Any, %1 : @unowned $AnyObject):
 // CHECK:   [[T0:%.*]] = copy_value %1 : $AnyObject
 // CHECK:   [[T1:%.*]] = open_existential_ref [[T0]] : $AnyObject
 // CHECK:   [[ARG:%.*]] = alloc_stack $Any
diff --git a/test/SILGen/objc_bridging_any.swift b/test/SILGen/objc_bridging_any.swift
index dad5d4d..ba6d968 100644
--- a/test/SILGen/objc_bridging_any.swift
+++ b/test/SILGen/objc_bridging_any.swift
@@ -475,7 +475,7 @@
   // CHECK-NEXT:  return [[RESULT]]
 
   // CHECK-LABEL: sil shared [transparent] [serializable] [reabstraction_thunk] @$syXlIyBy_ypIegn_TR
-  // CHECK:     bb0([[ANY:%.*]] : @trivial $*Any, [[BLOCK:%.*]] : @guaranteed $@convention(block) @noescape (AnyObject) -> ()):
+  // CHECK:     bb0([[ANY:%.*]] : $*Any, [[BLOCK:%.*]] : @guaranteed $@convention(block) @noescape (AnyObject) -> ()):
   // CHECK-NEXT:  [[OPENED_ANY:%.*]] = open_existential_addr immutable_access [[ANY]] : $*Any to $*[[OPENED_TYPE:@opened.*Any]],
 	// CHECK:   [[TMP:%.*]] = alloc_stack
   // CHECK:   copy_addr [[OPENED_ANY]] to [initialization] [[TMP]]
@@ -513,7 +513,7 @@
   // CHECK-NEXT:  return [[BLOCK]]
 
   // CHECK-LABEL: sil shared [transparent] [serializable] [reabstraction_thunk] @$sypIegn_yXlIeyBy_TR : $@convention(c) (@inout_aliasable @block_storage @callee_guaranteed (@in_guaranteed Any) -> (), AnyObject) -> ()
-  // CHECK:     bb0([[BLOCK_STORAGE:%.*]] : @trivial $*@block_storage @callee_guaranteed (@in_guaranteed Any) -> (), [[ANY:%.*]] : @unowned $AnyObject):
+  // CHECK:     bb0([[BLOCK_STORAGE:%.*]] : $*@block_storage @callee_guaranteed (@in_guaranteed Any) -> (), [[ANY:%.*]] : @unowned $AnyObject):
   // CHECK-NEXT:  [[BLOCK_STORAGE_ADDR:%.*]] = project_block_storage [[BLOCK_STORAGE]]
   // CHECK-NEXT:  [[FUNCTION:%.*]] = load [copy] [[BLOCK_STORAGE_ADDR]]
   // CHECK-NEXT:  [[ANY_COPY:%.*]] = copy_value [[ANY]]
@@ -554,7 +554,7 @@
   // CHECK-NEXT:  return [[RESULT]]
 
   // CHECK-LABEL: sil shared [transparent] [serializable] [reabstraction_thunk] @$syXlIyBa_ypIegr_TR : $@convention(thin) (@guaranteed @convention(block) @noescape () -> @autoreleased AnyObject) -> @out Any
-  // CHECK:     bb0([[ANY_ADDR:%.*]] : @trivial $*Any, [[BLOCK:%.*]] : @guaranteed $@convention(block) @noescape () -> @autoreleased AnyObject):
+  // CHECK:     bb0([[ANY_ADDR:%.*]] : $*Any, [[BLOCK:%.*]] : @guaranteed $@convention(block) @noescape () -> @autoreleased AnyObject):
   // CHECK-NEXT:  [[BRIDGED:%.*]] = apply [[BLOCK]]()
   // CHECK-NEXT:  [[OPTIONAL:%.*]] = unchecked_ref_cast [[BRIDGED]]
   // CHECK-NEXT:  // function_ref
@@ -591,7 +591,7 @@
   // CHECK-NEXT:  return [[BLOCK]]
 
   // CHECK-LABEL: sil shared [transparent] [serializable] [reabstraction_thunk] @$sypIegr_yXlIeyBa_TR : $@convention(c) (@inout_aliasable @block_storage @callee_guaranteed () -> @out Any) -> @autoreleased AnyObject
-  // CHECK:     bb0(%0 : @trivial $*@block_storage @callee_guaranteed () -> @out Any):
+  // CHECK:     bb0(%0 : $*@block_storage @callee_guaranteed () -> @out Any):
   // CHECK-NEXT:  [[BLOCK_STORAGE_ADDR:%.*]] = project_block_storage %0
   // CHECK-NEXT:  [[FUNCTION:%.*]] = load [copy] [[BLOCK_STORAGE_ADDR]]
   // CHECK-NEXT:  [[RESULT:%.*]] = alloc_stack $Any
@@ -640,7 +640,7 @@
 extension GenericClass {
   // CHECK-LABEL: sil hidden @$sSo12GenericClassC17objc_bridging_anyE23pseudogenericAnyErasure1xypx_tF :
   @objc func pseudogenericAnyErasure(x: T) -> Any {
-    // CHECK: bb0([[ANY_OUT:%.*]] : @trivial $*Any, [[ARG:%.*]] : @guaranteed $T, [[SELF:%.*]] : @guaranteed $GenericClass<T>
+    // CHECK: bb0([[ANY_OUT:%.*]] : $*Any, [[ARG:%.*]] : @guaranteed $T, [[SELF:%.*]] : @guaranteed $GenericClass<T>
     // CHECK:   [[ARG_COPY:%.*]] = copy_value [[ARG]]
     // CHECK:   [[ANYOBJECT:%.*]] = init_existential_ref [[ARG_COPY]] : $T : $T, $AnyObject
     // CHECK:   [[ANY_BUF:%.*]] = init_existential_addr [[ANY_OUT]] : $*Any, $AnyObject
diff --git a/test/SILGen/objc_currying.swift b/test/SILGen/objc_currying.swift
index ee02fb8..7b2073e 100644
--- a/test/SILGen/objc_currying.swift
+++ b/test/SILGen/objc_currying.swift
@@ -29,7 +29,7 @@
 // CHECK: } // end sil function '[[THUNK_FOO_1]]'
 
 // CHECK: sil shared [serializable] [thunk] @[[THUNK_FOO_2]] : $@convention(method) (Int, @guaranteed CurryTest) -> Int
-// CHECK: bb0([[ARG1:%.*]] : @trivial $Int, [[ARG2:%.*]] : @guaranteed $CurryTest):
+// CHECK: bb0([[ARG1:%.*]] : $Int, [[ARG2:%.*]] : @guaranteed $CurryTest):
 // CHECK:   [[COPIED_ARG2:%.*]] = copy_value [[ARG2]]
 // CHECK:   [[METHOD:%.*]] = objc_method [[COPIED_ARG2]] : $CurryTest, #CurryTest.pod!1.foreign
 // CHECK:   [[RESULT:%.*]] = apply [[METHOD]]([[ARG1]], [[COPIED_ARG2]])
@@ -130,7 +130,7 @@
 // CHECK:   [[OPENED_ANY:%.*]] = open_existential_ref [[ANY]]
 // CHECK:   [[OPENED_ANY_COPY:%.*]] = copy_value [[OPENED_ANY]]
 // CHECK:   dynamic_method_br [[OPENED_ANY_COPY]] : $@opened({{.*}}) AnyObject, #CurryTest.pod!1.foreign, [[HAS_METHOD:bb[0-9]+]]
-// CHECK:   [[HAS_METHOD]]([[METHOD:%.*]] : @trivial $@convention(objc_method) (Int, @opened({{.*}}) AnyObject) -> Int):
+// CHECK:   [[HAS_METHOD]]([[METHOD:%.*]] : $@convention(objc_method) (Int, @opened({{.*}}) AnyObject) -> Int):
 // CHECK:   [[OPENED_ANY_COPY_2:%.*]] = copy_value [[OPENED_ANY_COPY]]
 // CHECK:   partial_apply [callee_guaranteed] [[METHOD]]([[OPENED_ANY_COPY_2]])
 // CHECK: } // end sil function '$s13objc_currying19curry_pod_AnyObjectyS2icyXlF'
@@ -144,7 +144,7 @@
 // CHECK:   [[OPENED_ANY:%.*]] = open_existential_ref [[ANY]]
 // CHECK:   [[OPENED_ANY_COPY:%.*]] = copy_value [[OPENED_ANY]]
 // CHECK:   dynamic_method_br [[OPENED_ANY_COPY]] : $@opened({{.*}}) AnyObject, #CurryTest.normalOwnership!1.foreign, [[HAS_METHOD:bb[0-9]+]]
-// CHECK: [[HAS_METHOD]]([[METHOD:%.*]] : @trivial $@convention(objc_method) (Optional<CurryTest>, @opened({{.*}}) AnyObject) -> @autoreleased Optional<CurryTest>):
+// CHECK: [[HAS_METHOD]]([[METHOD:%.*]] : $@convention(objc_method) (Optional<CurryTest>, @opened({{.*}}) AnyObject) -> @autoreleased Optional<CurryTest>):
 // CHECK:   [[OPENED_ANY_COPY_2:%.*]] = copy_value [[OPENED_ANY_COPY]]
 // CHECK:   [[PA:%.*]] = partial_apply [callee_guaranteed] [[METHOD]]([[OPENED_ANY_COPY_2]])
 // CHECK:   [[THUNK:%.*]] = function_ref @$sSo9CurryTestCSgACIegyo_A2CIeggo_TR
@@ -162,7 +162,7 @@
 // CHECK:   [[OPENED_ANY_COPY:%.*]] = copy_value [[OPENED_ANY]]
 // CHECK:   dynamic_method_br [[SELF:%.*]] : $@opened({{.*}}) AnyObject, #CurryTest.weirdOwnership!1.foreign, [[HAS_METHOD:bb[0-9]+]]
 //
-// CHECK: bb1([[METHOD:%.*]] : @trivial $@convention(objc_method) (@owned Optional<CurryTest>, @owned @opened({{.*}}) AnyObject) -> @owned Optional<CurryTest>):
+// CHECK: bb1([[METHOD:%.*]] : $@convention(objc_method) (@owned Optional<CurryTest>, @owned @opened({{.*}}) AnyObject) -> @owned Optional<CurryTest>):
 // CHECK:   [[OPENED_ANY_COPY_2:%.*]] = copy_value [[OPENED_ANY_COPY]]
 // CHECK:   partial_apply [callee_guaranteed] [[METHOD]]([[OPENED_ANY_COPY_2]])
 // CHECK: } // end sil function '$s13objc_currying30curry_weirdOwnership_AnyObjectySo9CurryTestCSgAEcyXlF'
@@ -188,7 +188,7 @@
 // CHECK:   [[OPENED_ANY:%.*]] = open_existential_ref [[ANY]]
 // CHECK:   [[OPENED_ANY_COPY:%.*]] = copy_value [[OPENED_ANY]]
 // CHECK:   dynamic_method_br [[OPENED_ANY_COPY]] : $@opened({{.*}}) AnyObject, #CurryTest.returnsSelf!1.foreign, [[HAS_METHOD:bb[0-9]+]]
-// CHECK: [[HAS_METHOD]]([[METHOD:%.*]] : @trivial $@convention(objc_method) (@opened({{.*}}) AnyObject) -> @autoreleased Optional<AnyObject>):
+// CHECK: [[HAS_METHOD]]([[METHOD:%.*]] : $@convention(objc_method) (@opened({{.*}}) AnyObject) -> @autoreleased Optional<AnyObject>):
 // CHECK:   [[OPENED_ANY_COPY_2:%.*]] = copy_value [[OPENED_ANY_COPY]]
 // CHECK:   [[PA:%.*]] = partial_apply [callee_guaranteed] [[METHOD]]([[OPENED_ANY_COPY_2]])
 // CHECK: } // end sil function '$s13objc_currying27curry_returnsSelf_AnyObjectyyXlSgycyXlF'
@@ -201,7 +201,7 @@
 // CHECK:   [[OPENED_ANY:%.*]] = open_existential_ref [[ANY]]
 // CHECK:   [[OPENED_ANY_COPY:%.*]] = copy_value [[OPENED_ANY]]
 // CHECK:   dynamic_method_br [[OPENED_ANY_COPY]] : $@opened({{.*}}) AnyObject, #CurryTest.returnsInnerPointer!1.foreign, [[HAS_METHOD:bb[0-9]+]]
-// CHECK: [[HAS_METHOD]]([[METHOD:%.*]] : @trivial $@convention(objc_method) (@opened({{.*}}) AnyObject) -> @unowned_inner_pointer Optional<UnsafeMutableRawPointer>):
+// CHECK: [[HAS_METHOD]]([[METHOD:%.*]] : $@convention(objc_method) (@opened({{.*}}) AnyObject) -> @unowned_inner_pointer Optional<UnsafeMutableRawPointer>):
 // CHECK:   [[OPENED_ANY_COPY_2:%.*]] = copy_value [[OPENED_ANY_COPY]]
 // CHECK:   [[PA:%.*]] = partial_apply [callee_guaranteed] [[METHOD]]([[OPENED_ANY_COPY_2]])
 // CHECK: } // end sil function '$s13objc_currying35curry_returnsInnerPointer_AnyObjectySvSgycyXlF'
diff --git a/test/SILGen/objc_deprecated_objc_thunks.swift b/test/SILGen/objc_deprecated_objc_thunks.swift
index c869bac..029c465 100644
--- a/test/SILGen/objc_deprecated_objc_thunks.swift
+++ b/test/SILGen/objc_deprecated_objc_thunks.swift
@@ -43,7 +43,7 @@
   var bar: NSObject? = nil
 
   // CHECK-SWIFT4-LABEL: sil hidden [thunk] @$s016objc_deprecated_A7_thunks12ObjCSubclassCyyXlSicigTo : $@convention(objc_method) (Int, ObjCSubclass) -> @autoreleased AnyObject
-  // CHECK-SWIFT4: bb0(%0 : @trivial $Int, %1 : @unowned $ObjCSubclass):
+  // CHECK-SWIFT4: bb0(%0 : $Int, %1 : @unowned $ObjCSubclass):
   // CHECK-SWIFT4-NEXT: [[FILENAME:%.*]] = [[FILENAME_LITERAL]]
   // CHECK-SWIFT4-NEXT: [[LENGTH:%.*]] = integer_literal
   // CHECK-SWIFT4-NEXT: [[IS_ASCII:%.*]] = integer_literal
@@ -52,7 +52,7 @@
   // CHECK-SWIFT4-NEXT: builtin "swift3ImplicitObjCEntrypoint"([[FILENAME]] : $Builtin.RawPointer, [[LENGTH]] : $Builtin.Word, [[LINE]] : $Builtin.Word, [[COLUMN]] : $Builtin.Word) : $() 
 
   // CHECK-SWIFT4-LABEL: sil hidden [thunk] @$s016objc_deprecated_A7_thunks12ObjCSubclassCyyXlSicisTo : $@convention(objc_method) (AnyObject, Int, ObjCSubclass) ->
-  // CHECK-SWIFT4: bb0(%0 : @unowned $AnyObject, %1 : @trivial $Int, %2 : @unowned $ObjCSubclass):
+  // CHECK-SWIFT4: bb0(%0 : @unowned $AnyObject, %1 : $Int, %2 : @unowned $ObjCSubclass):
   // CHECK-SWIFT4-NEXT: [[FILENAME:%.*]] = [[FILENAME_LITERAL]]
   // CHECK-SWIFT4-NEXT: [[LENGTH:%.*]] = integer_literal
   // CHECK-SWIFT4-NEXT: [[IS_ASCII:%.*]] = integer_literal
diff --git a/test/SILGen/objc_error.swift b/test/SILGen/objc_error.swift
index acbfce4..03b7557 100644
--- a/test/SILGen/objc_error.swift
+++ b/test/SILGen/objc_error.swift
@@ -138,7 +138,7 @@
 // SR-1562
 extension Error {
   // CHECK-LABEL: sil hidden @$ss5ErrorP10objc_errorE16convertToNSErrorSo0F0CyF
-  // CHECK: bb0([[SELF:%[0-9]+]] : @trivial $*Self)
+  // CHECK: bb0([[SELF:%[0-9]+]] : $*Self)
 	func convertToNSError() -> NSError {
     // CHECK: [[COPY:%.*]] = alloc_stack $Self
     // CHECK: copy_addr [[SELF]] to [initialization] [[COPY]]
diff --git a/test/SILGen/objc_factory_init.swift b/test/SILGen/objc_factory_init.swift
index 324be14..58abc27 100644
--- a/test/SILGen/objc_factory_init.swift
+++ b/test/SILGen/objc_factory_init.swift
@@ -7,7 +7,7 @@
 
 // CHECK-LABEL: sil shared [serializable] [thunk] @$sSo4HiveC5queenABSgSo3BeeCSg_tcfCTO : $@convention(method) (@owned Optional<Bee>, @thick Hive.Type) -> @owned Optional<Hive>
 func testInstanceTypeFactoryMethod(queen: Bee) {
-  // CHECK: bb0([[QUEEN:%[0-9]+]] : @owned $Optional<Bee>, [[HIVE_META:%[0-9]+]] : @trivial $@thick Hive.Type):
+  // CHECK: bb0([[QUEEN:%[0-9]+]] : @owned $Optional<Bee>, [[HIVE_META:%[0-9]+]] : $@thick Hive.Type):
   // CHECK-NEXT:   [[HIVE_META_OBJC:%[0-9]+]] = thick_to_objc_metatype [[HIVE_META]] : $@thick Hive.Type to $@objc_metatype Hive.Type
   // CHECK-NEXT:   [[FACTORY:%[0-9]+]] = objc_method [[HIVE_META_OBJC]] : $@objc_metatype Hive.Type, #Hive.init!allocator.1.foreign : (Hive.Type) -> (Bee?) -> Hive?, $@convention(objc_method) (Optional<Bee>, @objc_metatype Hive.Type) -> @autoreleased Optional<Hive>
   // CHECK-NEXT:   [[HIVE:%[0-9]+]] = apply [[FACTORY]]([[QUEEN]], [[HIVE_META_OBJC]]) : $@convention(objc_method) (Optional<Bee>, @objc_metatype Hive.Type) -> @autoreleased Optional<Hive>
@@ -22,7 +22,7 @@
   // entry point at all.
 
   // CHECK-LABEL: sil hidden @$sSo4HiveC17objc_factory_initE10otherQueenABSo3BeeC_tcfC
-  // CHECK: bb0([[QUEEN:%.*]] : @owned $Bee, [[META:%.*]] : @trivial $@thick Hive.Type):
+  // CHECK: bb0([[QUEEN:%.*]] : @owned $Bee, [[META:%.*]] : $@thick Hive.Type):
   // CHECK:   [[SELF_BOX:%.*]] = alloc_box ${ var Hive }, let, name "self"
   // CHECK:   [[MU:%.*]] = mark_uninitialized [delegatingself] [[SELF_BOX]]
   // CHECK:   [[PB_BOX:%.*]] = project_box [[MU]] : ${ var Hive }, 0
@@ -46,7 +46,7 @@
 
 extension SomeClass {
   // CHECK-LABEL: sil hidden @$sSo12IAMSomeClassC17objc_factory_initE6doubleABSd_tcfC
-  // CHECK: bb0([[DOUBLE:%.*]] : @trivial $Double,
+  // CHECK: bb0([[DOUBLE:%.*]] : $Double,
   // CHECK-NOT: value_metatype
   // CHECK: [[FNREF:%[0-9]+]] = function_ref @MakeIAMSomeClass
   // CHECK: apply [[FNREF]]([[DOUBLE]])
@@ -57,7 +57,7 @@
 
 class SubHive : Hive {
   // CHECK-LABEL: sil hidden @$s17objc_factory_init7SubHiveC20delegatesToInheritedACyt_tcfC
-  // CHECK: bb0([[METATYPE:%.*]] : @trivial $@thick SubHive.Type):
+  // CHECK: bb0([[METATYPE:%.*]] : $@thick SubHive.Type):
   // CHECK:   [[SELF_BOX:%.*]] = alloc_box ${ var SubHive }, let, name "self"
   // CHECK:   [[MU:%.*]] = mark_uninitialized [delegatingself] [[SELF_BOX]] : ${ var SubHive }
   // CHECK:   [[PB_BOX:%.*]] = project_box [[MU]] : ${ var SubHive }, 0
diff --git a/test/SILGen/objc_imported_generic.swift b/test/SILGen/objc_imported_generic.swift
index 957aaaa..f1a2385 100644
--- a/test/SILGen/objc_imported_generic.swift
+++ b/test/SILGen/objc_imported_generic.swift
@@ -26,11 +26,11 @@
 }
 
 // CHECK-LABEL: sil @$s21objc_imported_generic0C24MethodOnAnyObjectChained1o1byXlSgyXl_SbtF
-// CHECK: bb0([[ANY:%.*]] : @guaranteed $AnyObject, [[BOOL:%.*]] : @trivial $Bool):
+// CHECK: bb0([[ANY:%.*]] : @guaranteed $AnyObject, [[BOOL:%.*]] : $Bool):
 // CHECK:   [[OPENED_ANY:%.*]] = open_existential_ref [[ANY]]
 // CHECK:   [[OPENED_ANY_COPY:%.*]] = copy_value [[OPENED_ANY]]
 // CHECK:   dynamic_method_br [[OPENED_ANY_COPY]] : $@opened([[TAG:.*]]) AnyObject, #GenericClass.thing!1.foreign, bb1
-// CHECK:   bb1({{%.*}} : @trivial $@convention(objc_method) (@opened([[TAG]]) AnyObject) -> @autoreleased Optional<AnyObject>):
+// CHECK:   bb1({{%.*}} : $@convention(objc_method) (@opened([[TAG]]) AnyObject) -> @autoreleased Optional<AnyObject>):
 // CHECK: } // end sil function '$s21objc_imported_generic0C24MethodOnAnyObjectChained1o1byXlSgyXl_SbtF'
 
 public func genericSubscriptOnAnyObject(o: AnyObject, b: Bool) -> AnyObject? {
@@ -42,7 +42,7 @@
 // CHCEK:   [[OPENED_ANY:%.*]] = open_existential_ref [[ANY]]
 // CHECK:   [[OPENED_ANY_COPY:%.*]] = copy_value [[OPENED_ANY]]
 // CHECK:   dynamic_method_br [[OPENED_ANY_COPY]] : $@opened([[TAG:.*]]) AnyObject, #GenericClass.subscript!getter.1.foreign, bb1
-// CHECK:   bb1({{%.*}} : @trivial $@convention(objc_method) (UInt16, @opened([[TAG]]) AnyObject) -> @autoreleased AnyObject):
+// CHECK:   bb1({{%.*}} : $@convention(objc_method) (UInt16, @opened([[TAG]]) AnyObject) -> @autoreleased AnyObject):
 // CHECK: } // end sil function '$s21objc_imported_generic0C20SubscriptOnAnyObject1o1byXlSgyXl_SbtF'
 
 public func genericPropertyOnAnyObject(o: AnyObject, b: Bool) -> AnyObject?? {
@@ -50,11 +50,11 @@
 }
 
 // CHECK-LABEL: sil @$s21objc_imported_generic0C19PropertyOnAnyObject1o1byXlSgSgyXl_SbtF
-// CHECK: bb0([[ANY:%.*]] : @guaranteed $AnyObject, [[BOOL:%.*]] : @trivial $Bool):
+// CHECK: bb0([[ANY:%.*]] : @guaranteed $AnyObject, [[BOOL:%.*]] : $Bool):
 // CHECK:   [[OPENED_ANY:%.*]] = open_existential_ref [[ANY]]
 // CHECK:   [[OPENED_ANY_COPY:%.*]] = copy_value [[OPENED_ANY]]
 // CHECK:   dynamic_method_br [[OPENED_ANY_COPY]] : $@opened([[TAG:.*]]) AnyObject, #GenericClass.propertyThing!getter.1.foreign, bb1
-// CHECK:   bb1({{%.*}} : @trivial $@convention(objc_method) (@opened([[TAG]]) AnyObject) -> @autoreleased Optional<AnyObject>):
+// CHECK:   bb1({{%.*}} : $@convention(objc_method) (@opened([[TAG]]) AnyObject) -> @autoreleased Optional<AnyObject>):
 // CHECK: } // end sil function '$s21objc_imported_generic0C19PropertyOnAnyObject1o1byXlSgSgyXl_SbtF'
 
 public protocol ThingHolder {
diff --git a/test/SILGen/objc_init_ref_delegation.swift b/test/SILGen/objc_init_ref_delegation.swift
index 8cedd0f..21ad96c 100644
--- a/test/SILGen/objc_init_ref_delegation.swift
+++ b/test/SILGen/objc_init_ref_delegation.swift
@@ -5,7 +5,7 @@
 extension Gizmo {
   // CHECK-LABEL: sil hidden @$sSo5GizmoC24objc_init_ref_delegationE{{[_0-9a-zA-Z]*}}fC
   convenience init(int i: Int) {
-    // CHECK: bb0([[I:%[0-9]+]] : @trivial $Int, [[SELF_META:%[0-9]+]] : @trivial $@thick Gizmo.Type):
+    // CHECK: bb0([[I:%[0-9]+]] : $Int, [[SELF_META:%[0-9]+]] : $@thick Gizmo.Type):
     // CHECK:   [[SELF_BOX:%[0-9]+]] = alloc_box ${ var Gizmo }
     // CHECK:   [[MARKED_SELF_BOX:%[0-9]+]] = mark_uninitialized [delegatingself] [[SELF_BOX]]
     // CHECK:   [[PB_BOX:%.*]] = project_box [[MARKED_SELF_BOX]]
diff --git a/test/SILGen/objc_metatypes.swift b/test/SILGen/objc_metatypes.swift
index c1a0916..f839f0f 100644
--- a/test/SILGen/objc_metatypes.swift
+++ b/test/SILGen/objc_metatypes.swift
@@ -9,7 +9,7 @@
 
   // CHECK-LABEL: sil hidden [thunk] @$s14objc_metatypes1AC3fooyAA9ObjCClassCmAFmFTo
   @objc dynamic func foo(_ m: ObjCClass.Type) -> ObjCClass.Type {
-    // CHECK: bb0([[M:%[0-9]+]] : @trivial $@objc_metatype ObjCClass.Type, [[SELF:%[0-9]+]] : @unowned $A):
+    // CHECK: bb0([[M:%[0-9]+]] : $@objc_metatype ObjCClass.Type, [[SELF:%[0-9]+]] : @unowned $A):
     // CHECK:   [[SELF_COPY:%.*]] = copy_value [[SELF]] : $A
     // CHECK:   [[M_AS_THICK:%[0-9]+]] = objc_to_thick_metatype [[M]] : $@objc_metatype ObjCClass.Type to $@thick ObjCClass.Type
     // CHECK:   [[BORROWED_SELF_COPY:%.*]] = begin_borrow [[SELF_COPY]]
@@ -26,7 +26,7 @@
   // CHECK-LABEL: sil hidden @$s14objc_metatypes1AC3bar{{[_0-9a-zA-Z]*}}FZ
 
   // CHECK-LABEL: sil hidden [thunk] @$s14objc_metatypes1AC3bar{{[_0-9a-zA-Z]*}}FZTo
-  // CHECK: bb0([[SELF:%[0-9]+]] : @trivial $@objc_metatype A.Type):
+  // CHECK: bb0([[SELF:%[0-9]+]] : $@objc_metatype A.Type):
   // CHECK-NEXT:   [[OBJC_SELF:%[0-9]+]] = objc_to_thick_metatype [[SELF]] : $@objc_metatype A.Type to $@thick A.Type
   // CHECK:   [[BAR:%[0-9]+]] = function_ref @$s14objc_metatypes1AC3bar{{[_0-9a-zA-Z]*}}FZ
   // CHECK-NEXT:   [[RESULT:%[0-9]+]] = apply [[BAR]]([[OBJC_SELF]]) : $@convention(method) (@thick A.Type) -> ()
diff --git a/test/SILGen/objc_ownership_conventions.swift b/test/SILGen/objc_ownership_conventions.swift
index 3f2487d..95f9b39 100644
--- a/test/SILGen/objc_ownership_conventions.swift
+++ b/test/SILGen/objc_ownership_conventions.swift
@@ -15,7 +15,7 @@
   // CHECK-LABEL: sil shared [serializable] @$sSo5GizmoC{{[_0-9a-zA-Z]*}}fC : $@convention(method) (@thick Gizmo.Type) -> @owned Optional<Gizmo>
   // alloc is implicitly ns_returns_retained
   // init is implicitly ns_consumes_self and ns_returns_retained
-  // CHECK: bb0([[GIZMO_META:%[0-9]+]] : @trivial $@thick Gizmo.Type):
+  // CHECK: bb0([[GIZMO_META:%[0-9]+]] : $@thick Gizmo.Type):
   // CHECK-NEXT: [[GIZMO_META_OBJC:%[0-9]+]] = thick_to_objc_metatype [[GIZMO_META]] : $@thick Gizmo.Type to $@objc_metatype Gizmo.Type
   // CHECK-NEXT: [[GIZMO:%[0-9]+]] = alloc_ref_dynamic [objc] [[GIZMO_META_OBJC]] : $@objc_metatype Gizmo.Type, $Gizmo
   // CHECK-NEXT: // function_ref
@@ -132,12 +132,12 @@
   // CHECK-NEXT: [[OPT_OBJC:%.*]] = apply [[GETTER]]([[NS_G_BORROW]]) : $@convention(objc_method) (NSObject) -> Optional<@objc_metatype AnyObject.Type>
   // CHECK-NEXT: switch_enum [[OPT_OBJC]] : $Optional<{{.*}}>, case #Optional.some!enumelt.1: [[SOME_BB:bb[0-9]+]], case #Optional.none!enumelt: [[NONE_BB:bb[0-9]+]]
   //
-  // CHECK: [[SOME_BB]]([[OBJC:%.*]] : @trivial $@objc_metatype AnyObject.Type):
+  // CHECK: [[SOME_BB]]([[OBJC:%.*]] : $@objc_metatype AnyObject.Type):
   // CHECK-NEXT: [[THICK:%.*]] = objc_to_thick_metatype [[OBJC]]
   // CHECK:      [[T0:%.*]] = enum $Optional<@thick AnyObject.Type>, #Optional.some!enumelt.1, [[THICK]]
-  // CHECK:   bb{{.*}}(%{{.*}} : @trivial $Optional<@thick AnyObject.Type>):
+  // CHECK:   bb{{.*}}(%{{.*}} : $Optional<@thick AnyObject.Type>):
   // CHECK:      destroy_value [[NS_G_COPY]] : $NSObject
-  // CHECK:   bb{{.*}}([[RES:%.*]] : @trivial $@thick AnyObject.Type):
+  // CHECK:   bb{{.*}}([[RES:%.*]] : $@thick AnyObject.Type):
   // CHECK-NOT:      destroy_value [[G]] : $Gizmo
   // CHECK-NEXT: return [[RES]] : $@thick AnyObject.Type
   return g.classProp
@@ -153,12 +153,12 @@
   // CHECK-NEXT: [[OPT_OBJC:%.*]] = apply [[GETTER]]([[NS_G_BORROW]]) : $@convention(objc_method) (NSObject) -> Optional<@objc_metatype NSAnsing.Type>
   // CHECK-NEXT: switch_enum [[OPT_OBJC]] : $Optional<{{.*}}>, case #Optional.some!enumelt.1: [[SOME_BB:bb[0-9]+]], case #Optional.none!enumelt: [[NONE_BB:bb[0-9]+]]
   //
-  // CHECK: [[SOME_BB]]([[OBJC:%.*]] : @trivial $@objc_metatype NSAnsing.Type):
+  // CHECK: [[SOME_BB]]([[OBJC:%.*]] : $@objc_metatype NSAnsing.Type):
   // CHECK-NEXT: [[THICK:%.*]] = objc_to_thick_metatype [[OBJC]]
   // CHECK:      [[T0:%.*]] = enum $Optional<@thick NSAnsing.Type>, #Optional.some!enumelt.1, [[THICK]]
-  // CHECK:   bb{{.*}}(%{{.*}} : @trivial $Optional<@thick NSAnsing.Type>):
+  // CHECK:   bb{{.*}}(%{{.*}} : $Optional<@thick NSAnsing.Type>):
   // CHECK:      destroy_value [[NS_G_COPY]] : $NSObject
-  // CHECK:   bb{{.*}}([[RES:%.*]] : @trivial $@thick NSAnsing.Type):
+  // CHECK:   bb{{.*}}([[RES:%.*]] : $@thick NSAnsing.Type):
   // CHECK:      [[OPENED:%.*]] = open_existential_metatype [[RES]]
   // CHECK:      [[RES_ANY:%.*]] = init_existential_metatype [[OPENED]]
   // CHECK-NOT:      destroy_value [[G]] : $Gizmo
diff --git a/test/SILGen/objc_properties.swift b/test/SILGen/objc_properties.swift
index e64c089..56eaf40 100644
--- a/test/SILGen/objc_properties.swift
+++ b/test/SILGen/objc_properties.swift
@@ -34,7 +34,7 @@
   // rdar://15858869 - However, direct access only applies to (implicit or
   // explicit) 'self' ivar references, not ALL ivar refs.
   // CHECK-LABEL: sil hidden @$s15objc_properties1AC{{[_0-9a-zA-Z]*}}fc
-  // CHECK: bb0(%0 : @owned $A, %1 : @trivial $Int, [[OLD_SELF:%.*]] : @owned $A):
+  // CHECK: bb0(%0 : @owned $A, %1 : $Int, [[OLD_SELF:%.*]] : @owned $A):
   // CHECK: [[SELF:%[0-9]+]] = mark_uninitialized [rootself] [[OLD_SELF]] : $A
   init(other : A, x : Int) {
     // CHECK: [[BORROWED_SELF:%.*]] = begin_borrow [[SELF]]
@@ -171,7 +171,7 @@
   // CHECK: } // end sil function '$s15objc_properties12HasUnmanagedC3refs0D0VyyXlGSgvgTo'
 
   // CHECK-LABEL: sil hidden [thunk] @$s15objc_properties12HasUnmanagedC3refs0D0VyyXlGSgvsTo
-  // CHECK: bb0([[NEW_VALUE:%.*]] : @trivial $Optional<Unmanaged<AnyObject>>, [[SELF:%.*]] : @unowned $HasUnmanaged):
+  // CHECK: bb0([[NEW_VALUE:%.*]] : $Optional<Unmanaged<AnyObject>>, [[SELF:%.*]] : @unowned $HasUnmanaged):
   // CHECK-NEXT: [[SELF_COPY:%.*]] = copy_value [[SELF]] : $HasUnmanaged
   // CHECK-NEXT: [[BORROWED_SELF_COPY:%.*]] = begin_borrow [[SELF_COPY]]
   // CHECK-NEXT: // function_ref
diff --git a/test/SILGen/objc_protocols.swift b/test/SILGen/objc_protocols.swift
index 214bbe8..f811cee 100644
--- a/test/SILGen/objc_protocols.swift
+++ b/test/SILGen/objc_protocols.swift
@@ -249,7 +249,7 @@
 
 // CHECK-LABEL: sil hidden @$s14objc_protocols28testInitializableExistential_1iAA0D0_pAaD_pXp_SitF : $@convention(thin) (@thick Initializable.Type, Int) -> @owned Initializable {
 func testInitializableExistential(_ im: Initializable.Type, i: Int) -> Initializable {
-  // CHECK: bb0([[META:%[0-9]+]] : @trivial $@thick Initializable.Type, [[I:%[0-9]+]] : @trivial $Int):
+  // CHECK: bb0([[META:%[0-9]+]] : $@thick Initializable.Type, [[I:%[0-9]+]] : $Int):
   // CHECK:   [[I2_BOX:%[0-9]+]] = alloc_box ${ var Initializable }
   // CHECK:   [[PB:%.*]] = project_box [[I2_BOX]]
   // CHECK:   [[ARCHETYPE_META:%[0-9]+]] = open_existential_metatype [[META]] : $@thick Initializable.Type to $@thick (@opened([[N:".*"]]) Initializable).Type
diff --git a/test/SILGen/objc_thunks.swift b/test/SILGen/objc_thunks.swift
index a4e45f7..d508a83 100644
--- a/test/SILGen/objc_thunks.swift
+++ b/test/SILGen/objc_thunks.swift
@@ -10,7 +10,7 @@
 class Hoozit : Gizmo {
   @objc func typical(_ x: Int, y: Gizmo) -> Gizmo { return y }
   // CHECK-LABEL: sil hidden [thunk] @$s11objc_thunks6HoozitC7typical_1ySo5GizmoCSi_AGtFTo : $@convention(objc_method) (Int, Gizmo, Hoozit) -> @autoreleased Gizmo {
-  // CHECK: bb0([[X:%.*]] : @trivial $Int, [[Y:%.*]] : @unowned $Gizmo, [[THIS:%.*]] : @unowned $Hoozit):
+  // CHECK: bb0([[X:%.*]] : $Int, [[Y:%.*]] : @unowned $Gizmo, [[THIS:%.*]] : @unowned $Hoozit):
   // CHECK-NEXT:   [[Y_COPY:%.*]] = copy_value [[Y]]
   // CHECK-NEXT:   [[THIS_COPY:%.*]] = copy_value [[THIS]]
   // CHECK-NEXT:   [[BORROWED_Y_COPY:%.*]] = begin_borrow [[Y_COPY]]
@@ -41,7 +41,7 @@
   // NS_CONSUMED 'gizmo' argument by inheritance
   override class func consume(_ gizmo: Gizmo?) { }
    // CHECK-LABEL: sil hidden [thunk] @$s11objc_thunks6HoozitC7consumeyySo5GizmoCSgFZTo : $@convention(objc_method) (@owned Optional<Gizmo>, @objc_metatype Hoozit.Type) -> () {
-  // CHECK: bb0([[GIZMO:%.*]] : @owned $Optional<Gizmo>, [[THIS:%.*]] : @trivial $@objc_metatype Hoozit.Type):
+  // CHECK: bb0([[GIZMO:%.*]] : @owned $Optional<Gizmo>, [[THIS:%.*]] : $@objc_metatype Hoozit.Type):
   // CHECK-NEXT: [[BORROWED_GIZMO:%.*]] = begin_borrow [[GIZMO]]
   // CHECK-NEXT: [[THICK_THIS:%[0-9]+]] = objc_to_thick_metatype [[THIS]] : $@objc_metatype Hoozit.Type to $@thick Hoozit.Type
   // CHECK:   [[NATIVE:%.*]] = function_ref @$s11objc_thunks6HoozitC7consumeyySo5GizmoCSgFZ : $@convention(method) (@guaranteed Optional<Gizmo>, @thick Hoozit.Type) -> ()
@@ -381,7 +381,7 @@
   @objc subscript (i: Int) -> Hoozit {
   // Getter
   // CHECK-LABEL: sil hidden [thunk] @$s11objc_thunks6HoozitCyACSicigTo : $@convention(objc_method) (Int, Hoozit) -> @autoreleased Hoozit
-  // CHECK: bb0([[I:%[0-9]+]] : @trivial $Int, [[SELF:%[0-9]+]] : @unowned $Hoozit):
+  // CHECK: bb0([[I:%[0-9]+]] : $Int, [[SELF:%[0-9]+]] : @unowned $Hoozit):
   // CHECK-NEXT: [[SELF_COPY:%.*]] = copy_value [[SELF]] : $Hoozit
   // CHECK-NEXT: [[BORROWED_SELF_COPY:%.*]] = begin_borrow [[SELF_COPY]]
   // CHECK-NEXT: // function_ref
@@ -396,7 +396,7 @@
 
   // Setter
   // CHECK-LABEL: sil hidden [thunk] @$s11objc_thunks6HoozitCyACSicisTo : $@convention(objc_method) (Hoozit, Int, Hoozit) -> ()
-  // CHECK: bb0([[VALUE:%[0-9]+]] : @unowned $Hoozit, [[I:%[0-9]+]] : @trivial $Int, [[SELF:%[0-9]+]] : @unowned $Hoozit):
+  // CHECK: bb0([[VALUE:%[0-9]+]] : @unowned $Hoozit, [[I:%[0-9]+]] : $Int, [[SELF:%[0-9]+]] : @unowned $Hoozit):
   // CHECK:   [[VALUE_COPY:%.*]] = copy_value [[VALUE]] : $Hoozit
   // CHECK:   [[SELF_COPY:%.*]] = copy_value [[SELF]] : $Hoozit
   // CHECK:   [[BORROWED_SELF_COPY:%.*]] = begin_borrow [[SELF_COPY]]
@@ -578,7 +578,7 @@
 // Noescape verification relies on there not being a retain/release in order to
 // work in the presence of a objective c throwing implementation function.
 // CHECK: sil {{.*}} @$sIeg_IyB_TR
-// CHECK: bb0([[T0:%.*]] : @trivial $*@block_storage @callee_guaranteed () -> ()):
+// CHECK: bb0([[T0:%.*]] : $*@block_storage @callee_guaranteed () -> ()):
 // CHECK-NEXT:  [[T1:%.*]] = project_block_storage [[T0]]
 // CHECK-NEXT:  [[T2:%.*]] = load_borrow [[T1]]
 // CHECK-NEXT:  [[T3:%.*]] = apply [[T2]]()
diff --git a/test/SILGen/objc_witnesses.swift b/test/SILGen/objc_witnesses.swift
index 8b1e04b..7a1b931 100644
--- a/test/SILGen/objc_witnesses.swift
+++ b/test/SILGen/objc_witnesses.swift
@@ -38,7 +38,7 @@
 }
 
 // CHECK: sil private [transparent] [thunk] @$sSo5GizmoC14objc_witnesses5BellsA2cDP{{[_0-9a-zA-Z]*}}fCTW
-// CHECK: bb0([[SELF:%[0-9]+]] : @trivial $*Gizmo, [[I:%[0-9]+]] : @trivial $Int, [[META:%[0-9]+]] : @trivial $@thick Gizmo.Type):
+// CHECK: bb0([[SELF:%[0-9]+]] : $*Gizmo, [[I:%[0-9]+]] : $Int, [[META:%[0-9]+]] : $@thick Gizmo.Type):
 
 // CHECK:   [[INIT:%[0-9]+]] = function_ref @$sSo5GizmoC{{[_0-9a-zA-Z]*}}fC : $@convention(method) (Int, @thick Gizmo.Type) -> @owned Optional<Gizmo>
 // CHECK:   [[IUO_RESULT:%[0-9]+]] = apply [[INIT]]([[I]], [[META]]) : $@convention(method) (Int, @thick Gizmo.Type) -> @owned Optional<Gizmo>
diff --git a/test/SILGen/opaque_ownership.swift b/test/SILGen/opaque_ownership.swift
index e14ce6f..6254e36 100644
--- a/test/SILGen/opaque_ownership.swift
+++ b/test/SILGen/opaque_ownership.swift
@@ -44,7 +44,7 @@
 // Test unsafe_bitwise_cast nontrivial ownership.
 // ---
 // CHECK-LABEL: sil @$ss13unsafeBitCast_2toq_x_q_mtr0_lF : $@convention(thin) <T, U> (@in_guaranteed T, @thick U.Type) -> @out U {
-// CHECK: bb0([[ARG0:%.*]] : @guaranteed $T, [[ARG1:%.*]] : @trivial $@thick U.Type):
+// CHECK: bb0([[ARG0:%.*]] : @guaranteed $T, [[ARG1:%.*]] : $@thick U.Type):
 // CHECK:   [[ARG_COPY:%.*]] = copy_value [[ARG0]] : $T
 // CHECK:   [[RESULT:%.*]] = unchecked_bitwise_cast [[ARG_COPY]] : $T to $U
 // CHECK:   [[RESULT_COPY:%.*]] = copy_value [[RESULT]] : $U
@@ -150,10 +150,10 @@
   }
 }
 
-// Test ownership of multi-case Enum values in the context of @trivial to @in thunks.
+// Test ownership of multi-case Enum values in the context of to @in thunks.
 // ---
 // CHECK-LABEL: sil shared [transparent] [serialized] [thunk] @$ss17FloatingPointSignOSQsSQ2eeoiySbx_xtFZTW : $@convention(witness_method: Equatable) (@in_guaranteed FloatingPointSign, @in_guaranteed FloatingPointSign, @thick FloatingPointSign.Type) -> Bool {
-// CHECK: bb0(%0 : @trivial $FloatingPointSign, %1 : @trivial $FloatingPointSign, %2 : @trivial $@thick FloatingPointSign.Type):
+// CHECK: bb0(%0 : $FloatingPointSign, %1 : $FloatingPointSign, %2 : $@thick FloatingPointSign.Type):
 // CHECK:   %3 = function_ref @$ss2eeoiySbx_xtSYRzSQ8RawValueRpzlF : $@convention(thin) <τ_0_0 where τ_0_0 : RawRepresentable, τ_0_0.RawValue : Equatable> (@in_guaranteed τ_0_0, @in_guaranteed τ_0_0) -> Bool
 // CHECK:   %4 = apply %3<FloatingPointSign>(%0, %1) : $@convention(thin) <τ_0_0 where τ_0_0 : RawRepresentable, τ_0_0.RawValue : Equatable> (@in_guaranteed τ_0_0, @in_guaranteed τ_0_0) -> Bool
 // CHECK:   return %4 : $Bool
diff --git a/test/SILGen/opaque_values_silgen_lib.swift b/test/SILGen/opaque_values_silgen_lib.swift
index 70d529a..5294e08 100644
--- a/test/SILGen/opaque_values_silgen_lib.swift
+++ b/test/SILGen/opaque_values_silgen_lib.swift
@@ -42,7 +42,7 @@
 // Test emitBuiltinCastReference
 // ---
 // CHECK-LABEL: sil hidden @$ss21s030__________refCast_2toq_x_q_mtr0_lF : $@convention(thin) <T, U> (@in_guaranteed T, @thick U.Type) -> @out U {
-// CHECK: bb0([[ARG:%.*]] : @guaranteed $T, %1 : @trivial $@thick U.Type):
+// CHECK: bb0([[ARG:%.*]] : @guaranteed $T, %1 : $@thick U.Type):
 // CHECK: [[COPY:%.*]] = copy_value [[ARG]] : $T
 // CHECK: [[SRC:%.*]] = alloc_stack $T
 // CHECK: store [[COPY]] to [init] [[SRC]] : $*T
@@ -61,13 +61,13 @@
 // Init of Empty protocol + Builtin.NativeObject enum (including opaque tuples as a return value)
 // ---
 // CHECK-LABEL: sil shared [transparent] @$ss9PAndSEnumO1AyABs6EmptyP_p_SStcABmF : $@convention(method) (@in EmptyP, @owned String, @thin PAndSEnum.Type) -> @out PAndSEnum {
-// CHECK: bb0([[ARG0:%.*]] : @owned $EmptyP, [[ARG1:%.*]]  : @owned $String, [[ARG2:%.*]] : @trivial $@thin PAndSEnum.Type):
+// CHECK: bb0([[ARG0:%.*]] : @owned $EmptyP, [[ARG1:%.*]]  : @owned $String, [[ARG2:%.*]] : $@thin PAndSEnum.Type):
 // CHECK:   [[RTUPLE:%.*]] = tuple ([[ARG0]] : $EmptyP, [[ARG1]] : $String)
 // CHECK:   [[RETVAL:%.*]] = enum $PAndSEnum, #PAndSEnum.A!enumelt.1, [[RTUPLE]] : $(EmptyP, String)
 // CHECK:   return [[RETVAL]] : $PAndSEnum
 // CHECK-LABEL: } // end sil function '$ss9PAndSEnumO1AyABs6EmptyP_p_SStcABmF'
 // CHECK-LABEL: sil shared [transparent] [thunk] @$ss9PAndSEnumO1AyABs6EmptyP_p_SStcABmFTc : $@convention(thin) (@thin PAndSEnum.Type) -> @owned @callee_guaranteed (@in_guaranteed EmptyP, @guaranteed String) -> @out PAndSEnum {
-// CHECK: bb0([[ARG:%.*]] : @trivial $@thin PAndSEnum.Type):
+// CHECK: bb0([[ARG:%.*]] : $@thin PAndSEnum.Type):
 // CHECK:   [[RETVAL:%.*]] = partial_apply [callee_guaranteed] {{.*}}([[ARG]]) : $@convention(method) (@in EmptyP, @owned String, @thin PAndSEnum.Type) -> @out PAndSEnum
 // CHECK:   [[CANONICAL_THUNK_FN:%.*]] = function_ref @$ss6EmptyP_pSSs9PAndSEnumOIegixr_sAA_pSSACIegngr_TR : $@convention(thin) (@in_guaranteed EmptyP, @guaranteed String, @guaranteed @callee_guaranteed (@in EmptyP, @owned String) -> @out PAndSEnum) -> @out PAndSEnum
 // CHECK:   [[CANONICAL_THUNK:%.*]] = partial_apply [callee_guaranteed] [[CANONICAL_THUNK_FN]]([[RETVAL]])
diff --git a/test/SILGen/optional-cast.swift b/test/SILGen/optional-cast.swift
index 1519692..ef6893c 100644
--- a/test/SILGen/optional-cast.swift
+++ b/test/SILGen/optional-cast.swift
@@ -155,7 +155,7 @@
 // <rdar://problem/17013042> T! <-> T? conversions should not produce a diamond
 
 // CHECK-LABEL: sil hidden @$s4main07opt_to_B8_trivialySiSgACF
-// CHECK:       bb0(%0 : @trivial $Optional<Int>):
+// CHECK:       bb0(%0 : $Optional<Int>):
 // CHECK-NEXT:  debug_value %0 : $Optional<Int>, let, name "x"
 // CHECK-NEXT:  return %0 : $Optional<Int>
 // CHECK-NEXT:}
@@ -173,7 +173,7 @@
 func opt_to_opt_reference(_ x : C!) -> C? { return x }
 
 // CHECK-LABEL: sil hidden @$s4main07opt_to_B12_addressOnly{{[_0-9a-zA-Z]*}}F
-// CHECK:       bb0(%0 : @trivial $*Optional<T>, %1 : @trivial $*Optional<T>):
+// CHECK:       bb0(%0 : $*Optional<T>, %1 : $*Optional<T>):
 // CHECK-NEXT:  debug_value_addr %1 : $*Optional<T>, let, name "x"
 // CHECK-NEXT:  copy_addr %1 to [initialization] %0
 // CHECK-NOT:  destroy_addr %1
@@ -185,7 +185,7 @@
   func f(_ a : T?) {}
   
   // CHECK-LABEL: sil hidden @$s4main21TestAddressOnlyStructV8testCall{{[_0-9a-zA-Z]*}}F
-  // CHECK: bb0(%0 : @trivial $*Optional<T>, %1 : @trivial $TestAddressOnlyStruct<T>):
+  // CHECK: bb0(%0 : $*Optional<T>, %1 : $TestAddressOnlyStruct<T>):
   // CHECK: apply {{.*}}<T>(%0, %1)
   func testCall(_ a : T!) {
     f(a)
@@ -193,7 +193,7 @@
 }
 
 // CHECK-LABEL: sil hidden @$s4main35testContextualInitOfNonAddrOnlyTypeyySiSgF
-// CHECK: bb0(%0 : @trivial $Optional<Int>):
+// CHECK: bb0(%0 : $Optional<Int>):
 // CHECK-NEXT: debug_value %0 : $Optional<Int>, let, name "a"
 // CHECK-NEXT: [[X:%.*]] = alloc_box ${ var Optional<Int> }, var, name "x"
 // CHECK-NEXT: [[PB:%.*]] = project_box [[X]]
diff --git a/test/SILGen/partial_apply_generic.swift b/test/SILGen/partial_apply_generic.swift
index 09e4b40..9f4282c 100644
--- a/test/SILGen/partial_apply_generic.swift
+++ b/test/SILGen/partial_apply_generic.swift
@@ -47,7 +47,7 @@
 }
 
 // CHECK-LABEL: sil shared [thunk] @$s21partial_apply_generic3FooP12instanceFunc{{[_0-9a-zA-Z]*}}F
-// CHECK: bb0([[ARG:%.*]] : @trivial $*Self):
+// CHECK: bb0([[ARG:%.*]] : $*Self):
 // CHECK: [[REF:%.*]] = witness_method $Self, #Foo.instanceFunc!1
 // CHECK-NEXT: [[STACK:%.*]] = alloc_stack $Self
 // CHECK-NEXT: copy_addr [[ARG]] to [initialization] [[STACK]]
@@ -82,7 +82,7 @@
 
 // curry thunk of Foo.makesSelfNonCanonical<A where ...> (A1) -> ()
 // CHECK-LABEL: sil shared [thunk] @$s21partial_apply_generic3FooP21makesSelfNonCanonicalyyqd__7CuddlesQyd__RszAA5PandaRd__lFTc : $@convention(thin) <Self><T where Self == T.Cuddles, T : Panda> (@in_guaranteed Self) -> @owned @callee_guaranteed (@in_guaranteed T) -> () {
-// CHECK: bb0([[ARG:%.*]] : @trivial $*Self):
+// CHECK: bb0([[ARG:%.*]] : $*Self):
 // CHECK: [[REF:%.*]] = witness_method $Self, #Foo.makesSelfNonCanonical!1 : <Self><T where Self == T.Cuddles, T : Panda> (Self) -> (T) -> () : $@convention(witness_method: Foo) <τ_0_0><τ_1_0 where τ_0_0 == τ_1_0.Cuddles, τ_1_0 : Panda> (@in_guaranteed τ_1_0, @in_guaranteed τ_0_0) -> ()
 // CHECK-NEXT: [[STACK:%.*]] = alloc_stack $Self
 // CHECK-NEXT: copy_addr [[ARG]] to [initialization] [[STACK]] : $*Self
diff --git a/test/SILGen/partial_apply_protocol.swift b/test/SILGen/partial_apply_protocol.swift
index 3df3c37..14cc282 100644
--- a/test/SILGen/partial_apply_protocol.swift
+++ b/test/SILGen/partial_apply_protocol.swift
@@ -42,7 +42,7 @@
 }
 
 // CHECK-LABEL: sil shared [transparent] [serializable] [reabstraction_thunk] @$sxIegr_22partial_apply_protocol8Clonable_pIegr_AaBRzlTR : $@convention(thin) <τ_0_0 where τ_0_0 : Clonable> (@guaranteed @callee_guaranteed () -> @out τ_0_0) -> @out Clonable
-// CHECK:       bb0(%0 : @trivial $*Clonable, %1 : @guaranteed $@callee_guaranteed () -> @out τ_0_0):
+// CHECK:       bb0(%0 : $*Clonable, %1 : @guaranteed $@callee_guaranteed () -> @out τ_0_0):
 // CHECK-NEXT:    [[INNER_RESULT:%.*]] = alloc_stack $τ_0_0
 // CHECK-NEXT:    apply %1([[INNER_RESULT]])
 // CHECK-NEXT:    [[OUTER_RESULT:%.*]] = init_existential_addr %0
@@ -54,7 +54,7 @@
 // FIXME: This is horribly inefficient, too much alloc_stack / copy_addr!
 
 // CHECK-LABEL: sil shared [transparent] [serializable] [reabstraction_thunk] @$sxSgIegr_22partial_apply_protocol8Clonable_pSgIegr_AbCRzlTR : $@convention(thin) <τ_0_0 where τ_0_0 : Clonable> (@guaranteed @callee_guaranteed () -> @out Optional<τ_0_0>) -> @out Optional<Clonable>
-// CHECK:       bb0(%0 : @trivial $*Optional<Clonable>, %1 : @guaranteed $@callee_guaranteed () -> @out Optional<τ_0_0>):
+// CHECK:       bb0(%0 : $*Optional<Clonable>, %1 : @guaranteed $@callee_guaranteed () -> @out Optional<τ_0_0>):
 // CHECK-NEXT:    [[INNER_RESULT:%.*]] = alloc_stack $Optional<τ_0_0>
 // CHECK-NEXT:    apply %1([[INNER_RESULT]])
 // CHECK-NEXT:    [[OUTER_RESULT:%.*]] = alloc_stack $Optional<Clonable>
@@ -132,7 +132,7 @@
 }
 
 // CHECK-LABEL: sil shared [transparent] [serializable] [reabstraction_thunk] @$sxqd__Iegnr_x22partial_apply_protocol8Clonable_pIegnr_AaBRd__r__lTR : $@convention(thin) <τ_0_0><τ_1_0 where τ_1_0 : Clonable> (@in_guaranteed τ_0_0, @guaranteed @callee_guaranteed (@in_guaranteed τ_0_0) -> @out τ_1_0) -> @out Clonable
-// CHECK:         bb0(%0 : @trivial $*Clonable, %1 : @trivial $*τ_0_0, %2 : @guaranteed $@callee_guaranteed (@in_guaranteed τ_0_0) -> @out τ_1_0):
+// CHECK:         bb0(%0 : $*Clonable, %1 : $*τ_0_0, %2 : @guaranteed $@callee_guaranteed (@in_guaranteed τ_0_0) -> @out τ_1_0):
 // CHECK-NEXT:      [[INNER_RESULT:%.*]] = alloc_stack $τ_1_0
 // CHECK-NEXT:      apply %2([[INNER_RESULT]], %1)
 // CHECK-NEXT:      [[OUTER_RESULT:%.*]] = init_existential_addr %0
@@ -142,14 +142,14 @@
 // CHECK-NEXT:      return [[EMPTY]]
 
 // CHECK-LABEL: sil shared [transparent] [serializable] [reabstraction_thunk] @$sxqd__Iegr_Iegno_x22partial_apply_protocol8Clonable_pIegr_Iegno_AaBRd__r__lTR : $@convention(thin) <τ_0_0><τ_1_0 where τ_1_0 : Clonable> (@in_guaranteed τ_0_0, @guaranteed @callee_guaranteed (@in_guaranteed τ_0_0) -> @owned @callee_guaranteed () -> @out τ_1_0) -> @owned @callee_guaranteed () -> @out Clonable
-// CHECK:         bb0(%0 : @trivial $*τ_0_0, %1 : @guaranteed $@callee_guaranteed (@in_guaranteed τ_0_0) -> @owned @callee_guaranteed () -> @out τ_1_0):
+// CHECK:         bb0(%0 : $*τ_0_0, %1 : @guaranteed $@callee_guaranteed (@in_guaranteed τ_0_0) -> @owned @callee_guaranteed () -> @out τ_1_0):
 // CHECK-NEXT:      [[RES:%.*]] = apply %1(%0)
 // CHECK:           [[THUNK_FN:%.*]] = function_ref @$sqd__Iegr_22partial_apply_protocol8Clonable_pIegr_AaBRd__r__lTR
 // CHECK-NEXT:      [[RESULT:%.*]] = partial_apply [callee_guaranteed] [[THUNK_FN]]<τ_0_0, τ_1_0>([[RES]])
 // CHECK-NEXT:      return [[RESULT]]
 
 // CHECK-LABEL: sil shared [transparent] [serializable] [reabstraction_thunk] @$sqd__Iegr_22partial_apply_protocol8Clonable_pIegr_AaBRd__r__lTR : $@convention(thin) <τ_0_0><τ_1_0 where τ_1_0 : Clonable> (@guaranteed @callee_guaranteed () -> @out τ_1_0) -> @out Clonable {
-// CHECK:         bb0(%0 : @trivial $*Clonable, %1 : @guaranteed $@callee_guaranteed () -> @out τ_1_0):
+// CHECK:         bb0(%0 : $*Clonable, %1 : @guaranteed $@callee_guaranteed () -> @out τ_1_0):
 // CHECK-NEXT:      [[INNER_RESULT:%.*]] = alloc_stack $τ_1_0
 // CHECK-NEXT:      apply %1([[INNER_RESULT]])
 // CHECK-NEXT:      [[OUTER_RESULT:%.*]] = init_existential_addr %0
diff --git a/test/SILGen/partial_apply_super.swift b/test/SILGen/partial_apply_super.swift
index cce3f6d..d86ab40 100644
--- a/test/SILGen/partial_apply_super.swift
+++ b/test/SILGen/partial_apply_super.swift
@@ -79,7 +79,7 @@
   }
 
   // CHECK-LABEL: sil hidden @$s19partial_apply_super5ChildC25callFinalSuperClassMethodyyFZ : $@convention(method) (@thick Child.Type) -> ()
-  // CHECK: bb0([[ARG:%.*]] : @trivial $@thick Child.Type):
+  // CHECK: bb0([[ARG:%.*]] : $@thick Child.Type):
   // CHECK:   [[CASTED_SELF:%.*]] = upcast [[ARG]] : $@thick Child.Type to $@thick Parent.Type
   // CHECK:   [[SUPER_METHOD:%.*]] = function_ref @$s19partial_apply_super6ParentC16finalClassMethodyyFZTc : $@convention(thin) (@thick Parent.Type) -> @owned @callee_guaranteed () -> ()
   // CHECK:   [[APPLIED_SELF:%.*]] = apply [[SUPER_METHOD]]([[CASTED_SELF]]) : $@convention(thin) (@thick Parent.Type) -> @owned @callee_guaranteed () -> ()
diff --git a/test/SILGen/pointer_conversion.swift b/test/SILGen/pointer_conversion.swift
index 5812a8e..74df8ef 100644
--- a/test/SILGen/pointer_conversion.swift
+++ b/test/SILGen/pointer_conversion.swift
@@ -22,7 +22,7 @@
 func takesOptOptConstRawPointer(_ x: UnsafeRawPointer??, and: Int) {}
 
 // CHECK-LABEL: sil hidden @$s18pointer_conversion0A9ToPointeryySpySiG_SPySiGSvtF
-// CHECK: bb0([[MP:%.*]] : @trivial $UnsafeMutablePointer<Int>, [[CP:%.*]] : @trivial $UnsafePointer<Int>, [[MRP:%.*]] : @trivial $UnsafeMutableRawPointer):
+// CHECK: bb0([[MP:%.*]] : $UnsafeMutablePointer<Int>, [[CP:%.*]] : $UnsafePointer<Int>, [[MRP:%.*]] : $UnsafeMutableRawPointer):
 func pointerToPointer(_ mp: UnsafeMutablePointer<Int>,
   _ cp: UnsafePointer<Int>, _ mrp: UnsafeMutableRawPointer) {
 
@@ -319,7 +319,7 @@
   // CHECK:   [[OPTPTR:%.*]] = enum $Optional<UnsafePointer<Int>>, #Optional.some!enumelt.1, [[DEP]]
   // CHECK:   dealloc_stack [[TEMP]]
   // CHECK:   br [[CONT_BB:bb[0-9]+]]([[OPTPTR]] : $Optional<UnsafePointer<Int>>, [[OWNER]] : $Optional<AnyObject>)
-  // CHECK: [[CONT_BB]]([[OPTPTR:%.*]] : @trivial $Optional<UnsafePointer<Int>>, [[OWNER:%.*]] : @owned $Optional<AnyObject>):
+  // CHECK: [[CONT_BB]]([[OPTPTR:%.*]] : $Optional<UnsafePointer<Int>>, [[OWNER:%.*]] : @owned $Optional<AnyObject>):
   // CHECK:   [[OPTDEP:%.*]] = mark_dependence [[OPTPTR]] : $Optional<UnsafePointer<Int>> on [[OWNER]]
   // CHECK:   [[TAKES:%.*]] = function_ref @$s18pointer_conversion20takesOptConstPointer_3andySPySiGSg_SitF
   // CHECK:   apply [[TAKES]]([[OPTDEP]], [[RESULT1]])
@@ -351,11 +351,11 @@
   // CHECK:   [[OPTPTR:%.*]] = enum $Optional<UnsafePointer<Int>>, #Optional.some!enumelt.1, [[DEP]]
   // CHECK:   dealloc_stack [[TEMP]]
   // CHECK:   br [[SOME_SOME_CONT_BB:bb[0-9]+]]([[OPTPTR]] : $Optional<UnsafePointer<Int>>, [[OWNER]] : $Optional<AnyObject>)
-  // CHECK: [[SOME_SOME_CONT_BB]]([[OPTPTR:%.*]] : @trivial $Optional<UnsafePointer<Int>>, [[OWNER:%.*]] : @owned $Optional<AnyObject>):
+  // CHECK: [[SOME_SOME_CONT_BB]]([[OPTPTR:%.*]] : $Optional<UnsafePointer<Int>>, [[OWNER:%.*]] : @owned $Optional<AnyObject>):
   // CHECK:   [[OPTDEP:%.*]] = mark_dependence [[OPTPTR]] : $Optional<UnsafePointer<Int>> on [[OWNER]]
   // CHECK:   [[OPTOPTPTR:%.*]] = enum $Optional<Optional<UnsafePointer<Int>>>, #Optional.some!enumelt.1, [[OPTDEP]]
   // CHECK:   br [[SOME_CONT_BB:bb[0-9]+]]([[OPTOPTPTR]] : $Optional<Optional<UnsafePointer<Int>>>, [[OWNER]] : $Optional<AnyObject>)
-  // CHECK: [[SOME_CONT_BB]]([[OPTOPTPTR:%.*]] : @trivial $Optional<Optional<UnsafePointer<Int>>>, [[OWNER:%.*]] : @owned $Optional<AnyObject>):
+  // CHECK: [[SOME_CONT_BB]]([[OPTOPTPTR:%.*]] : $Optional<Optional<UnsafePointer<Int>>>, [[OWNER:%.*]] : @owned $Optional<AnyObject>):
   // CHECK:   [[OPTOPTDEP:%.*]] = mark_dependence [[OPTOPTPTR]] : $Optional<Optional<UnsafePointer<Int>>> on [[OWNER]]
   // CHECK:   [[TAKES:%.*]] = function_ref @$s18pointer_conversion08takesOptD12ConstPointer_3andySPySiGSgSg_SitF
   // CHECK:   apply [[TAKES]]([[OPTOPTDEP]], [[RESULT1]])
@@ -388,7 +388,7 @@
   // CHECK:   [[OPTPTR:%.*]] = enum $Optional<UnsafeRawPointer>, #Optional.some!enumelt.1, [[DEP]]
   // CHECK:   dealloc_stack [[TEMP]]
   // CHECK:   br [[CONT_BB:bb[0-9]+]]([[OPTPTR]] : $Optional<UnsafeRawPointer>, [[OWNER]] : $Optional<AnyObject>)
-  // CHECK: [[CONT_BB]]([[OPTPTR:%.*]] : @trivial $Optional<UnsafeRawPointer>, [[OWNER:%.*]] : @owned $Optional<AnyObject>):
+  // CHECK: [[CONT_BB]]([[OPTPTR:%.*]] : $Optional<UnsafeRawPointer>, [[OWNER:%.*]] : @owned $Optional<AnyObject>):
   // CHECK:   [[OPTDEP:%.*]] = mark_dependence [[OPTPTR]] : $Optional<UnsafeRawPointer> on [[OWNER]]
   // CHECK:   [[TAKES:%.*]] = function_ref @$s18pointer_conversion23takesOptConstRawPointer_3andySVSg_SitF
   // CHECK:   apply [[TAKES]]([[OPTDEP]], [[RESULT1]])
@@ -420,11 +420,11 @@
   // CHECK:   [[OPTPTR:%.*]] = enum $Optional<UnsafeRawPointer>, #Optional.some!enumelt.1, [[DEP]]
   // CHECK:   dealloc_stack [[TEMP]]
   // CHECK:   br [[SOME_SOME_CONT_BB:bb[0-9]+]]([[OPTPTR]] : $Optional<UnsafeRawPointer>, [[OWNER]] : $Optional<AnyObject>)
-  // CHECK: [[SOME_SOME_CONT_BB]]([[OPTPTR:%.*]] : @trivial $Optional<UnsafeRawPointer>, [[OWNER:%.*]] : @owned $Optional<AnyObject>):
+  // CHECK: [[SOME_SOME_CONT_BB]]([[OPTPTR:%.*]] : $Optional<UnsafeRawPointer>, [[OWNER:%.*]] : @owned $Optional<AnyObject>):
   // CHECK:   [[OPTDEP:%.*]] = mark_dependence [[OPTPTR]] : $Optional<UnsafeRawPointer> on [[OWNER]]
   // CHECK:   [[OPTOPTPTR:%.*]] = enum $Optional<Optional<UnsafeRawPointer>>, #Optional.some!enumelt.1, [[OPTDEP]]
   // CHECK:   br [[SOME_CONT_BB:bb[0-9]+]]([[OPTOPTPTR]] : $Optional<Optional<UnsafeRawPointer>>, [[OWNER]] : $Optional<AnyObject>)
-  // CHECK: [[SOME_CONT_BB]]([[OPTOPTPTR:%.*]] : @trivial $Optional<Optional<UnsafeRawPointer>>, [[OWNER:%.*]] : @owned $Optional<AnyObject>):
+  // CHECK: [[SOME_CONT_BB]]([[OPTOPTPTR:%.*]] : $Optional<Optional<UnsafeRawPointer>>, [[OWNER:%.*]] : @owned $Optional<AnyObject>):
   // CHECK:   [[OPTOPTDEP:%.*]] = mark_dependence [[OPTOPTPTR]] : $Optional<Optional<UnsafeRawPointer>> on [[OWNER]]
   // CHECK:   [[TAKES:%.*]] = function_ref @$s18pointer_conversion08takesOptD15ConstRawPointer_3andySVSgSg_SitF
   // CHECK:   apply [[TAKES]]([[OPTOPTDEP]], [[RESULT1]])
diff --git a/test/SILGen/properties.swift b/test/SILGen/properties.swift
index f137c36..d153d83 100644
--- a/test/SILGen/properties.swift
+++ b/test/SILGen/properties.swift
@@ -8,7 +8,7 @@
 func getInt() -> Int { return zero }
 
 // CHECK-LABEL: sil hidden @{{.*}}physical_tuple_lvalue
-// CHECK: bb0(%0 : @trivial $Int):
+// CHECK: bb0(%0 : $Int):
 func physical_tuple_lvalue(_ c: Int) {
   var x : (Int, Int)
   // CHECK: [[BOX:%[0-9]+]] = alloc_box ${ var (Int, Int) }
@@ -33,7 +33,7 @@
 
 // CHECK-LABEL: sil hidden @$s10properties16tuple_assignment{{[_0-9a-zA-Z]*}}F
 func tuple_assignment(_ a: inout Int, b: inout Int) {
-  // CHECK: bb0([[A_ADDR:%[0-9]+]] : @trivial $*Int, [[B_ADDR:%[0-9]+]] : @trivial $*Int):
+  // CHECK: bb0([[A_ADDR:%[0-9]+]] : $*Int, [[B_ADDR:%[0-9]+]] : $*Int):
   // CHECK: [[READ:%.*]] = begin_access [read] [unknown] [[B_ADDR]]
   // CHECK: [[B:%[0-9]+]] = load [trivial] [[READ]]
   // CHECK: [[READ:%.*]] = begin_access [read] [unknown] [[A_ADDR]]
@@ -47,7 +47,7 @@
 
 // CHECK-LABEL: sil hidden @$s10properties18tuple_assignment_2{{[_0-9a-zA-Z]*}}F
 func tuple_assignment_2(_ a: inout Int, b: inout Int, xy: (Int, Int)) {
-  // CHECK: bb0([[A_ADDR:%[0-9]+]] : @trivial $*Int, [[B_ADDR:%[0-9]+]] : @trivial $*Int, [[X:%[0-9]+]] : @trivial $Int, [[Y:%[0-9]+]] : @trivial $Int):
+  // CHECK: bb0([[A_ADDR:%[0-9]+]] : $*Int, [[B_ADDR:%[0-9]+]] : $*Int, [[X:%[0-9]+]] : $Int, [[Y:%[0-9]+]] : $Int):
   (a, b) = xy
   // CHECK: [[XY2:%[0-9]+]] = tuple ([[X]] : $Int, [[Y]] : $Int)
   // CHECK: ([[X:%[0-9]+]], [[Y:%[0-9]+]]) = destructure_tuple [[XY2]]
@@ -115,7 +115,7 @@
 
 // CHECK-LABEL: sil hidden @$s10properties24physical_subclass_lvalue{{[_0-9a-zA-Z]*}}F
 func physical_subclass_lvalue(_ r: RefSubclass, a: Int) {
-  // CHECK: bb0([[ARG1:%.*]] : @guaranteed $RefSubclass, [[ARG2:%.*]] : @trivial $Int):
+  // CHECK: bb0([[ARG1:%.*]] : @guaranteed $RefSubclass, [[ARG2:%.*]] : $Int):
   r.y = a
   // CHECK: [[ARG1_COPY:%.*]] = copy_value [[ARG1]] : $RefSubclass
   // CHECK: [[R_SUP:%[0-9]+]] = upcast [[ARG1_COPY]] : $RefSubclass to $Ref
@@ -172,7 +172,7 @@
 
 // CHECK-LABEL: sil hidden @$s10properties18logical_struct_set{{[_0-9a-zA-Z]*}}F
 func logical_struct_set(_ value: inout Val, z: Int) {
-  // CHECK: bb0([[VAL:%[0-9]+]] : @trivial $*Val, [[Z:%[0-9]+]] : @trivial $Int):
+  // CHECK: bb0([[VAL:%[0-9]+]] : $*Val, [[Z:%[0-9]+]] : $Int):
   value.z = z
   // CHECK: [[WRITE:%.*]] = begin_access [modify] [unknown] [[VAL]]
   // CHECK: [[Z_SET_METHOD:%[0-9]+]] = function_ref @$s10properties3ValV1z{{[_0-9a-zA-Z]*}}vs
@@ -182,7 +182,7 @@
 
 // CHECK-LABEL: sil hidden @$s10properties27logical_struct_in_tuple_set{{[_0-9a-zA-Z]*}}F
 func logical_struct_in_tuple_set(_ value: inout (Int, Val), z: Int) {
-  // CHECK: bb0([[VAL:%[0-9]+]] : @trivial $*(Int, Val), [[Z:%[0-9]+]] : @trivial $Int):
+  // CHECK: bb0([[VAL:%[0-9]+]] : $*(Int, Val), [[Z:%[0-9]+]] : $Int):
   value.1.z = z
   // CHECK: [[WRITE:%.*]] = begin_access [modify] [unknown] [[VAL]]
   // CHECK: [[VAL_1:%[0-9]+]] = tuple_element_addr [[WRITE]] : {{.*}}, 1
@@ -193,7 +193,7 @@
 
 // CHECK-LABEL: sil hidden @$s10properties29logical_struct_in_reftype_set{{[_0-9a-zA-Z]*}}F
 func logical_struct_in_reftype_set(_ value: inout Val, z1: Int) {
-  // CHECK: bb0([[VAL:%[0-9]+]] : @trivial $*Val, [[Z1:%[0-9]+]] : @trivial $Int):
+  // CHECK: bb0([[VAL:%[0-9]+]] : $*Val, [[Z1:%[0-9]+]] : $Int):
   value.ref.val_prop.z_tuple.1 = z1
   // -- val.ref
   // CHECK: [[READ:%.*]] = begin_access [read] [unknown] [[VAL]]
@@ -238,7 +238,7 @@
 
 // CHECK-LABEL: sil hidden @$s10properties27tuple_in_logical_struct_set{{[_0-9a-zA-Z]*}}F
 func tuple_in_logical_struct_set(_ value: inout Val, z1: Int) {
-  // CHECK: bb0([[VAL:%[0-9]+]] : @trivial $*Val, [[Z1:%[0-9]+]] : @trivial $Int):
+  // CHECK: bb0([[VAL:%[0-9]+]] : $*Val, [[Z1:%[0-9]+]] : $Int):
   value.z_tuple.1 = z1
   // CHECK: [[WRITE:%.*]] = begin_access [modify] [unknown] [[VAL]]
   // CHECK: [[Z_TUPLE_MATERIALIZED:%[0-9]+]] = alloc_stack $(Int, Int)
@@ -298,7 +298,7 @@
   return prop
 }
 // CHECK-: sil private [[PROP_GET_CLOSURE]]
-// CHECK: bb0(%{{[0-9]+}} : @trivial $Int):
+// CHECK: bb0(%{{[0-9]+}} : $Int):
 
 func logical_generic_local_get<T>(_ x: Int, _: T) {
   var prop1: Int {
@@ -335,7 +335,7 @@
   // CHECK: apply [[FUNC_REF]](%0)
 }
 // CHECK: sil private @$s10properties26logical_local_captured_get{{.*}}vg
-// CHECK: bb0(%{{[0-9]+}} : @trivial $Int):
+// CHECK: bb0(%{{[0-9]+}} : $Int):
 
 func inout_arg(_ x: inout Int) {}
 
@@ -355,7 +355,7 @@
  * reuses temporaries */
 
 // CHECK-LABEL: sil hidden @$s10properties17val_subscript_get{{[_0-9a-zA-Z]*}}F : $@convention(thin) (@guaranteed Val, Int) -> Float
-// CHECK: bb0([[VVAL:%[0-9]+]] : @guaranteed $Val, [[I:%[0-9]+]] : @trivial $Int):
+// CHECK: bb0([[VVAL:%[0-9]+]] : @guaranteed $Val, [[I:%[0-9]+]] : $Int):
 func val_subscript_get(_ v: Val, i: Int) -> Float {
   return v[i]
   // CHECK: [[SUBSCRIPT_GET_METHOD:%[0-9]+]] = function_ref @$s10properties3ValV{{[_0-9a-zA-Z]*}}ig
@@ -364,7 +364,7 @@
 }
 
 // CHECK-LABEL: sil hidden @$s10properties17val_subscript_set{{[_0-9a-zA-Z]*}}F
-// CHECK: bb0(%0 : @guaranteed $Val, [[I:%[0-9]+]] : @trivial $Int, [[X:%[0-9]+]] : @trivial $Float):
+// CHECK: bb0(%0 : @guaranteed $Val, [[I:%[0-9]+]] : $Int, [[X:%[0-9]+]] : $Float):
 func val_subscript_set(_ v: Val, i: Int, x: Float) {
   var v = v
   v[i] = x
@@ -482,7 +482,7 @@
     a = x
     a = x
 
-    // CHECK: bb0(%0 : @trivial $Int, %1 : @trivial $@thin DidSetWillSetTests.Type):
+    // CHECK: bb0(%0 : $Int, %1 : $@thin DidSetWillSetTests.Type):
     // CHECK:        [[SELF:%.*]] = mark_uninitialized [rootself]
     // CHECK:        [[PB_SELF:%.*]] = project_box [[SELF]]
     // CHECK:        [[WRITE:%.*]] = begin_access [modify] [unknown] [[PB_SELF]]
@@ -496,7 +496,7 @@
   var a: Int {
     // CHECK-LABEL: sil private @$s10properties010DidSetWillC5TestsV1a{{[_0-9a-zA-Z]*}}vw
     willSet(newA) {
-      // CHECK: bb0(%0 : @trivial $Int, %1 : @trivial $*DidSetWillSetTests):
+      // CHECK: bb0(%0 : $Int, %1 : $*DidSetWillSetTests):
       // CHECK-NEXT: debug_value %0
       // CHECK-NEXT: debug_value_addr %1 : $*DidSetWillSetTests
 
@@ -531,7 +531,7 @@
 
     // CHECK-LABEL: sil private @$s10properties010DidSetWillC5TestsV1a{{[_0-9a-zA-Z]*}}vW
     didSet {
-      // CHECK: bb0(%0 : @trivial $Int, %1 : @trivial $*DidSetWillSetTests):
+      // CHECK: bb0(%0 : $Int, %1 : $*DidSetWillSetTests):
       // CHECK-NEXT: debug
       // CHECK-NEXT: debug_value_addr %1 : $*DidSetWillSetTests
 
@@ -563,14 +563,14 @@
   // This is the synthesized getter and setter for the willset/didset variable.
 
   // CHECK-LABEL: sil hidden [transparent] @$s10properties010DidSetWillC5TestsV1aSivg
-  // CHECK: bb0(%0 : @trivial $DidSetWillSetTests):
+  // CHECK: bb0(%0 : $DidSetWillSetTests):
   // CHECK-NEXT:   debug_value %0
   // CHECK-NEXT:   %2 = struct_extract %0 : $DidSetWillSetTests, #DidSetWillSetTests.a
   // CHECK-NEXT:   return %2 : $Int{{.*}}                      // id: %3
 
 
   // CHECK-LABEL: sil hidden @$s10properties010DidSetWillC5TestsV1aSivs
-  // CHECK: bb0(%0 : @trivial $Int, %1 : @trivial $*DidSetWillSetTests):
+  // CHECK: bb0(%0 : $Int, %1 : $*DidSetWillSetTests):
   // CHECK-NEXT: debug_value %0
   // CHECK-NEXT: debug_value_addr %1
 
@@ -706,7 +706,7 @@
   localproperty = arg
 
   // Alloc and initialize the property to the argument value.
-  // CHECK: bb0([[ARG:%[0-9]+]] : @trivial $Int)
+  // CHECK: bb0([[ARG:%[0-9]+]] : $Int)
   // CHECK: [[BOX:%[0-9]+]] = alloc_box ${ var Int }
   // CHECK: [[PB:%.*]] = project_box [[BOX]]
   // CHECK: store [[ARG]] to [trivial] [[PB]]
@@ -716,7 +716,7 @@
 // Ensure that setting the variable from within its own didSet doesn't recursively call didSet.
 
 // CHECK-LABEL: sil private @$s10properties24local_observing_property{{[_0-9a-zA-Z]*}}SiF13localproperty{{[_0-9a-zA-Z]*}}SivW
-// CHECK: bb0(%0 : @trivial $Int, %1 : @guaranteed ${ var Int })
+// CHECK: bb0(%0 : $Int, %1 : @guaranteed ${ var Int })
 // CHECK: [[POINTER:%.*]] = project_box %1 : ${ var Int }, 0
 // CHECK: // function_ref properties.zero.unsafeMutableAddressor : Swift.Int
 // CHECK-NEXT: [[ZEROFN:%.*]] = function_ref @$s10properties4zero{{[_0-9a-zA-Z]*}}vau
@@ -813,7 +813,7 @@
 
 // CHECK: // setter of p #1 : Swift.Int in properties.propertyWithDidSetTakingOldValue()
 // CHECK-NEXT: sil {{.*}} @$s10properties32propertyWithDidSetTakingOldValueyyF1pL_Sivs
-// CHECK: bb0([[ARG1:%.*]] : @trivial $Int, [[ARG2:%.*]] : @guaranteed ${ var Int }):
+// CHECK: bb0([[ARG1:%.*]] : $Int, [[ARG2:%.*]] : @guaranteed ${ var Int }):
 // CHECK-NEXT:  debug_value [[ARG1]] : $Int, let, name "newValue", argno 1
 // CHECK-NEXT:  [[ARG2_PB:%.*]] = project_box [[ARG2]]
 // CHECK-NEXT:  debug_value_addr [[ARG2_PB]] : $*Int, var, name "p", argno 2
diff --git a/test/SILGen/properties_swift4.swift b/test/SILGen/properties_swift4.swift
index aa80345..a45d855 100644
--- a/test/SILGen/properties_swift4.swift
+++ b/test/SILGen/properties_swift4.swift
@@ -15,7 +15,7 @@
   var a: Int {
     // CHECK-LABEL: sil private @$s10properties010DidSetWillC5TestsV1a{{[_0-9a-zA-Z]*}}vw
     willSet(newA) {
-      // CHECK: bb0(%0 : @trivial $Int, %1 : @trivial $*DidSetWillSetTests):
+      // CHECK: bb0(%0 : $Int, %1 : $*DidSetWillSetTests):
 
       a = zero  // reassign, but don't infinite loop.
 
diff --git a/test/SILGen/properties_swift5.swift b/test/SILGen/properties_swift5.swift
index 886dbc7..6775c9b 100644
--- a/test/SILGen/properties_swift5.swift
+++ b/test/SILGen/properties_swift5.swift
@@ -15,7 +15,7 @@
   var a: Int {
     // CHECK-LABEL: sil private @$s10properties010DidSetWillC5TestsV1a{{[_0-9a-zA-Z]*}}vw
     willSet(newA) {
-      // CHECK: bb0(%0 : @trivial $Int, %1 : @trivial $*DidSetWillSetTests):
+      // CHECK: bb0(%0 : $Int, %1 : $*DidSetWillSetTests):
 
       a = zero  // reassign, but don't infinite loop, as accessing on 'self'.
 
diff --git a/test/SILGen/property_abstraction.swift b/test/SILGen/property_abstraction.swift
index da76dc3..dd657c1 100644
--- a/test/SILGen/property_abstraction.swift
+++ b/test/SILGen/property_abstraction.swift
@@ -78,7 +78,7 @@
 }
 
 // CHECK-LABEL: sil hidden @$s20property_abstraction34getAddressOnlyReabstractedProperty{{[_0-9a-zA-Z]*}}F : $@convention(thin) (@in_guaranteed AddressOnlyLet<Int>) -> @owned @callee_guaranteed (Int) -> Int
-// CHECK: bb0([[ARG:%.*]] : @trivial $*AddressOnlyLet<Int>):
+// CHECK: bb0([[ARG:%.*]] : $*AddressOnlyLet<Int>):
 // CHECK:   [[CLOSURE_ADDR:%.*]] = struct_element_addr {{%.*}} : $*AddressOnlyLet<Int>, #AddressOnlyLet.f
 // CHECK:   [[CLOSURE_ORIG:%.*]] = load [copy] [[CLOSURE_ADDR]]
 // CHECK:   [[REABSTRACT:%.*]] = function_ref
@@ -134,7 +134,7 @@
   factory.builder = { return MyClass() }
 }
 // CHECK: sil hidden @$s20property_abstraction10setBuilder{{[_0-9a-zA-Z]*}}F : $@convention(thin) <F where F : Factory, F.Product == MyClass> (@inout F) -> ()
-// CHECK: bb0(%0 : @trivial $*F):
+// CHECK: bb0(%0 : $*F):
 // CHECK:   [[F0:%.*]] = function_ref @$s20property_abstraction10setBuilder{{[_0-9a-zA-Z]*}} : $@convention(thin) () -> @owned MyClass
 // CHECK:   [[F1:%.*]] = thin_to_thick_function [[F0]]
 // CHECK:   [[REABSTRACTOR:%.*]] = function_ref @$s{{.*}}TR :
diff --git a/test/SILGen/property_behavior_init.swift b/test/SILGen/property_behavior_init.swift
index 91c4aac..ddc786a 100644
--- a/test/SILGen/property_behavior_init.swift
+++ b/test/SILGen/property_behavior_init.swift
@@ -25,7 +25,7 @@
   // var xx: (Int, Int) __behavior diBehavior
 
   // CHECK-LABEL: sil hidden @$s22property_behavior_init3FooV{{[_0-9a-zA-Z]*}}fC
-  // CHECK:       bb0([[X:%.*]] : @trivial $Int,
+  // CHECK:       bb0([[X:%.*]] : $Int,
   init(x: Int) {
     // CHECK: [[MARKED_SELF_BOX:%.*]] = mark_uninitialized [rootself]
     // CHECK: [[PB_BOX:%.*]] = project_box [[MARKED_SELF_BOX]]
diff --git a/test/SILGen/protocol_extensions.swift b/test/SILGen/protocol_extensions.swift
index 5beaf58..460af0e 100644
--- a/test/SILGen/protocol_extensions.swift
+++ b/test/SILGen/protocol_extensions.swift
@@ -12,7 +12,7 @@
 
 extension P1 {
   // CHECK-LABEL: sil hidden @$s19protocol_extensions2P1PAAE6extP1a{{[_0-9a-zA-Z]*}}F : $@convention(method) <Self where Self : P1> (@in_guaranteed Self) -> () {
-  // CHECK: bb0([[SELF:%[0-9]+]] : @trivial $*Self):
+  // CHECK: bb0([[SELF:%[0-9]+]] : $*Self):
   func extP1a() {
     // CHECK: [[WITNESS:%[0-9]+]] = witness_method $Self, #P1.reqP1a!1 : {{.*}} : $@convention(witness_method: P1) <τ_0_0 where τ_0_0 : P1> (@in_guaranteed τ_0_0) -> ()
     // CHECK-NEXT: apply [[WITNESS]]<Self>([[SELF]]) : $@convention(witness_method: P1) <τ_0_0 where τ_0_0 : P1> (@in_guaranteed τ_0_0) -> ()
@@ -21,7 +21,7 @@
   }
 
   // CHECK-LABEL: sil @$s19protocol_extensions2P1PAAE6extP1b{{[_0-9a-zA-Z]*}}F : $@convention(method) <Self where Self : P1> (@in_guaranteed Self) -> () {
-  // CHECK: bb0([[SELF:%[0-9]+]] : @trivial $*Self):
+  // CHECK: bb0([[SELF:%[0-9]+]] : $*Self):
   public func extP1b() {
     // CHECK: [[FN:%[0-9]+]] = function_ref @$s19protocol_extensions2P1PAAE6extP1a{{[_0-9a-zA-Z]*}}F : $@convention(method) <τ_0_0 where τ_0_0 : P1> (@in_guaranteed τ_0_0) -> ()
     // CHECK-NEXT: apply [[FN]]<Self>([[SELF]]) : $@convention(method) <τ_0_0 where τ_0_0 : P1> (@in_guaranteed τ_0_0) -> ()
@@ -41,7 +41,7 @@
     // But here we have to do a witness method call:
 
     // CHECK-LABEL: sil hidden @$s19protocol_extensions2P1PAAE13callSubscript{{[_0-9a-zA-Z]*}}F
-    // CHECK: bb0(%0 : @trivial $*Self):
+    // CHECK: bb0(%0 : $*Self):
     // CHECK: witness_method $Self, #P1.subscript!getter.1
     // CHECK: return
     return self[0]
@@ -71,7 +71,7 @@
 
 //   (modify test from above)
 // CHECK-LABEL: sil private [transparent] [thunk] @$s19protocol_extensions1CCAA2P1A2aDPyS2iciMTW
-// CHECK: bb0(%0 : @trivial $Int, %1 : @trivial $*τ_0_0):
+// CHECK: bb0(%0 : $Int, %1 : $*τ_0_0):
 // CHECK: function_ref @$s19protocol_extensions2P1PAAEyS2icig
 // CHECK: return
 
@@ -97,7 +97,7 @@
 func inout_func(_ n: inout Int) {}
 
 // CHECK-LABEL: sil hidden @$s19protocol_extensions5testD_2dd1dyAA10MetaHolderV_AA1DCmAHtF : $@convention(thin) (MetaHolder, @thick D.Type, @guaranteed D) -> ()
-// CHECK: bb0([[M:%[0-9]+]] : @trivial $MetaHolder, [[DD:%[0-9]+]] : @trivial $@thick D.Type, [[D:%[0-9]+]] : @guaranteed $D):
+// CHECK: bb0([[M:%[0-9]+]] : $MetaHolder, [[DD:%[0-9]+]] : $@thick D.Type, [[D:%[0-9]+]] : @guaranteed $D):
 func testD(_ m: MetaHolder, dd: D.Type, d: D) {
   // CHECK: [[D2:%[0-9]+]] = alloc_box ${ var D }
   // CHECK: [[RESULT:%.*]] = project_box [[D2]]
@@ -497,7 +497,7 @@
 }
 
 // CHECK-LABEL: sil hidden @$s19protocol_extensions17testExistentials1{{[_0-9a-zA-Z]*}}F
-// CHECK: bb0([[P:%[0-9]+]] : @trivial $*P1, [[B:%[0-9]+]] : @trivial $Bool, [[I:%[0-9]+]] : @trivial $Int64):
+// CHECK: bb0([[P:%[0-9]+]] : $*P1, [[B:%[0-9]+]] : $Bool, [[I:%[0-9]+]] : $Int64):
 func testExistentials1(_ p1: P1, b: Bool, i: Int64) {
   // CHECK: [[POPENED:%[0-9]+]] = open_existential_addr immutable_access [[P]] : $*P1 to $*@opened([[UUID:".*"]])
   // CHECK: [[F1:%[0-9]+]] = function_ref @$s19protocol_extensions2P1PAAE2f1{{[_0-9a-zA-Z]*}}F
@@ -523,7 +523,7 @@
 }
 
 // CHECK-LABEL: sil hidden @$s19protocol_extensions17testExistentials2{{[_0-9a-zA-Z]*}}F
-// CHECK: bb0([[P:%[0-9]+]] : @trivial $*P1):
+// CHECK: bb0([[P:%[0-9]+]] : $*P1):
 func testExistentials2(_ p1: P1) {
   // CHECK: [[P1A:%[0-9]+]] = alloc_box ${ var P1 }
   // CHECK: [[PB:%.*]] = project_box [[P1A]]
@@ -535,7 +535,7 @@
 }
 
 // CHECK-LABEL: sil hidden @$s19protocol_extensions23testExistentialsGetters{{[_0-9a-zA-Z]*}}F
-// CHECK: bb0([[P:%[0-9]+]] : @trivial $*P1):
+// CHECK: bb0([[P:%[0-9]+]] : $*P1):
 func testExistentialsGetters(_ p1: P1) {
   // CHECK: [[POPENED:%[0-9]+]] = open_existential_addr immutable_access [[P]] : $*P1 to $*@opened([[UUID:".*"]]) P1
   // CHECK: copy_addr [[POPENED]] to [initialization] [[POPENED_COPY:%.*]] :
@@ -551,7 +551,7 @@
 }
 
 // CHECK-LABEL: sil hidden @$s19protocol_extensions22testExistentialSetters{{[_0-9a-zA-Z]*}}F
-// CHECK: bb0([[P:%[0-9]+]] : @trivial $*P1, [[B:%[0-9]+]] : @trivial $Bool):
+// CHECK: bb0([[P:%[0-9]+]] : $*P1, [[B:%[0-9]+]] : $Bool):
 func testExistentialSetters(_ p1: P1, b: Bool) {
   var p1 = p1
   // CHECK: [[PBOX:%[0-9]+]] = alloc_box ${ var P1 }
@@ -584,7 +584,7 @@
 }
 
 // CHECK-LABEL: sil hidden @$s19protocol_extensions29testLogicalExistentialSetters{{[_0-9a-zA-Z]*}}F
-// CHECK: bb0([[HASP1:%[0-9]+]] : @trivial $*HasAP1, [[B:%[0-9]+]] : @trivial $Bool)
+// CHECK: bb0([[HASP1:%[0-9]+]] : $*HasAP1, [[B:%[0-9]+]] : $Bool)
 func testLogicalExistentialSetters(_ hasAP1: HasAP1, _ b: Bool) {
   var hasAP1 = hasAP1
   // CHECK: [[HASP1_BOX:%[0-9]+]] = alloc_box ${ var HasAP1 }
@@ -691,7 +691,7 @@
 
 extension InitRequirement {
   // CHECK-LABEL: sil hidden @$s19protocol_extensions15InitRequirementPAAE1dxAA1DC_tcfC : $@convention(method) <Self where Self : InitRequirement> (@owned D, @thick Self.Type) -> @out Self
-  // CHECK:       bb0([[OUT:%.*]] : @trivial $*Self, [[ARG:%.*]] : @owned $D, [[SELF_TYPE:%.*]] : @trivial $@thick Self.Type):
+  // CHECK:       bb0([[OUT:%.*]] : $*Self, [[ARG:%.*]] : @owned $D, [[SELF_TYPE:%.*]] : $@thick Self.Type):
   init(d: D) {
     // CHECK:      [[SELF_BOX:%.*]] = alloc_box
     // CHECK-NEXT: [[UNINIT_SELF:%.*]] = mark_uninitialized [delegatingself] [[SELF_BOX]]
@@ -713,7 +713,7 @@
   }
 
   // CHECK-LABEL: sil hidden @$s19protocol_extensions15InitRequirementPAAE2d2xAA1DC_tcfC : $@convention(method)
-  // CHECK:       bb0([[OUT:%.*]] : @trivial $*Self, [[ARG:%.*]] : @owned $D, [[SELF_TYPE:%.*]] : @trivial $@thick Self.Type):
+  // CHECK:       bb0([[OUT:%.*]] : $*Self, [[ARG:%.*]] : @owned $D, [[SELF_TYPE:%.*]] : $@thick Self.Type):
   init(d2: D) {
     // CHECK:      [[SELF_BOX:%.*]] = alloc_box
     // CHECK-NEXT: [[UNINIT_SELF:%.*]] = mark_uninitialized [delegatingself] [[SELF_BOX]]
@@ -734,7 +734,7 @@
   }
 
   // CHECK-LABEL: sil hidden @$s19protocol_extensions15InitRequirementPAAE2c2xAA1CC_tcfC  : $@convention(method)
-  // CHECK:       bb0([[OUT:%.*]] : @trivial $*Self, [[ARG:%.*]] : @owned $C, [[SELF_TYPE:%.*]] : @trivial $@thick Self.Type):
+  // CHECK:       bb0([[OUT:%.*]] : $*Self, [[ARG:%.*]] : @owned $C, [[SELF_TYPE:%.*]] : $@thick Self.Type):
   init(c2: C) {
     // CHECK:      [[SELF_BOX:%.*]] = alloc_box
     // CHECK-NEXT: [[UNINIT_SELF:%.*]] = mark_uninitialized [delegatingself] [[SELF_BOX]]
@@ -764,7 +764,7 @@
 
 extension ClassInitRequirement {
   // CHECK-LABEL: sil hidden @$s19protocol_extensions20ClassInitRequirementPAAE{{[_0-9a-zA-Z]*}}fC : $@convention(method) <Self where Self : ClassInitRequirement> (@owned D, @thick Self.Type) -> @owned Self
-  // CHECK:       bb0([[ARG:%.*]] : @owned $D, [[SELF_TYPE:%.*]] : @trivial $@thick Self.Type):
+  // CHECK:       bb0([[ARG:%.*]] : @owned $D, [[SELF_TYPE:%.*]] : $@thick Self.Type):
   // CHECK:         [[BORROWED_ARG:%.*]] = begin_borrow [[ARG]]
   // CHECK:         [[ARG_COPY:%.*]] = copy_value [[BORROWED_ARG]]
   // CHECK:         [[ARG_COPY_CAST:%.*]] = upcast [[ARG_COPY]]
@@ -791,7 +791,7 @@
 
 extension ObjCInitRequirement {
   // CHECK-LABEL: sil hidden @$s19protocol_extensions19ObjCInitRequirementPAAE{{[_0-9a-zA-Z]*}}fC : $@convention(method) <Self where Self : ObjCInitRequirement> (@owned OD, @thick Self.Type) -> @owned Self
-  // CHECK:       bb0([[ARG:%.*]] : @owned $OD, [[SELF_TYPE:%.*]] : @trivial $@thick Self.Type):
+  // CHECK:       bb0([[ARG:%.*]] : @owned $OD, [[SELF_TYPE:%.*]] : $@thick Self.Type):
   // CHECK:         [[OBJC_SELF_TYPE:%.*]] = thick_to_objc_metatype [[SELF_TYPE]]
   // CHECK:         [[SELF:%.*]] = alloc_ref_dynamic [objc] [[OBJC_SELF_TYPE]] : $@objc_metatype Self.Type, $Self
   // CHECK:         [[BORROWED_ARG_1:%.*]] = begin_borrow [[ARG]]
@@ -818,7 +818,7 @@
 
 extension ProtoDelegatesToObjC where Self : ObjCInitClass {
   // CHECK-LABEL: sil hidden @$s19protocol_extensions20ProtoDelegatesToObjCPA2A0F10CInitClassC{{[_0-9a-zA-Z]*}}fC
-  // CHECK: bb0([[STR:%[0-9]+]] : @owned $String, [[SELF_META:%[0-9]+]] : @trivial $@thick Self.Type):
+  // CHECK: bb0([[STR:%[0-9]+]] : @owned $String, [[SELF_META:%[0-9]+]] : $@thick Self.Type):
   init(string: String) {
     // CHECK:   [[SELF_BOX:%[0-9]+]] = alloc_box $<τ_0_0 where τ_0_0 : ObjCInitClass, τ_0_0 : ProtoDelegatesToObjC> { var τ_0_0 } <Self>
     // CHECK:   [[MARKED_SELF_BOX:%[0-9]+]] = mark_uninitialized [delegatingself] [[SELF_BOX]]
@@ -842,7 +842,7 @@
 
 extension ProtoDelegatesToRequired where Self : RequiredInitClass {
   // CHECK-LABEL: sil hidden @$s19protocol_extensions24ProtoDelegatesToRequiredPA2A0F9InitClassC{{[_0-9a-zA-Z]*}}fC 
-  // CHECK: bb0([[STR:%[0-9]+]] : @owned $String, [[SELF_META:%[0-9]+]] : @trivial $@thick Self.Type):
+  // CHECK: bb0([[STR:%[0-9]+]] : @owned $String, [[SELF_META:%[0-9]+]] : $@thick Self.Type):
   init(string: String) {
   // CHECK:   [[SELF_BOX:%[0-9]+]] = alloc_box $<τ_0_0 where τ_0_0 : RequiredInitClass, τ_0_0 : ProtoDelegatesToRequired> { var τ_0_0 } <Self>
   // CHECK:   [[MARKED_SELF_BOX:%[0-9]+]] = mark_uninitialized [delegatingself] [[SELF_BOX]]
diff --git a/test/SILGen/protocols.swift b/test/SILGen/protocols.swift
index faf84fc..885bb51 100644
--- a/test/SILGen/protocols.swift
+++ b/test/SILGen/protocols.swift
@@ -21,7 +21,7 @@
 }
 
 // CHECK-LABEL: sil hidden @{{.*}}use_subscript_rvalue_get
-// CHECK: bb0(%0 : @trivial $Int):
+// CHECK: bb0(%0 : $Int):
 // CHECK: [[GLOB:%[0-9]+]] = global_addr @$s9protocols16subscriptableGetAA013SubscriptableC0_pvp : $*SubscriptableGet
 // CHECK: [[READ:%.*]] = begin_access [read] [dynamic] [[GLOB]] : $*SubscriptableGet
 // CHECK: [[PROJ:%[0-9]+]] = open_existential_addr immutable_access [[READ]] : $*SubscriptableGet to $*[[OPENED:@opened(.*) SubscriptableGet]]
@@ -43,7 +43,7 @@
 }
 
 // CHECK-LABEL: sil hidden @{{.*}}use_subscript_lvalue_get
-// CHECK: bb0(%0 : @trivial $Int):
+// CHECK: bb0(%0 : $Int):
 // CHECK: [[GLOB:%[0-9]+]] = global_addr @$s9protocols19subscriptableGetSetAA013SubscriptablecD0_pvp : $*SubscriptableGetSet
 // CHECK: [[READ:%.*]] = begin_access [read] [dynamic] [[GLOB]] : $*SubscriptableGetSet
 // CHECK: [[PROJ:%[0-9]+]] = open_existential_addr immutable_access [[READ]] : $*SubscriptableGetSet to $*[[OPENED:@opened(.*) SubscriptableGetSet]]
@@ -61,7 +61,7 @@
 }
 
 // CHECK-LABEL: sil hidden @{{.*}}use_subscript_lvalue_set
-// CHECK: bb0(%0 : @trivial $Int):
+// CHECK: bb0(%0 : $Int):
 // CHECK: [[GLOB:%[0-9]+]] = global_addr @$s9protocols19subscriptableGetSetAA013SubscriptablecD0_pvp : $*SubscriptableGetSet
 // CHECK: [[READ:%.*]] = begin_access [modify] [dynamic] [[GLOB]] : $*SubscriptableGetSet
 // CHECK: [[PROJ:%[0-9]+]] = open_existential_addr mutable_access [[READ]] : $*SubscriptableGetSet to $*[[OPENED:@opened(.*) SubscriptableGetSet]]
@@ -77,7 +77,7 @@
   return generic[idx]
 }
 // CHECK-LABEL: sil hidden @{{.*}}use_subscript_archetype_rvalue_get
-// CHECK: bb0(%0 : @trivial $*T, %1 : @trivial $Int):
+// CHECK: bb0(%0 : $*T, %1 : $Int):
 // CHECK: [[STACK:%[0-9]+]] = alloc_stack $T
 // CHECK: copy_addr %0 to [initialization] [[STACK]]
 // CHECK: [[METH:%[0-9]+]] = witness_method $T, #SubscriptableGet.subscript!getter.1
@@ -91,7 +91,7 @@
   return generic[idx]
 }
 // CHECK-LABEL: sil hidden @{{.*}}use_subscript_archetype_lvalue_get
-// CHECK: bb0(%0 : @trivial $*T, %1 : @trivial $Int):
+// CHECK: bb0(%0 : $*T, %1 : $Int):
 // CHECK: [[READ:%.*]] = begin_access [read] [unknown] %0 : $*T
 // CHECK: [[GUARANTEEDSTACK:%[0-9]+]] = alloc_stack $T
 // CHECK: copy_addr [[READ]] to [initialization] [[GUARANTEEDSTACK]] : $*T
@@ -107,7 +107,7 @@
   generic[idx] = idx
 }
 // CHECK-LABEL: sil hidden @{{.*}}use_subscript_archetype_lvalue_set
-// CHECK: bb0(%0 : @trivial $*T, %1 : @trivial $Int):
+// CHECK: bb0(%0 : $*T, %1 : $Int):
 // CHECK: [[WRITE:%.*]] = begin_access [modify] [unknown] %0 : $*T
 // CHECK: [[METH:%[0-9]+]] = witness_method $T, #SubscriptableGetSet.subscript!setter.1
 // CHECK-NEXT: apply [[METH]]<T>(%1, %1, [[WRITE]])
@@ -161,7 +161,7 @@
 }
 
 // CHECK-LABEL: sil hidden @{{.*}}use_property_lvalue_set
-// CHECK: bb0(%0 : @trivial $Int):
+// CHECK: bb0(%0 : $Int):
 // CHECK: [[GLOB:%[0-9]+]] = global_addr @$s9protocols14propertyGetSetAA24PropertyWithGetterSetter_pvp : $*PropertyWithGetterSetter
 // CHECK: [[READ:%.*]] = begin_access [modify] [dynamic] [[GLOB]] : $*PropertyWithGetterSetter
 // CHECK: [[PROJ:%[0-9]+]] = open_existential_addr mutable_access [[READ]] : $*PropertyWithGetterSetter to $*[[OPENED:@opened(.*) PropertyWithGetterSetter]]
@@ -177,7 +177,7 @@
 }
 
 // CHECK-LABEL: sil hidden @{{.*}}use_property_archetype_rvalue_get
-// CHECK: bb0(%0 : @trivial $*T):
+// CHECK: bb0(%0 : $*T):
 // CHECK: [[STACK:%[0-9]+]] = alloc_stack $T
 // CHECK: copy_addr %0 to [initialization] [[STACK]]
 // CHECK: [[METH:%[0-9]+]] = witness_method $T, #PropertyWithGetter.a!getter.1
@@ -192,7 +192,7 @@
 }
 
 // CHECK-LABEL: sil hidden @{{.*}}use_property_archetype_lvalue_get
-// CHECK: bb0(%0 : @trivial $*T):
+// CHECK: bb0(%0 : $*T):
 // CHECK: [[STACK:%[0-9]+]] = alloc_stack $T
 // CHECK: copy_addr %0 to [initialization] [[STACK]] : $*T
 // CHECK: [[METH:%[0-9]+]] = witness_method $T, #PropertyWithGetterSetter.b!getter.1
@@ -206,7 +206,7 @@
   generic.b = v
 }
 // CHECK-LABEL: sil hidden @{{.*}}use_property_archetype_lvalue_set
-// CHECK: bb0(%0 : @trivial $*T, %1 : @trivial $Int):
+// CHECK: bb0(%0 : $*T, %1 : $Int):
 // CHECK: [[WRITE:%.*]] = begin_access [modify] [unknown] %0 : $*T
 // CHECK: [[METH:%[0-9]+]] = witness_method $T, #PropertyWithGetterSetter.b!setter.1
 // CHECK-NEXT: apply [[METH]]<T>(%1, [[WRITE]])
@@ -233,7 +233,7 @@
 
 // CHECK: sil hidden @$s9protocols29use_initializable_existential{{[_0-9a-zA-Z]*}}F
 func use_initializable_existential(_ im: Initializable.Type, i: Int) {
-// CHECK: bb0([[IM:%[0-9]+]] : @trivial $@thick Initializable.Type, [[I:%[0-9]+]] : @trivial $Int):
+// CHECK: bb0([[IM:%[0-9]+]] : $@thick Initializable.Type, [[I:%[0-9]+]] : $Int):
 // CHECK:   [[ARCHETYPE_META:%[0-9]+]] = open_existential_metatype [[IM]] : $@thick Initializable.Type to $@thick (@opened([[N:".*"]]) Initializable).Type
 // CHECK:   [[TEMP_VALUE:%[0-9]+]] = alloc_stack $Initializable
 // CHECK:   [[INIT_WITNESS:%[0-9]+]] = witness_method $@opened([[N]]) Initializable, #Initializable.init!allocator.1 : {{.*}}, [[ARCHETYPE_META]]{{.*}} : $@convention(witness_method: Initializable) <τ_0_0 where τ_0_0 : Initializable> (Int, @thick τ_0_0.Type) -> @out τ_0_0
@@ -261,7 +261,7 @@
 // Make sure we are generating a protocol witness that calls the class method on
 // ClassWithGetter.
 // CHECK-LABEL: sil private [transparent] [thunk] @$s9protocols15ClassWithGetterCAA08PropertycD0A2aDP1aSivgTW : $@convention(witness_method: PropertyWithGetter) (@in_guaranteed ClassWithGetter) -> Int {
-// CHECK: bb0([[C:%.*]] : @trivial $*ClassWithGetter):
+// CHECK: bb0([[C:%.*]] : $*ClassWithGetter):
 // CHECK-NEXT: [[CCOPY_LOADED:%.*]] = load_borrow %0
 // CHECK-NEXT: [[FUN:%.*]] = class_method [[CCOPY_LOADED]] : $ClassWithGetter, #ClassWithGetter.a!getter.1 : (ClassWithGetter) -> () -> Int, $@convention(method) (@guaranteed ClassWithGetter) -> Int
 // CHECK-NEXT: apply [[FUN]]([[CCOPY_LOADED]])
@@ -284,7 +284,7 @@
 }
 
 // CHECK-LABEL: sil private [transparent] [thunk] @$s9protocols21ClassWithGetterSetterCAA08PropertycdE0A2aDP1bSivgTW : $@convention(witness_method: PropertyWithGetterSetter) (@in_guaranteed ClassWithGetterSetter) -> Int {
-// CHECK: bb0([[C:%.*]] : @trivial $*ClassWithGetterSetter):
+// CHECK: bb0([[C:%.*]] : $*ClassWithGetterSetter):
 // CHECK-NEXT: [[CCOPY_LOADED:%.*]] = load_borrow %0
 // CHECK-NEXT: [[FUN:%.*]] = class_method [[CCOPY_LOADED]] : $ClassWithGetterSetter, #ClassWithGetterSetter.b!getter.1 : (ClassWithGetterSetter) -> () -> Int, $@convention(method) (@guaranteed ClassWithGetterSetter) -> Int
 // CHECK-NEXT: apply [[FUN]]([[CCOPY_LOADED]])
@@ -318,7 +318,7 @@
     return a
   }
   // CHECK-LABEL: sil hidden @$s9protocols24StructWithStoredPropertyV011methodUsingE0SiyF
-  // CHECK: bb0(%0 : @trivial $StructWithStoredProperty):
+  // CHECK: bb0(%0 : $StructWithStoredProperty):
   // CHECK-NEXT: debug_value %0
   // CHECK-NEXT: %2 = struct_extract %0 : $StructWithStoredProperty, #StructWithStoredProperty.a
   // CHECK-NEXT: return %2 : $Int
@@ -335,7 +335,7 @@
 // correctness.
 //
 // CHECK-LABEL: sil private [transparent] [thunk] @$s9protocols24StructWithStoredPropertyVAA0eC6GetterA2aDP1aSivgTW : $@convention(witness_method: PropertyWithGetter) (@in_guaranteed StructWithStoredProperty) -> Int {
-// CHECK: bb0([[C:%.*]] : @trivial $*StructWithStoredProperty):
+// CHECK: bb0([[C:%.*]] : $*StructWithStoredProperty):
 // CHECK-NEXT: [[CCOPY_LOADED:%.*]] = load [trivial] [[C]]
 // CHECK-NEXT: function_ref
 // CHECK-NEXT: [[FUN:%.*]] = function_ref @$s9protocols24StructWithStoredPropertyV1aSivg : $@convention(method) (StructWithStoredProperty) -> Int
@@ -362,7 +362,7 @@
 }
 
 // CHECK-LABEL: sil private [transparent] [thunk] @$s9protocols29StructWithStoredClassPropertyVAA0fC6GetterA2aDP1aSivgTW : $@convention(witness_method: PropertyWithGetter) (@in_guaranteed StructWithStoredClassProperty) -> Int {
-// CHECK: bb0([[C:%.*]] : @trivial $*StructWithStoredClassProperty):
+// CHECK: bb0([[C:%.*]] : $*StructWithStoredClassProperty):
 // CHECK-NEXT: [[CCOPY_LOADED:%.*]] = load_borrow [[C]]
 // CHECK-NEXT: function_ref
 // CHECK-NEXT: [[FUN:%.*]] = function_ref @$s9protocols29StructWithStoredClassPropertyV1aSivg : $@convention(method) (@guaranteed StructWithStoredClassProperty) -> Int
diff --git a/test/SILGen/read_accessor.swift b/test/SILGen/read_accessor.swift
index 282c87c..fe41cfd 100644
--- a/test/SILGen/read_accessor.swift
+++ b/test/SILGen/read_accessor.swift
@@ -150,7 +150,7 @@
 }
 //   Key-path getter for TestKeyPath.readable
 // CHECK-LABEL: sil shared [thunk] @$s13read_accessor11TestKeyPathV8readableSSvpACTK
-// CHECK:       bb0(%0 : @trivial $*String, %1 : @trivial $*TestKeyPath):
+// CHECK:       bb0(%0 : $*String, %1 : $*TestKeyPath):
 // CHECK-NEXT:    [[SELF:%.*]] = load [trivial] %1
 // CHECK-NEXT:    // function_ref
 // CHECK-NEXT:    [[READ:%.*]] = function_ref @$s13read_accessor11TestKeyPathV8readableSSvr
diff --git a/test/SILGen/same_type_abstraction.swift b/test/SILGen/same_type_abstraction.swift
index 71fd07c..fac6258 100644
--- a/test/SILGen/same_type_abstraction.swift
+++ b/test/SILGen/same_type_abstraction.swift
@@ -29,7 +29,7 @@
 extension MyProtocol where Data == (ReadData, ReadData) {
   // CHECK-LABEL: sil hidden @$s21same_type_abstraction10MyProtocolPAA8ReadDataQz_AEt0G0RtzrlE07currentG0AE_AEtyF : $@convention(method) <Self where Self : MyProtocol, Self.Data == (Self.ReadData, Self.ReadData)> (@in_guaranteed Self) -> (@out Self.ReadData, @out Self.ReadData)
   func currentData() -> Data {
-    // CHECK: bb0(%0 : @trivial $*Self.ReadData, %1 : @trivial $*Self.ReadData, %2 : @trivial $*Self):
+    // CHECK: bb0(%0 : $*Self.ReadData, %1 : $*Self.ReadData, %2 : $*Self):
     // CHECK:   [[READ_FN:%.*]] = witness_method $Self, #MyProtocol.readData!1 : {{.*}} : $@convention(witness_method: MyProtocol) <τ_0_0 where τ_0_0 : MyProtocol> (@in_guaranteed τ_0_0) -> @out τ_0_0.ReadData
     // CHECK:   apply [[READ_FN]]<Self>(%0, %2) : $@convention(witness_method: MyProtocol) <τ_0_0 where τ_0_0 : MyProtocol> (@in_guaranteed τ_0_0) -> @out τ_0_0.ReadData
     // CHECK:   [[READ_FN:%.*]] = witness_method $Self, #MyProtocol.readData!1 : {{.*}} : $@convention(witness_method: MyProtocol) <τ_0_0 where τ_0_0 : MyProtocol> (@in_guaranteed τ_0_0) -> @out τ_0_0.ReadData
diff --git a/test/SILGen/shared.swift b/test/SILGen/shared.swift
index 72048ec..97c1cee 100644
--- a/test/SILGen/shared.swift
+++ b/test/SILGen/shared.swift
@@ -9,7 +9,7 @@
 
 // CHECK-LABEL: sil hidden @$s6shared0A10_arguments7trivial5value3refySih_AA14ValueAggregateVhAA03RefG0ChtF : $@convention(thin) (Int, @guaranteed ValueAggregate, @guaranteed RefAggregate) -> ()
 func shared_arguments(trivial : __shared Int, value : __shared ValueAggregate, ref : __shared RefAggregate) {
-  // CHECK: bb0([[TRIVIAL_VAL:%[0-9]+]] : @trivial $Int, [[VALUE_VAL:%[0-9]+]] : @guaranteed $ValueAggregate, [[REF_VAL:%[0-9]+]] : @guaranteed $RefAggregate):
+  // CHECK: bb0([[TRIVIAL_VAL:%[0-9]+]] : $Int, [[VALUE_VAL:%[0-9]+]] : @guaranteed $ValueAggregate, [[REF_VAL:%[0-9]+]] : @guaranteed $RefAggregate):
   // CHECK: [[COPY_VALUE_VAL:%[0-9]+]] = copy_value [[VALUE_VAL]] : $ValueAggregate
   // CHECK: [[COPY_REF_VAL:%[0-9]+]] = copy_value [[REF_VAL]] : $RefAggregate
   // CHECK: [[OWNED_FUNC:%[0-9]+]] = function_ref @$s6shared15owned_arguments7trivial5value3refySi_AA14ValueAggregateVAA03RefH0CtF
@@ -20,7 +20,7 @@
 
 // CHECK-LABEL: sil hidden @$s6shared15owned_arguments7trivial5value3refySi_AA14ValueAggregateVAA03RefH0CtF : $@convention(thin) (Int, @owned ValueAggregate, @owned RefAggregate) -> ()
 func owned_arguments(trivial : Int, value : ValueAggregate, ref : RefAggregate) {
-  // CHECK: bb0([[TRIVIAL_VAL:%[0-9]+]] : @trivial $Int, [[VALUE_VAL:%[0-9]+]] : @owned $ValueAggregate, [[REF_VAL:%[0-9]+]] : @owned $RefAggregate):
+  // CHECK: bb0([[TRIVIAL_VAL:%[0-9]+]] : $Int, [[VALUE_VAL:%[0-9]+]] : @owned $ValueAggregate, [[REF_VAL:%[0-9]+]] : @owned $RefAggregate):
   // CHECK: [[BORROW_VALUE_VAL:%[0-9]+]] = begin_borrow [[VALUE_VAL]] : $ValueAggregate
   // CHECK: [[BORROW_REF_VAL:%[0-9]+]] = begin_borrow [[REF_VAL]] : $RefAggregate
   // CHECK: [[SHARED_FUNC:%[0-9]+]] = function_ref @$s6shared0A10_arguments7trivial5value3refySih_AA14ValueAggregateVhAA03RefG0ChtF
@@ -35,7 +35,7 @@
 
 // CHECK-LABEL: sil hidden @$s6shared0A17_argument_capture7trivial5value3refySih_AA14ValueAggregateVhAA03RefH0ChtF : $@convention(thin) (Int, @guaranteed ValueAggregate, @guaranteed RefAggregate) -> ()
 func shared_argument_capture(trivial : __shared Int, value : __shared ValueAggregate, ref : __shared RefAggregate) {
-  // CHECK: bb0([[TRIVIAL_VAL:%[0-9]+]] : @trivial $Int, [[VALUE_VAL:%[0-9]+]] : @guaranteed $ValueAggregate, [[REF_VAL:%[0-9]+]] : @guaranteed $RefAggregate):
+  // CHECK: bb0([[TRIVIAL_VAL:%[0-9]+]] : $Int, [[VALUE_VAL:%[0-9]+]] : @guaranteed $ValueAggregate, [[REF_VAL:%[0-9]+]] : @guaranteed $RefAggregate):
   // CHECK: [[CLO_1:%[0-9]+]] = function_ref @$s6shared0A17_argument_capture7trivial5value3refySih_AA14ValueAggregateVhAA03RefH0ChtFyyXEfU_
   // CHECK: {{%.*}} = apply [[CLO_1]]([[TRIVIAL_VAL]], [[VALUE_VAL]], [[REF_VAL]]) : $@convention(thin) (Int, @guaranteed ValueAggregate, @guaranteed RefAggregate) -> ()
   _ = {
@@ -53,7 +53,7 @@
   // ======== FIRST CLOSURE ==========
 
   // CHECK-LABEL: sil private @$s6shared0A17_argument_capture7trivial5value3refySih_AA14ValueAggregateVhAA03RefH0ChtFyyXEfU_ : $@convention(thin) (Int, @guaranteed ValueAggregate, @guaranteed RefAggregate) -> ()
-  // CHECK: bb0([[TRIVIAL_VAL:%[0-9]+]] : @trivial $Int, [[VALUE_VAL:%[0-9]+]] : @guaranteed $ValueAggregate, [[REF_VAL:%[0-9]+]] : @guaranteed $RefAggregate):
+  // CHECK: bb0([[TRIVIAL_VAL:%[0-9]+]] : $Int, [[VALUE_VAL:%[0-9]+]] : @guaranteed $ValueAggregate, [[REF_VAL:%[0-9]+]] : @guaranteed $RefAggregate):
   // CHECK: [[SHARED_CALL:%[0-9]+]] = function_ref @$s6shared0A10_arguments7trivial5value3refySih_AA14ValueAggregateVhAA03RefG0ChtF : $@convention(thin) (Int, @guaranteed ValueAggregate, @guaranteed RefAggregate) -> ()
   // CHECK: {{%.*}} = apply [[SHARED_CALL]]([[TRIVIAL_VAL]], [[VALUE_VAL]], [[REF_VAL]]) : $@convention(thin) (Int, @guaranteed ValueAggregate, @guaranteed RefAggregate) -> ()
   // CHECK: } // end sil function '$s6shared0A17_argument_capture7trivial5value3refySih_AA14ValueAggregateVhAA03RefH0ChtFyyXEfU_'
@@ -61,7 +61,7 @@
   // ======== SECOND CLOSURE ==========
   
   // CHECK-LABEL:  sil private @$s6shared0A17_argument_capture7trivial5value3refySih_AA14ValueAggregateVhAA03RefH0ChtFyyXEfU0_ : $@convention(thin) (Int, @guaranteed ValueAggregate, @guaranteed RefAggregate) -> () {
-  // CHECK: bb0([[TRIVIAL_VAL:%[0-9]+]] : @trivial $Int, [[VALUE_VAL:%[0-9]+]] : @guaranteed $ValueAggregate, [[REF_VAL:%[0-9]+]] : @guaranteed $RefAggregate):
+  // CHECK: bb0([[TRIVIAL_VAL:%[0-9]+]] : $Int, [[VALUE_VAL:%[0-9]+]] : @guaranteed $ValueAggregate, [[REF_VAL:%[0-9]+]] : @guaranteed $RefAggregate):
   // CHECK: [[COPY_BORROW_VALUE_VAL:%[0-9]+]] = copy_value [[VALUE_VAL]] : $ValueAggregate
   // CHECK: [[COPY_BORROW_REF_VAL:%[0-9]+]] = copy_value [[REF_VAL]] : $RefAggregate
   // CHECK: [[OWNED_CALL:%[0-9]+]] = function_ref @$s6shared15owned_arguments7trivial5value3refySi_AA14ValueAggregateVAA03RefH0CtF : $@convention(thin) (Int, @owned ValueAggregate, @owned RefAggregate) -> ()
@@ -71,7 +71,7 @@
 
 // CHECK-LABEL: sil hidden @$s6shared0A20_to_owned_conversionyyySih_AA14ValueAggregateVhAA03RefF0ChtXEF : $@convention(thin) (@noescape @callee_guaranteed (Int, @guaranteed ValueAggregate, @guaranteed RefAggregate) -> ()) -> ()
 func shared_to_owned_conversion(_ f : (__shared Int, __shared ValueAggregate, __shared RefAggregate) -> Void) {
-  // CHECK: bb0([[UNUSED_FUNC:%[0-9]+]] : @trivial $@noescape @callee_guaranteed (Int, @guaranteed ValueAggregate, @guaranteed RefAggregate) -> ()):
+  // CHECK: bb0([[UNUSED_FUNC:%[0-9]+]] : $@noescape @callee_guaranteed (Int, @guaranteed ValueAggregate, @guaranteed RefAggregate) -> ()):
   // CHECK: [[OWNED_THUNK:%[0-9]+]] = function_ref @$s6shared0A20_to_owned_conversionyyySih_AA14ValueAggregateVhAA03RefF0ChtXEFySi_AdFtXEfU_ : $@convention(thin) (Int, @owned ValueAggregate, @owned RefAggregate) -> ()
   // CHECK: [[CONVERT:%.*]] = convert_function [[OWNED_THUNK]]
   // CHECK: [[THICK_OWNED_THUNK:%[0-9]+]] = thin_to_thick_function [[CONVERT]] : $@convention(thin) @noescape (Int, @owned ValueAggregate, @owned RefAggregate) -> () to $@noescape @callee_guaranteed (Int, @owned ValueAggregate, @owned RefAggregate) -> ()
@@ -86,7 +86,7 @@
   // ======== REABSTRACTION THUNK =========
   
   // CHECK-LABEL: sil shared [transparent] [serializable] [reabstraction_thunk] @$sSi6shared14ValueAggregateVAA03RefC0CIgyxx_SiAcEIegygg_TR : $@convention(thin) (Int, @guaranteed ValueAggregate, @guaranteed RefAggregate, @noescape @callee_guaranteed (Int, @owned ValueAggregate, @owned RefAggregate) -> ()) -> ()
-  // CHECK: bb0([[TRIVIAL_VAL:%[0-9]+]] : @trivial $Int, [[VALUE_VAL:%[0-9]+]] : @guaranteed $ValueAggregate, [[REF_VAL:%[0-9]+]] : @guaranteed $RefAggregate, [[FUNC:%[0-9]+]] : @trivial $@noescape @callee_guaranteed (Int, @owned ValueAggregate, @owned RefAggregate) -> ()):
+  // CHECK: bb0([[TRIVIAL_VAL:%[0-9]+]] : $Int, [[VALUE_VAL:%[0-9]+]] : @guaranteed $ValueAggregate, [[REF_VAL:%[0-9]+]] : @guaranteed $RefAggregate, [[FUNC:%[0-9]+]] : $@noescape @callee_guaranteed (Int, @owned ValueAggregate, @owned RefAggregate) -> ()):
   // CHECK: [[COPY_VALUE_VAL:%[0-9]+]] = copy_value [[VALUE_VAL]] : $ValueAggregate
   // CHECK: [[COPY_REF_VAL:%[0-9]+]] = copy_value [[REF_VAL]] : $RefAggregate
   // CHECK: {{%.*}} = apply [[FUNC]]([[TRIVIAL_VAL]], [[COPY_VALUE_VAL]], [[COPY_REF_VAL]]) : $@noescape @callee_guaranteed (Int, @owned ValueAggregate, @owned RefAggregate) -> ()
@@ -97,7 +97,7 @@
 
 // CHECK-LABEL: sil hidden @$s6shared09owned_to_A11_conversionyyySi_AA14ValueAggregateVAA03RefF0CtXEF : $@convention(thin) (@noescape @callee_guaranteed (Int, @owned ValueAggregate, @owned RefAggregate) -> ()) -> ()
 func owned_to_shared_conversion(_ f : (Int, ValueAggregate, RefAggregate) -> Void) {
-  // CHECK: bb0([[UNUSED_FUNC:%[0-9]+]] : @trivial $@noescape @callee_guaranteed (Int, @owned ValueAggregate, @owned RefAggregate) -> ()):
+  // CHECK: bb0([[UNUSED_FUNC:%[0-9]+]] : $@noescape @callee_guaranteed (Int, @owned ValueAggregate, @owned RefAggregate) -> ()):
   // CHECK: [[SHARED_THUNK:%[0-9]+]] = function_ref @$s6shared09owned_to_A11_conversionyyySi_AA14ValueAggregateVAA03RefF0CtXEFySih_ADhAFhtXEfU_ : $@convention(thin) (Int, @guaranteed ValueAggregate, @guaranteed RefAggregate) -> ()
   // CHECK: [[CONVERT:%.*]] = convert_function [[SHARED_THUNK]]
   // CHECK: [[THICK_SHARED_THUNK:%[0-9]+]] = thin_to_thick_function [[CONVERT]] : $@convention(thin) @noescape (Int, @guaranteed ValueAggregate, @guaranteed RefAggregate) -> () to $@noescape @callee_guaranteed (Int, @guaranteed ValueAggregate, @guaranteed RefAggregate) -> ()
@@ -112,7 +112,7 @@
   // ======== REABSTRACTION THUNK =========
 
   // CHECK-LABEL: sil shared [transparent] [serializable] [reabstraction_thunk] @$sSi6shared14ValueAggregateVAA03RefC0CIgygg_SiAcEIegyxx_TR : $@convention(thin) (Int, @owned ValueAggregate, @owned RefAggregate, @noescape @callee_guaranteed (Int, @guaranteed ValueAggregate, @guaranteed RefAggregate) -> ()) -> ()
-  // CHECK: bb0([[TRIVIAL_VAL:%[0-9]+]] : @trivial $Int, [[VALUE_VAL:%[0-9]+]] : @owned $ValueAggregate, [[REF_VAL:%[0-9]+]] : @owned $RefAggregate, [[FUNC:%[0-9]+]] : @trivial $@noescape @callee_guaranteed (Int, @guaranteed ValueAggregate, @guaranteed RefAggregate) -> ()):
+  // CHECK: bb0([[TRIVIAL_VAL:%[0-9]+]] : $Int, [[VALUE_VAL:%[0-9]+]] : @owned $ValueAggregate, [[REF_VAL:%[0-9]+]] : @owned $RefAggregate, [[FUNC:%[0-9]+]] : $@noescape @callee_guaranteed (Int, @guaranteed ValueAggregate, @guaranteed RefAggregate) -> ()):
   // CHECK: [[BORROW_VALUE_VAL:%[0-9]+]] = begin_borrow [[VALUE_VAL]] : $ValueAggregate
   // CHECK: [[BORROW_REF_VAL:%[0-9]+]] = begin_borrow [[REF_VAL]] : $RefAggregate
   // CHECK: {{%.*}} = apply [[FUNC]]([[TRIVIAL_VAL]], [[BORROW_VALUE_VAL]], [[BORROW_REF_VAL]]) : $@noescape @callee_guaranteed (Int, @guaranteed ValueAggregate, @guaranteed RefAggregate) -> ()
@@ -133,7 +133,7 @@
 
     // CHECK-LABEL: sil hidden @$s6shared3FooV21methodSharedArguments7trivial5value3refySih_AA14ValueAggregateVhAA03RefJ0ChtF : $@convention(method) (Int, @guaranteed ValueAggregate, @guaranteed RefAggregate, @guaranteed Foo) -> () {
     func methodSharedArguments(trivial : __shared Int, value : __shared ValueAggregate, ref : __shared RefAggregate) {
-        // CHECK: bb0([[TRIVIAL_VAL:%[0-9]+]] : @trivial $Int, [[VALUE_VAL:%[0-9]+]] : @guaranteed $ValueAggregate, [[REF_VAL:%[0-9]+]] : @guaranteed $RefAggregate, [[SELF:%[0-9]+]] : @guaranteed $Foo):
+        // CHECK: bb0([[TRIVIAL_VAL:%[0-9]+]] : $Int, [[VALUE_VAL:%[0-9]+]] : @guaranteed $ValueAggregate, [[REF_VAL:%[0-9]+]] : @guaranteed $RefAggregate, [[SELF:%[0-9]+]] : @guaranteed $Foo):
         // CHECK: [[COPY_VALUE_VAL:%[0-9]+]] = copy_value [[VALUE_VAL]] : $ValueAggregate
         // CHECK: [[COPY_REF_VAL:%[0-9]+]] = copy_value [[REF_VAL]] : $RefAggregate
         // CHECK: [[OWNED_FUNC:%[0-9]+]] = function_ref @$s6shared3FooV20methodOwnedArguments7trivial5value3refySi_AA14ValueAggregateVAA03RefJ0CtF
@@ -144,7 +144,7 @@
 
     // CHECK-LABEL: sil hidden @$s6shared3FooV20methodOwnedArguments7trivial5value3refySi_AA14ValueAggregateVAA03RefJ0CtF : $@convention(method) (Int, @owned ValueAggregate, @owned RefAggregate, @guaranteed Foo) -> () {
     func methodOwnedArguments(trivial : Int, value : ValueAggregate, ref : RefAggregate) {
-        // CHECK: bb0([[TRIVIAL_VAL:%[0-9]+]] : @trivial $Int, [[VALUE_VAL:%[0-9]+]] : @owned $ValueAggregate, [[REF_VAL:%[0-9]+]] : @owned $RefAggregate, [[SELF:%[0-9]+]] : @guaranteed $Foo):
+        // CHECK: bb0([[TRIVIAL_VAL:%[0-9]+]] : $Int, [[VALUE_VAL:%[0-9]+]] : @owned $ValueAggregate, [[REF_VAL:%[0-9]+]] : @owned $RefAggregate, [[SELF:%[0-9]+]] : @guaranteed $Foo):
         // CHECK: [[BORROW_VALUE_VAL:%[0-9]+]] = begin_borrow [[VALUE_VAL]] : $ValueAggregate
         // CHECK: [[BORROW_REF_VAL:%[0-9]+]] = begin_borrow [[REF_VAL]] : $RefAggregate
         // CHECK: [[SHARED_FUNC:%[0-9]+]] = function_ref @$s6shared3FooV21methodSharedArguments7trivial5value3refySih_AA14ValueAggregateVhAA03RefJ0ChtF
@@ -159,7 +159,7 @@
 
     // CHECK-LABEL: sil hidden @$s6shared3FooV21staticSharedArguments7trivial5value3refySih_AA14ValueAggregateVhAA03RefJ0ChtFZ : $@convention(method) (Int, @guaranteed ValueAggregate, @guaranteed RefAggregate, @thin Foo.Type) -> () {
     static func staticSharedArguments(trivial : __shared Int, value : __shared ValueAggregate, ref : __shared RefAggregate) {
-        // CHECK: bb0([[TRIVIAL_VAL:%[0-9]+]] : @trivial $Int, [[VALUE_VAL:%[0-9]+]] : @guaranteed $ValueAggregate, [[REF_VAL:%[0-9]+]] : @guaranteed $RefAggregate, [[SELF_METATYPE:%[0-9]+]] : @trivial $@thin Foo.Type):
+        // CHECK: bb0([[TRIVIAL_VAL:%[0-9]+]] : $Int, [[VALUE_VAL:%[0-9]+]] : @guaranteed $ValueAggregate, [[REF_VAL:%[0-9]+]] : @guaranteed $RefAggregate, [[SELF_METATYPE:%[0-9]+]] : $@thin Foo.Type):
         // CHECK: [[COPY_VALUE_VAL:%[0-9]+]] = copy_value [[VALUE_VAL]] : $ValueAggregate
         // CHECK: [[COPY_REF_VAL:%[0-9]+]] = copy_value [[REF_VAL]] : $RefAggregate
         // CHECK: [[OWNED_FUNC:%[0-9]+]] = function_ref @$s6shared3FooV20staticOwnedArguments7trivial5value3refySi_AA14ValueAggregateVAA03RefJ0CtFZ
@@ -169,7 +169,7 @@
     }
     // CHECK-LABEL: sil hidden @$s6shared3FooV20staticOwnedArguments7trivial5value3refySi_AA14ValueAggregateVAA03RefJ0CtFZ : $@convention(method) (Int, @owned ValueAggregate, @owned RefAggregate, @thin Foo.Type) -> () {
     static func staticOwnedArguments(trivial : Int, value : ValueAggregate, ref : RefAggregate) {
-        // CHECK: bb0([[TRIVIAL_VAL:%[0-9]+]] : @trivial $Int, [[VALUE_VAL:%[0-9]+]] : @owned $ValueAggregate, [[REF_VAL:%[0-9]+]] : @owned $RefAggregate, [[SELF_METATYPE:%[0-9]+]] : @trivial $@thin Foo.Type):
+        // CHECK: bb0([[TRIVIAL_VAL:%[0-9]+]] : $Int, [[VALUE_VAL:%[0-9]+]] : @owned $ValueAggregate, [[REF_VAL:%[0-9]+]] : @owned $RefAggregate, [[SELF_METATYPE:%[0-9]+]] : $@thin Foo.Type):
         // CHECK: [[BORROW_VALUE_VAL:%[0-9]+]] = begin_borrow [[VALUE_VAL]] : $ValueAggregate
         // CHECK: [[BORROW_REF_VAL:%[0-9]+]] = begin_borrow [[REF_VAL]] : $RefAggregate
         // CHECK: [[SHARED_FUNC:%[0-9]+]] = function_ref @$s6shared3FooV21staticSharedArguments7trivial5value3refySih_AA14ValueAggregateVhAA03RefJ0ChtFZ
diff --git a/test/SILGen/statements.swift b/test/SILGen/statements.swift
index a48707b..0003835 100644
--- a/test/SILGen/statements.swift
+++ b/test/SILGen/statements.swift
@@ -199,7 +199,7 @@
 // <rdar://problem/13549626>
 // CHECK-LABEL: sil hidden @$s10statements14return_from_if{{[_0-9a-zA-Z]*}}F
 func return_from_if(_ a: Bool) -> Int {
-  // CHECK: bb0(%0 : @trivial $Bool):
+  // CHECK: bb0(%0 : $Bool):
   // CHECK: cond_br {{.*}}, [[THEN:bb[0-9]+]], [[ELSE:bb[0-9]+]]
   if a {
     // CHECK: [[THEN]]:
@@ -211,7 +211,7 @@
     return 0
   }
   // CHECK-NOT: function_ref @foo
-  // CHECK: [[EPILOG]]([[RET:%.*]] : @trivial $Int):
+  // CHECK: [[EPILOG]]([[RET:%.*]] : $Int):
   // CHECK:   return [[RET]]
   foo()  // expected-warning {{will never be executed}}
 }
@@ -578,12 +578,12 @@
 
 
 // CHECK-LABEL: sil hidden @$s10statements20testRequireOptional1yS2iSgF
-// CHECK: bb0([[ARG:%.*]] : @trivial $Optional<Int>):
+// CHECK: bb0([[ARG:%.*]] : $Optional<Int>):
 // CHECK-NEXT:   debug_value [[ARG]] : $Optional<Int>, let, name "a"
 // CHECK-NEXT:   switch_enum [[ARG]] : $Optional<Int>, case #Optional.some!enumelt.1: [[SOME:bb[0-9]+]], case #Optional.none!enumelt: [[NONE:bb[0-9]+]]
 func testRequireOptional1(_ a : Int?) -> Int {
 
-  // CHECK: [[SOME]]([[PAYLOAD:%.*]] : @trivial $Int):
+  // CHECK: [[SOME]]([[PAYLOAD:%.*]] : $Int):
   // CHECK-NEXT:   debug_value [[PAYLOAD]] : $Int, let, name "t"
   // CHECK-NEXT:   return [[PAYLOAD]] : $Int
   guard let t = a else { abort() }
@@ -660,7 +660,7 @@
 // CHECK-LABEL: sil hidden @$s10statements22let_else_tuple_bindingyS2i_SitSgF
 func let_else_tuple_binding(_ a : (Int, Int)?) -> Int {
 
-  // CHECK: bb0([[ARG:%.*]] : @trivial $Optional<(Int, Int)>):
+  // CHECK: bb0([[ARG:%.*]] : $Optional<(Int, Int)>):
   // CHECK-NEXT:   debug_value [[ARG]] : $Optional<(Int, Int)>, let, name "a"
   // CHECK-NEXT:   switch_enum [[ARG]] : $Optional<(Int, Int)>, case #Optional.some!enumelt.1: [[SOME_BB:bb[0-9]+]], case #Optional.none!enumelt: [[NONE_BB:bb[0-9]+]]
 
@@ -668,7 +668,7 @@
   _ = y
   return x
 
-  // CHECK: [[SOME_BB]]([[PAYLOAD:%.*]] : @trivial $(Int, Int)):
+  // CHECK: [[SOME_BB]]([[PAYLOAD:%.*]] : $(Int, Int)):
   // CHECK-NEXT:   ([[PAYLOAD_1:%.*]], [[PAYLOAD_2:%.*]]) = destructure_tuple [[PAYLOAD]]
   // CHECK-NEXT:   debug_value [[PAYLOAD_1]] : $Int, let, name "x"
   // CHECK-NEXT:   debug_value [[PAYLOAD_2]] : $Int, let, name "y"
diff --git a/test/SILGen/struct_resilience.swift b/test/SILGen/struct_resilience.swift
index dc85336..456dced 100644
--- a/test/SILGen/struct_resilience.swift
+++ b/test/SILGen/struct_resilience.swift
@@ -8,7 +8,7 @@
 // Resilient structs are always address-only
 
 // CHECK-LABEL: sil hidden @$s17struct_resilience26functionWithResilientTypes_1f010resilient_A04SizeVAF_A2FXEtF : $@convention(thin) (@in_guaranteed Size, @noescape @callee_guaranteed (@in_guaranteed Size) -> @out Size) -> @out Size
-// CHECK:       bb0(%0 : @trivial $*Size, %1 : @trivial $*Size, %2 : @trivial $@noescape @callee_guaranteed (@in_guaranteed Size) -> @out Size):
+// CHECK:       bb0(%0 : $*Size, %1 : $*Size, %2 : $@noescape @callee_guaranteed (@in_guaranteed Size) -> @out Size):
 func functionWithResilientTypes(_ s: Size, f: (Size) -> Size) -> Size {
 
   // Stored properties of resilient structs from outside our resilience
@@ -56,7 +56,7 @@
 // Fixed-layout structs may be trivial or loadable
 
 // CHECK-LABEL: sil hidden @$s17struct_resilience28functionWithFixedLayoutTypes_1f010resilient_A05PointVAF_A2FXEtF : $@convention(thin) (Point, @noescape @callee_guaranteed (Point) -> Point) -> Point
-// CHECK:       bb0(%0 : @trivial $Point, %1 : @trivial $@noescape @callee_guaranteed (Point) -> Point):
+// CHECK:       bb0(%0 : $Point, %1 : $@noescape @callee_guaranteed (Point) -> Point):
 func functionWithFixedLayoutTypes(_ p: Point, f: (Point) -> Point) -> Point {
 
   // Stored properties of fixed layout structs are accessed directly
@@ -78,7 +78,7 @@
 // Fixed-layout struct with resilient stored properties is still address-only
 
 // CHECK-LABEL: sil hidden @$s17struct_resilience39functionWithFixedLayoutOfResilientTypes_1f010resilient_A09RectangleVAF_A2FXEtF : $@convention(thin) (@in_guaranteed Rectangle, @noescape @callee_guaranteed (@in_guaranteed Rectangle) -> @out Rectangle) -> @out Rectangle
-// CHECK:        bb0(%0 : @trivial $*Rectangle, %1 : @trivial $*Rectangle, %2 : @trivial $@noescape @callee_guaranteed (@in_guaranteed Rectangle) -> @out Rectangle):
+// CHECK:        bb0(%0 : $*Rectangle, %1 : $*Rectangle, %2 : $@noescape @callee_guaranteed (@in_guaranteed Rectangle) -> @out Rectangle):
 func functionWithFixedLayoutOfResilientTypes(_ r: Rectangle, f: (Rectangle) -> Rectangle) -> Rectangle {
   return f(r)
 }
@@ -188,7 +188,7 @@
 }
 
 // CHECK-LABEL: sil hidden [transparent] @$s17struct_resilience27internalTransparentFunctionySiAA6MySizeVF : $@convention(thin) (@in_guaranteed MySize) -> Int
-// CHECK: bb0([[ARG:%.*]] : @trivial $*MySize):
+// CHECK: bb0([[ARG:%.*]] : $*MySize):
 @_transparent func internalTransparentFunction(_ s: MySize) -> Int {
 
   // The body of an internal transparent function will not be inlined into
diff --git a/test/SILGen/subclass_existentials.swift b/test/SILGen/subclass_existentials.swift
index a30da43..9fc6ae9 100644
--- a/test/SILGen/subclass_existentials.swift
+++ b/test/SILGen/subclass_existentials.swift
@@ -251,7 +251,7 @@
   derived: Derived,
   baseAndPType: (Base<Int> & P).Type,
   derivedType: Derived.Type) {
-  // CHECK: bb0([[ARG0:%.*]] : @guaranteed $Base<Int> & P, [[ARG1:%.*]] : @guaranteed $Derived, [[ARG2:%.*]] : @trivial $@thick (Base<Int> & P).Type, [[ARG3:%.*]] : @trivial $@thick Derived.Type):
+  // CHECK: bb0([[ARG0:%.*]] : @guaranteed $Base<Int> & P, [[ARG1:%.*]] : @guaranteed $Derived, [[ARG2:%.*]] : $@thick (Base<Int> & P).Type, [[ARG3:%.*]] : $@thick Derived.Type):
   // CHECK: [[COPIED:%.*]] = copy_value [[ARG0]] : $Base<Int> & P
   // CHECK-NEXT: checked_cast_br [[COPIED]] : $Base<Int> & P to $Derived
   let _ = baseAndP as? Derived
@@ -338,7 +338,7 @@
   baseTAndP_concrete: Base<T> & P,
   baseIntAndP_concrete: Base<Int> & P) {
 
-  // CHECK: ([[ARG0:%.*]] : @trivial $*S, [[ARG1:%.*]] : @trivial $*T, [[ARG2:%.*]] : @trivial $*PT, [[ARG3:%.*]] : @guaranteed $BaseT, [[ARG4:%.*]] : @guaranteed $BaseInt, [[ARG5:%.*]] : @guaranteed $BaseTAndP, [[ARG6:%.*]] : @guaranteed $BaseIntAndP, [[ARG7:%.*]] : @guaranteed $DerivedT, [[ARG8:%.*]] : @guaranteed $Derived & R, [[ARG9:%.*]] : @guaranteed $Base<T> & P, [[ARG10:%.*]] : @guaranteed $Base<Int> & P)
+  // CHECK: ([[ARG0:%.*]] : $*S, [[ARG1:%.*]] : $*T, [[ARG2:%.*]] : $*PT, [[ARG3:%.*]] : @guaranteed $BaseT, [[ARG4:%.*]] : @guaranteed $BaseInt, [[ARG5:%.*]] : @guaranteed $BaseTAndP, [[ARG6:%.*]] : @guaranteed $BaseIntAndP, [[ARG7:%.*]] : @guaranteed $DerivedT, [[ARG8:%.*]] : @guaranteed $Derived & R, [[ARG9:%.*]] : @guaranteed $Base<T> & P, [[ARG10:%.*]] : @guaranteed $Base<Int> & P)
 
   // CHECK:      [[COPY:%.*]] = alloc_stack $S
   // CHECK-NEXT: copy_addr %0 to [initialization] [[COPY]] : $*S
diff --git a/test/SILGen/super.swift b/test/SILGen/super.swift
index 54698aa..920c4ef 100644
--- a/test/SILGen/super.swift
+++ b/test/SILGen/super.swift
@@ -110,7 +110,7 @@
 
   // CHECK-LABEL: sil @$s5super22ChildToResilientParentC11classMethodyyFZ : $@convention(method) (@thick ChildToResilientParent.Type) -> ()
   public override class func classMethod() {
-    // CHECK: bb0([[METASELF:%.*]] : @trivial $@thick ChildToResilientParent.Type):
+    // CHECK: bb0([[METASELF:%.*]] : $@thick ChildToResilientParent.Type):
     // CHECK:   [[UPCAST_METASELF:%.*]] = upcast [[METASELF]]
     // CHECK:   [[FUNC:%.*]] = super_method [[SELF]] : $@thick ChildToResilientParent.Type, #ResilientOutsideParent.classMethod!1 : (ResilientOutsideParent.Type) -> () -> (), $@convention(method) (@thick ResilientOutsideParent.Type) -> ()
     // CHECK:   apply [[FUNC]]([[UPCAST_METASELF]])
@@ -120,7 +120,7 @@
 
   // CHECK-LABEL: sil @$s5super22ChildToResilientParentC11returnsSelfACXDyFZ : $@convention(method) (@thick ChildToResilientParent.Type) -> @owned ChildToResilientParent
   public class func returnsSelf() -> Self {
-    // CHECK: bb0([[METASELF:%.*]] : @trivial $@thick ChildToResilientParent.Type):
+    // CHECK: bb0([[METASELF:%.*]] : $@thick ChildToResilientParent.Type):
     // CHECK:   [[CAST_METASELF:%.*]] = unchecked_trivial_bit_cast [[METASELF]] : $@thick ChildToResilientParent.Type to $@thick @dynamic_self ChildToResilientParent.Type
     // CHECK:   [[UPCAST_CAST_METASELF:%.*]] = upcast [[CAST_METASELF]] : $@thick @dynamic_self ChildToResilientParent.Type to $@thick ResilientOutsideParent.Type
     // CHECK:   [[FUNC:%.*]] = super_method [[METASELF]] : $@thick ChildToResilientParent.Type, #ResilientOutsideParent.classMethod!1 : (ResilientOutsideParent.Type) -> () -> ()
@@ -148,7 +148,7 @@
 
   // CHECK-LABEL: sil @$s5super18ChildToFixedParentC11classMethodyyFZ : $@convention(method) (@thick ChildToFixedParent.Type) -> ()
   public override class func classMethod() {
-    // CHECK: bb0([[SELF:%.*]] : @trivial $@thick ChildToFixedParent.Type):
+    // CHECK: bb0([[SELF:%.*]] : $@thick ChildToFixedParent.Type):
     // CHECK:   [[UPCAST_SELF:%.*]] = upcast [[SELF]]
     // CHECK:   [[FUNC:%.*]] = super_method [[SELF]] : $@thick ChildToFixedParent.Type, #OutsideParent.classMethod!1 : (OutsideParent.Type) -> () -> (), $@convention(method) (@thick OutsideParent.Type) -> ()
     // CHECK:   apply [[FUNC]]([[UPCAST_SELF]])
@@ -158,7 +158,7 @@
 
   // CHECK-LABEL: sil @$s5super18ChildToFixedParentC11returnsSelfACXDyFZ : $@convention(method) (@thick ChildToFixedParent.Type) -> @owned ChildToFixedParent
   public class func returnsSelf() -> Self {
-    // CHECK: bb0([[SELF:%.*]] : @trivial $@thick ChildToFixedParent.Type):
+    // CHECK: bb0([[SELF:%.*]] : $@thick ChildToFixedParent.Type):
     // CHECK:   [[FIRST_CAST:%.*]] = unchecked_trivial_bit_cast [[SELF]]
     // CHECK:   [[SECOND_CAST:%.*]] = upcast [[FIRST_CAST]]
     // CHECK:   [[FUNC:%.*]] = super_method [[SELF]] : $@thick ChildToFixedParent.Type, #OutsideParent.classMethod!1 : (OutsideParent.Type) -> () -> ()
diff --git a/test/SILGen/switch.swift b/test/SILGen/switch.swift
index 0d15cb6..b1f904c 100644
--- a/test/SILGen/switch.swift
+++ b/test/SILGen/switch.swift
@@ -950,7 +950,7 @@
 func testLabeledScalarPayload(_ lsp: LabeledScalarPayload) -> Any {
   // CHECK: switch_enum {{%.*}}, case #LabeledScalarPayload.Payload!enumelt.1: bb1
   switch lsp {
-  // CHECK: bb1([[TUPLE:%.*]] : @trivial $(name: Int)):
+  // CHECK: bb1([[TUPLE:%.*]] : $(name: Int)):
   // CHECK:   [[X:%.*]] = destructure_tuple [[TUPLE]]
   // CHECK:   [[ANY_X_ADDR:%.*]] = init_existential_addr {{%.*}}, $Int
   // CHECK:   store [[X]] to [trivial] [[ANY_X_ADDR]]
@@ -982,7 +982,7 @@
   case let x?:
     return 0
 
-  // CHECK: [[SOMEBB]](%3 : @trivial $Int):
+  // CHECK: [[SOMEBB]](%3 : $Int):
   // CHECK-NEXT: debug_value %3 : $Int, let, name "x"
   // CHECK: integer_literal $Builtin.IntLiteral, 0
 
@@ -1004,7 +1004,7 @@
   case let x?:
     return 0
 
-  // CHECK: [[SOMEBB]](%3 : @trivial $Int):
+  // CHECK: [[SOMEBB]](%3 : $Int):
   // CHECK-NEXT: debug_value %3 : $Int, let, name "x"
   // CHECK: integer_literal $Builtin.IntLiteral, 0
 
@@ -1022,7 +1022,7 @@
   switch(base, filter) {
     
   case (.some(let base), .some(let filter)):
-    // CHECK: bb2(%10 : @trivial $Int):
+    // CHECK: bb2(%10 : $Int):
     // CHECK-NEXT: debug_value %8 : $Int, let, name "base"
     // CHECK-NEXT: debug_value %10 : $Int, let, name "filter"
     print("both: \(base), \(filter)")
@@ -1031,11 +1031,11 @@
     // CHECK-NEXT: debug_value %8 : $Int, let, name "base"
     // CHECK-NEXT: br bb6(%8 : $Int)
 
-    // CHECK: bb5([[OTHER_BASE:%.*]] : @trivial $Int)
+    // CHECK: bb5([[OTHER_BASE:%.*]] : $Int)
     // CHECK-NEXT: debug_value [[OTHER_BASE]] : $Int, let, name "base"
     // CHECK-NEXT: br bb6([[OTHER_BASE]] : $Int)
     
-    // CHECK: bb6([[ARG:%.*]] : @trivial $Int):
+    // CHECK: bb6([[ARG:%.*]] : $Int):
     print("single: \(base)")
   default:
     print("default")
@@ -1050,7 +1050,7 @@
 
 func testUninhabitedSwitchScrutinee() {
   func test1(x : MyNever) {
-    // CHECK: bb0(%0 : @trivial $MyNever):
+    // CHECK: bb0(%0 : $MyNever):
     // CHECK-NEXT: debug_value %0 : $MyNever, let, name "x"
     // CHECK-NEXT: unreachable
     switch x {
@@ -1060,7 +1060,7 @@
     }
   }
   func test2(x : Never) {
-    // CHECK: bb0(%0 : @trivial $Never):
+    // CHECK: bb0(%0 : $Never):
     // CHECK-NEXT: debug_value %0 : $Never, let, name "x"
     // CHECK-NEXT: unreachable
     switch (x, x) {}
diff --git a/test/SILGen/switch_fallthrough.swift b/test/SILGen/switch_fallthrough.swift
index ed4e782..2f1b68a 100644
--- a/test/SILGen/switch_fallthrough.swift
+++ b/test/SILGen/switch_fallthrough.swift
@@ -152,7 +152,7 @@
     // CHECK:   debug_value [[SECOND_N:%.*]] : $Int, let, name "n"
     // CHECK:   br [[CASE2]]([[SECOND_N]] : $Int)
     
-    // CHECK: [[CASE2]]([[INCOMING_N:%.*]] : @trivial $Int):
+    // CHECK: [[CASE2]]([[INCOMING_N:%.*]] : $Int):
     // CHECK:   [[Z:%.*]] = function_ref @$s18switch_fallthrough1zyySiF
     // CHECK    apply [[Z]]([[INCOMING_N]]) : $@convention(thin) (Int) -> ()
     // CHECK:   br [[CONT:bb[0-9]+]]
diff --git a/test/SILGen/switch_var.swift b/test/SILGen/switch_var.swift
index 3ea2ca6..ddcefc3 100644
--- a/test/SILGen/switch_var.swift
+++ b/test/SILGen/switch_var.swift
@@ -541,7 +541,7 @@
     // CHECK:   [[SECOND_MATCH_CASE]]:
     // CHECK:     debug_value [[SECOND_X:%.*]] :
     // CHECK:     br [[CASE_BODY]]([[SECOND_X]] : $Int)
-    // CHECK:   [[CASE_BODY]]([[BODY_VAR:%.*]] : @trivial $Int):
+    // CHECK:   [[CASE_BODY]]([[BODY_VAR:%.*]] : $Int):
     // CHECK:     [[A:%.*]] = function_ref @$s10switch_var1a1xySi_tF
     // CHECK:     apply [[A]]([[BODY_VAR]])
     a(x: x)
@@ -571,7 +571,7 @@
     // CHECK:     cond_br {{%.*}}, [[SECOND_MATCH_CASE:bb[0-9]+]], [[SECOND_FAIL:bb[0-9]+]]
     // CHECK:   [[SECOND_MATCH_CASE]]:
     // CHECK:     br [[CASE_BODY]]([[FIRST]] : $Int)
-    // CHECK:   [[CASE_BODY]]([[BODY_VAR:%.*]] : @trivial $Int):
+    // CHECK:   [[CASE_BODY]]([[BODY_VAR:%.*]] : $Int):
     // CHECK:     [[A:%.*]] = function_ref @$s10switch_var1a1xySi_tF
     // CHECK:     apply [[A]]([[BODY_VAR]])
     a(x: x)
@@ -594,19 +594,19 @@
   switch f {
     // CHECK:   switch_enum {{%.*}} : $Foo, case #Foo.A!enumelt.1: [[A:bb[0-9]+]], case #Foo.B!enumelt.1: [[B:bb[0-9]+]], case #Foo.C!enumelt.1: [[C:bb[0-9]+]]
   case .A(let x, let n), .B(let n, let x), .C(_, let x, let n):
-    // CHECK:   [[A]]([[A_TUP:%.*]] : @trivial $(Int, Double)):
+    // CHECK:   [[A]]([[A_TUP:%.*]] : $(Int, Double)):
     // CHECK:     ([[A_X:%.*]], [[A_N:%.*]]) = destructure_tuple [[A_TUP]]
     // CHECK:     br [[CASE_BODY:bb[0-9]+]]([[A_X]] : $Int, [[A_N]] : $Double)
     
-    // CHECK:   [[B]]([[B_TUP:%.*]] : @trivial $(Double, Int)):
+    // CHECK:   [[B]]([[B_TUP:%.*]] : $(Double, Int)):
     // CHECK:     ([[B_N:%.*]], [[B_X:%.*]]) = destructure_tuple [[B_TUP]]
     // CHECK:     br [[CASE_BODY]]([[B_X]] : $Int, [[B_N]] : $Double)
 
-    // CHECK:   [[C]]([[C_TUP:%.*]] : @trivial $(Int, Int, Double)):
+    // CHECK:   [[C]]([[C_TUP:%.*]] : $(Int, Int, Double)):
     // CHECK:     ([[C__:%.*]], [[C_X:%.*]], [[C_N:%.*]]) = destructure_tuple [[C_TUP]]
     // CHECK:     br [[CASE_BODY]]([[C_X]] : $Int, [[C_N]] : $Double)
 
-    // CHECK:   [[CASE_BODY]]([[BODY_X:%.*]] : @trivial $Int, [[BODY_N:%.*]] : @trivial $Double):
+    // CHECK:   [[CASE_BODY]]([[BODY_X:%.*]] : $Int, [[BODY_N:%.*]] : $Double):
     // CHECK:     [[FUNC_A:%.*]] = function_ref @$s10switch_var1a1xySi_tF
     // CHECK:     apply [[FUNC_A]]([[BODY_X]])
     a(x: x)
@@ -624,26 +624,26 @@
   switch b {
     // CHECK:   switch_enum {{%.*}} : $Bar, case #Bar.Y!enumelt.1: [[Y:bb[0-9]+]], case #Bar.Z!enumelt.1: [[Z:bb[0-9]+]]
   case .Y(.A(let x, _), _), .Y(.B(_, let x), _), .Y(.C, let x), .Z(let x, _):
-    // CHECK:   [[Y]]([[Y_TUP:%.*]] : @trivial $(Foo, Int)):
+    // CHECK:   [[Y]]([[Y_TUP:%.*]] : $(Foo, Int)):
     // CHECK:     ([[Y_F:%.*]], [[Y_X:%.*]]) = destructure_tuple [[Y_TUP]]
     // CHECK:     switch_enum [[Y_F]] : $Foo, case #Foo.A!enumelt.1: [[A:bb[0-9]+]], case #Foo.B!enumelt.1: [[B:bb[0-9]+]], case #Foo.C!enumelt.1: [[C:bb[0-9]+]]
     
-    // CHECK:   [[A]]([[A_TUP:%.*]] : @trivial $(Int, Double)):
+    // CHECK:   [[A]]([[A_TUP:%.*]] : $(Int, Double)):
     // CHECK:     ([[A_X:%.*]], [[A_N:%.*]]) = destructure_tuple [[A_TUP]]
     // CHECK:     br [[CASE_BODY:bb[0-9]+]]([[A_X]] : $Int)
     
-    // CHECK:   [[B]]([[B_TUP:%.*]] : @trivial $(Double, Int)):
+    // CHECK:   [[B]]([[B_TUP:%.*]] : $(Double, Int)):
     // CHECK:     ([[B_N:%.*]], [[B_X:%.*]]) = destructure_tuple [[B_TUP]]
     // CHECK:     br [[CASE_BODY]]([[B_X]] : $Int)
     
-    // CHECK:   [[C]]({{%.*}} : @trivial $(Int, Int, Double)):
+    // CHECK:   [[C]]({{%.*}} : $(Int, Int, Double)):
     // CHECK:     br [[CASE_BODY]]([[Y_X]] : $Int)
 
-    // CHECK:   [[Z]]([[Z_TUP:%.*]] : @trivial $(Int, Foo)):
+    // CHECK:   [[Z]]([[Z_TUP:%.*]] : $(Int, Foo)):
     // CHECK:     ([[Z_X:%.*]], [[Z_F:%.*]]) = destructure_tuple [[Z_TUP]]
     // CHECK:     br [[CASE_BODY]]([[Z_X]] : $Int)
 
-    // CHECK:   [[CASE_BODY]]([[BODY_X:%.*]] : @trivial $Int):
+    // CHECK:   [[CASE_BODY]]([[BODY_X:%.*]] : $Int):
     // CHECK:     [[FUNC_A:%.*]] = function_ref @$s10switch_var1a1xySi_tF
     // CHECK:     apply [[FUNC_A]]([[BODY_X]])
     a(x: x)
@@ -658,26 +658,26 @@
   switch b {
     // CHECK:   switch_enum {{%.*}} : $Bar, case #Bar.Y!enumelt.1: [[Y:bb[0-9]+]], case #Bar.Z!enumelt.1: [[Z:bb[0-9]+]]
   case .Y(.A(var x, _), _), .Y(.B(_, var x), _), .Y(.C, var x), .Z(var x, _):
-    // CHECK:   [[Y]]([[Y_TUP:%.*]] : @trivial $(Foo, Int)):
+    // CHECK:   [[Y]]([[Y_TUP:%.*]] : $(Foo, Int)):
     // CHECK:     ([[Y_F:%.*]], [[Y_X:%.*]]) = destructure_tuple [[Y_TUP]]
     // CHECK:     switch_enum [[Y_F]] : $Foo, case #Foo.A!enumelt.1: [[A:bb[0-9]+]], case #Foo.B!enumelt.1: [[B:bb[0-9]+]], case #Foo.C!enumelt.1: [[C:bb[0-9]+]]
     
-    // CHECK:   [[A]]([[A_TUP:%.*]] : @trivial $(Int, Double)):
+    // CHECK:   [[A]]([[A_TUP:%.*]] : $(Int, Double)):
     // CHECK:     ([[A_X:%.*]], [[A_N:%.*]]) = destructure_tuple [[A_TUP]]
     // CHECK:     br [[CASE_BODY:bb[0-9]+]]([[A_X]] : $Int)
     
-    // CHECK:   [[B]]([[B_TUP:%.*]] : @trivial $(Double, Int)):
+    // CHECK:   [[B]]([[B_TUP:%.*]] : $(Double, Int)):
     // CHECK:     ([[B_N:%.*]], [[B_X:%.*]]) = destructure_tuple [[B_TUP]]
     // CHECK:     br [[CASE_BODY]]([[B_X]] : $Int)
     
-    // CHECK:   [[C]]({{%.*}} : @trivial $(Int, Int, Double)):
+    // CHECK:   [[C]]({{%.*}} : $(Int, Int, Double)):
     // CHECK:     br [[CASE_BODY]]([[Y_X]] : $Int)
     
-    // CHECK:   [[Z]]([[Z_TUP:%.*]] : @trivial $(Int, Foo)):
+    // CHECK:   [[Z]]([[Z_TUP:%.*]] : $(Int, Foo)):
     // CHECK:     ([[Z_X:%.*]], [[Z_F:%.*]]) = destructure_tuple [[Z_TUP]]
     // CHECK:     br [[CASE_BODY]]([[Z_X]] : $Int)
     
-    // CHECK:   [[CASE_BODY]]([[BODY_X:%.*]] : @trivial $Int):
+    // CHECK:   [[CASE_BODY]]([[BODY_X:%.*]] : $Int):
     // CHECK:     store [[BODY_X]] to [trivial] [[BOX_X:%.*]] : $*Int
     // CHECK:     [[WRITE:%.*]] = begin_access [modify] [unknown] [[BOX_X]]
     // CHECK:     [[FUNC_AAA:%.*]] = function_ref @$s10switch_var3aaa1xySiz_tF
diff --git a/test/SILGen/toplevel.swift b/test/SILGen/toplevel.swift
index ac718d1..7e6e983 100644
--- a/test/SILGen/toplevel.swift
+++ b/test/SILGen/toplevel.swift
@@ -8,7 +8,7 @@
 
 
 // CHECK-LABEL: sil @main
-// CHECK: bb0({{%.*}} : @trivial $Int32, {{%.*}} : @trivial $UnsafeMutablePointer<Optional<UnsafeMutablePointer<Int8>>>):
+// CHECK: bb0({{%.*}} : $Int32, {{%.*}} : $UnsafeMutablePointer<Optional<UnsafeMutablePointer<Int8>>>):
 
 // -- initialize x
 // CHECK: alloc_global @$s8toplevel1xSiv
diff --git a/test/SILGen/toplevel_errors.swift b/test/SILGen/toplevel_errors.swift
index e15385c..9d5a2e2 100644
--- a/test/SILGen/toplevel_errors.swift
+++ b/test/SILGen/toplevel_errors.swift
@@ -16,7 +16,7 @@
 // CHECK: builtin "willThrow"([[ERR2]] : $Error)
 // CHECK: br bb2([[ERR2]] : $Error)
 
-// CHECK: bb1([[T0:%.*]] : @trivial $Int32):
+// CHECK: bb1([[T0:%.*]] : $Int32):
 // CHECK: return [[T0]] : $Int32
 
 // CHECK: bb2([[T0:%.*]] : @owned $Error):
diff --git a/test/SILGen/tuples.swift b/test/SILGen/tuples.swift
index 187649d..8b2697a 100644
--- a/test/SILGen/tuples.swift
+++ b/test/SILGen/tuples.swift
@@ -132,7 +132,7 @@
 // formed with isGuaranteed set.
 extension P {
   // CHECK-LABEL: sil hidden @$s6tuples1PPAAE12immutableUse5tupleyAA1CC5index_x5valuet_tFZ
-  // CHECK: bb0([[TUP0:%.*]] : @guaranteed $C, [[TUP1:%.*]] : @trivial $*Self
+  // CHECK: bb0([[TUP0:%.*]] : @guaranteed $C, [[TUP1:%.*]] : $*Self
   // Allocate space for the RValue.
   // CHECK:   [[RVALUE:%.*]] = alloc_stack $(index: C, value: Self), let, name "tuple"
   //
diff --git a/test/SILGen/types.swift b/test/SILGen/types.swift
index ec258e5..6ee46d4 100644
--- a/test/SILGen/types.swift
+++ b/test/SILGen/types.swift
@@ -7,7 +7,7 @@
   // Methods have method calling convention.
   // CHECK-LABEL: sil hidden @$s5types1CC3foo1xySi_tF : $@convention(method) (Int, @guaranteed C) -> () {
   func foo(x x: Int) {
-    // CHECK: bb0([[X:%[0-9]+]] : @trivial $Int, [[THIS:%[0-9]+]] : @guaranteed $C):
+    // CHECK: bb0([[X:%[0-9]+]] : $Int, [[THIS:%[0-9]+]] : @guaranteed $C):
     member = x
 
     // CHECK-NOT: copy_value
@@ -25,7 +25,7 @@
   mutating
   func foo(x x: Int) {
     var x = x
-    // CHECK: bb0([[X:%[0-9]+]] : @trivial $Int, [[THIS:%[0-9]+]] : @trivial $*S):
+    // CHECK: bb0([[X:%[0-9]+]] : $Int, [[THIS:%[0-9]+]] : $*S):
     member = x
     // CHECK: [[XBOX:%[0-9]+]] = alloc_box ${ var Int }
     // CHECK: [[XADDR:%[0-9]+]] = project_box [[XBOX]]
diff --git a/test/SILGen/unmanaged_ownership.swift b/test/SILGen/unmanaged_ownership.swift
index 3cf642f..e304982 100644
--- a/test/SILGen/unmanaged_ownership.swift
+++ b/test/SILGen/unmanaged_ownership.swift
@@ -30,7 +30,7 @@
 }
 
 // CHECK-LABEL: sil hidden @$ss3set6holderys6HolderVz_tF : $@convention(thin) (@inout Holder) -> () {
-// CHECK: bb0([[ADDR:%.*]] : @trivial $*Holder):
+// CHECK: bb0([[ADDR:%.*]] : $*Holder):
 // CHECK:        [[T0:%.*]] = function_ref @$ss1CC{{[_0-9a-zA-Z]*}}fC
 // CHECK:        [[C:%.*]] = apply [[T0]](
 // CHECK-NEXT:   [[WRITE:%.*]] = begin_access [modify] [unknown] [[ADDR]] : $*Holder
@@ -45,7 +45,7 @@
   return holder.value
 }
 // CHECK-LABEL: sil hidden @$ss3get6holders1CCs6HolderVz_tF : $@convention(thin) (@inout Holder) -> @owned C {
-// CHECK: bb0([[ADDR:%.*]] : @trivial $*Holder):
+// CHECK: bb0([[ADDR:%.*]] : $*Holder):
 // CHECK-NEXT:   debug_value_addr %0 : $*Holder, var, name "holder", argno 1 
 // CHECK-NEXT:   [[READ:%.*]] = begin_access [read] [unknown] [[ADDR]] : $*Holder
 // CHECK-NEXT:   [[T0:%.*]] = struct_element_addr [[READ]] : $*Holder, #Holder.value
@@ -59,7 +59,7 @@
   return fn().value
 }
 // CHECK-LABEL: sil hidden @$ss7project2fns1CCs6HolderVyXE_tF : $@convention(thin) (@noescape @callee_guaranteed () -> Holder) -> @owned C {
-// CHECK: bb0([[FN:%.*]] : @trivial $@noescape @callee_guaranteed () -> Holder):
+// CHECK: bb0([[FN:%.*]] : $@noescape @callee_guaranteed () -> Holder):
 // CHECK-NEXT: debug_value
 // CHECK-NEXT: [[T0:%.*]] = apply [[FN]]()
 // CHECK-NEXT: [[T1:%.*]] = struct_extract [[T0]] : $Holder, #Holder.value
diff --git a/test/SILGen/unowned.swift b/test/SILGen/unowned.swift
index 001f013..60e11be 100644
--- a/test/SILGen/unowned.swift
+++ b/test/SILGen/unowned.swift
@@ -12,7 +12,7 @@
 }
 _ = A(x: C())
 // CHECK-LABEL: sil hidden @$s7unowned1AV{{[_0-9a-zA-Z]*}}fC
-// CHECK: bb0([[X:%.*]] : @owned $C, %1 : @trivial $@thin A.Type):
+// CHECK: bb0([[X:%.*]] : @owned $C, %1 : $@thin A.Type):
 // CHECK:   [[X_UNOWNED:%.*]] = ref_to_unowned [[X]] : $C to $@sil_unowned C
 // CHECK:   [[X_UNOWNED_COPY:%.*]] = copy_value [[X_UNOWNED]]
 // CHECK:   destroy_value [[X]]
@@ -29,7 +29,7 @@
 }
 _ = AddressOnly(x: C(), p: X())
 // CHECK-LABEL: sil hidden @$s7unowned11AddressOnlyV{{[_0-9a-zA-Z]*}}fC
-// CHECK: bb0([[RET:%.*]] : @trivial $*AddressOnly, [[X:%.*]] : @owned $C, {{.*}}):
+// CHECK: bb0([[RET:%.*]] : $*AddressOnly, [[X:%.*]] : @owned $C, {{.*}}):
 // CHECK:   [[X_ADDR:%.*]] = struct_element_addr [[RET]] : $*AddressOnly, #AddressOnly.x
 // CHECK:   [[X_UNOWNED:%.*]] = ref_to_unowned [[X]] : $C to $@sil_unowned C
 // CHECK:   [[X_UNOWNED_COPY:%.*]] = copy_value [[X_UNOWNED]] : $@sil_unowned C
diff --git a/test/SILGen/value_ownership.swift b/test/SILGen/value_ownership.swift
index 069796a..17f755e 100644
--- a/test/SILGen/value_ownership.swift
+++ b/test/SILGen/value_ownership.swift
@@ -30,7 +30,7 @@
 // Check the elided witness' thunk has the right conventions and borrows where necessary
 
 // CHECK-LABEL: @$s15value_ownership7WitnessVAA14OwnershipProtoA2aDP6elidedyySS_SShSSntFTW : $@convention(witness_method: OwnershipProto) (@guaranteed String, @guaranteed String, @owned String, @in Witness) -> ()
-// CHECK:       bb0([[DEFAULT2DEFAULT:%.*]] : @guaranteed $String, [[SHARED2DEFAULT:%.*]] : @guaranteed $String, [[OWNED2DEFAULT:%.*]] : @owned $String, [[WITNESS_VALUE:%.*]] : @trivial $*Witness):
+// CHECK:       bb0([[DEFAULT2DEFAULT:%.*]] : @guaranteed $String, [[SHARED2DEFAULT:%.*]] : @guaranteed $String, [[OWNED2DEFAULT:%.*]] : @owned $String, [[WITNESS_VALUE:%.*]] : $*Witness):
 // CHECK:         [[LOAD_WITNESS:%.*]] = load [take] [[WITNESS_VALUE]] : $*Witness
 // CHECK:         [[BORROW_WITNESS:%.*]] = begin_borrow [[LOAD_WITNESS]]
 // CHECK:         [[WITNESS_FUNC:%.*]] = function_ref @$s15value_ownership7WitnessV6elidedyySS_S2StF
@@ -44,7 +44,7 @@
 // Check that the explicit witness' thunk doesn't copy or borrow
 
 // CHECK-LABEL: @$s15value_ownership7WitnessVAA14OwnershipProtoA2aDP8explicityySS_SShSSntFTW : $@convention(witness_method: OwnershipProto) (@guaranteed String, @guaranteed String, @owned String, @in Witness) -> () {
-// CHECK:       bb0([[ARG0:%.*]] : @guaranteed $String, [[ARG1:%.*]] : @guaranteed $String, [[ARG2:%.*]] : @owned $String, [[WITNESS_VALUE:%.*]] : @trivial $*Witness):
+// CHECK:       bb0([[ARG0:%.*]] : @guaranteed $String, [[ARG1:%.*]] : @guaranteed $String, [[ARG2:%.*]] : @owned $String, [[WITNESS_VALUE:%.*]] : $*Witness):
 // CHECK-NEXT:    [[LOAD_WITNESS:%.*]] = load [take] [[WITNESS_VALUE]] : $*Witness
 // CHECK-NEXT:    // function_ref Witness.explicit(_:_:_:)
 // CHECK-NEXT:    [[WITNESS_FUNC:%.*]] = function_ref @$s15value_ownership7WitnessV8explicityySS_SShSSntF
diff --git a/test/SILGen/without_actually_escaping.swift b/test/SILGen/without_actually_escaping.swift
index 7bbbd6c..a3ffa76 100644
--- a/test/SILGen/without_actually_escaping.swift
+++ b/test/SILGen/without_actually_escaping.swift
@@ -5,7 +5,7 @@
 
 // CHECK-LABEL: sil hidden @$s25without_actually_escaping9letEscape1fyycyyXE_tF
 func letEscape(f: () -> ()) -> () -> () {
-  // CHECK: bb0([[ARG:%.*]] : @trivial $@noescape @callee_guaranteed () -> ()):
+  // CHECK: bb0([[ARG:%.*]] : $@noescape @callee_guaranteed () -> ()):
   // CHECK: [[THUNK:%.*]] = function_ref @$sIg_Ieg_TR : $@convention(thin) (@noescape @callee_guaranteed () -> ()) -> ()
   // TODO: Use a canary wrapper instead of just copying the nonescaping value
   // CHECK: [[ESCAPABLE_COPY:%.*]] = partial_apply [callee_guaranteed] [[THUNK]]([[ARG]])
@@ -23,7 +23,7 @@
 // CHECK-LABEL: sil shared [transparent] [serializable] [reabstraction_thunk] [without_actually_escaping] @$sIg_Ieg_TR : $@convention(thin) (@noescape @callee_guaranteed () -> ()) -> () {
 
 // CHECK-LABEL: sil hidden @$s25without_actually_escaping14letEscapeThrow1fyycyycyKXE_tKF
-// CHECK: bb0([[ARG:%.*]] : @trivial $@noescape @callee_guaranteed () -> (@owned @callee_guaranteed () -> (), @error Error)):
+// CHECK: bb0([[ARG:%.*]] : $@noescape @callee_guaranteed () -> (@owned @callee_guaranteed () -> (), @error Error)):
 // CHECK: [[CVT:%.*]] = function_ref @$sIeg_s5Error_pIgozo_Ieg_sAA_pIegozo_TR
 // CHECK: [[CLOSURE:%.*]] = partial_apply [callee_guaranteed] [[CVT]]([[ARG]])
 // CHECK:  [[MD:%.*]] = mark_dependence [[CLOSURE]] : {{.*}} on [[ARG]]
diff --git a/test/SILGen/witnesses.swift b/test/SILGen/witnesses.swift
index 4b22c67..2c5d40d 100644
--- a/test/SILGen/witnesses.swift
+++ b/test/SILGen/witnesses.swift
@@ -100,7 +100,7 @@
   mutating
   func selfTypes(x: ConformingStruct) -> ConformingStruct { return x }
   // CHECK-LABEL: sil private [transparent] [thunk] @$s9witnesses16ConformingStructVAA1XA2aDP9selfTypes{{[_0-9a-zA-Z]*}}FTW : $@convention(witness_method: X) (@in_guaranteed ConformingStruct, @inout ConformingStruct) -> @out ConformingStruct {
-  // CHECK:       bb0(%0 : @trivial $*ConformingStruct, %1 : @trivial $*ConformingStruct, %2 : @trivial $*ConformingStruct):
+  // CHECK:       bb0(%0 : $*ConformingStruct, %1 : $*ConformingStruct, %2 : $*ConformingStruct):
   // CHECK-NEXT:    %3 = load [trivial] %1 : $*ConformingStruct
   // CHECK-NEXT:    // function_ref
   // CHECK-NEXT:    %4 = function_ref @$s9witnesses16ConformingStructV9selfTypes{{[_0-9a-zA-Z]*}}F : $@convention(method) (ConformingStruct, @inout ConformingStruct) -> ConformingStruct
@@ -113,7 +113,7 @@
   mutating
   func loadable(x: Loadable) -> Loadable { return x }
   // CHECK-LABEL: sil private [transparent] [thunk] @$s9witnesses16ConformingStructVAA1XA2aDP8loadable{{[_0-9a-zA-Z]*}}FTW : $@convention(witness_method: X) (Loadable, @inout ConformingStruct) -> Loadable {
-  // CHECK:       bb0(%0 : @trivial $Loadable, %1 : @trivial $*ConformingStruct):
+  // CHECK:       bb0(%0 : $Loadable, %1 : $*ConformingStruct):
   // CHECK-NEXT:    // function_ref
   // CHECK-NEXT:    %2 = function_ref @$s9witnesses16ConformingStructV8loadable{{[_0-9a-zA-Z]*}}F : $@convention(method) (Loadable, @inout ConformingStruct) -> Loadable
   // CHECK-NEXT:    %3 = apply %2(%0, %1) : $@convention(method) (Loadable, @inout ConformingStruct) -> Loadable
@@ -123,7 +123,7 @@
   mutating
   func addrOnly(x: AddrOnly) -> AddrOnly { return x }
   // CHECK-LABEL: sil private [transparent] [thunk] @$s9witnesses16ConformingStructVAA1XA2aDP8addrOnly{{[_0-9a-zA-Z]*}}FTW : $@convention(witness_method: X) (@in_guaranteed AddrOnly, @inout ConformingStruct) -> @out AddrOnly {
-  // CHECK:       bb0(%0 : @trivial $*AddrOnly, %1 : @trivial $*AddrOnly, %2 : @trivial $*ConformingStruct):
+  // CHECK:       bb0(%0 : $*AddrOnly, %1 : $*AddrOnly, %2 : $*ConformingStruct):
   // CHECK-NEXT:    // function_ref
   // CHECK-NEXT:    %3 = function_ref @$s9witnesses16ConformingStructV8addrOnly{{[_0-9a-zA-Z]*}}F : $@convention(method) (@in_guaranteed AddrOnly, @inout ConformingStruct) -> @out AddrOnly
   // CHECK-NEXT:    %4 = apply %3(%0, %1, %2) : $@convention(method) (@in_guaranteed AddrOnly, @inout ConformingStruct) -> @out AddrOnly
@@ -134,7 +134,7 @@
   mutating
   func generic<C>(x: C) -> C { return x }
   // CHECK-LABEL: sil private [transparent] [thunk] @$s9witnesses16ConformingStructVAA1XA2aDP7generic{{[_0-9a-zA-Z]*}}FTW : $@convention(witness_method: X) <τ_0_0> (@in_guaranteed τ_0_0, @inout ConformingStruct) -> @out τ_0_0 {
-  // CHECK:       bb0(%0 : @trivial $*τ_0_0, %1 : @trivial $*τ_0_0, %2 : @trivial $*ConformingStruct):
+  // CHECK:       bb0(%0 : $*τ_0_0, %1 : $*τ_0_0, %2 : $*ConformingStruct):
   // CHECK-NEXT:    // function_ref
   // CHECK-NEXT:    %3 = function_ref @$s9witnesses16ConformingStructV7generic{{[_0-9a-zA-Z]*}}F : $@convention(method) <τ_0_0> (@in_guaranteed τ_0_0, @inout ConformingStruct) -> @out τ_0_0
   // CHECK-NEXT:    %4 = apply %3<τ_0_0>(%0, %1, %2) : $@convention(method) <τ_0_0> (@in_guaranteed τ_0_0, @inout ConformingStruct) -> @out τ_0_0
@@ -144,7 +144,7 @@
   mutating
   func classes<C2: Classes>(x: C2) -> C2 { return x }
   // CHECK-LABEL: sil private [transparent] [thunk] @$s9witnesses16ConformingStructVAA1XA2aDP7classes{{[_0-9a-zA-Z]*}}FTW : $@convention(witness_method: X) <τ_0_0 where τ_0_0 : Classes> (@guaranteed τ_0_0, @inout ConformingStruct) -> @owned τ_0_0 {
-  // CHECK:       bb0(%0 : @guaranteed $τ_0_0, %1 : @trivial $*ConformingStruct):
+  // CHECK:       bb0(%0 : @guaranteed $τ_0_0, %1 : $*ConformingStruct):
   // CHECK-NEXT:    // function_ref
   // CHECK-NEXT:    %2 = function_ref @$s9witnesses16ConformingStructV7classes{{[_0-9a-zA-Z]*}}F : $@convention(method) <τ_0_0 where τ_0_0 : Classes> (@guaranteed τ_0_0, @inout ConformingStruct) -> @owned τ_0_0
   // CHECK-NEXT:    %3 = apply %2<τ_0_0>(%0, %1) : $@convention(method) <τ_0_0 where τ_0_0 : Classes> (@guaranteed τ_0_0, @inout ConformingStruct) -> @owned τ_0_0
@@ -153,7 +153,7 @@
 }
 func <~>(_ x: ConformingStruct, y: ConformingStruct) -> ConformingStruct { return x }
 // CHECK-LABEL: sil private [transparent] [thunk] @$s9witnesses16ConformingStructVAA1XA2aDP3ltgoi{{[_0-9a-zA-Z]*}}FZTW : $@convention(witness_method: X) (@in_guaranteed ConformingStruct, @in_guaranteed ConformingStruct, @thick ConformingStruct.Type) -> @out ConformingStruct {
-// CHECK:       bb0([[ARG1:%.*]] : @trivial $*ConformingStruct, [[ARG2:%.*]] : @trivial $*ConformingStruct, [[ARG3:%.*]] : @trivial $*ConformingStruct, [[ARG4:%.*]] : @trivial $@thick ConformingStruct.Type):
+// CHECK:       bb0([[ARG1:%.*]] : $*ConformingStruct, [[ARG2:%.*]] : $*ConformingStruct, [[ARG3:%.*]] : $*ConformingStruct, [[ARG4:%.*]] : $@thick ConformingStruct.Type):
 // CHECK-NEXT:    [[LOADED_ARG2:%.*]] = load [trivial] [[ARG2]] : $*ConformingStruct
 // CHECK-NEXT:    [[LOADED_ARG3:%.*]] = load [trivial] [[ARG3]] : $*ConformingStruct
 // CHECK-NEXT:    // function_ref
@@ -167,7 +167,7 @@
 final class ConformingClass : X {
   func selfTypes(x: ConformingClass) -> ConformingClass { return x }
   // CHECK-LABEL: sil private [transparent] [thunk] @$s9witnesses15ConformingClassCAA1XA2aDP9selfTypes{{[_0-9a-zA-Z]*}}FTW : $@convention(witness_method: X) (@in_guaranteed ConformingClass, @inout ConformingClass) -> @out ConformingClass {
-  // CHECK:  bb0([[ARG1:%.*]] : @trivial $*ConformingClass, [[ARG2:%.*]] : @trivial $*ConformingClass, [[ARG3:%.*]] : @trivial $*ConformingClass):
+  // CHECK:  bb0([[ARG1:%.*]] : $*ConformingClass, [[ARG2:%.*]] : $*ConformingClass, [[ARG3:%.*]] : $*ConformingClass):
   // -- load and copy_value 'self' from inout witness 'self' parameter
   // CHECK:    [[ARG2_LOADED:%.*]] = load_borrow [[ARG2]] : $*ConformingClass
   // CHECK:    [[ARG3_LOADED:%.*]] = load_borrow [[ARG3]] : $*ConformingClass
@@ -198,7 +198,7 @@
   mutating
   func selfTypes(x: ConformingAOStruct) -> ConformingAOStruct { return x }
   // CHECK-LABEL: sil private [transparent] [thunk] @$s9witnesses18ConformingAOStructVAA1XA2aDP9selfTypes{{[_0-9a-zA-Z]*}}FTW : $@convention(witness_method: X) (@in_guaranteed ConformingAOStruct, @inout ConformingAOStruct) -> @out ConformingAOStruct {
-  // CHECK:       bb0(%0 : @trivial $*ConformingAOStruct, %1 : @trivial $*ConformingAOStruct, %2 : @trivial $*ConformingAOStruct):
+  // CHECK:       bb0(%0 : $*ConformingAOStruct, %1 : $*ConformingAOStruct, %2 : $*ConformingAOStruct):
   // CHECK-NEXT:    // function_ref
   // CHECK-NEXT:    %3 = function_ref @$s9witnesses18ConformingAOStructV9selfTypes{{[_0-9a-zA-Z]*}}F : $@convention(method) (@in_guaranteed ConformingAOStruct, @inout ConformingAOStruct) -> @out ConformingAOStruct
   // CHECK-NEXT:    %4 = apply %3(%0, %1, %2) : $@convention(method) (@in_guaranteed ConformingAOStruct, @inout ConformingAOStruct) -> @out ConformingAOStruct
@@ -216,7 +216,7 @@
   mutating
   func selfTypes<E>(x: E) -> E { return x }
   // CHECK-LABEL: sil private [transparent] [thunk] @$s9witnesses23ConformsWithMoreGenericVAA1XA2aDP9selfTypes{{[_0-9a-zA-Z]*}}FTW : $@convention(witness_method: X) (@in_guaranteed ConformsWithMoreGeneric, @inout ConformsWithMoreGeneric) -> @out ConformsWithMoreGeneric {
-  // CHECK:       bb0(%0 : @trivial $*ConformsWithMoreGeneric, %1 : @trivial $*ConformsWithMoreGeneric, %2 : @trivial $*ConformsWithMoreGeneric):
+  // CHECK:       bb0(%0 : $*ConformsWithMoreGeneric, %1 : $*ConformsWithMoreGeneric, %2 : $*ConformsWithMoreGeneric):
   // CHECK-NEXT:    // function_ref
   // CHECK-NEXT:    [[WITNESS_FN:%.*]] = function_ref @$s9witnesses23ConformsWithMoreGenericV9selfTypes{{[_0-9a-zA-Z]*}}F : $@convention(method) <τ_0_0> (@in_guaranteed τ_0_0, @inout ConformsWithMoreGeneric) -> @out τ_0_0
   // CHECK-NEXT:    [[RESULT:%.*]] = apply [[WITNESS_FN]]<ConformsWithMoreGeneric>(%0, %1, %2) : $@convention(method) <τ_0_0> (@in_guaranteed τ_0_0, @inout ConformsWithMoreGeneric) -> @out τ_0_0
@@ -227,7 +227,7 @@
   mutating
   func addrOnly<G>(x: G) -> G { return x }
   // CHECK-LABEL: sil private [transparent] [thunk] @$s9witnesses23ConformsWithMoreGenericVAA1XA2aDP8addrOnly{{[_0-9a-zA-Z]*}}FTW : $@convention(witness_method: X) (@in_guaranteed AddrOnly, @inout ConformsWithMoreGeneric) -> @out AddrOnly {
-  // CHECK:       bb0(%0 : @trivial $*AddrOnly, %1 : @trivial $*AddrOnly, %2 : @trivial $*ConformsWithMoreGeneric):
+  // CHECK:       bb0(%0 : $*AddrOnly, %1 : $*AddrOnly, %2 : $*ConformsWithMoreGeneric):
   // CHECK-NEXT:    // function_ref
   // CHECK-NEXT:    %3 = function_ref @$s9witnesses23ConformsWithMoreGenericV8addrOnly{{[_0-9a-zA-Z]*}}F : $@convention(method) <τ_0_0> (@in_guaranteed τ_0_0, @inout ConformsWithMoreGeneric) -> @out τ_0_0
   // CHECK-NEXT:    %4 = apply %3<AddrOnly>(%0, %1, %2) : $@convention(method) <τ_0_0> (@in_guaranteed τ_0_0, @inout ConformsWithMoreGeneric) -> @out τ_0_0
@@ -238,7 +238,7 @@
   mutating
   func generic<H>(x: H) -> H { return x }
   // CHECK-LABEL: sil private [transparent] [thunk] @$s9witnesses23ConformsWithMoreGenericVAA1XA2aDP7generic{{[_0-9a-zA-Z]*}}FTW : $@convention(witness_method: X) <τ_0_0> (@in_guaranteed τ_0_0, @inout ConformsWithMoreGeneric) -> @out τ_0_0 {
-  // CHECK:       bb0(%0 : @trivial $*τ_0_0, %1 : @trivial $*τ_0_0, %2 : @trivial $*ConformsWithMoreGeneric):
+  // CHECK:       bb0(%0 : $*τ_0_0, %1 : $*τ_0_0, %2 : $*ConformsWithMoreGeneric):
   // CHECK-NEXT:    // function_ref
   // CHECK-NEXT:    %3 = function_ref @$s9witnesses23ConformsWithMoreGenericV7generic{{[_0-9a-zA-Z]*}}F : $@convention(method) <τ_0_0> (@in_guaranteed τ_0_0, @inout ConformsWithMoreGeneric) -> @out τ_0_0
   // CHECK-NEXT:    %4 = apply %3<τ_0_0>(%0, %1, %2) : $@convention(method) <τ_0_0> (@in_guaranteed τ_0_0, @inout ConformsWithMoreGeneric) -> @out τ_0_0
@@ -249,7 +249,7 @@
   mutating
   func classes<I>(x: I) -> I { return x }
   // CHECK-LABEL: sil private [transparent] [thunk] @$s9witnesses23ConformsWithMoreGenericVAA1XA2aDP7classes{{[_0-9a-zA-Z]*}}FTW : $@convention(witness_method: X) <τ_0_0 where τ_0_0 : Classes> (@guaranteed τ_0_0, @inout ConformsWithMoreGeneric) -> @owned τ_0_0 {
-  // CHECK:       bb0([[ARG0:%.*]] : @guaranteed $τ_0_0, [[ARG1:%.*]] : @trivial $*ConformsWithMoreGeneric):
+  // CHECK:       bb0([[ARG0:%.*]] : @guaranteed $τ_0_0, [[ARG1:%.*]] : $*ConformsWithMoreGeneric):
   // CHECK-NEXT:    [[SELF_BOX:%.*]] = alloc_stack $τ_0_0
   // CHECK-NEXT:    [[ARG0_COPY:%.*]] = copy_value [[ARG0]]
   // CHECK-NEXT:    store [[ARG0_COPY]] to [init] [[SELF_BOX]] : $*τ_0_0
@@ -266,7 +266,7 @@
 }
 func <~> <J: Y, K: Y>(_ x: J, y: K) -> K { return y }
 // CHECK-LABEL: sil private [transparent] [thunk] @$s9witnesses23ConformsWithMoreGenericVAA1XA2aDP3ltgoi{{[_0-9a-zA-Z]*}}FZTW : $@convention(witness_method: X) (@in_guaranteed ConformsWithMoreGeneric, @in_guaranteed ConformsWithMoreGeneric, @thick ConformsWithMoreGeneric.Type) -> @out ConformsWithMoreGeneric {
-// CHECK:       bb0(%0 : @trivial $*ConformsWithMoreGeneric, %1 : @trivial $*ConformsWithMoreGeneric, %2 : @trivial $*ConformsWithMoreGeneric, %3 : @trivial $@thick ConformsWithMoreGeneric.Type):
+// CHECK:       bb0(%0 : $*ConformsWithMoreGeneric, %1 : $*ConformsWithMoreGeneric, %2 : $*ConformsWithMoreGeneric, %3 : $@thick ConformsWithMoreGeneric.Type):
 // CHECK-NEXT:    // function_ref
 // CHECK-NEXT:    [[WITNESS_FN:%.*]] = function_ref @$s9witnesses3ltgoi{{[_0-9a-zA-Z]*}}F : $@convention(thin) <τ_0_0, τ_0_1 where τ_0_0 : Y, τ_0_1 : Y> (@in_guaranteed τ_0_0, @in_guaranteed τ_0_1) -> @out τ_0_1
 // CHECK-NEXT:    [[RESULT:%.*]] = apply [[WITNESS_FN]]<ConformsWithMoreGeneric, ConformsWithMoreGeneric>(%0, %1, %2) : $@convention(thin) <τ_0_0, τ_0_1 where τ_0_0 : Y, τ_0_1 : Y> (@in_guaranteed τ_0_0, @in_guaranteed τ_0_1) -> @out τ_0_1
@@ -345,7 +345,7 @@
   // CHECK-LABEL: sil private [transparent] [thunk] @$s9witnesses13FailableModelVAA0B11Requirement{{[_0-9a-zA-Z]*}}fCTW
 
   // CHECK-LABEL: sil private [transparent] [thunk] @$s9witnesses13FailableModelVAA22IUOFailableRequirement{{[_0-9a-zA-Z]*}}fCTW
-  // CHECK: bb0([[SELF:%[0-9]+]] : @trivial $*Optional<FailableModel>, [[FOO:%[0-9]+]] : @trivial $Int, [[META:%[0-9]+]] : @trivial $@thick FailableModel.Type):
+  // CHECK: bb0([[SELF:%[0-9]+]] : $*Optional<FailableModel>, [[FOO:%[0-9]+]] : $Int, [[META:%[0-9]+]] : $@thick FailableModel.Type):
   // CHECK: [[FN:%.*]] = function_ref @$s9witnesses13FailableModelV{{[_0-9a-zA-Z]*}}fC
   // CHECK: [[INNER:%.*]] = apply [[FN]](
   // CHECK: store [[INNER]] to [trivial] [[SELF]]
@@ -355,11 +355,11 @@
 
 struct IUOFailableModel : NonFailableRefinement, IUOFailableRequirement {
   // CHECK-LABEL: sil private [transparent] [thunk] @$s9witnesses16IUOFailableModelVAA21NonFailableRefinement{{[_0-9a-zA-Z]*}}fCTW
-  // CHECK: bb0([[SELF:%[0-9]+]] : @trivial $*IUOFailableModel, [[FOO:%[0-9]+]] : @trivial $Int, [[META:%[0-9]+]] : @trivial $@thick IUOFailableModel.Type):
+  // CHECK: bb0([[SELF:%[0-9]+]] : $*IUOFailableModel, [[FOO:%[0-9]+]] : $Int, [[META:%[0-9]+]] : $@thick IUOFailableModel.Type):
   // CHECK:   [[META:%[0-9]+]] = metatype $@thin IUOFailableModel.Type
   // CHECK:   [[INIT:%[0-9]+]] = function_ref @$s9witnesses16IUOFailableModelV{{[_0-9a-zA-Z]*}}fC : $@convention(method) (Int, @thin IUOFailableModel.Type) -> Optional<IUOFailableModel>
   // CHECK:   [[IUO_RESULT:%[0-9]+]] = apply [[INIT]]([[FOO]], [[META]]) : $@convention(method) (Int, @thin IUOFailableModel.Type) -> Optional<IUOFailableModel>
-  // CHECK: bb2([[RESULT:%.*]] : @trivial $IUOFailableModel):
+  // CHECK: bb2([[RESULT:%.*]] : $IUOFailableModel):
   // CHECK:   store [[RESULT]] to [trivial] [[SELF]] : $*IUOFailableModel
   // CHECK:   return
   init!(foo: Int) { return nil }
@@ -431,12 +431,12 @@
     GenericParameterNameCollisionProtocol {
 
   // CHECK-LABEL: sil private [transparent] [thunk] @$s9witnesses29GenericParameterNameCollisionVyxGAA0bcdE8ProtocolA2aEP3fooyyqd__lFTW : $@convention(witness_method: GenericParameterNameCollisionProtocol) <τ_0_0 where τ_0_0 : HasAssoc><τ_1_0> (@in_guaranteed τ_1_0, @in_guaranteed GenericParameterNameCollision<τ_0_0>) -> () {
-  // CHECK:       bb0(%0 : @trivial $*τ_1_0, %1 : @trivial $*GenericParameterNameCollision<τ_0_0>):
+  // CHECK:       bb0(%0 : $*τ_1_0, %1 : $*GenericParameterNameCollision<τ_0_0>):
   // CHECK:         apply {{%.*}}<τ_0_0, τ_1_0>
   func foo<U>(_ x: U) {}
 
   // CHECK-LABEL: sil private [transparent] [thunk] @$s9witnesses29GenericParameterNameCollisionVyxGAA0bcdE8ProtocolA2aEP3baryy6Assoc2Qzqd__XElFTW : $@convention(witness_method: GenericParameterNameCollisionProtocol) <τ_0_0 where τ_0_0 : HasAssoc><τ_1_0> (@noescape @callee_guaranteed (@in_guaranteed τ_1_0) -> @out τ_0_0.Assoc, @in_guaranteed GenericParameterNameCollision<τ_0_0>) -> () {
-  // CHECK:       bb0(%0 : @trivial $@noescape @callee_guaranteed (@in_guaranteed τ_1_0) -> @out τ_0_0.Assoc, %1 : @trivial $*GenericParameterNameCollision<τ_0_0>):
+  // CHECK:       bb0(%0 : $@noescape @callee_guaranteed (@in_guaranteed τ_1_0) -> @out τ_0_0.Assoc, %1 : $*GenericParameterNameCollision<τ_0_0>):
   // CHECK:         apply {{%.*}}<τ_0_0, τ_1_0>
   func bar<V>(_ x: (V) -> T.Assoc) {}
 }
@@ -460,7 +460,7 @@
   // If the witness is in a base class of the conforming class, make sure we have a bit_cast in there:
 
   // CHECK-LABEL: sil private [transparent] [thunk] @$s9witnesses34PropertyRequirementWitnessFromBaseCAA0bC0A2aDP5widthSivMTW : {{.*}} {
-  // CHECK: bb0([[ARG2:%.*]] : @trivial $*PropertyRequirementWitnessFromBase):
+  // CHECK: bb0([[ARG2:%.*]] : $*PropertyRequirementWitnessFromBase):
   // CHECK-NEXT: [[ARG2_LOADED:%[0-9][0-9]*]] = load_borrow [[ARG2]]
   // CHECK-NEXT: [[CAST_ARG2_LOADED:%[0-9][0-9]*]] = upcast [[ARG2_LOADED]] : $PropertyRequirementWitnessFromBase to $PropertyRequirementBase
   // CHECK-NEXT: [[METH:%.*]] = class_method [[CAST_ARG2_LOADED]] : $PropertyRequirementBase, #PropertyRequirementBase.width!modify.1
@@ -481,7 +481,7 @@
   // CHECK-NEXT: return [[TUPLE]]
 
   // CHECK-LABEL: sil private [transparent] [thunk] @$s9witnesses34PropertyRequirementWitnessFromBaseCAA0bC0A2aDP5depthSivMTW
-  // CHECK: bb0([[ARG2:%.*]] : @trivial $*PropertyRequirementWitnessFromBase):
+  // CHECK: bb0([[ARG2:%.*]] : $*PropertyRequirementWitnessFromBase):
   // CHECK: [[ARG2_LOADED:%[0-9][0-9]*]] = load_borrow [[ARG2]]
   // CHECK: [[METH:%.*]] = class_method [[ARG2_LOADED]] : $PropertyRequirementWitnessFromBase, #PropertyRequirementWitnessFromBase.depth!modify.1
   // CHECK-NEXT: ([[RES:%.*]], [[TOKEN:%.*]]) = begin_apply [[METH]]([[ARG2_LOADED]]) : $@yield_once @convention(method) (@guaranteed PropertyRequirementWitnessFromBase) -> @yields @inout Int
@@ -501,7 +501,7 @@
 }
 
 // CHECK-LABEL: sil private [transparent] [thunk] @$s9witnesses16GenericCrashableCyxGAA0C0A2aEP5crashyyFTW : $@convention(witness_method: Crashable) <τ_0_0> (@in_guaranteed GenericCrashable<τ_0_0>) -> ()
-// CHECK:       bb0(%0 : @trivial $*GenericCrashable<τ_0_0>):
+// CHECK:       bb0(%0 : $*GenericCrashable<τ_0_0>):
 // CHECK-NEXT: [[SELF:%.*]] = load_borrow %0 : $*GenericCrashable<τ_0_0>
 // CHECK-NEXT: [[BASE:%.*]] = upcast [[SELF]] : $GenericCrashable<τ_0_0> to $CrashableBase
 // CHECK-NEXT: [[FN:%.*]] = class_method [[BASE]] : $CrashableBase, #CrashableBase.crash!1 : (CrashableBase) -> () -> (), $@convention(method) (@guaranteed CrashableBase) -> ()
@@ -532,7 +532,7 @@
 }
 
 // CHECK-LABEL: sil private [transparent] [thunk] @$s9witnesses13InoutFunctionVAA0bC3ReqA2aDP06updateC01xy1TQzycz_tFTW
-// CHECK:      bb0(%0 : @trivial $*@callee_guaranteed () -> @out (), %1 : @trivial $*InoutFunction):
+// CHECK:      bb0(%0 : $*@callee_guaranteed () -> @out (), %1 : $*InoutFunction):
 // CHECK-NEXT:   [[TEMP:%.*]] = alloc_stack $@callee_guaranteed () -> ()
 //   Reabstract the contents of the inout argument into the temporary.
 // CHECK-NEXT:   [[OLD_FN:%.*]] = load [take] %0
diff --git a/test/SILOptimizer/access_enforcement_selection.sil b/test/SILOptimizer/access_enforcement_selection.sil
index 306a724..5302140 100644
--- a/test/SILOptimizer/access_enforcement_selection.sil
+++ b/test/SILOptimizer/access_enforcement_selection.sil
@@ -7,7 +7,7 @@
 
 // Test undef begin_access operands.
 // CHECK-LABEL: sil hidden @undefStack : $@convention(thin) (Builtin.Int64) -> Builtin.Int64 {
-// CHECK: bb0(%0 : @trivial $Builtin.Int64):
+// CHECK: bb0(%0 : $Builtin.Int64):
 // CHECK: bb1:
 // CHECK: [[WRITE:%.*]] = begin_access [modify] [static] undef : $*Builtin.Int64
 // CHECK: store %{{.*}} to [trivial] [[WRITE]] : $*Builtin.Int64
@@ -19,7 +19,7 @@
 // CHECK: end_access [[READ]] : $*Builtin.Int64
 // CHECK-LABEL: } // end sil function 'undefStack'
 sil hidden @undefStack : $@convention(thin) (Builtin.Int64) -> Builtin.Int64 {
-bb0(%0 : @trivial $Builtin.Int64):
+bb0(%0 : $Builtin.Int64):
   br bb1
 
 bb1:
@@ -190,7 +190,7 @@
 // CHECK: begin_access [read] [static]
 // CHECK-LABEL: } // end sil function 'borrowedClosure'
 sil @borrowedClosure : $@convention(thin) (@inout_aliasable Builtin.Int64) -> () {
-bb0(%0 : @trivial $*Builtin.Int64):
+bb0(%0 : $*Builtin.Int64):
   %access = begin_access [read] [unknown] %0 : $*Builtin.Int64
   %val = load [trivial] %access : $*Builtin.Int64
   end_access %access : $*Builtin.Int64
@@ -222,7 +222,7 @@
 }
 
 sil @dontAssert : $@convention(thin) (Builtin.Int64) -> (@out Builtin.Int64) {
-bb0(%0 : @trivial $*Builtin.Int64, %1 : @trivial $Builtin.Int64):
+bb0(%0 : $*Builtin.Int64, %1 : $Builtin.Int64):
   store %1 to [trivial] %0 : $*Builtin.Int64
   %f = function_ref @closureCapturingByStorageAddress : $@convention(thin) (@inout_aliasable Builtin.Int64) -> ()
   %closure = partial_apply %f(%0) : $@convention(thin) (@inout_aliasable Builtin.Int64) -> ()
@@ -230,7 +230,7 @@
 }
 
 sil [canonical] @serializedClosureCapturingByStorageAddress : $@convention(thin) (@inout_aliasable Builtin.Int64) -> () {
-bb0(%0 : @trivial $*Builtin.Int64):
+bb0(%0 : $*Builtin.Int64):
   %2 = begin_access [read] [unknown] %0 : $*Builtin.Int64
   %3 = load [trivial] %2 : $*Builtin.Int64
   end_access %2 : $*Builtin.Int64
@@ -279,7 +279,7 @@
 // CHECK-LABEL: sil @testDirectApplyNoescapeDynamic : $@convention(thin) (Builtin.Int64) -> () {
 // CHECK-LABEL:  // end sil function 'testDirectApplyNoescapeDynamic'
 sil @testDirectApplyNoescapeDynamic : $@convention(thin) (Builtin.Int64) -> () {
-bb0(%0 : @trivial $Builtin.Int64):
+bb0(%0 : $Builtin.Int64):
   %box = alloc_box ${ var Builtin.Int64 }, var, name "localVal"
   %boxproj = project_box %box : ${ var Builtin.Int64 }, 0
 
@@ -317,7 +317,7 @@
 // CHECK: begin_access [modify] [dynamic] %1 : $*Builtin.Int64
 // CHECK-LABEL: end sil function 'directApplyNoescapeDynamicAppliedClosure'
 sil private @directApplyNoescapeDynamicAppliedClosure : $@convention(thin) (@guaranteed @callee_guaranteed () -> (), @inout_aliasable Builtin.Int64) -> () {
-bb0(%0 : @guaranteed $@callee_guaranteed () -> (), %1 : @trivial $*Builtin.Int64):
+bb0(%0 : @guaranteed $@callee_guaranteed () -> (), %1 : $*Builtin.Int64):
   %4 = begin_access [modify] [unknown] %1 : $*Builtin.Int64
 
   %5 = function_ref @takesInoutAndClosure : $@convention(thin) (@inout Builtin.Int64, @guaranteed @callee_guaranteed () -> ()) -> ()
diff --git a/test/SILOptimizer/access_marker_verify.swift b/test/SILOptimizer/access_marker_verify.swift
index 57465e1..99992ee 100644
--- a/test/SILOptimizer/access_marker_verify.swift
+++ b/test/SILOptimizer/access_marker_verify.swift
@@ -51,7 +51,7 @@
 }
 // The verifier ignores the load of the self box.
 // CHECK-LABEL: sil hidden @$s20access_marker_verify11StructOfIntVACycfC : $@convention(method) (@thin StructOfInt.Type) -> StructOfInt {
-// CHECK: bb0(%0 : @trivial $@thin StructOfInt.Type):
+// CHECK: bb0(%0 : $@thin StructOfInt.Type):
 // CHECK:   [[BOX:%.*]] = alloc_box ${ var StructOfInt }, var, name "self"
 // CHECK:   [[UNINIT:%.*]] = mark_uninitialized [rootself] [[BOX]] : ${ var StructOfInt }
 // CHECK:   [[PROJ:%.*]] = project_box [[UNINIT]] : ${ var StructOfInt }, 0
@@ -130,7 +130,7 @@
 // CHECK-LABEL: } // end sil function '$s20access_marker_verify9SubHasIntCACycfc'
 
 // CHECK-LABEL: sil hidden @$s20access_marker_verify9SubHasIntC1xACSi_tcfc : $@convention(method) (Int, @owned SubHasInt) -> @owned SubHasInt {
-// CHECK: bb0(%0 : @trivial $Int, %1 : @owned $SubHasInt):
+// CHECK: bb0(%0 : $Int, %1 : @owned $SubHasInt):
 // CHECK:   [[BOX:%.*]] = alloc_box ${ var SubHasInt }, let, name "self"
 // CHECK:   [[UNINIT:%.*]] = mark_uninitialized [derivedself] [[BOX]] : ${ var SubHasInt }
 // CHECK:   [[PROJ:%.*]] = project_box [[UNINIT]] : ${ var SubHasInt }, 0
@@ -187,7 +187,7 @@
   }
 }
 // CHECK-LABEL: sil hidden @$s20access_marker_verify10SubWrapperCyAcA03IntE0Vcfc : $@convention(method) (IntWrapper, @owned SubWrapper) -> @owned SubWrapper {
-// CHECK: bb0(%0 : @trivial $IntWrapper, %1 : @owned $SubWrapper):
+// CHECK: bb0(%0 : $IntWrapper, %1 : @owned $SubWrapper):
 // CHECK:   alloc_box ${ var SubWrapper }, let, name "self"
 // CHECK:   mark_uninitialized [derivedself]
 // CHECK:   project_box
@@ -238,7 +238,7 @@
   return lhs
 }
 // CHECK-LABEL: sil hidden @$s20access_marker_verify11testModifySyAA11StructOfIntVADF : $@convention(thin) (StructOfInt) -> StructOfInt {
-// CHECK: bb0(%0 : @trivial $StructOfInt):
+// CHECK: bb0(%0 : $StructOfInt):
 // CHECK:   alloc_box ${ var StructOfInt }, var, name "lhs"
 // CHECK:   mark_uninitialized [var]
 // CHECK:   project_box
@@ -263,7 +263,7 @@
   return x
 }
 // CHECK-LABEL: sil hidden @$s20access_marker_verify14testInitLValue1pSiAA12HasIntGetter_p_tF : $@convention(thin) (@in_guaranteed HasIntGetter) -> Int {
-// CHECK: bb0(%0 : @trivial $*HasIntGetter):
+// CHECK: bb0(%0 : $*HasIntGetter):
 // CHECK:   alloc_box ${ var Int }, var, name "x"
 // CHECK:   [[PROJ:%.*]] = project_box
 // CHECK:   [[OPENED:%.*]] = open_existential_addr immutable_access %0
@@ -289,7 +289,7 @@
   return lhs
 }
 // CHECK-LABEL: sil hidden @$s20access_marker_verify9testCopySyAA11StructOfIntVADF : $@convention(thin) (StructOfInt) -> StructOfInt {
-// CHECK: bb0(%0 : @trivial $StructOfInt):
+// CHECK: bb0(%0 : $StructOfInt):
 // CHECK:   alloc_stack $StructOfInt, let, name "lhs"
 // CHECK:   [[UNINIT:%.*]] = mark_uninitialized [var]
 // CHECK-NOT: begin_access
@@ -304,7 +304,7 @@
   return lhs.i
 }
 // CHECK-LABEL: sil hidden @$s20access_marker_verify16testLocalVarInitySiAA11StructOfIntVF : $@convention(thin) (StructOfInt) -> Int {
-// CHECK: bb0(%0 : @trivial $StructOfInt):
+// CHECK: bb0(%0 : $StructOfInt):
 // CHECK:   alloc_box ${ var StructOfInt }, var, name "lhs"
 // CHECK:   [[BOX:%.*]] = project_box
 // CHECK:   [[ACCESS:%.*]] = begin_access [modify] [unsafe] [[BOX]]
@@ -325,7 +325,7 @@
   return GenericEnum(t: t)
 }
 // CHECK-LABEL: sil hidden @$s20access_marker_verify11GenericEnumO1tACyxGSgx_tcfC : $@convention(method) <T> (@in T, @thin GenericEnum<T>.Type) -> @out Optional<GenericEnum<T>> {
-// CHECK: bb0(%0 : @trivial $*Optional<GenericEnum<T>>, %1 : @trivial $*T, %2 : @trivial $@thin GenericEnum<T>.Type):
+// CHECK: bb0(%0 : $*Optional<GenericEnum<T>>, %1 : $*T, %2 : $@thin GenericEnum<T>.Type):
 // CHECK:   alloc_box $<τ_0_0> { var GenericEnum<τ_0_0> } <T>, var, name "self"
 // CHECK:   mark_uninitialized [delegatingself] %3 : $<τ_0_0> { var GenericEnum<τ_0_0> } <T>
 // CHECK:   [[PROJ:%.*]] = project_box
@@ -426,7 +426,7 @@
 func enumLValueHelper(_: inout E, _: inout E) {}
 
 // CHECK-LABEL: sil hidden @$s20access_marker_verify14testEnumLValue1syAA08StructOfE0Vz_tF : $@convention(thin) (@inout StructOfEnum) -> () {
-// CHECK: bb0(%0 : @trivial $*StructOfEnum):
+// CHECK: bb0(%0 : $*StructOfEnum):
 // CHECK:   begin_access [modify] [unknown] %0 : $*StructOfEnum
 // CHECK:   struct_element_addr %2 : $*StructOfEnum, #StructOfEnum.e
 // CHECK:   begin_access [modify] [unknown] %0 : $*StructOfEnum
@@ -532,7 +532,7 @@
   }
 }
 // CHECK-LABEL: sil hidden @$s20access_marker_verify15OptionalWithMapO3mapyqd__Sgqd__xKXEKlF : $@convention(method) <Wrapped><U> (@noescape @callee_guaranteed (@in_guaranteed Wrapped) -> (@out U, @error Error), @in_guaranteed OptionalWithMap<Wrapped>) -> (@out Optional<U>, @error Error) {
-// CHECK: bb0(%0 : @trivial $*Optional<U>, %1 : @trivial $@noescape @callee_guaranteed (@in_guaranteed Wrapped) -> (@out U, @error Error), %2 : @trivial $*OptionalWithMap<Wrapped>):
+// CHECK: bb0(%0 : $*Optional<U>, %1 : $@noescape @callee_guaranteed (@in_guaranteed Wrapped) -> (@out U, @error Error), %2 : $*OptionalWithMap<Wrapped>):
 // CHECK: [[STK:%.]] = alloc_stack $OptionalWithMap<Wrapped>
 // CHECK-NOT: begin_access
 // CHECK: copy_addr %2 to [initialization] [[STK]] : $*OptionalWithMap<Wrapped>
@@ -559,7 +559,7 @@
   }
 }
 // CHECK-LABEL: sil hidden @$s20access_marker_verify14DelegatingInitV1iACSi_tcfC : $@convention(method) (Int, @thin DelegatingInit.Type) -> DelegatingInit {
-// CHECK: bb0(%0 : @trivial $Int, %1 : @trivial $@thin DelegatingInit.Type):
+// CHECK: bb0(%0 : $Int, %1 : $@thin DelegatingInit.Type):
 // CHECK:   alloc_box ${ var DelegatingInit }, var, name "self"
 // CHECK:   mark_uninitialized [rootself] %2 : ${ var DelegatingInit }
 // CHECK:   [[BOX:%.*]] = project_box
@@ -578,7 +578,7 @@
   return p.pointee
 }
 // CHECK-LABEL: sil hidden @$s20access_marker_verify13testAddressor1pSiSPySiG_tF : $@convention(thin) (UnsafePointer<Int>) -> Int {
-// CHECK: bb0(%0 : @trivial $UnsafePointer<Int>):
+// CHECK: bb0(%0 : $UnsafePointer<Int>):
 // CHECK:   apply
 // CHECK:   struct_extract
 // CHECK:   [[ADR:%.*]] = pointer_to_address
@@ -640,7 +640,7 @@
   }
 }
 // CHECK-LABEL: sil hidden @$s20access_marker_verify23GenericStructWithGetterV5valueAC5ValueVyx_Gvg : $@convention(method) <T> (@in_guaranteed GenericStructWithGetter<T>) -> GenericStructWithGetter<T>.Value {
-// CHECK: bb0(%0 : @trivial $*GenericStructWithGetter<T>):
+// CHECK: bb0(%0 : $*GenericStructWithGetter<T>):
 // CHECK:   [[ADR:%.*]] = struct_element_addr %0 : $*GenericStructWithGetter<T>, #GenericStructWithGetter.val
 // CHECK-NOT: begin_access
 // CHECK:   load [trivial] [[ADR]] : $*Int
@@ -665,7 +665,7 @@
   }
 }
 // CHECK-LABEL: sil hidden @$s20access_marker_verify16StructWithSetterV3inc0G3ValySi_tF : $@convention(method) (Int, @inout StructWithSetter) -> () {
-// CHECK: bb0(%0 : @trivial $Int, %1 : @trivial $*StructWithSetter):
+// CHECK: bb0(%0 : $Int, %1 : $*StructWithSetter):
 // CHECK: [[FORMALACCESS:%.*]] = begin_access [modify] [unknown] %1
 // CHECK: alloc_stack $Int
 // CHECK: load [trivial] [[FORMALACCESS]] : $*StructWithSetter
@@ -695,7 +695,7 @@
   increment(&l.cat)
 }
 // CHECK-LABEL: sil hidden @$s20access_marker_verify34inoutWriteOfLazyFinalClassProperty1lyAA0ghiJ0Cz_tF : $@convention(thin) (@inout LazyFinalClassProperty) -> () {
-// CHECK: bb0(%0 : @trivial $*LazyFinalClassProperty):
+// CHECK: bb0(%0 : $*LazyFinalClassProperty):
 // CHECK:   [[FORMALACCESS:%.*]] = begin_access [read] [unknown] %0 : $*LazyFinalClassProperty
 // CHECK:   load [copy] [[FORMALACCESS]] : $*LazyFinalClassProperty
 // CHECK:   end_access [[FORMALACCESS]] : $*LazyFinalClassProperty
@@ -721,7 +721,7 @@
   return l.cat
 }
 // CHECK-LABEL: sil hidden @$s20access_marker_verify35inoutAccessOfLazyFinalClassProperty1lSiAA0ghiJ0Cz_tF : $@convention(thin) (@inout LazyFinalClassProperty) -> Int {
-// CHECK: bb0(%0 : @trivial $*LazyFinalClassProperty):
+// CHECK: bb0(%0 : $*LazyFinalClassProperty):
 // CHECK:   begin_access [read] [unknown] %0
 // CHECK:   load [copy]
 // CHECK:   end_access
@@ -739,7 +739,7 @@
   var storedFunction: () -> Int = { 0 }
 }
 // CHECK-LABEL: sil private [transparent] [thunk] @$s20access_marker_verify1CCAA12AbstractableA2aDP14storedFunction6ResultQzycvMTW : $@yield_once @convention(witness_method: Abstractable) (@inout C) -> @yields @inout @callee_guaranteed () -> @out Int
-// CHECK:      bb0(%0 : @trivial $*C):
+// CHECK:      bb0(%0 : $*C):
 // CHECK-NEXT:   [[SELF:%.*]] = load_borrow %0 : $*C
 // CHECK-NEXT:   [[MODIFY:%.*]] = class_method [[SELF]] : $C, #C.storedFunction!modify.1
 // CHECK-NEXT:   ([[ADDR:%.*]], [[TOKEN:%.*]]) = begin_apply [[MODIFY]]([[SELF]])
@@ -833,7 +833,7 @@
   return (p.c, p.c)
 }
 // CHECK-LABEL: sil hidden @$s20access_marker_verify14testMixedTuple1pAA9BaseClassC_yptAA03HasH6Getter_p_tF : $@convention(thin) (@in_guaranteed HasClassGetter) -> (@owned BaseClass, @out Any) {
-// CHECK: bb0(%0 : @trivial $*Any, %1 : @trivial $*HasClassGetter):
+// CHECK: bb0(%0 : $*Any, %1 : $*HasClassGetter):
 // CHECK: [[P1:%.*]] = open_existential_addr immutable_access %1 : $*HasClassGetter to $*@opened
 // CHECK: [[TEMP1:%.*]] = alloc_stack $@opened
 // CHECK-NOT: begin_access
@@ -864,7 +864,7 @@
   }
 }
 // CHECK-LABEL: sil hidden @$s20access_marker_verify13CanCastStructV5unboxqd__SgySHRd__lF : $@convention(method) <Base where Base : Hashable><T where T : Hashable> (@in_guaranteed CanCastStruct<Base>) -> @out Optional<T> {
-// CHECK: bb0(%0 : @trivial $*Optional<T>, %1 : @trivial $*CanCastStruct<Base>):
+// CHECK: bb0(%0 : $*Optional<T>, %1 : $*CanCastStruct<Base>):
 // CHECK: [[OUT_ENUM:%.*3]] = init_enum_data_addr %0 : $*Optional<T>, #Optional.some!enumelt.1
 // CHECK: [[TEMP_SUB:%.*]] = alloc_stack $Optional<CanCastStruct<T>>
 // CHECK: [[TEMP_BASE:%.*]] = alloc_stack $CanCast
@@ -896,7 +896,7 @@
   }
 }
 // CHECK-LABEL: sil hidden @$s20access_marker_verify19testOpenExistential1pyAA4PBar_p_tF : $@convention(thin) (@in_guaranteed PBar) -> () {
-// CHECK: bb0(%0 : @trivial $*PBar):
+// CHECK: bb0(%0 : $*PBar):
 // CHECK: [[Q0:%.*]] = alloc_stack $Optional<Q>, let, name "q0"
 // CHECK: [[PBAR:%.*]] = alloc_stack $PBar
 // CHECK-NOT: begin_access
@@ -964,7 +964,7 @@
   }
 }
 // CHECK-LABEL: sil hidden @$s20access_marker_verify8UsesSelfPAAE04testE01a1byx_xtFZ : $@convention(method) <Self where Self : UsesSelf> (@in_guaranteed Self, @in_guaranteed Self, @thick Self.Type) -> () {
-// CHECK: bb0(%0 : @trivial $*Self, %1 : @trivial $*Self, %2 : @trivial $@thick Self.Type):
+// CHECK: bb0(%0 : $*Self, %1 : $*Self, %2 : $@thick Self.Type):
 // CHECK: apply %{{.*}}<Self>(%1, %0) : $@convention(witness_method: UsesSelf) <τ_0_0 where τ_0_0 : UsesSelf> (@in_guaranteed τ_0_0, @in_guaranteed τ_0_0) -> ()
 // CHECK-LABEL: } // end sil function '$s20access_marker_verify8UsesSelfPAAE04testE01a1byx_xtFZ'
 
@@ -975,7 +975,7 @@
   }
 }
 // CHECK-LABEL: sil hidden @$s20access_marker_verify16StructWithLayoutVACycfC : $@convention(method) (@thin StructWithLayout.Type) -> StructWithLayout {
-// CHECK: bb0(%0 : @trivial $@thin StructWithLayout.Type):
+// CHECK: bb0(%0 : $@thin StructWithLayout.Type):
 // CHECK: alloc_box ${ var StructWithLayout }, var, name "self"
 // CHECK: mark_uninitialized [rootself] %{{.*}} : ${ var StructWithLayout }
 // CHECK: [[PROJ:%.*]] = project_box %{{.*}} : ${ var StructWithLayout }, 0
@@ -997,7 +997,7 @@
   y.pointee = x
 }
 // CHECK-LABEL: sil hidden @$s20access_marker_verify15testPointerInit1x1yySi_SpySiGtF : $@convention(thin) (Int, UnsafeMutablePointer<Int>) -> () {
-// CHECK: bb0(%0 : @trivial $Int, %1 : @trivial $UnsafeMutablePointer<Int>):
+// CHECK: bb0(%0 : $Int, %1 : $UnsafeMutablePointer<Int>):
 // call addressor
 // CHECK: [[POINTEE:%.*]] = apply %{{.*}}<Int>(%1) : $@convention(method) <τ_0_0> (UnsafeMutablePointer<τ_0_0>) -> UnsafeMutablePointer<τ_0_0>
 // CHECK: [[RAWPTR:%.*]] = struct_extract [[POINTEE]] : $UnsafeMutablePointer<Int>, #UnsafeMutablePointer._rawValue
diff --git a/test/SILOptimizer/access_marker_verify_objc.swift b/test/SILOptimizer/access_marker_verify_objc.swift
index ce26d33..a8f855a 100644
--- a/test/SILOptimizer/access_marker_verify_objc.swift
+++ b/test/SILOptimizer/access_marker_verify_objc.swift
@@ -48,7 +48,7 @@
 
 // thunk for @callee_unowned @convention(block) (@unowned Int) -> (@unowned Int)
 // CHECK-LABEL: sil shared [transparent] [serializable] [reabstraction_thunk] @$sS2iIyByd_S2iIegyd_TR : $@convention(thin) (Int, @guaranteed @convention(block) @noescape (Int) -> Int) -> Int {
-// CHECK: bb0(%0 : @trivial $Int, %1 : @guaranteed $@convention(block) @noescape (Int) -> Int):
+// CHECK: bb0(%0 : $Int, %1 : @guaranteed $@convention(block) @noescape (Int) -> Int):
 // CHECK:   %{{.*}} = apply %1(%0) : $@convention(block) @noescape (Int) -> Int
 // CHECK:  return %{{.*}} : $Int                               
 // CHECK-LABEL: } // end sil function '$sS2iIyByd_S2iIegyd_TR'
@@ -56,7 +56,7 @@
 // --- C global.
 // The verifier should ignore this access.
 // CHECK-LABEL: sil hidden @$s25access_marker_verify_objc14GlobalPropertyC14globalCFStringSo0H3RefavgZ : $@convention(method) (@thick GlobalProperty.Type) -> @owned CFString {
-// CHECK: bb0(%0 : @trivial $@thick GlobalProperty.Type):
+// CHECK: bb0(%0 : $@thick GlobalProperty.Type):
 // CHECK:   [[GA:%.*]] = global_addr @constCGlobal : $*Optional<CFString>
 // CHECK:   [[STR:%.*]] = load [copy] [[GA]] : $*Optional<CFString>            
 // CHECK: switch_enum [[STR]] : $Optional<CFString>, case #Optional.some!enumelt.1: [[SOMEBB:bb.*]], case #Optional.none!enumelt: bb{{.*}}
diff --git a/test/SILOptimizer/access_summary_analysis.sil b/test/SILOptimizer/access_summary_analysis.sil
index 8eb1a35..f057fb0 100644
--- a/test/SILOptimizer/access_summary_analysis.sil
+++ b/test/SILOptimizer/access_summary_analysis.sil
@@ -19,7 +19,7 @@
 // CHECK-LABEL: @assignsToCapture
 // CHECK-NEXT: ([modify], [])
 sil private @assignsToCapture : $@convention(thin) (@inout_aliasable Int, Int) -> () {
-bb0(%0 : @trivial $*Int, %1: @trivial $Int):
+bb0(%0 : $*Int, %1: $Int):
   %2 = begin_access [modify] [unknown] %0 : $*Int
   assign %1 to %2 : $*Int
   end_access %2 : $*Int
@@ -30,7 +30,7 @@
 // CHECK-LABEL: @readsAndModifiesSameCapture
 // CHECK-NEXT: ([modify])
 sil private @readsAndModifiesSameCapture : $@convention(thin) (@inout_aliasable Int) -> () {
-bb0(%0 : @trivial $*Int):
+bb0(%0 : $*Int):
   %1 = begin_access [read] [unknown] %0 : $*Int
   end_access %1 : $*Int
   %2 = begin_access [modify] [unknown] %0 : $*Int
@@ -42,7 +42,7 @@
 // CHECK-LABEL: @readsAndModifiesSeparateCaptures
 // CHECK-NEXT: ([read], [modify])
 sil private @readsAndModifiesSeparateCaptures : $@convention(thin) (@inout_aliasable Int, @inout_aliasable Int) -> () {
-bb0(%0 : @trivial $*Int, %1 : @trivial $*Int):
+bb0(%0 : $*Int, %1 : $*Int):
   %2 = begin_access [read] [unknown] %0 : $*Int
   end_access %2 : $*Int
   %3 = begin_access [modify] [unknown] %1 : $*Int
@@ -54,7 +54,7 @@
 // CHECK-LABEL: @modifyInModifySubAccess
 // CHECK-NEXT: ([modify])
 sil private @modifyInModifySubAccess : $@convention(thin) (@inout_aliasable Int) -> () {
-bb0(%0 : @trivial $*Int):
+bb0(%0 : $*Int):
   %1 = begin_access [modify] [unknown] %0 : $*Int
   %2 = begin_access [modify] [unknown] %1 : $*Int
   end_access %2 : $*Int
@@ -66,7 +66,7 @@
 // CHECK-LABEL: @readInModifySubAccess
 // CHECK-NEXT: ([modify])
 sil private @readInModifySubAccess : $@convention(thin) (@inout_aliasable Int) -> () {
-bb0(%0 : @trivial $*Int):
+bb0(%0 : $*Int):
   %1 = begin_access [modify] [unknown] %0 : $*Int
   %2 = begin_access [read] [unknown] %1 : $*Int
   end_access %2 : $*Int
@@ -78,7 +78,7 @@
 // CHECK-LABEL: @accessSeparateStoredPropertiesOfSameCapture
 // CHECK-NEXT: ([.f modify, .g read])
 sil private @accessSeparateStoredPropertiesOfSameCapture : $@convention(thin) (@inout_aliasable StructWithStoredProperties) -> () {
-bb0(%0 : @trivial $*StructWithStoredProperties):
+bb0(%0 : $*StructWithStoredProperties):
   %1 = begin_access [modify] [unknown] %0: $*StructWithStoredProperties
   %2 = struct_element_addr %1 : $*StructWithStoredProperties, #StructWithStoredProperties.f
   end_access %1 : $*StructWithStoredProperties
@@ -92,7 +92,7 @@
 // CHECK-LABEL: @accessSeparateElementsOfSameCapture
 // CHECK-NEXT: ([.0 modify, .1 read])
 sil private @accessSeparateElementsOfSameCapture : $@convention(thin) (@inout_aliasable (Int, Int)) -> () {
-bb0(%0 : @trivial $*(Int, Int)):
+bb0(%0 : $*(Int, Int)):
   %1 = begin_access [modify] [unknown] %0: $*(Int, Int)
   %2 = tuple_element_addr %1 : $*(Int, Int), 0
   end_access %1 : $*(Int, Int)
@@ -106,7 +106,7 @@
 // CHECK-LABEL: @accessSeparateNestedStoredPropertiesOfSameCapture
 // CHECK-NEXT: ([.a.f modify, .b.g modify])
 sil private @accessSeparateNestedStoredPropertiesOfSameCapture : $@convention(thin) (@inout_aliasable StructWithStructWithStoredProperties) -> () {
-bb0(%0 : @trivial $*StructWithStructWithStoredProperties):
+bb0(%0 : $*StructWithStructWithStoredProperties):
   %1 = begin_access [modify] [unknown] %0: $*StructWithStructWithStoredProperties
   %2 = struct_element_addr %1 : $*StructWithStructWithStoredProperties, #StructWithStructWithStoredProperties.a
   %3 = struct_element_addr %2 : $*StructWithStoredProperties, #StructWithStoredProperties.f
@@ -123,7 +123,7 @@
 // CHECK-LABEL: @accessSeparateStoredPropertiesOfSameCaptureOppositeOfDeclarationOrder
 // CHECK-NEXT: ([.f read, .g modify])
 sil private @accessSeparateStoredPropertiesOfSameCaptureOppositeOfDeclarationOrder : $@convention(thin) (@inout_aliasable StructWithStoredProperties) -> () {
-bb0(%0 : @trivial $*StructWithStoredProperties):
+bb0(%0 : $*StructWithStoredProperties):
   %1 = begin_access [modify] [unknown] %0: $*StructWithStoredProperties
   %2 = struct_element_addr %1 : $*StructWithStoredProperties, #StructWithStoredProperties.g
   end_access %1 : $*StructWithStoredProperties
@@ -137,7 +137,7 @@
 // CHECK-LABEL: @accessAggregateDoesNotSubsumeAccessStoredProp
 // CHECK-NEXT: ([modify, .g modify])
 sil private @accessAggregateDoesNotSubsumeAccessStoredProp : $@convention(thin) (@inout_aliasable StructWithStoredProperties) -> () {
-bb0(%0 : @trivial $*StructWithStoredProperties):
+bb0(%0 : $*StructWithStoredProperties):
   %1 = begin_access [modify] [unknown] %0: $*StructWithStoredProperties
   end_access %1 : $*StructWithStoredProperties
   %4 = begin_access [modify] [unknown] %0: $*StructWithStoredProperties
@@ -150,7 +150,7 @@
 // CHECK-LABEL: @accessAggregateDoesNotSubsumeAccessStoredPropWithAggregateSecond
 // CHECK-NEXT: ([modify, .f modify])
 sil private @accessAggregateDoesNotSubsumeAccessStoredPropWithAggregateSecond : $@convention(thin) (@inout_aliasable StructWithStoredProperties) -> () {
-bb0(%0 : @trivial $*StructWithStoredProperties):
+bb0(%0 : $*StructWithStoredProperties):
   %1 = begin_access [modify] [unknown] %0: $*StructWithStoredProperties
   %2 = struct_element_addr %1 : $*StructWithStoredProperties, #StructWithStoredProperties.f
   end_access %1 : $*StructWithStoredProperties
@@ -163,7 +163,7 @@
 // CHECK-LABEL: @accessSameStoredPropertyOfSameCapture
 // CHECK-NEXT: ([.f modify])
 sil private @accessSameStoredPropertyOfSameCapture : $@convention(thin) (@inout_aliasable StructWithStoredProperties) -> () {
-bb0(%0 : @trivial $*StructWithStoredProperties):
+bb0(%0 : $*StructWithStoredProperties):
   %1 = begin_access [read] [unknown] %0: $*StructWithStoredProperties
   %2 = struct_element_addr %1 : $*StructWithStoredProperties, #StructWithStoredProperties.f
   end_access %1 : $*StructWithStoredProperties
@@ -177,7 +177,7 @@
 // CHECK-LABEL: @accessSeparateStoredPropertiesOfSameCaptureWithTSanInstrumentation
 // CHECK-NEXT: ([.f modify, .g read])
 sil private @accessSeparateStoredPropertiesOfSameCaptureWithTSanInstrumentation : $@convention(thin) (@inout_aliasable StructWithStoredProperties) -> () {
-bb0(%0 : @trivial $*StructWithStoredProperties):
+bb0(%0 : $*StructWithStoredProperties):
   %1 = begin_access [modify] [unknown] %0: $*StructWithStoredProperties
   %2 = builtin "tsanInoutAccess"(%1 : $*StructWithStoredProperties) : $()
   %3 = struct_element_addr %1 : $*StructWithStoredProperties, #StructWithStoredProperties.f
@@ -197,7 +197,7 @@
 // This mirrors the code pattern for materializeForSet on a struct stored
 // property
 sil private @addressToPointerOfStructElementAddr : $@convention(method) (@inout StructWithStoredProperties) -> (Builtin.RawPointer) {
-bb0(%1 : @trivial $*StructWithStoredProperties):
+bb0(%1 : $*StructWithStoredProperties):
   %2 = struct_element_addr %1 : $*StructWithStoredProperties, #StructWithStoredProperties.f
   %3 = address_to_pointer %2 : $*Int to $Builtin.RawPointer
   return %3 : $(Builtin.RawPointer)
@@ -206,7 +206,7 @@
 // CHECK-LABEL: @endUnpairedAccess
 // CHECK-NEXT: ([])
 sil private @endUnpairedAccess : $@convention(method) (@inout Builtin.UnsafeValueBuffer) -> () {
-bb0(%0 : @trivial $*Builtin.UnsafeValueBuffer):
+bb0(%0 : $*Builtin.UnsafeValueBuffer):
   end_unpaired_access [dynamic] %0 : $*Builtin.UnsafeValueBuffer
   %1 = tuple ()
   return %1 : $()
@@ -215,7 +215,7 @@
 // CHECK-LABEL: @tupleElementAddr
 // CHECK-NEXT: ([modify])
 sil private @tupleElementAddr : $@convention(thin) (@inout_aliasable (Int, Int)) -> () {
-bb0(%0 : @trivial $*(Int, Int)):
+bb0(%0 : $*(Int, Int)):
   %1 = tuple_element_addr %0 : $*(Int, Int), 1
   %2 = begin_access [modify] [unknown] %1 : $*Int
   end_access %2 : $*Int
@@ -228,7 +228,7 @@
 // CHECK-LABEL: @callClosureWithMissingBody
 // CHECK-NEXT: ([], [])
 sil private @callClosureWithMissingBody : $@convention(thin) (@inout_aliasable Int, Int) -> () {
-bb0(%0 : @trivial $*Int, %1 : @trivial $Int):
+bb0(%0 : $*Int, %1 : $Int):
   %2 = function_ref @closureWithMissingBody : $@convention(thin) (@inout_aliasable Int, Int) -> ()
   %3 = apply %2(%0, %1) : $@convention(thin) (@inout_aliasable Int, Int) -> () // no-crash
   %4 = tuple ()
@@ -238,7 +238,7 @@
 // CHECK-LABEL: @callClosureThatModifiesCapture
 // CHECK-NEXT: ([modify], [])
 sil private @callClosureThatModifiesCapture : $@convention(thin) (@inout_aliasable Int, Int) -> () {
-bb0(%0 : @trivial $*Int, %1 : @trivial $Int):
+bb0(%0 : $*Int, %1 : $Int):
   %2 = function_ref @assignsToCapture : $@convention(thin) (@inout_aliasable Int, Int) -> ()
   %3 = apply %2(%0, %1) : $@convention(thin) (@inout_aliasable Int, Int) -> ()
   %4 = tuple ()
@@ -248,7 +248,7 @@
 // CHECK-LABEL: @throwingClosureThatModifesCapture
 // CHECK-NEXT: ([modify])
 sil private @throwingClosureThatModifesCapture : $@convention(thin) (@inout_aliasable Int) -> @error Error {
-bb0(%0 : @trivial $*Int):
+bb0(%0 : $*Int):
   %1 = begin_access [modify] [unknown] %0 : $*Int
   end_access %1 : $*Int
   %2 = tuple ()
@@ -257,10 +257,10 @@
 // CHECK-LABEL: @callThrowingClosureThatModifiesCapture
 // CHECK-NEXT: ([modify])
 sil private @callThrowingClosureThatModifiesCapture : $@convention(thin) (@inout_aliasable Int) -> () {
-bb0(%0 : @trivial $*Int):
+bb0(%0 : $*Int):
   %1 = function_ref @throwingClosureThatModifesCapture : $@convention(thin) (@inout_aliasable Int) -> @error Error
   try_apply %1(%0) : $@convention(thin) (@inout_aliasable Int) -> @error Error, normal bb1, error bb2
-bb1(%3 : @trivial $()):
+bb1(%3 : $()):
   %4 = tuple ()
   return %4 : $()
 bb2(%5: @owned $Error):
@@ -273,7 +273,7 @@
 // CHECK-LABEL: @partialApplyPassedOffToFunction
 // CHECK-NEXT: ([modify], [])
 sil private @partialApplyPassedOffToFunction : $@convention(thin) (@inout_aliasable Int, Int) -> () {
-bb0(%0 : @trivial $*Int, %1: @trivial $Int):
+bb0(%0 : $*Int, %1: $Int):
   %2 = function_ref @assignsToCapture : $@convention(thin) (@inout_aliasable Int, Int) -> ()
   %3 = partial_apply %2(%0, %1) : $@convention(thin) (@inout_aliasable Int, Int) -> ()
   %4 = function_ref @takesNoEscapeClosure : $@convention(thin) (@owned @callee_owned () -> ()) -> ()
@@ -288,7 +288,7 @@
 // CHECK-LABEL: @hasThreeCapturesAndTakesArgument
 // CHECK-NEXT: ([], [modify], [], [read])
 sil private @hasThreeCapturesAndTakesArgument : $@convention(thin) (Int, @inout_aliasable Int, @inout_aliasable Int, @inout_aliasable Int) -> () {
-bb0(%0 : @trivial $Int, %1: @trivial $*Int, %2: @trivial $*Int, %3: @trivial $*Int):
+bb0(%0 : $Int, %1: $*Int, %2: $*Int, %3: $*Int):
   %4 = begin_access [modify] [unknown] %1 : $*Int
   end_access %4 : $*Int
   %5 = begin_access [read] [unknown] %3 : $*Int
@@ -300,7 +300,7 @@
 // CHECK-LABEL: @partialApplyOfClosureTakingArgumentPassedOffToFunction
 // CHECK-NEXT: ([modify], [], [read])
 sil private @partialApplyOfClosureTakingArgumentPassedOffToFunction : $@convention(thin) (@inout_aliasable Int, @inout_aliasable Int, @inout_aliasable Int) -> () {
-bb0(%0 : @trivial $*Int, %1 : @trivial $*Int, %2 : @trivial $*Int):
+bb0(%0 : $*Int, %1 : $*Int, %2 : $*Int):
   %3 = function_ref @hasThreeCapturesAndTakesArgument : $@convention(thin) (Int, @inout_aliasable Int, @inout_aliasable Int, @inout_aliasable Int) -> ()
   %4 = partial_apply %3(%0, %1, %2) : $@convention(thin) (Int, @inout_aliasable Int, @inout_aliasable Int, @inout_aliasable Int) -> ()
   %5 = function_ref @takesNoEscapeClosureTakingArgument : $@convention(thin) (@owned @callee_owned (Int) -> ()) -> ()
@@ -312,7 +312,7 @@
 // CHECK-LABEL: @partialApplyFollowedByConvertFunction
 // CHECK-NEXT: ([modify], [], [read])
 sil private @partialApplyFollowedByConvertFunction : $@convention(thin) (@inout_aliasable Int, @inout_aliasable Int, @inout_aliasable Int) -> () {
-bb0(%0 : @trivial $*Int, %1 : @trivial $*Int, %2 : @trivial $*Int):
+bb0(%0 : $*Int, %1 : $*Int, %2 : $*Int):
   %3 = function_ref @hasThreeCapturesAndTakesArgument : $@convention(thin) (Int, @inout_aliasable Int, @inout_aliasable Int, @inout_aliasable Int) -> ()
   %4 = partial_apply %3(%0, %1, %2) : $@convention(thin) (Int, @inout_aliasable Int, @inout_aliasable Int, @inout_aliasable Int) -> ()
   %5 = convert_function %4 : $@callee_owned (Int) -> () to $@callee_owned (Int) -> @error Error
@@ -329,7 +329,7 @@
 // CHECK-LABEL: @readsAndThrows
 // CHECK-NEXT: ([read])
 sil private  @readsAndThrows : $@convention(thin) (@inout_aliasable Int) -> (Int, @error Error) {
-bb0(%0 : @trivial $*Int):
+bb0(%0 : $*Int):
   %3 = begin_access [read] [unknown] %0 : $*Int
   %4 = load [trivial] %3 : $*Int
   end_access %3 : $*Int
@@ -339,7 +339,7 @@
 // CHECK-LABEL: @passPartialApplyAsArgumentToPartialApply
 // CHECK-NEXT: ([read])
 sil hidden @passPartialApplyAsArgumentToPartialApply : $@convention(thin) (@inout_aliasable Int) -> () {
-bb0(%0 : @trivial $*Int):
+bb0(%0 : $*Int):
   %2 = function_ref @takesAutoClosureReturningGeneric : $@convention(thin) <τ_0_0 where τ_0_0 : Equatable> (@owned @callee_owned () -> (@out τ_0_0, @error Error)) -> ()
   %3 = function_ref @readsAndThrows : $@convention(thin) (@inout_aliasable Int) -> (Int, @error Error)
   %4 = partial_apply %3(%0) : $@convention(thin) (@inout_aliasable Int) -> (Int, @error Error)
@@ -353,7 +353,7 @@
 // CHECK-LABEL: @reads
 // CHECK-NEXT: ([read])
 sil private  @reads : $@convention(thin) (@inout_aliasable Int) -> Int {
-bb0(%0 : @trivial $*Int):
+bb0(%0 : $*Int):
   %3 = begin_access [read] [unknown] %0 : $*Int
   %4 = load [trivial] %3 : $*Int
   end_access %3 : $*Int
@@ -363,7 +363,7 @@
 // CHECK-LABEL: @convertPartialApplyAndPassToPartialApply
 // CHECK-NEXT: ([read])
 sil hidden @convertPartialApplyAndPassToPartialApply : $@convention(thin) (@inout_aliasable Int) -> () {
-bb0(%0 : @trivial $*Int):
+bb0(%0 : $*Int):
   %2 = function_ref @takesAutoClosureReturningGeneric : $@convention(thin) <τ_0_0 where τ_0_0 : Equatable> (@owned @callee_owned () -> (@out τ_0_0, @error Error)) -> ()
   %3 = function_ref @reads : $@convention(thin) (@inout_aliasable Int) -> Int
   %4 = partial_apply %3(%0) : $@convention(thin) (@inout_aliasable Int) -> Int
@@ -378,7 +378,7 @@
 // CHECK-LABEL: @selfRecursion
 // CHECK-NEXT: ([modify], [])
 sil private @selfRecursion : $@convention(thin) (@inout_aliasable Int, Int) -> () {
-bb0(%0 : @trivial $*Int, %1 : @trivial $Int):
+bb0(%0 : $*Int, %1 : $Int):
   %2 = function_ref @selfRecursion : $@convention(thin) (@inout_aliasable Int, Int) -> ()
   %3 = apply %2(%0, %1) : $@convention(thin) (@inout_aliasable Int, Int) -> ()
   %4 = begin_access [modify] [unknown] %0 : $*Int
@@ -390,7 +390,7 @@
 // CHECK-LABEL: @callsMutuallyRecursive
 // CHECK-NEXT: ([modify], [])
 sil private @callsMutuallyRecursive : $@convention(thin) (@inout_aliasable Int, Int) -> () {
-bb0(%0 : @trivial $*Int, %1 : @trivial $Int):
+bb0(%0 : $*Int, %1 : $Int):
   %2 = function_ref @mutualRecursion1 : $@convention(thin) (@inout_aliasable Int, Int) -> ()
   %3 = apply %2(%0, %1) : $@convention(thin) (@inout_aliasable Int, Int) -> ()
   %4 = tuple ()
@@ -400,7 +400,7 @@
 // CHECK-LABEL: @mutualRecursion1
 // CHECK-NEXT: ([modify], [])
 sil private @mutualRecursion1 : $@convention(thin) (@inout_aliasable Int, Int) -> () {
-bb0(%0 : @trivial $*Int, %1 : @trivial $Int):
+bb0(%0 : $*Int, %1 : $Int):
   %2 = function_ref @mutualRecursion2 : $@convention(thin) (@inout_aliasable Int, Int) -> ()
   %3 = apply %2(%0, %1) : $@convention(thin) (@inout_aliasable Int, Int) -> ()
   %4 = begin_access [modify] [unknown] %0 : $*Int
@@ -412,7 +412,7 @@
 // CHECK-LABEL: @mutualRecursion2
 // CHECK-NEXT: ([modify], [])
 sil private @mutualRecursion2 : $@convention(thin) (@inout_aliasable Int, Int) -> () {
-bb0(%0 : @trivial $*Int, %1 : @trivial $Int):
+bb0(%0 : $*Int, %1 : $Int):
   %2 = function_ref @mutualRecursion1 : $@convention(thin) (@inout_aliasable Int, Int) -> ()
   %3 = apply %2(%0, %1) : $@convention(thin) (@inout_aliasable Int, Int) -> ()
   %4 = begin_access [read] [unknown] %0 : $*Int
@@ -436,7 +436,7 @@
 // CHECK-LABEL: @multipleCycleA
 // CHECK-NEXT: ([modify])
 sil private @multipleCycleA : $@convention(thin) (@inout_aliasable Int) -> () {
-bb0(%0 : @trivial $*Int):
+bb0(%0 : $*Int):
   %1 = function_ref @multipleCycleB : $@convention(thin) (@inout_aliasable Int) -> ()
   %2 = apply %1(%0) : $@convention(thin) (@inout_aliasable Int) -> ()
   %3 = begin_access [modify] [unknown] %0 : $*Int
@@ -448,7 +448,7 @@
 // CHECK-LABEL: @multipleCycleB
 // CHECK-NEXT: ([modify])
 sil private @multipleCycleB : $@convention(thin) (@inout_aliasable Int) -> () {
-bb0(%0 : @trivial $*Int):
+bb0(%0 : $*Int):
   %1 = function_ref @multipleCycleA : $@convention(thin) (@inout_aliasable Int) -> ()
   %2 = apply %1(%0) : $@convention(thin) (@inout_aliasable Int) -> ()
   %3 = function_ref @multipleCycleC : $@convention(thin) (@inout_aliasable Int) -> ()
@@ -460,7 +460,7 @@
 // CHECK-LABEL: @multipleCycleC
 // CHECK-NEXT: ([modify])
 sil private @multipleCycleC : $@convention(thin) (@inout_aliasable Int) -> () {
-bb0(%0 : @trivial $*Int):
+bb0(%0 : $*Int):
   %1 = function_ref @multipleCycleB : $@convention(thin) (@inout_aliasable Int) -> ()
   %2 = apply %1(%0) : $@convention(thin) (@inout_aliasable Int) -> ()
   %4 = tuple ()
@@ -472,7 +472,7 @@
 // CHECK-LABEL: @partialApplyFollowedByConvertFunctionWithBorrow
 // CHECK-NEXT: ([modify], [], [read])
 sil private @partialApplyFollowedByConvertFunctionWithBorrow : $@convention(thin) (@inout_aliasable Int, @inout_aliasable Int, @inout_aliasable Int) -> () {
-bb0(%0 : @trivial $*Int, %1 : @trivial $*Int, %2 : @trivial $*Int):
+bb0(%0 : $*Int, %1 : $*Int, %2 : $*Int):
   %3 = function_ref @hasThreeCapturesAndTakesArgument : $@convention(thin) (Int, @inout_aliasable Int, @inout_aliasable Int, @inout_aliasable Int) -> ()
   %4 = partial_apply %3(%0, %1, %2) : $@convention(thin) (Int, @inout_aliasable Int, @inout_aliasable Int, @inout_aliasable Int) -> ()
   %5 = convert_function %4 : $@callee_owned (Int) -> () to $@callee_owned (Int) -> @error Error
diff --git a/test/SILOptimizer/allocbox_to_stack_ownership.sil b/test/SILOptimizer/allocbox_to_stack_ownership.sil
index b51d3dd..267316f 100644
--- a/test/SILOptimizer/allocbox_to_stack_ownership.sil
+++ b/test/SILOptimizer/allocbox_to_stack_ownership.sil
@@ -14,7 +14,7 @@
 
 // CHECK-LABEL: sil @simple_promotion
 sil @simple_promotion : $@convention(thin) (Int) -> Int {
-bb0(%0 : @trivial $Int):
+bb0(%0 : $Int):
   %1 = alloc_box ${ var Int }
   %1a = project_box %1 : ${ var Int }, 0
   store %0 to [trivial] %1a : $*Int
@@ -30,7 +30,7 @@
 
 // CHECK-LABEL: sil @double_project_box
 sil @double_project_box : $@convention(thin) (Int) -> (Int, Int) {
-bb0(%0 : @trivial $Int):
+bb0(%0 : $Int):
   %1 = alloc_box ${ var Int }
   %1a = project_box %1 : ${ var Int }, 0
   store %0 to [trivial] %1a : $*Int
@@ -92,7 +92,7 @@
 
 // CHECK-LABEL: sil @struct_tuple_element_addr
 sil @struct_tuple_element_addr : $@convention(thin) (Int) -> Int {
-bb1(%0 : @trivial $Int):
+bb1(%0 : $Int):
 // CHECK-DAG: [[STRUCT:%.*]] = alloc_stack $TestStruct
 // CHECK-DAG: [[TUPLE:%.*]] = alloc_stack $(Int, Int)
   %1 = alloc_box ${ var TestStruct }
@@ -181,7 +181,7 @@
 
 // CHECK-LABEL: @protocols
 sil @protocols : $@convention(thin) (@in LogicValue, @thin Bool.Type) -> Bool {
-bb0(%0 : @trivial $*LogicValue, %1 : @trivial $@thin Bool.Type):
+bb0(%0 : $*LogicValue, %1 : $@thin Bool.Type):
   %2 = alloc_box ${ var LogicValue }
   %2a = project_box %2 : ${ var LogicValue }, 0
 // CHECK:  %2 = alloc_stack $LogicValue
@@ -246,7 +246,7 @@
 
 // CHECK-LABEL: sil @multiple_destroy_test
 sil @multiple_destroy_test : $@convention(thin) (Bool) -> Bool {
-bb0(%0 : @trivial $Bool):
+bb0(%0 : $Bool):
   %1 = alloc_box ${ var Bool }
   %1a = project_box %1 : ${ var Bool }, 0
   store %0 to [trivial] %1a : $*Bool
@@ -312,7 +312,7 @@
 
 // CHECK-LABEL: sil @test_mui
 sil @test_mui : $@convention(thin) (Builtin.Int1) -> () {
-bb0(%0 : @trivial $Builtin.Int1):
+bb0(%0 : $Builtin.Int1):
   %2 = alloc_box ${ var SomeClass }
   %2a = mark_uninitialized [var] %2 : ${ var SomeClass }
   %3 = project_box %2a : ${ var SomeClass }, 0
@@ -370,7 +370,7 @@
 // CHECK-LABEL: sil @$s6struct8useStack1tySi_tF
 // struct.useStack (t : Swift.Int) -> ()
 sil @$s6struct8useStack1tySi_tF : $@convention(thin) (Int) -> () {
-bb0(%0 : @trivial $Int):
+bb0(%0 : $Int):
   debug_value %0 : $Int, let, name "t" // id: %1
   // CHECK: alloc_stack
   %2 = alloc_box $<τ_0_0> { var τ_0_0 } <Int>, var, name "s"                   // users: %3, %6, %7, %7, %9
@@ -412,7 +412,7 @@
 // CHECK-LABEL: sil @$s6struct6useBox1tySi_tF
 // struct.useBox (t : Swift.Int) -> ()
 sil @$s6struct6useBox1tySi_tF : $@convention(thin) (Int) -> () {
-bb0(%0 : @trivial $Int):
+bb0(%0 : $Int):
   debug_value %0 : $Int, let, name "t" // id: %1
   // CHECK: alloc_box
   %2 = alloc_box $<τ_0_0> { var τ_0_0 } <Int>, var, name "s"                   // users: %3, %6, %7, %7, %10
@@ -451,7 +451,7 @@
 
 // CHECK-LABEL: sil @no_final_destroy
 sil @no_final_destroy : $@convention(thin) (Int) -> Bool {
-bb0(%0 : @trivial $Int):
+bb0(%0 : $Int):
   // This is not destroyed, but the unreachable makes the verifier not trip.
   %1 = alloc_box $<τ_0_0> { var τ_0_0 } <Int>
   %1a = project_box %1 : $<τ_0_0> { var τ_0_0 } <Int>, 0
@@ -485,7 +485,7 @@
 // CHECK-LABEL: sil @callWithAutoclosure
 sil @callWithAutoclosure : $@convention(thin) <T where T : P> (@in T) -> () {
 // CHECK: bb0
-bb0(%0 : @trivial $*T):
+bb0(%0 : $*T):
   // CHECK: debug_value_addr
   debug_value_addr %0 : $*T
   // CHECK: function_ref @mightApply
@@ -512,7 +512,7 @@
 // CHECK-LABEL: sil shared @$s21closure_to_specializeTf0ns_n : $@convention(thin) <T where T : P> (@inout_aliasable T) -> @out T
 sil shared @closure_to_specialize : $@convention(thin) <T where T : P> (@owned <τ_0_0> { var τ_0_0 } <T>) -> @out T {
 // CHECK: bb0
-bb0(%0 : @trivial $*T, %1 : @owned $<τ_0_0> { var τ_0_0 } <T>):
+bb0(%0 : $*T, %1 : @owned $<τ_0_0> { var τ_0_0 } <T>):
   %2 = project_box %1 : $<τ_0_0> { var τ_0_0 } <T>, 0
   // CHECK-NEXT: copy_addr
   copy_addr %2 to [initialization] %0 : $*T
@@ -569,7 +569,7 @@
 // CHECK-LABEL: sil shared @specialized
 sil shared @specialized : $@convention(method) (Int, @in S<Q>) -> Bool {
 // CHECK: bb0
-bb0(%0 : @trivial $Int, %1 : @trivial $*S<Q>):
+bb0(%0 : $Int, %1 : $*S<Q>):
   debug_value %0 : $Int
   debug_value_addr %1 : $*S<Q>
   %4 = function_ref @outer : $@convention(thin) (@owned @callee_owned () -> Bool) -> Bool
@@ -587,7 +587,7 @@
 // CHECK-LABEL: sil @unspecialized
 sil @unspecialized : $@convention(method) <T where T : Count> (Int, @in S<T>) -> Bool {
 // CHECK: bb0
-bb0(%0 : @trivial $Int, %1 : @trivial $*S<T>):
+bb0(%0 : $Int, %1 : $*S<T>):
   debug_value %0 : $Int
   debug_value_addr %1 : $*S<T>
   %4 = function_ref @outer : $@convention(thin) (@owned @callee_owned () -> Bool) -> Bool
@@ -605,7 +605,7 @@
 // CHECK-LABEL: sil shared @closure1
 sil shared @closure1 : $@convention(thin) <T where T : Count> (Int, @owned <τ_0_0 : Count> { var S<τ_0_0> } <T>) -> Bool {
 // CHECK: bb0
-bb0(%0 : @trivial $Int, %1 : @owned $<τ_0_0 where τ_0_0 : Count> { var S<τ_0_0> } <T>):
+bb0(%0 : $Int, %1 : @owned $<τ_0_0 where τ_0_0 : Count> { var S<τ_0_0> } <T>):
   %2 = project_box %1 : $<τ_0_0 where τ_0_0 : Count> { var S<τ_0_0> } <T>, 0
   %3 = function_ref @inner : $@convention(thin) (@owned @callee_owned () -> Bool) -> Bool
   %4 = function_ref @closure2 : $@convention(thin) <τ_0_0 where τ_0_0 : Count> (Int, @owned <τ_0_0 : Count> { var S<τ_0_0> } <τ_0_0>) -> Bool
@@ -627,7 +627,7 @@
 // CHECK-LABEL: sil shared @closure2
 sil shared @closure2 : $@convention(thin) <T where T : Count> (Int, @owned <τ_0_0 : Count> { var S<τ_0_0> } <T>) -> Bool {
 // CHECK: bb0
-bb0(%0 : @trivial $Int, %1 : @owned $<τ_0_0 where τ_0_0 : Count> { var S<τ_0_0> } <T>):
+bb0(%0 : $Int, %1 : @owned $<τ_0_0 where τ_0_0 : Count> { var S<τ_0_0> } <T>):
   %2 = project_box %1 : $<τ_0_0 where τ_0_0 : Count> { var S<τ_0_0> } <T>, 0
   %3 = function_ref @binary : $@convention(thin) (Int, Int) -> Bool
   %4 = alloc_stack $S<T>
@@ -647,7 +647,7 @@
 // CHECK-LABEL: sil @destroy_stack_value_after_closure
 sil @destroy_stack_value_after_closure : $@convention(thin) <T> (@in T) -> @out T {
 // CHECK: bb0
-bb0(%0 : @trivial $*T, %1 : @trivial $*T):
+bb0(%0 : $*T, %1 : $*T):
   // CHECK: [[STACK:%.*]] = alloc_stack
   // CHECK: copy_addr %1 to [initialization] [[STACK]]
   // CHECK: [[APPLIED:%.*]] = function_ref
@@ -687,7 +687,7 @@
 }
 
 sil hidden [noinline] @consume : $@convention(thin) <T> (@in T) -> () {
-bb0(%0 : @trivial $*T):
+bb0(%0 : $*T):
   debug_value_addr %0 : $*T
   destroy_addr %0 : $*T
   %3 = tuple ()
@@ -709,7 +709,7 @@
 sil hidden @try_apply_during_chaining_init : $@convention(method) (Int, @owned ThrowDerivedClass) -> (@owned ThrowDerivedClass, @error Error) {
 // %0                                             // users: %11, %5
 // %1                                             // user: %7
-bb0(%0 : @trivial $Int, %1 : @owned $ThrowDerivedClass):
+bb0(%0 : $Int, %1 : @owned $ThrowDerivedClass):
   %2 = alloc_box ${ var ThrowDerivedClass }, let, name "self"
   %3 = mark_uninitialized [delegatingself] %2 : ${ var ThrowDerivedClass }
   %4 = project_box %3 : ${ var ThrowDerivedClass }, 0
@@ -720,7 +720,7 @@
   try_apply %10(%0) : $@convention(thin) (Int) -> (Int, @error Error), normal bb1, error bb3
 
 // %12                                            // user: %13
-bb1(%12 : @trivial $Int):                                  // Preds: bb0
+bb1(%12 : $Int):                                  // Preds: bb0
   try_apply %9(%12, %8) : $@convention(method) (Int, @owned ThrowDerivedClass) -> (@owned ThrowDerivedClass, @error Error), normal bb2, error bb4
 
 // %14                                            // user: %15
@@ -746,7 +746,7 @@
 }
 
 // CHECK-LABEL: sil @deal_with_wrong_nesting
-// CHECK:      bb0(%0 : @trivial $Int):
+// CHECK:      bb0(%0 : $Int):
 // CHECK-NEXT:   [[STACK1:%[0-9]+]] = alloc_stack $Bool
 // CHECK-NEXT:   [[BOX:%[0-9]+]] = alloc_stack $Int
 // CHECK:      bb1:
@@ -762,7 +762,7 @@
 // CHECK-NEXT:   tuple
 // CHECK-NEXT:   return
 sil @deal_with_wrong_nesting : $@convention(thin) (Int) -> () {
-bb0(%0 : @trivial $Int):
+bb0(%0 : $Int):
   %as1 = alloc_stack $Bool
   %1 = alloc_box ${ var Int }
   cond_br undef, bb1, bb2
@@ -788,7 +788,7 @@
 }
 
 // CHECK-LABEL: sil @wrong_nesting_with_alloc_ref
-// CHECK:      bb0(%0 : @trivial $Int):
+// CHECK:      bb0(%0 : $Int):
 // CHECK-NEXT:   [[REF:%[0-9]+]] = alloc_ref [stack] $SomeClass
 // CHECK-NEXT:   [[BOX:%[0-9]+]] = alloc_stack $Int
 // CHECK:        store
@@ -797,7 +797,7 @@
 // CHECK-NEXT:   tuple
 // CHECK-NEXT:   return
 sil @wrong_nesting_with_alloc_ref : $@convention(thin) (Int) -> () {
-bb0(%0 : @trivial $Int):
+bb0(%0 : $Int):
   %as1 = alloc_ref [stack] $SomeClass
   %1 = alloc_box ${ var Int }
   %1a = project_box %1 : ${ var Int }, 0
@@ -810,7 +810,7 @@
 }
 
 // CHECK-LABEL: sil @nesting_and_unreachable1
-// CHECK:      bb0(%0 : @trivial $Int):
+// CHECK:      bb0(%0 : $Int):
 // CHECK-NEXT:   [[STACK1:%[0-9]+]] = alloc_stack $Bool
 // CHECK-NEXT:   [[BOX:%[0-9]+]] = alloc_stack $Int
 // CHECK:      bb1:
@@ -824,7 +824,7 @@
 // CHECK-NEXT:   tuple
 // CHECK-NEXT:   return
 sil @nesting_and_unreachable1 : $@convention(thin) (Int) -> () {
-bb0(%0 : @trivial $Int):
+bb0(%0 : $Int):
   %as1 = alloc_stack $Bool
   %1 = alloc_box ${ var Int }
   %1a = project_box %1 : ${ var Int }, 0
@@ -845,7 +845,7 @@
 }
 
 // CHECK-LABEL: sil @nesting_and_unreachable2
-// CHECK:      bb0(%0 : @trivial $Int):
+// CHECK:      bb0(%0 : $Int):
 // CHECK-NEXT:   [[STACK1:%[0-9]+]] = alloc_stack $Bool
 // CHECK-NEXT:   [[BOX:%[0-9]+]] = alloc_stack $Int
 // CHECK:      bb1:
@@ -861,7 +861,7 @@
 // CHECK-NEXT:   tuple
 // CHECK-NEXT:   return
 sil @nesting_and_unreachable2 : $@convention(thin) (Int) -> () {
-bb0(%0 : @trivial $Int):
+bb0(%0 : $Int):
   %as1 = alloc_stack $Bool
   %1 = alloc_box ${ var Int }
   %1a = project_box %1 : ${ var Int }, 0
@@ -883,7 +883,7 @@
 }
 
 // CHECK-LABEL: sil @nesting_and_unreachable3
-// CHECK:      bb0(%0 : @trivial $Int):
+// CHECK:      bb0(%0 : $Int):
 // CHECK-NEXT:   [[BOX:%[0-9]+]] = alloc_stack $Int
 // CHECK-NEXT:   [[STACK:%[0-9]+]] = alloc_stack $Bool
 // CHECK:      bb1:
@@ -897,7 +897,7 @@
 // CHECK-NEXT:   tuple
 // CHECK-NEXT:   return
 sil @nesting_and_unreachable3 : $@convention(thin) (Int) -> () {
-bb0(%0 : @trivial $Int):
+bb0(%0 : $Int):
   %1 = alloc_box ${ var Int }
   %as1 = alloc_stack $Bool
   %1a = project_box %1 : ${ var Int }, 0
@@ -917,7 +917,7 @@
 }
 
 // CHECK-LABEL: sil @nesting_and_unreachable4
-// CHECK:      bb0(%0 : @trivial $Int):
+// CHECK:      bb0(%0 : $Int):
 // CHECK-NEXT:   [[BOX:%[0-9]+]] = alloc_stack $Int
 // CHECK:      bb1:
 // CHECK-NEXT:   unreachable
@@ -927,7 +927,7 @@
 // CHECK-NEXT:   tuple
 // CHECK-NEXT:   return
 sil @nesting_and_unreachable4 : $@convention(thin) (Int) -> () {
-bb0(%0 : @trivial $Int):
+bb0(%0 : $Int):
   %1 = alloc_box ${ var Int }
   %1a = project_box %1 : ${ var Int }, 0
   cond_br undef, bb1, bb2
@@ -944,7 +944,7 @@
 }
 
 // CHECK-LABEL: sil @nesting_and_unreachable5
-// CHECK:      bb0(%0 : @trivial $Int):
+// CHECK:      bb0(%0 : $Int):
 // CHECK-NEXT:   [[BOX:%[0-9]+]] = alloc_stack $Int
 // CHECK:      bb1:
 // CHECK-NEXT:   {{.*}} = alloc_stack $Bool
@@ -956,7 +956,7 @@
 // CHECK-NEXT:   tuple
 // CHECK-NEXT:   return
 sil @nesting_and_unreachable5 : $@convention(thin) (Int) -> () {
-bb0(%0 : @trivial $Int):
+bb0(%0 : $Int):
   %1 = alloc_box ${ var Int }
   %1a = project_box %1 : ${ var Int }, 0
   cond_br undef, bb1, bb2
@@ -975,7 +975,7 @@
 }
 
 // CHECK-LABEL: sil @nesting_and_unreachable_critical_edge
-// CHECK:      bb0(%0 : @trivial $Int):
+// CHECK:      bb0(%0 : $Int):
 // CHECK-NEXT:   [[BOX:%[0-9]+]] = alloc_stack $Int
 // CHECK-NEXT:   [[STACK1:%[0-9]+]] = alloc_stack $Bool
 // CHECK-NEXT:   cond_br
@@ -1000,7 +1000,7 @@
 // CHECK-NEXT:   dealloc_stack [[BOX]]
 // CHECK-NEXT:   unreachable
 sil @nesting_and_unreachable_critical_edge : $@convention(thin) (Int) -> () {
-bb0(%0 : @trivial $Int):
+bb0(%0 : $Int):
   %1 = alloc_box ${ var Int }
   %as1 = alloc_stack $Bool
   %1a = project_box %1 : ${ var Int }, 0
@@ -1030,7 +1030,7 @@
 //  begin_access [deinit], copy_addr [take], end_access
 //
 // CHECK-LABEL: sil @deinit_access : $@convention(thin) <T> (@in T) -> (@out T, @out T) {
-// CHECK: bb0(%0 : @trivial $*T, %1 : @trivial $*T, %2 : @trivial $*T):
+// CHECK: bb0(%0 : $*T, %1 : $*T, %2 : $*T):
 // CHECK: [[STK:%.*]] = alloc_stack $T, var, name "x"
 // CHECK: copy_addr %2 to [initialization] [[STK]] : $*T
 // CHECK: [[READ:%.*]] = begin_access [read] [static] [[STK]] : $*T
@@ -1067,7 +1067,7 @@
 //  begin_access [deinit], copy_addr [take], end_access
 //
 // CHECK-LABEL: sil @nodeinit_access : $@convention(thin) <T> (@in T) -> (@out T, @out T) {
-// CHECK: bb0(%0 : @trivial $*T, %1 : @trivial $*T, %2 : @trivial $*T):
+// CHECK: bb0(%0 : $*T, %1 : $*T, %2 : $*T):
 // CHECK: [[STK:%.*]] = alloc_stack $T, var, name "x"
 // CHECK: copy_addr %2 to [initialization] [[STK]] : $*T
 // CHECK: [[READ:%.*]] = begin_access [read] [static] [[STK]] : $*T
diff --git a/test/SILOptimizer/bridged_casts_folding.sil b/test/SILOptimizer/bridged_casts_folding.sil
index 98d5693..23e287b 100644
--- a/test/SILOptimizer/bridged_casts_folding.sil
+++ b/test/SILOptimizer/bridged_casts_folding.sil
@@ -15,7 +15,7 @@
 // CHECK-NEXT:    destroy_addr %0
 // CHECK-NEXT:    [[CAST:%.*]] = unconditional_checked_cast [[BRIDGED]] : $NSObject to $NSObjectSubclass
 sil @anyhashable_cast_unconditional : $@convention(thin) (@in AnyHashable) -> @owned NSObjectSubclass {
-entry(%0 : @trivial $*AnyHashable):
+entry(%0 : $*AnyHashable):
   %1 = alloc_stack $NSObjectSubclass
   unconditional_checked_cast_addr AnyHashable in %0 : $*AnyHashable
                                to NSObjectSubclass in %1 : $*NSObjectSubclass
@@ -29,7 +29,7 @@
 // CHECK-NEXT:    destroy_addr %0
 // CHECK-NEXT:    checked_cast_br [[BRIDGED]] : $NSObject to $NSObjectSubclass, [[YES:bb[0-9]+]], [[NO:bb[0-9]+]]
 sil @anyhashable_cast_take_always : $@convention(thin) (@in AnyHashable, @owned NSObjectSubclass) -> @owned NSObjectSubclass {
-entry(%0 : @trivial $*AnyHashable, %1 : @owned $NSObjectSubclass):
+entry(%0 : $*AnyHashable, %1 : @owned $NSObjectSubclass):
   %2 = alloc_stack $NSObjectSubclass
   checked_cast_addr_br take_always AnyHashable in %0 : $*AnyHashable
                  to NSObjectSubclass in %2 : $*NSObjectSubclass, bb1, bb2
@@ -53,7 +53,7 @@
 // CHECK:       [[YES]]{{.*}}:
 // CHECK-NEXT:    destroy_addr %0
 sil @anyhashable_cast_take_on_success : $@convention(thin) (@in AnyHashable, @owned NSObjectSubclass) -> @owned NSObjectSubclass {
-entry(%0 : @trivial $*AnyHashable, %1 : @owned $NSObjectSubclass):
+entry(%0 : $*AnyHashable, %1 : @owned $NSObjectSubclass):
   %2 = alloc_stack $NSObjectSubclass
   checked_cast_addr_br take_on_success AnyHashable in %0 : $*AnyHashable
                  to NSObjectSubclass in %2 : $*NSObjectSubclass, bb1, bb2
@@ -82,7 +82,7 @@
 // CHECK:       [[NO]]{{.*}}:
 // CHECK-NOT:    dealloc_stack
 sil @anyhashable_cast_copy_on_success : $@convention(thin) (@in_guaranteed AnyHashable, @owned NSObjectSubclass) -> @owned NSObjectSubclass {
-entry(%0 : @trivial $*AnyHashable, %1 : @owned $NSObjectSubclass):
+entry(%0 : $*AnyHashable, %1 : @owned $NSObjectSubclass):
   %2 = alloc_stack $NSObjectSubclass
   checked_cast_addr_br copy_on_success AnyHashable in %0 : $*AnyHashable
                  to NSObjectSubclass in %2 : $*NSObjectSubclass, bb1, bb2
diff --git a/test/SILOptimizer/capture_promotion_generic_context_ownership.sil b/test/SILOptimizer/capture_promotion_generic_context_ownership.sil
index 8326667..9743bf7 100644
--- a/test/SILOptimizer/capture_promotion_generic_context_ownership.sil
+++ b/test/SILOptimizer/capture_promotion_generic_context_ownership.sil
@@ -26,7 +26,7 @@
 // CHECK:         partial_apply [callee_guaranteed] [[F]](
 
 sil @call_promotable_box_from_generic : $@convention(thin) <T> (@in T, Int) -> @owned @callee_guaranteed () -> Int {
-entry(%0 : @trivial $*T, %1 : @trivial $Int):
+entry(%0 : $*T, %1 : $Int):
   destroy_addr %0 : $*T
   %f = function_ref @promotable_box : $@convention(thin) (@owned <τ_0_0> { var τ_0_0 } <Int>) -> Int
   %b = alloc_box $<τ_0_0> { var τ_0_0 } <Int>
@@ -43,7 +43,7 @@
 // CHECK-NEXT:    return [[ARG1]] : $Builtin.Int32
 
 sil @generic_promotable_box : $@convention(thin) <T> (@in T, @owned <τ_0_0> { var τ_0_0 } <Int>) -> Int {
-entry(%0 : @trivial $*T, %b : @owned $<τ_0_0> { var τ_0_0 } <Int>):
+entry(%0 : $*T, %b : @owned $<τ_0_0> { var τ_0_0 } <Int>):
   %a = project_box %b : $<τ_0_0> { var τ_0_0 } <Int>, 0
   %v = load [trivial] %a : $*Int
   destroy_value %b : $<τ_0_0> { var τ_0_0 } <Int>
@@ -59,7 +59,7 @@
 // CHECK-NEXT:    return [[CLOSURE]]
 
 sil @call_generic_promotable_box_from_different_generic : $@convention(thin) <T, U: P> (@in T, @in U, Int) -> @owned @callee_guaranteed (@in U) -> Int {
-entry(%0 : @trivial $*T, %1 : @trivial $*U, %2 : @trivial $Int):
+entry(%0 : $*T, %1 : $*U, %2 : $Int):
   destroy_addr %0 : $*T
   destroy_addr %1 : $*U
   %f = function_ref @generic_promotable_box : $@convention(thin) <V> (@in V, @owned <τ_0_0> { var τ_0_0 } <Int>) -> Int
@@ -88,7 +88,7 @@
 // CHECK-NOT:     project_box
 // CHECK:       } // end sil function '$s23generic_promotable_box2Tf2nni_n'
 sil @generic_promotable_box2 : $@convention(thin) <T> (@in R<T>, @in Int, @owned <τ_0_0> { var E<(R<τ_0_0>) -> Int> } <T>) -> () {
-entry(%0 : @trivial $*R<T>, %1 : @trivial $*Int, %b : @owned $<τ_0_0> { var E<(R<τ_0_0>)->Int> } <T>):
+entry(%0 : $*R<T>, %1 : $*Int, %b : @owned $<τ_0_0> { var E<(R<τ_0_0>)->Int> } <T>):
   %a = project_box %b : $<τ_0_0> { var E<(R<τ_0_0>)->Int> } <T>, 0
   %e = load [copy] %a : $*E<(R<T>)->Int>
   switch_enum %e : $E<(R<T>)->Int>, case #E.Some!enumelt.1 : bb1, default bb2
@@ -120,7 +120,7 @@
 // CHECK-NEXT:    return [[CLOSURE]]
 
 sil @call_generic_promotable_box_from_different_generic2 : $@convention(thin) <T, U: P> (@in R<T>, @in E<(R<U>)->Int>, @in Int) -> @owned @callee_guaranteed (@in R<U>) -> () {
-entry(%0 : @trivial $*R<T>, %1 : @trivial $*E<(R<U>)->Int>, %2 : @trivial $*Int):
+entry(%0 : $*R<T>, %1 : $*E<(R<U>)->Int>, %2 : $*Int):
   destroy_addr %0 : $*R<T>
   %f = function_ref @generic_promotable_box2 : $@convention(thin) <V> (@in R<V>, @in Int, @owned <τ_0_0> { var E<(R<τ_0_0>)->Int> } <V>) -> ()
   %b = alloc_box $<τ_0_0> { var E<(R<τ_0_0>)->Int> } <U>
diff --git a/test/SILOptimizer/capture_promotion_ownership.sil b/test/SILOptimizer/capture_promotion_ownership.sil
index 8246ddc..7bb9c8e 100644
--- a/test/SILOptimizer/capture_promotion_ownership.sil
+++ b/test/SILOptimizer/capture_promotion_ownership.sil
@@ -165,7 +165,7 @@
 }
 
 // CHECK-LABEL: sil private @$s8closure0Tf2iii_n : $@convention(thin) (@owned Foo, @owned Baz, Int) -> (Int, Builtin.Int64) {
-// CHECK: bb0([[ORIGINAL_ARG0:%.*]] : @owned $Foo, [[ORIGINAL_ARG1:%.*]] : @owned $Baz, [[ARG2:%.*]] : @trivial $Int):
+// CHECK: bb0([[ORIGINAL_ARG0:%.*]] : @owned $Foo, [[ORIGINAL_ARG1:%.*]] : @owned $Baz, [[ARG2:%.*]] : $Int):
 // CHECK:   [[ARG0:%.*]] = begin_borrow [[ORIGINAL_ARG0]]
 // CHECK:   [[ARG1:%.*]] = begin_borrow [[ORIGINAL_ARG1]]
 // CHECK:   [[DUMMY_FUNC:%.*]] = function_ref @dummy_func : $@convention(thin) (Int, Int, Int) -> Int
@@ -268,7 +268,7 @@
 // CHECK-LABEL: sil @captureWithinGeneric
 sil @captureWithinGeneric : $@convention(thin) <T> (@inout Int, @inout Int) -> () {
 // CHECK: bb0
-bb0(%0 : @trivial $*Int, %1 : @trivial $*Int):
+bb0(%0 : $*Int, %1 : $*Int):
   %2 = alloc_box $<τ_0_0> { var τ_0_0 } <Int>
   %2a = project_box %2 : $<τ_0_0> { var τ_0_0 } <Int>, 0
   copy_addr %0 to [initialization] %2a : $*Int
@@ -310,7 +310,7 @@
 sil [transparent] [serialized] @$ss1poiyS2i_SitF : $@convention(thin) (Int, Int) -> Int
 
 sil private @closure_indirect_result : $@convention(thin) (@owned <τ_0_0> { var τ_0_0 } <Foo>, @owned <τ_0_0> { var τ_0_0 } <Baz>, @owned <τ_0_0> { var τ_0_0 } <Int>) -> @out Int {
-bb0(%0: @trivial $*Int, %1 : @owned $<τ_0_0> { var τ_0_0 } <Foo>, %2 : @owned $<τ_0_0> { var τ_0_0 } <Baz>, %4 : @owned $<τ_0_0> { var τ_0_0 } <Int>):
+bb0(%0: $*Int, %1 : @owned $<τ_0_0> { var τ_0_0 } <Foo>, %2 : @owned $<τ_0_0> { var τ_0_0 } <Baz>, %4 : @owned $<τ_0_0> { var τ_0_0 } <Int>):
   %17 = project_box %1 : $<τ_0_0> { var τ_0_0 } <Foo>, 0
   %3 = project_box %2 : $<τ_0_0> { var τ_0_0 } <Baz>, 0
   %5 = project_box %4 : $<τ_0_0> { var τ_0_0 } <Int>, 0
diff --git a/test/SILOptimizer/cast_folding_objc_bridging_conditional.sil b/test/SILOptimizer/cast_folding_objc_bridging_conditional.sil
index 01ec2bb..b05c759 100644
--- a/test/SILOptimizer/cast_folding_objc_bridging_conditional.sil
+++ b/test/SILOptimizer/cast_folding_objc_bridging_conditional.sil
@@ -10,7 +10,7 @@
 
 // CHECK-LABEL: sil @cast_nserror_to_specific_error
 sil @cast_nserror_to_specific_error : $@convention(thin) (@in NSError, @in NSNumber, @in NSValue) -> () {
-entry(%0 : @trivial $*NSError, %1 : @trivial $*NSNumber, %2 : @trivial $*NSValue):
+entry(%0 : $*NSError, %1 : $*NSNumber, %2 : $*NSValue):
   %f = function_ref @use : $@convention(thin) <T> (@in T) -> ()
   %a = alloc_stack $MyError
   // CHECK: checked_cast_addr_br {{.*}} NSError {{.*}} to MyError
diff --git a/test/SILOptimizer/closure_lifetime_fixup_objc.swift b/test/SILOptimizer/closure_lifetime_fixup_objc.swift
index 2ea4c8d..1d39a64 100644
--- a/test/SILOptimizer/closure_lifetime_fixup_objc.swift
+++ b/test/SILOptimizer/closure_lifetime_fixup_objc.swift
@@ -88,11 +88,11 @@
 // CHECK: sil hidden @$s27closure_lifetime_fixup_objc1CCfD : $@convention(method) (@owned C) -> () {
 // CHECK: bb0([[SELF:%.*]] : $C):
 // CHECK:   [[F:%.*]] = function_ref @$s27closure_lifetime_fixup_objc1CCfdyyXEfU_
-// CHECK:   [[PA:%.*]] = partial_apply [callee_guaranteed] [[F]](%0)
+// CHECK:   [[PA:%.*]] = partial_apply [callee_guaranteed] [[F]]([[SELF]])
 // CHECK:   [[OPT:%.*]] = enum $Optional<@callee_guaranteed () -> ()>, #Optional.some!enumelt.1, [[PA]]
 // CHECK:   [[DEINIT:%.*]] = objc_super_method [[SELF]] : $C, #NSObject.deinit!deallocator.1.foreign
 // CHECK:   release_value [[OPT]] : $Optional<@callee_guaranteed () -> ()>
-// CHECK:   [[SUPER:%.*]] = upcast [[SELF]] : $C to $NSObject               // user: %34
+// CHECK:   [[SUPER:%.*]] = upcast [[SELF]] : $C to $NSObject
 // CHECK-NEXT:   apply [[DEINIT]]([[SUPER]]) : $@convention(objc_method) (NSObject) -> ()
 // CHECK-NEXT:   [[T:%.*]] = tuple ()
 // CHECK-NEXT:   return [[T]] : $()
diff --git a/test/SILOptimizer/constant_propagation2.sil b/test/SILOptimizer/constant_propagation2.sil
index 926169d..f92fb55 100644
--- a/test/SILOptimizer/constant_propagation2.sil
+++ b/test/SILOptimizer/constant_propagation2.sil
@@ -4,7 +4,7 @@
 
 // fold_sadd_with_overflow_Overflow
 sil @fold_sadd_with_overflow_Overflow : $@convention(thin) (Builtin.RawPointer) -> Builtin.Int64 {
-bb0(%0 : @trivial $Builtin.RawPointer):
+bb0(%0 : $Builtin.RawPointer):
   %2 = integer_literal $Builtin.Int64, 9223372036854775807
   %3 = integer_literal $Builtin.Int64, 9223372036854775807
   %21 = integer_literal $Builtin.Int1, 1
diff --git a/test/SILOptimizer/copy_propagation.sil b/test/SILOptimizer/copy_propagation.sil
index 5e9e0c5..aff3a62 100644
--- a/test/SILOptimizer/copy_propagation.sil
+++ b/test/SILOptimizer/copy_propagation.sil
@@ -74,7 +74,7 @@
 }
 
 // CHECK-LABEL: sil @testPhi : $@convention(thin) <T> (@in_guaranteed T, @in_guaranteed T, Bool) -> @out T {
-// CHECK: bb0(%0 : @guaranteed $T, %1 : @guaranteed $T, %2 : @trivial $Bool):
+// CHECK: bb0(%0 : @guaranteed $T, %1 : @guaranteed $T, %2 : $Bool):
 // CHECK-NEXT: %3 = struct_extract %2 : $Bool, #Bool._value
 // CHECK-NEXT: cond_br %3, bb1, bb2
 //
@@ -90,7 +90,7 @@
 // CHECK-NEXT: return %9 : $T
 // CHECK-LABEL: } // end sil function 'testPhi'
 sil @testPhi : $@convention(thin) <T> (@in_guaranteed T, @in_guaranteed T, Bool) -> @out T {
-bb0(%0 : @guaranteed $T, %1 : @guaranteed $T, %2 : @trivial $Bool):
+bb0(%0 : @guaranteed $T, %1 : @guaranteed $T, %2 : $Bool):
   %3 = copy_value %0 : $T
   %4 = copy_value %1 : $T
   %5 = struct_extract %2 : $Bool, #Bool._value
@@ -111,7 +111,7 @@
 }
 
 // CHECK-LABEL: sil @testConsume : $@convention(thin) <T> (@in T, @inout T) -> () {
-// CHECK: bb0(%0 : @owned $T, %1 : @trivial $*T):
+// CHECK: bb0(%0 : @owned $T, %1 : $*T):
 //
 // The original copy_value is deleted.
 // CHECK-NEXT:   debug_value %0 : $T
@@ -132,7 +132,7 @@
 // CHECK-NEXT:   return %8 : $()
 // CHECK-LABEL: // end sil function 'testConsume'
 sil @testConsume : $@convention(thin) <T> (@in T, @inout T) -> () {
-bb0(%arg : @owned $T, %addr : @trivial $*T):
+bb0(%arg : @owned $T, %addr : $*T):
   %copy = copy_value %arg : $T
   debug_value %copy : $T
   store %copy to [init] %addr : $*T
@@ -144,7 +144,7 @@
 }
 
 // CHECK-LABEL: sil @testDestroyEdge : $@convention(thin) <T> (@in T, @inout T, Builtin.Int1) -> () {
-// CHECK: bb0(%0 : @owned $T, %1 : @trivial $*T, %2 : @trivial $Builtin.Int1):
+// CHECK: bb0(%0 : @owned $T, %1 : $*T, %2 : $Builtin.Int1):
 // CHECK-NEXT:   cond_br %2, bb2, bb1
 //
 // CHECK: bb1:
@@ -165,7 +165,7 @@
 // CHECK-NEXT:   return %9 : $()
 // CHECK-LABEL: } // end sil function 'testDestroyEdge'
 sil @testDestroyEdge : $@convention(thin) <T> (@in T, @inout T, Builtin.Int1) -> () {
-bb0(%arg : @owned $T, %addr : @trivial $*T, %z : @trivial $Builtin.Int1):
+bb0(%arg : @owned $T, %addr : $*T, %z : $Builtin.Int1):
   cond_br %z, bb1, bb2
 
 bb1:
diff --git a/test/SILOptimizer/definite_init_crashes.sil b/test/SILOptimizer/definite_init_crashes.sil
index da402cc..7528058 100644
--- a/test/SILOptimizer/definite_init_crashes.sil
+++ b/test/SILOptimizer/definite_init_crashes.sil
@@ -16,7 +16,7 @@
 
 // CHECK-LABEL: sil @TripleTest
 sil @TripleTest : $@convention(method) (Int, @inout Triple) -> Triple {
-bb0(%0 : @trivial $Int, %1 : @trivial $*Triple):
+bb0(%0 : $Int, %1 : $*Triple):
   %4 = alloc_box $<τ_0_0> { var τ_0_0 } <Triple>
   %4a = project_box %4 : $<τ_0_0> { var τ_0_0 } <Triple>, 0
   %5 = load [trivial] %1 : $*Triple
@@ -35,7 +35,7 @@
 
 // CHECK-LABEL: sil @SingleTest
 sil @SingleTest : $@convention(method) (@inout Single, Int) -> Single {
-bb0(%0 : @trivial $*Single, %1 : @trivial $Int):
+bb0(%0 : $*Single, %1 : $Int):
   %4 = alloc_box $<τ_0_0> { var τ_0_0 } <Single>
   %4a = project_box %4 : $<τ_0_0> { var τ_0_0 } <Single>, 0
   %5 = load [trivial] %0 : $*Single
@@ -98,7 +98,7 @@
 
 // CHECK-LABEL: sil @assign_of_non_primitive_object_element_type
 sil @assign_of_non_primitive_object_element_type : $@convention(thin) (@thick Proto.Type) -> (@owned AStruct, @error Error) {
-bb0(%0 : @trivial $@thick Proto.Type):
+bb0(%0 : $@thick Proto.Type):
   %3 = alloc_stack $AStruct
   %4 = mark_uninitialized [rootself] %3 : $*AStruct
   %7 = function_ref @mayThrow : $@convention(thin) () -> (@owned NonTrivial, @error Error)
diff --git a/test/SILOptimizer/definite_init_markuninitialized_delegatingself.sil b/test/SILOptimizer/definite_init_markuninitialized_delegatingself.sil
index 556edcc..1ffe3f1 100644
--- a/test/SILOptimizer/definite_init_markuninitialized_delegatingself.sil
+++ b/test/SILOptimizer/definite_init_markuninitialized_delegatingself.sil
@@ -37,7 +37,7 @@
 // CHECK-NEXT: load
 // CHECK:  return
 sil @self_init_assert_instruction : $@convention(thin) (Int, @thin MyStruct.Type) -> MyStruct {
-  bb0(%0 : @trivial $Int, %1 : @trivial $@thin MyStruct.Type):
+  bb0(%0 : $Int, %1 : $@thin MyStruct.Type):
   %2 = alloc_stack $MyStruct, var, name "sf"
   %3 = mark_uninitialized [delegatingself] %2 : $*MyStruct
 
@@ -54,7 +54,7 @@
 // <rdar://problem/18089574> Protocol member in struct + delegating init miscompilation
 // CHECK-LABEL: @self_init_copyaddr
 sil @self_init_copyaddr : $@convention(thin) (@thin MyStruct2.Type) -> @out MyStruct2 {
-bb0(%0 : @trivial $*MyStruct2, %1 : @trivial $@thin MyStruct2.Type):
+bb0(%0 : $*MyStruct2, %1 : $@thin MyStruct2.Type):
   // CHECK: [[SELF:%[0-9]+]] = alloc_stack $MyStruct2
   %2 = alloc_stack $MyStruct2, var, name "sf"
   %3 = mark_uninitialized [delegatingself] %2 : $*MyStruct2
@@ -85,7 +85,7 @@
 
 // CHECK-LABEL: sil hidden @test_conditional_destroy_delegating_init
 sil hidden @test_conditional_destroy_delegating_init : $@convention(thin) (Builtin.Int1) -> () {
-bb0(%0 : @trivial $Builtin.Int1):
+bb0(%0 : $Builtin.Int1):
 // CHECK:  [[CONTROL:%[0-9]+]] = alloc_stack $Builtin.Int1
 // CHECK-NEXT: [[SELF_BOX:%[0-9]+]] = alloc_stack $MyStruct3
 
diff --git a/test/SILOptimizer/definite_init_markuninitialized_derivedself.sil b/test/SILOptimizer/definite_init_markuninitialized_derivedself.sil
index 60a19eb..08f70ff 100644
--- a/test/SILOptimizer/definite_init_markuninitialized_derivedself.sil
+++ b/test/SILOptimizer/definite_init_markuninitialized_derivedself.sil
@@ -244,7 +244,7 @@
 // }
 //
 sil @super_init_out_of_order :  $@convention(method) (@owned DerivedClassWithIVars, Int) -> @owned DerivedClassWithIVars {
-bb0(%0 : @owned $DerivedClassWithIVars, %i : @trivial $Int):
+bb0(%0 : @owned $DerivedClassWithIVars, %i : $Int):
   %1 = alloc_box $<τ_0_0> { var τ_0_0 } <DerivedClassWithIVars>
   %1a = project_box %1 : $<τ_0_0> { var τ_0_0 } <DerivedClassWithIVars>, 0
   %3 = mark_uninitialized [derivedself] %1a : $*DerivedClassWithIVars
diff --git a/test/SILOptimizer/definite_init_markuninitialized_rootself.sil b/test/SILOptimizer/definite_init_markuninitialized_rootself.sil
index 0faaaf5..5217483 100644
--- a/test/SILOptimizer/definite_init_markuninitialized_rootself.sil
+++ b/test/SILOptimizer/definite_init_markuninitialized_rootself.sil
@@ -26,7 +26,7 @@
 
 // CHECK-LABEL: sil @rootclass_test1
 sil @rootclass_test1 : $@convention(method) (@owned RootClassWithIVars, Int) -> @owned RootClassWithIVars {
-bb0(%0 : @owned $RootClassWithIVars, %1 : @trivial $Int):
+bb0(%0 : @owned $RootClassWithIVars, %1 : $Int):
   %3 = mark_uninitialized [rootself] %0 : $RootClassWithIVars
 
   %4 = begin_borrow %3 : $RootClassWithIVars
@@ -52,7 +52,7 @@
 
 // CHECK-LABEL: sil @rootclass_test2
 sil @rootclass_test2 : $@convention(method) (@owned RootClassWithIVars, Int) -> @owned RootClassWithIVars {
-bb0(%0 : @owned $RootClassWithIVars, %1 : @trivial $Int):
+bb0(%0 : @owned $RootClassWithIVars, %1 : $Int):
   %3 = mark_uninitialized [rootself] %0 : $RootClassWithIVars
 
   %4 = begin_borrow %3 : $RootClassWithIVars
@@ -76,7 +76,7 @@
 
 // CHECK-LABEL: sil @rootclass_test3
 sil @rootclass_test3 : $@convention(method) (@owned RootClassWithIVars, Int) -> @owned RootClassWithIVars {
-bb0(%0 : @owned $RootClassWithIVars, %1 : @trivial $Int):
+bb0(%0 : @owned $RootClassWithIVars, %1 : $Int):
   %3 = mark_uninitialized [rootself] %0 : $RootClassWithIVars
 
   %4 = begin_borrow %3 : $RootClassWithIVars
diff --git a/test/SILOptimizer/definite_init_markuninitialized_var.sil b/test/SILOptimizer/definite_init_markuninitialized_var.sil
index 3af69c8..bc0e4d4 100644
--- a/test/SILOptimizer/definite_init_markuninitialized_var.sil
+++ b/test/SILOptimizer/definite_init_markuninitialized_var.sil
@@ -46,7 +46,7 @@
 //}
 // CHECK-LABEL: sil @used_by_inout
 sil @used_by_inout : $@convention(thin) (Int) -> (Int, Int) {
-bb0(%0 : @trivial $Int):
+bb0(%0 : $Int):
   %91 = alloc_box $<τ_0_0> { var τ_0_0 } <Int>
   %91a = project_box %91 : $<τ_0_0> { var τ_0_0 } <Int>, 0
   %1 = mark_uninitialized [var] %91a : $*Int
@@ -87,7 +87,7 @@
 
 // CHECK-LABEL: sil @tuple_elements1
 sil @tuple_elements1 : $@convention(thin) (Int) -> () {
-bb0(%0 : @trivial $Int):
+bb0(%0 : $Int):
   %2 = alloc_box $<τ_0_0> { var τ_0_0 } <(Int, Int)>
   %2a = project_box %2 : $<τ_0_0> { var τ_0_0 } <(Int, Int)>, 0
   %3 = mark_uninitialized [var] %2a : $*(Int, Int) // expected-note {{variable defined here}}
@@ -104,7 +104,7 @@
 
 // CHECK-LABEL: sil @tuple_elements2
 sil @tuple_elements2 : $@convention(thin) (Int) -> (Int, Int) {
-bb0(%0 : @trivial $Int):
+bb0(%0 : $Int):
   %2 = alloc_box $<τ_0_0> { var τ_0_0 } <(Int, Int)>
   %2a = project_box %2 : $<τ_0_0> { var τ_0_0 } <(Int, Int)>, 0
   %3 = mark_uninitialized [var] %2a : $*(Int, Int) // expected-note {{variable defined here}}
@@ -120,7 +120,7 @@
 
 // CHECK-LABEL: sil @copy_addr1
 sil @copy_addr1 : $@convention(thin) <T> (@in T) -> @out T {
-bb0(%0 : @trivial $*T, %1 : @trivial $*T):
+bb0(%0 : $*T, %1 : $*T):
   %3 = alloc_box $<τ_0_0> { var τ_0_0 } <T>
   %3a = project_box %3 : $<τ_0_0> { var τ_0_0 } <T>, 0
   %4 = mark_uninitialized [var] %3a : $*T
@@ -133,7 +133,7 @@
 
 // CHECK-LABEL: sil @copy_addr2
 sil @copy_addr2 : $@convention(thin) <T> (@in T) -> @out T {
-bb0(%0 : @trivial $*T, %1 : @trivial $*T):
+bb0(%0 : $*T, %1 : $*T):
   %3 = alloc_box $<τ_0_0> { var τ_0_0 } <T>
   %3a = project_box %3 : $<τ_0_0> { var τ_0_0 } <T>, 0
   %4 = mark_uninitialized [var] %3a : $*T // expected-note {{variable defined here}}
@@ -174,7 +174,7 @@
 
 // CHECK-LABEL: sil @assign_test_trivial
 sil @assign_test_trivial : $@convention(thin) (Int) -> Int {
-bb0(%0 : @trivial $Int):
+bb0(%0 : $Int):
   %7 = alloc_box $<τ_0_0> { var τ_0_0 } <Int>
   %7a = project_box %7 : $<τ_0_0> { var τ_0_0 } <Int>, 0
   %1 = mark_uninitialized [var] %7a : $*Int
@@ -227,7 +227,7 @@
 
 // CHECK-LABEL: sil @assign_test_addressonly
 sil @assign_test_addressonly : $@convention(thin) <T> (@in T) -> @out T {
-bb0(%0 : @trivial $*T, %1 :@trivial  $*T):
+bb0(%0 : $*T, %1 : $*T):
   %b = alloc_box $<τ_0_0> { var τ_0_0 } <T>
   %ba = project_box %b : $<τ_0_0> { var τ_0_0 } <T>, 0
   %2 = mark_uninitialized [var] %ba : $*T
@@ -348,7 +348,7 @@
 }
 
 sil @test_struct : $@convention(thin) (@inout ContainsNativeObject) -> () {
-bb0(%0 : @trivial $*ContainsNativeObject):
+bb0(%0 : $*ContainsNativeObject):
   %b = alloc_box $<τ_0_0> { var τ_0_0 } <ContainsNativeObject>
   %ba = project_box %b : $<τ_0_0> { var τ_0_0 } <ContainsNativeObject>, 0
   %c = mark_uninitialized [var] %ba : $*ContainsNativeObject
@@ -365,7 +365,7 @@
 // CHECK: assign
 // CHECK: return
 sil @non_box_assign_trivial : $@convention(thin) (@inout Bool, Bool) -> () {
-bb0(%0 : @trivial $*Bool, %1 : @trivial $Bool):
+bb0(%0 : $*Bool, %1 : $Bool):
   assign %1 to %0 : $*Bool
   %9 = tuple ()
   return %9 : $()
@@ -376,7 +376,7 @@
 // CHECK: assign
 // CHECK: return
 sil @non_box_assign : $@convention(thin) (@inout SomeClass, @owned SomeClass) -> () {
-bb0(%0 : @trivial $*SomeClass, %1 : @owned $SomeClass):
+bb0(%0 : $*SomeClass, %1 : @owned $SomeClass):
   assign %1 to %0 : $*SomeClass
   %9 = tuple ()
   return %9 : $()
@@ -448,7 +448,7 @@
 // rdar://15379013
 // CHECK-LABEL: sil @init_existential_with_class
 sil @init_existential_with_class : $@convention(thin) (@inout C) -> () {
-entry(%a : @trivial $*C):
+entry(%a : $*C):
   %p = alloc_stack $P
   %b = mark_uninitialized [var] %p : $*P
 
@@ -469,7 +469,7 @@
 // emit a boolean control value to make sure the value is only destroyed if
 //  actually initialized.
 sil @conditional_init : $@convention(thin) (Bool) -> () {
-bb0(%0 : @trivial $Bool):
+bb0(%0 : $Bool):
   %2 = alloc_stack $SomeClass
   %3 = mark_uninitialized [var] %2 : $*SomeClass
 
@@ -498,7 +498,7 @@
 
 // CHECK-LABEL: sil @conditionalInitOrAssign
 sil @conditionalInitOrAssign : $@convention(thin) (Builtin.Int1) -> () {
-bb0(%0 : @trivial $Builtin.Int1):
+bb0(%0 : $Builtin.Int1):
   // CHECK: [[CONTROL:%[0-9]+]] = alloc_stack $Builtin.Int1
   // CHECK: [[CLASSVAL:%[0-9]+]] = alloc_stack $SomeClass
   // CHECK: integer_literal $Builtin.Int1, 0
@@ -593,7 +593,7 @@
 // CHECK-NOT: mark_uninitialized [var]
 // CHECK: } // end sil function 'lldb_unsupported_markuninitialized_testcase'
 sil @lldb_unsupported_markuninitialized_testcase : $@convention(thin) (UnsafeMutablePointer<Any>) -> () {
-bb0(%0 : @trivial $UnsafeMutablePointer<Any>):
+bb0(%0 : $UnsafeMutablePointer<Any>):
   %2 = struct_extract %0 : $UnsafeMutablePointer<Any>, #UnsafeMutablePointer._rawValue
   %3 = integer_literal $Builtin.Int64, 8
   %4 = index_raw_pointer %2 : $Builtin.RawPointer, %3 : $Builtin.Int64
diff --git a/test/SILOptimizer/definite_init_scalarization_test.sil b/test/SILOptimizer/definite_init_scalarization_test.sil
index e1699fb..5591365 100644
--- a/test/SILOptimizer/definite_init_scalarization_test.sil
+++ b/test/SILOptimizer/definite_init_scalarization_test.sil
@@ -24,7 +24,7 @@
 }
 
 // CHECK-LABEL: sil @test_store_trivial : $@convention(thin) (TripleInt, TripleInt, TripleInt) -> () {
-// CHECK: bb0([[ARG0:%.*]] : @trivial $TripleInt, [[ARG1:%.*]] : @trivial $TripleInt, [[ARG2:%.*]] : @trivial $TripleInt):
+// CHECK: bb0([[ARG0:%.*]] : $TripleInt, [[ARG1:%.*]] : $TripleInt, [[ARG2:%.*]] : $TripleInt):
 // CHECK:   [[BOX:%.*]] = alloc_box
 // CHECK:   [[PB_BOX:%.*]] = project_box [[BOX]]
 // CHECK:   [[ELT0:%.*]] = tuple_element_addr [[PB_BOX]] : $*(TripleInt, (TripleInt, TripleInt)), 0
@@ -41,7 +41,7 @@
 // CHECK:   destroy_value [[BOX]]
 // CHECK: } // end sil function 'test_store_trivial'
 sil @test_store_trivial : $@convention(thin) (TripleInt, TripleInt, TripleInt) -> () {
-bb0(%0 : @trivial $TripleInt, %1 : @trivial $TripleInt, %1a : @trivial $TripleInt):
+bb0(%0 : $TripleInt, %1 : $TripleInt, %1a : $TripleInt):
   %2 = alloc_box $<τ_0_0> { var τ_0_0 } <(TripleInt, (TripleInt, TripleInt))>
   %3 = project_box %2 : $<τ_0_0> { var τ_0_0 } <(TripleInt, (TripleInt, TripleInt))>, 0
   %4 = mark_uninitialized [var] %3 : $*(TripleInt, (TripleInt, TripleInt))
@@ -84,7 +84,7 @@
 }
 
 // CHECK-LABEL: sil @test_assign_trivial : $@convention(thin) (TripleInt, TripleInt, TripleInt) -> () {
-// CHECK: bb0([[ARG0:%.*]] : @trivial $TripleInt, [[ARG1:%.*]] : @trivial $TripleInt, [[ARG2:%.*]] : @trivial $TripleInt):
+// CHECK: bb0([[ARG0:%.*]] : $TripleInt, [[ARG1:%.*]] : $TripleInt, [[ARG2:%.*]] : $TripleInt):
 // CHECK:   [[BOX:%.*]] = alloc_box
 // CHECK:   [[PB_BOX:%.*]] = project_box [[BOX]]
 // CHECK:   [[ELT0:%.*]] = tuple_element_addr [[PB_BOX]] : $*(TripleInt, (TripleInt, TripleInt)), 0
@@ -101,7 +101,7 @@
 // CHECK:   destroy_value [[BOX]]
 // CHECK: } // end sil function 'test_assign_trivial'
 sil @test_assign_trivial : $@convention(thin) (TripleInt, TripleInt, TripleInt) -> () {
-bb0(%0 : @trivial $TripleInt, %1 : @trivial $TripleInt, %1a : @trivial $TripleInt):
+bb0(%0 : $TripleInt, %1 : $TripleInt, %1a : $TripleInt):
   %2 = alloc_box $<τ_0_0> { var τ_0_0 } <(TripleInt, (TripleInt, TripleInt))>
   %3 = project_box %2 : $<τ_0_0> { var τ_0_0 } <(TripleInt, (TripleInt, TripleInt))>, 0
   %4 = mark_uninitialized [var] %3 : $*(TripleInt, (TripleInt, TripleInt))
@@ -114,7 +114,7 @@
 }
 
 // CHECK-LABEL: sil @test_assign_trivial_2 : $@convention(thin) (TripleInt, TripleInt, TripleInt) -> () {
-// CHECK: bb0([[ARG0:%.*]] : @trivial $TripleInt, [[ARG1:%.*]] : @trivial $TripleInt, [[ARG2:%.*]] : @trivial $TripleInt):
+// CHECK: bb0([[ARG0:%.*]] : $TripleInt, [[ARG1:%.*]] : $TripleInt, [[ARG2:%.*]] : $TripleInt):
 // CHECK:   [[BOX:%.*]] = alloc_box $<τ_0_0> { var τ_0_0 } <(TripleInt, (TripleInt, TripleInt))>
 // CHECK:   [[PROJ_BOX:%.*]] = project_box [[BOX]] : $<τ_0_0> { var τ_0_0 } <(TripleInt, (TripleInt, TripleInt))>, 0
 // CHECK:   [[PROJ_BOX_0:%.*]] = tuple_element_addr [[PROJ_BOX]] : $*(TripleInt, (TripleInt, TripleInt)), 0
@@ -137,7 +137,7 @@
 // CHECK:   destroy_value [[BOX]] : $<τ_0_0> { var τ_0_0 } <(TripleInt, (TripleInt, TripleInt))>
 // CHECK: } // end sil function 'test_assign_trivial_2'
 sil @test_assign_trivial_2 : $@convention(thin) (TripleInt, TripleInt, TripleInt) -> () {
-bb0(%0 : @trivial $TripleInt, %1 : @trivial $TripleInt, %1a : @trivial $TripleInt):
+bb0(%0 : $TripleInt, %1 : $TripleInt, %1a : $TripleInt):
   %2 = alloc_box $<τ_0_0> { var τ_0_0 } <(TripleInt, (TripleInt, TripleInt))>
   %3 = project_box %2 : $<τ_0_0> { var τ_0_0 } <(TripleInt, (TripleInt, TripleInt))>, 0
   %4 = mark_uninitialized [var] %3 : $*(TripleInt, (TripleInt, TripleInt))
diff --git a/test/SILOptimizer/devirt_specialized_conformance.swift b/test/SILOptimizer/devirt_specialized_conformance.swift
index 9f636c0..8df90ee 100644
--- a/test/SILOptimizer/devirt_specialized_conformance.swift
+++ b/test/SILOptimizer/devirt_specialized_conformance.swift
@@ -57,11 +57,14 @@
 func takesPointer(_ p: UnsafeRawBufferPointer) {}
 
 // In specialized testWithUnsafeBytes<A>(_:), the conditional case and call to withUnsafeBytes must be eliminated.
+// Normally, we expect Array.withUnsafeBytes to be inlined so we would see:
+//   [[TAKES_PTR:%.*]] = function_ref @$s30devirt_specialized_conformance12takesPointeryySWF : $@convention(thin) (UnsafeRawBufferPointer) -> ()
+//   apply [[TAKES_PTR]](%{{.*}}) : $@convention(thin) (UnsafeRawBufferPointer) -> ()
+// But the inlining isn't consistent across builds with and without debug info.
+//
 // CHECK-LABEL: sil shared [noinline] @$s30devirt_specialized_conformance19testWithUnsafeBytesyyxlFSayypG_Tg5 : $@convention(thin) (@guaranteed Array<Any>) -> () {
 // CHECK: bb0
 // CHECK-NOT: witness_method
-// CHECK: [[TAKES_PTR:%.*]] = function_ref @$s30devirt_specialized_conformance12takesPointeryySWF : $@convention(thin) (UnsafeRawBufferPointer) -> ()
-// CHECK: apply [[TAKES_PTR]](%{{.*}}) : $@convention(thin) (UnsafeRawBufferPointer) -> ()
 // CHECK-LABEL: } // end sil function '$s30devirt_specialized_conformance19testWithUnsafeBytesyyxlFSayypG_Tg5'
 @inline(never)
 func testWithUnsafeBytes<T>(_ t: T) {
diff --git a/test/SILOptimizer/exclusivity_static_diagnostics.sil b/test/SILOptimizer/exclusivity_static_diagnostics.sil
index dcdaef7..e306419 100644
--- a/test/SILOptimizer/exclusivity_static_diagnostics.sil
+++ b/test/SILOptimizer/exclusivity_static_diagnostics.sil
@@ -18,7 +18,7 @@
 
 // CHECK-LABEL: sil hidden @twoLocalInoutsDisaliased
 sil hidden @twoLocalInoutsDisaliased : $@convention(thin) (Int) -> () {
-bb0(%0 : @trivial $Int):
+bb0(%0 : $Int):
   %2 = alloc_box ${ var Int }
   %3 = project_box %2 : ${ var Int }, 0
   store %0 to [trivial] %3 : $*Int
@@ -39,7 +39,7 @@
 
 // CHECK-LABEL: sil hidden @twoLocalInoutsSimpleAliasing
 sil hidden @twoLocalInoutsSimpleAliasing : $@convention(thin) (Int) -> () {
-bb0(%0 : @trivial $Int):
+bb0(%0 : $Int):
   %2 = alloc_box ${ var Int }
   %3 = project_box %2 : ${ var Int }, 0
   store %0 to [trivial] %3 : $*Int
@@ -56,7 +56,7 @@
 
 // CHECK-LABEL: sil hidden @conflictingPriorAccess
 sil hidden @conflictingPriorAccess : $@convention(thin) (Int) -> () {
-bb0(%0 : @trivial $Int):
+bb0(%0 : $Int):
   %2 = alloc_box ${ var Int }
   %3 = project_box %2 : ${ var Int }, 0
   store %0 to [trivial] %3 : $*Int
@@ -75,7 +75,7 @@
 
 // CHECK-LABEL: sil hidden @twoSequentialInouts
 sil hidden @twoSequentialInouts : $@convention(thin) (Int) -> () {
-bb0(%0 : @trivial $Int):
+bb0(%0 : $Int):
   %2 = alloc_box ${ var Int }
   %3 = project_box %2 : ${ var Int }, 0
   store %0 to [trivial] %3 : $*Int
@@ -94,7 +94,7 @@
 
 // CHECK-LABEL: sil hidden @unconditionalBranch
 sil hidden @unconditionalBranch : $@convention(thin) (Int) -> () {
-bb0(%0 : @trivial $Int):
+bb0(%0 : $Int):
   %2 = alloc_box ${ var Int }
   %3 = project_box %2 : ${ var Int }, 0
   store %0 to [trivial] %3 : $*Int
@@ -109,7 +109,7 @@
 
 // CHECK-LABEL: sil hidden @diamondMergeStacks
 sil hidden @diamondMergeStacks : $@convention(thin) (Int, Builtin.Int1) -> () {
-bb0(%0 : @trivial $Int, %1 : @trivial $Builtin.Int1):
+bb0(%0 : $Int, %1 : $Builtin.Int1):
   %2 = alloc_box ${ var Int }
   %3 = project_box %2 : ${ var Int }, 0
   store %0 to [trivial] %3 : $*Int
@@ -129,7 +129,7 @@
 
 // CHECK-LABEL: sil hidden @loopMergeStacks
 sil hidden @loopMergeStacks : $@convention(thin) (Int, Builtin.Int1) -> () {
-bb0(%0 : @trivial $Int, %1 : @trivial $Builtin.Int1):
+bb0(%0 : $Int, %1 : $Builtin.Int1):
   %2 = alloc_box ${ var Int }
   %3 = project_box %2 : ${ var Int }, 0
   store %0 to [trivial] %3 : $*Int
@@ -146,7 +146,7 @@
 
 // CHECK-LABEL: sil hidden @loopWithError
 sil hidden @loopWithError : $@convention(thin) (Int, Builtin.Int1) -> () {
-bb0(%0 : @trivial $Int, %1 : @trivial $Builtin.Int1):
+bb0(%0 : $Int, %1 : $Builtin.Int1):
   %2 = alloc_box ${ var Int }
   %3 = project_box %2 : ${ var Int }, 0
   store %0 to [trivial] %3 : $*Int
@@ -166,7 +166,7 @@
 
 // CHECK-LABEL: sil hidden @modifySubAccessesAreAllowed
 sil hidden @modifySubAccessesAreAllowed : $@convention(thin) (Int) -> () {
-bb0(%0 : @trivial $Int):
+bb0(%0 : $Int):
   %2 = alloc_box ${ var Int }
   %3 = project_box %2 : ${ var Int }, 0
   store %0 to [trivial] %3 : $*Int
@@ -185,7 +185,7 @@
 
 // CHECK-LABEL: sil hidden @twoLocalReadsSimpleAliasing
 sil hidden @twoLocalReadsSimpleAliasing : $@convention(thin) (Int) -> () {
-bb0(%0 : @trivial $Int):
+bb0(%0 : $Int):
   %1 = alloc_box ${ var Int }
   %2 = project_box %1 : ${ var Int }, 0
   store %0 to [trivial] %2 : $*Int
@@ -200,7 +200,7 @@
 
 // CHECK-LABEL: sil hidden @localReadFollowedByModify
 sil hidden @localReadFollowedByModify : $@convention(thin) (Int) -> () {
-bb0(%0 : @trivial $Int):
+bb0(%0 : $Int):
   %1 = alloc_box ${ var Int }
   %2 = project_box %1 : ${ var Int }, 0
   store %0 to [trivial] %2 : $*Int
@@ -215,7 +215,7 @@
 
 // CHECK-LABEL: sil hidden @localModifyFollowedByRead
 sil hidden @localModifyFollowedByRead : $@convention(thin) (Int) -> () {
-bb0(%0 : @trivial $Int):
+bb0(%0 : $Int):
   %1 = alloc_box ${ var Int }
   %2 = project_box %1 : ${ var Int }, 0
   store %0 to [trivial] %2 : $*Int
@@ -279,7 +279,7 @@
 
 // CHECK-LABEL: sil hidden @twoAllocBoxProjections
 sil hidden @twoAllocBoxProjections : $@convention(thin) (Int) -> () {
-bb0(%0 : @trivial $Int):
+bb0(%0 : $Int):
   %2 = alloc_box ${ var Int }
   %3 = project_box %2 : ${ var Int }, 0
   store %0 to [trivial] %3 : $*Int
@@ -297,7 +297,7 @@
 
 // CHECK-LABEL: sil hidden @lookThroughMarkUninitialized
 sil hidden @lookThroughMarkUninitialized : $@convention(thin) (Int) -> () {
-bb0(%0 : @trivial $Int):
+bb0(%0 : $Int):
   %1 = alloc_box ${ var Int }
   %2 = mark_uninitialized [rootself] %1 : ${ var Int }
   %3 = project_box %2 : ${ var Int }, 0
@@ -318,7 +318,7 @@
 
 // CHECK-LABEL: sil hidden @modifySameGlobal
 sil hidden @modifySameGlobal : $@convention(thin) (Int) -> () {
-bb0(%0 : @trivial $Int):
+bb0(%0 : $Int):
   %1 = global_addr @global1 :$*Int
   %2 = global_addr @global1 :$*Int
   %3 = begin_access [modify] [unknown] %1 : $*Int  // expected-error {{overlapping accesses, but modification requires exclusive access; consider copying to a local variable}}
@@ -331,7 +331,7 @@
 
 // CHECK-LABEL: sil hidden @modifyDifferentGlobal
 sil hidden @modifyDifferentGlobal : $@convention(thin) (Int) -> () {
-bb0(%0 : @trivial $Int):
+bb0(%0 : $Int):
   %1 = global_addr @global1 :$*Int
   %2 = global_addr @global2 :$*Int
   %3 = begin_access [modify] [unknown] %1 : $*Int
@@ -348,7 +348,7 @@
 // sure the second read doesn't report a confusing read-read conflict.
 // CHECK-LABEL: sil hidden @readWriteReadConflictingThirdAccess
 sil hidden @readWriteReadConflictingThirdAccess : $@convention(thin) (Int) -> () {
-bb0(%0 : @trivial $Int):
+bb0(%0 : $Int):
   %2 = alloc_box ${ var Int }
   %3 = project_box %2 : ${ var Int }, 0
   store %0 to [trivial] %3 : $*Int
@@ -369,7 +369,7 @@
 // third write doesn't report a conflict.
 // CHECK-LABEL: sil hidden @writeWriteWriteConflictingThirdAccess
 sil hidden @writeWriteWriteConflictingThirdAccess : $@convention(thin) (Int) -> () {
-bb0(%0 : @trivial $Int):
+bb0(%0 : $Int):
   %2 = alloc_box ${ var Int }
   %3 = project_box %2 : ${ var Int }, 0
   store %0 to [trivial] %3 : $*Int
@@ -391,7 +391,7 @@
 // about the conflict and not the first
 // CHECK-LABEL: sil hidden @resetFirstAccessForNote
 sil hidden @resetFirstAccessForNote : $@convention(thin) (Int) -> () {
-bb0(%0 : @trivial $Int):
+bb0(%0 : $Int):
   %2 = alloc_box ${ var Int }
   %3 = project_box %2 : ${ var Int }, 0
   store %0 to [trivial] %3 : $*Int
@@ -416,7 +416,7 @@
 //  The unreachable block below must branch to bN where
 //    N = 3/4 * INITIAL_SIZE - 2
 sil @blockMapRehash : $@convention(method) (Builtin.Int1) -> () {
-bb0(%0 : @trivial $Builtin.Int1):
+bb0(%0 : $Builtin.Int1):
  br bb1
 bb1:
   br bb2
@@ -473,7 +473,7 @@
 //
 // CHECK-LABEL: sil hidden  @pointerToAddr
 sil hidden  @pointerToAddr : $@convention(thin) (Builtin.RawPointer) -> Int {
-bb0(%0: @trivial $Builtin.RawPointer):
+bb0(%0: $Builtin.RawPointer):
   %adr = pointer_to_address %0 : $Builtin.RawPointer to [strict] $*Int
   %access = begin_access [read] [dynamic] %adr : $*Int
   %val = load [trivial] %access : $*Int
@@ -492,7 +492,7 @@
 //
 // CHECK-LABEL: sil hidden @inlinedStructElement
 sil hidden @inlinedStructElement : $@convention(thin) (@inout S) -> Int {
-bb0(%0 : @trivial $*S):
+bb0(%0 : $*S):
   %2 = begin_access [modify] [static] %0 : $*S
   %3 = struct_element_addr %2 : $*S, #S.x
   %4 = begin_access [read] [static] %3 : $*Int
@@ -507,7 +507,7 @@
 //
 // CHECK-LABEL: sil hidden @inlinedTupleElement
 sil hidden @inlinedTupleElement : $@convention(thin) (@inout (Int, Int)) -> Int {
-bb0(%0 : @trivial $*(Int, Int)):
+bb0(%0 : $*(Int, Int)):
   %2 = begin_access [modify] [static] %0 : $*(Int, Int)
   %3 = tuple_element_addr %2 : $*(Int, Int), 0
   %4 = begin_access [read] [static] %3 : $*Int
@@ -522,7 +522,7 @@
 //
 // CHECK-LABEL: sil hidden @inlinedEnumValue
 sil hidden @inlinedEnumValue : $@convention(thin) (Int) -> (@out Optional<Int>, Int) {
-bb0(%0 : @trivial $*Optional<Int>, %1 : @trivial $Int):
+bb0(%0 : $*Optional<Int>, %1 : $Int):
   %6 = unchecked_take_enum_data_addr %0 : $*Optional<Int>, #Optional.some!enumelt.1
   %7 = begin_access [read] [static] %6 : $*Int
   %8 = load [trivial] %7 : $*Int
@@ -538,7 +538,7 @@
 //
 // CHECK-LABEL: sil hidden @inlinedArrayProp
 sil hidden @inlinedArrayProp : $@convention(thin) (@guaranteed Storage, Builtin.Word) -> Int {
-bb0(%0 : @guaranteed $Storage, %1 : @trivial $Builtin.Word):
+bb0(%0 : @guaranteed $Storage, %1 : $Builtin.Word):
   %2 = ref_tail_addr %0 : $Storage, $UInt
   %3 = begin_access [read] [static] %2 : $*UInt
   %4 = tail_addr %3 : $*UInt, %1 : $Builtin.Word, $Int
@@ -555,7 +555,7 @@
 // Conflicts involving noescape closures.
 
 sil hidden @closureThatModifiesCaptureAndTakesInout: $@convention(thin) (@inout Int, @inout_aliasable Int) -> () {
-bb0(%0 : @trivial $*Int, %1 : @trivial $*Int):
+bb0(%0 : $*Int, %1 : $*Int):
   %2 = begin_access [modify] [unknown] %1 : $*Int // expected-note {{conflicting access is here}}
   end_access %2 : $*Int
   %3 = tuple ()
@@ -571,7 +571,7 @@
 //
 // CHECK-LABEL: sil hidden @inProgressModifyModifyConflictWithCallToClosure
 sil hidden @inProgressModifyModifyConflictWithCallToClosure : $@convention(thin) (Int) -> () {
-bb0(%0 : @trivial $Int):
+bb0(%0 : $Int):
   %2 = alloc_box ${ var Int }
   %3 = project_box %2 : ${ var Int }, 0
   store %0 to [trivial] %3 : $*Int
@@ -585,7 +585,7 @@
 }
 
 sil hidden @closureWithArgument_1 : $@convention(thin) (Int, @inout_aliasable Int) -> () {
-bb0(%0 : @trivial $Int, %1 : @trivial $*Int):
+bb0(%0 : $Int, %1 : $*Int):
   %2 = begin_access [modify] [unknown] %1 : $*Int // expected-note 2 {{conflicting access is here}}
   end_access %2 : $*Int
   %3 = tuple ()
@@ -594,7 +594,7 @@
 
 // CHECK-LABEL: sil hidden @inProgressConflictWithNoEscapeClosureArgument
 sil hidden @inProgressConflictWithNoEscapeClosureArgument : $@convention(thin) (Int) -> () {
-bb0(%0 : @trivial $Int):
+bb0(%0 : $Int):
   %2 = alloc_box ${ var Int }
   %3 = project_box %2 : ${ var Int }, 0
   store %0 to [trivial] %3 : $*Int
@@ -612,7 +612,7 @@
 
 // CHECK-LABEL: sil hidden @inProgressConflictWithNoEscapeGuaranteedClosureArgument : $@convention(thin) (Int) -> () {
 sil hidden @inProgressConflictWithNoEscapeGuaranteedClosureArgument : $@convention(thin) (Int) -> () {
-bb0(%0 : @trivial $Int):
+bb0(%0 : $Int):
   %2 = alloc_box ${ var Int }
   %3 = project_box %2 : ${ var Int }, 0
   store %0 to [trivial] %3 : $*Int
@@ -631,7 +631,7 @@
 }
 
 sil hidden @closureThatModifiesCapture_2 : $@convention(thin) (@inout_aliasable Int) -> () {
-bb0(%0 : @trivial $*Int):
+bb0(%0 : $*Int):
   %1 = begin_access [modify] [unknown] %0 : $*Int // expected-error {{overlapping accesses, but modification requires exclusive access; consider copying to a local variable}}
   end_access %1 : $*Int
   %2 = tuple ()
@@ -640,7 +640,7 @@
 
 // CHECK-LABEL: sil hidden @inProgressReadModifyConflictWithNoEscapeClosureArgument
 sil hidden @inProgressReadModifyConflictWithNoEscapeClosureArgument : $@convention(thin) (Int) -> () {
-bb0(%0 : @trivial $Int):
+bb0(%0 : $Int):
   %2 = alloc_box ${ var Int }
   %3 = project_box %2 : ${ var Int }, 0
   store %0 to [trivial] %3 : $*Int
@@ -657,7 +657,7 @@
 }
 
 sil hidden @closureWithConcreteReturn : $@convention(thin) (Int, @inout_aliasable Int) -> (Int) {
-bb0(%0 : @trivial $Int, %1 : @trivial $*Int):
+bb0(%0 : $Int, %1 : $*Int):
   %2 = begin_access [modify] [unknown] %1 : $*Int // expected-note {{conflicting access is here}}
   end_access %2 : $*Int
   return %0 : $Int
@@ -667,7 +667,7 @@
 
 // CHECK-LABEL: sil hidden @inProgressConflictWithNoEscapeClosureWithReabstractionThunk
 sil hidden @inProgressConflictWithNoEscapeClosureWithReabstractionThunk : $@convention(thin) (Int) -> () {
-bb0(%0 : @trivial $Int):
+bb0(%0 : $Int):
   %2 = alloc_box ${ var Int }
   %3 = project_box %2 : ${ var Int }, 0
   store %0 to [trivial] %3 : $*Int
@@ -690,7 +690,7 @@
 sil [reabstraction_thunk] @withoutActuallyEscapingThunk : $@convention(thin) (@noescape @callee_guaranteed () -> ()) -> ()
 
 sil hidden @closureThatModifiesCapture_1: $@convention(thin) (@inout_aliasable Int) -> () {
-bb0(%0 : @trivial $*Int):
+bb0(%0 : $*Int):
   %1 = begin_access [modify] [unknown] %0 : $*Int // expected-note 3{{conflicting access is here}}
   end_access %1 : $*Int
   %2 = tuple ()
@@ -699,7 +699,7 @@
 
 // CHECK-LABEL: sil hidden @inProgressConflictWithNoEscapeClosureWithBlockStorage
 sil hidden @inProgressConflictWithNoEscapeClosureWithBlockStorage : $@convention(thin) (Int) -> () {
-bb0(%0 : @trivial $Int):
+bb0(%0 : $Int):
   %2 = alloc_box ${ var Int }
   %3 = project_box %2 : ${ var Int }, 0
   store %0 to [trivial] %3 : $*Int
@@ -729,7 +729,7 @@
 
 // CHECK-LABEL: sil hidden @inProgressConflictWithNoEscapeClosureWithOptionalBlockStorage
 sil hidden @inProgressConflictWithNoEscapeClosureWithOptionalBlockStorage : $@convention(thin) (Int) -> () {
-bb0(%0 : @trivial $Int):
+bb0(%0 : $Int):
   %2 = alloc_box ${ var Int }
   %3 = project_box %2 : ${ var Int }, 0
   store %0 to [trivial] %3 : $*Int
@@ -777,7 +777,7 @@
 
 // CHECK-LABEL: sil hidden @twoSeparateStoredProperties
 sil hidden @twoSeparateStoredProperties : $@convention(thin) (Int) -> () {
-bb0(%0 : @trivial $Int):
+bb0(%0 : $Int):
   %2 = alloc_box ${ var StructWithStoredProps }
   %3 = project_box %2 : ${ var StructWithStoredProps }, 0
   %4 = function_ref @takesTwoInouts : $@convention(thin) (@inout Int, @inout Int) -> ()
@@ -795,7 +795,7 @@
 
 // CHECK-LABEL: sil hidden @twoSeparateNestedStoredProperties
 sil hidden @twoSeparateNestedStoredProperties : $@convention(thin) (Int) -> () {
-bb0(%0 : @trivial $Int):
+bb0(%0 : $Int):
   %2 = alloc_box ${ var StructWithStoredProps }
   %3 = project_box %2 : ${ var StructWithStoredProps }, 0
   %4 = function_ref @takesTwoInouts : $@convention(thin) (@inout Int, @inout Int) -> ()
@@ -815,7 +815,7 @@
 
 // CHECK-LABEL: sil hidden @theSameStoredProperty
 sil hidden @theSameStoredProperty : $@convention(thin) (Int) -> () {
-bb0(%0 : @trivial $Int):
+bb0(%0 : $Int):
   %2 = alloc_box ${ var StructWithStoredProps }
   %3 = project_box %2 : ${ var StructWithStoredProps }, 0
   %4 = function_ref @takesTwoInouts : $@convention(thin) (@inout Int, @inout Int) -> ()
@@ -833,7 +833,7 @@
 
 // CHECK-LABEL: sil hidden @storedPropertyAndAggregate
 sil hidden @storedPropertyAndAggregate : $@convention(thin) (Int) -> () {
-bb0(%0 : @trivial $Int):
+bb0(%0 : $Int):
   %2 = alloc_box ${ var StructWithStoredProps }
   %3 = project_box %2 : ${ var StructWithStoredProps }, 0
   %4 = function_ref @takesInoutIntAndStructWithStoredProps : $@convention(thin) (@inout Int, @inout StructWithStoredProps) -> ()
@@ -850,7 +850,7 @@
 
 // CHECK-LABEL: sil hidden @nestedStoredPropertyAndAggregate
 sil hidden @nestedStoredPropertyAndAggregate : $@convention(thin) (Int) -> () {
-bb0(%0 : @trivial $Int):
+bb0(%0 : $Int):
   %2 = alloc_box ${ var StructWithStoredProps }
   %3 = project_box %2 : ${ var StructWithStoredProps }, 0
   %4 = function_ref @takesInoutIntAndStructWithStoredProps : $@convention(thin) (@inout Int, @inout StructWithStoredProps) -> ()
@@ -868,7 +868,7 @@
 
 // CHECK-LABEL: sil hidden @twoSeparateTupleElements
 sil hidden @twoSeparateTupleElements : $@convention(thin) (Int) -> () {
-bb0(%0 : @trivial $Int):
+bb0(%0 : $Int):
   %2 = alloc_box ${ var (Int, Int) }
   %3 = project_box %2 : ${ var (Int, Int) }, 0
   %4 = function_ref @takesTwoInouts : $@convention(thin) (@inout Int, @inout Int) -> ()
@@ -886,7 +886,7 @@
 
 // CHECK-LABEL: sil hidden @sameTupleElement
 sil hidden @sameTupleElement : $@convention(thin) (Int) -> () {
-bb0(%0 : @trivial $Int):
+bb0(%0 : $Int):
   %2 = alloc_box ${ var (Int, Int) }
   %3 = project_box %2 : ${ var (Int, Int) }, 0
   %4 = function_ref @takesTwoInouts : $@convention(thin) (@inout Int, @inout Int) -> ()
@@ -903,7 +903,7 @@
 }
 
 sil hidden @passNilToNoEscape : $@convention(thin) (Int) -> () {
-bb0(%0 : @trivial $Int):
+bb0(%0 : $Int):
   %2 = alloc_box ${ var Int }
   %3 = project_box %2 : ${ var Int }, 0
   %4 = enum $Optional<@convention(block) @noescape () -> ()>, #Optional.none!enumelt
@@ -914,7 +914,7 @@
 }
 
 sil private @closureForDirectPartialApplyTakingInout : $@convention(thin) (@inout Int, @inout_aliasable Int) -> () {
-bb0(%0 : @trivial $*Int, %1 : @trivial $*Int):
+bb0(%0 : $*Int, %1 : $*Int):
   %access = begin_access [read] [unknown] %1 : $*Int // expected-note 3 {{conflicting access is here}}
   %val = load [trivial] %access : $*Int
   end_access %access : $*Int
@@ -923,7 +923,7 @@
 }
 
 sil hidden @directPartialApplyTakingInout : $@convention(thin) (Int) -> () {
-bb0(%0 : @trivial $Int):
+bb0(%0 : $Int):
   %box = alloc_box ${ var Int }, var, name "i"
   %boxadr = project_box %box : ${ var Int }, 0
   store %0 to [trivial] %boxadr : $*Int
@@ -939,7 +939,7 @@
 }
 
 sil private @closureForDirectPartialApplyChain : $@convention(thin) (@inout Int, Int, @inout_aliasable Int) -> () {
-bb0(%0 : @trivial $*Int, %1 : @trivial $Int, %2 : @trivial $*Int):
+bb0(%0 : $*Int, %1 : $Int, %2 : $*Int):
   %access = begin_access [read] [unknown] %2 : $*Int // expected-note {{conflicting access is here}}
   %val = load [trivial] %access : $*Int
   end_access %access : $*Int
@@ -948,7 +948,7 @@
 }
 
 sil hidden @directPartialApplyChain : $@convention(thin) (Int) -> () {
-bb0(%0 : @trivial $Int):
+bb0(%0 : $Int):
   %box = alloc_box ${ var Int }, var, name "i"
   %boxadr = project_box %box : ${ var Int }, 0
   store %0 to [trivial] %boxadr : $*Int
@@ -965,7 +965,7 @@
 }
 
 sil private @closureForPartialApplyArgChain : $@convention(thin) (Int, @inout_aliasable Int) -> () {
-bb0(%0 : @trivial $Int, %1 : @trivial $*Int):
+bb0(%0 : $Int, %1 : $*Int):
   %access = begin_access [read] [unknown] %1 : $*Int // expected-note {{conflicting access is here}}
   %val = load [trivial] %access : $*Int
   end_access %access : $*Int
@@ -974,7 +974,7 @@
 }
 
 sil hidden @partialApplyArgChain : $@convention(thin) (Int) -> () {
-bb0(%0 : @trivial $Int):
+bb0(%0 : $Int):
   %2 = alloc_box ${ var Int }
   %3 = project_box %2 : ${ var Int }, 0
   store %0 to [trivial] %3 : $*Int
@@ -1000,7 +1000,7 @@
 // Check that this doesn't trigger the DiagnoseStaticExclusivity
 // assert that all accesses have a valid AccessedStorage source.
 sil @lldb_unsupported_markuninitialized_testcase : $@convention(thin) (UnsafeMutablePointer<Any>) -> () {
-bb0(%0 : @trivial $UnsafeMutablePointer<Any>):
+bb0(%0 : $UnsafeMutablePointer<Any>):
   %2 = struct_extract %0 : $UnsafeMutablePointer<Any>, #UnsafeMutablePointer._rawValue
   %3 = integer_literal $Builtin.Int64, 8
   %4 = index_raw_pointer %2 : $Builtin.RawPointer, %3 : $Builtin.Int64
@@ -1029,7 +1029,7 @@
 // address to an inout can result in an enforced (unknown) access on
 // the unsafe address. We need to handle this case without asserting.
 sil @addressorAccess : $@convention(thin) (@guaranteed ClassWithStoredProperty, Int32) -> () {
-bb0(%0 : @guaranteed $ClassWithStoredProperty, %1 : @trivial $Int32):
+bb0(%0 : @guaranteed $ClassWithStoredProperty, %1 : $Int32):
   %f = function_ref @addressor : $@convention(thin) () -> UnsafeMutablePointer<Int32>
   %up = apply %f() : $@convention(thin) () -> UnsafeMutablePointer<Int32>
   %o = unchecked_ref_cast %0 : $ClassWithStoredProperty to $Builtin.NativeObject
@@ -1052,7 +1052,7 @@
 // without the @noescape function-type argument convention.
 
 sil @mutatingNoescapeHelper : $@convention(thin) (Optional<UnsafePointer<Int32>>, @inout_aliasable Int32) -> () {
-bb0(%0 : @trivial $Optional<UnsafePointer<Int32>>, %1 : @trivial $*Int32):
+bb0(%0 : $Optional<UnsafePointer<Int32>>, %1 : $*Int32):
   %up = unchecked_enum_data %0 : $Optional<UnsafePointer<Int32>>, #Optional.some!enumelt.1
   %p = struct_extract %up : $UnsafePointer<Int32>, #UnsafePointer._rawValue
   %adr = pointer_to_address %p : $Builtin.RawPointer to [strict] $*Int32
@@ -1065,7 +1065,7 @@
 }
 
 sil shared [transparent] [serializable] [reabstraction_thunk] @mutatingNoescapeThunk : $@convention(thin) (UnsafePointer<Int32>, @guaranteed @callee_guaranteed (Optional<UnsafePointer<Int32>>) -> ()) -> () {
-bb0(%0 : @trivial $UnsafePointer<Int32>, %1 : @guaranteed $@callee_guaranteed (Optional<UnsafePointer<Int32>>) -> ()):
+bb0(%0 : $UnsafePointer<Int32>, %1 : @guaranteed $@callee_guaranteed (Optional<UnsafePointer<Int32>>) -> ()):
   %e = enum $Optional<UnsafePointer<Int32>>, #Optional.some!enumelt.1, %0 : $UnsafePointer<Int32>
   %c = apply %1(%e) : $@callee_guaranteed (Optional<UnsafePointer<Int32>>) -> ()
   %v = tuple ()
@@ -1078,7 +1078,7 @@
 // passed to a reabstraction_thunk as an escaping function type. This
 // is valid as long as the thunk is only used as a @nosecape type.
 sil @mutatingNoescapeWithThunk : $@convention(method) (UnsafePointer<Int32>, @inout Int32) -> () {
-bb0(%0 : @trivial $UnsafePointer<Int32>, %1 : @trivial $*Int32):
+bb0(%0 : $UnsafePointer<Int32>, %1 : $*Int32):
   %f1 = function_ref @mutatingNoescapeHelper : $@convention(thin) (Optional<UnsafePointer<Int32>>, @inout_aliasable Int32) -> ()
   %pa1 = partial_apply [callee_guaranteed] %f1(%1) : $@convention(thin) (Optional<UnsafePointer<Int32>>, @inout_aliasable Int32) -> ()
   %thunk = function_ref @mutatingNoescapeThunk : $@convention(thin) (UnsafePointer<Int32>, @guaranteed @callee_guaranteed (Optional<UnsafePointer<Int32>>) -> ()) -> ()
@@ -1093,7 +1093,7 @@
 sil @takeInoutAndMutatingNoescapeClosure : $@convention(thin) <τ_0_0> (@inout Int32, UnsafePointer<τ_0_0>, @noescape @callee_guaranteed (UnsafePointer<Int32>) -> ()) -> ()
 
 sil @mutatingNoescapeConflictWithThunk : $@convention(method) (UnsafePointer<Int32>, @inout Int32) -> () {
-bb0(%0 : @trivial $UnsafePointer<Int32>, %1 : @trivial $*Int32):
+bb0(%0 : $UnsafePointer<Int32>, %1 : $*Int32):
   %f1 = function_ref @mutatingNoescapeHelper : $@convention(thin) (Optional<UnsafePointer<Int32>>, @inout_aliasable Int32) -> ()
   %pa1 = partial_apply [callee_guaranteed] %f1(%1) : $@convention(thin) (Optional<UnsafePointer<Int32>>, @inout_aliasable Int32) -> ()
   %thunk = function_ref @mutatingNoescapeThunk : $@convention(thin) (UnsafePointer<Int32>, @guaranteed @callee_guaranteed (Optional<UnsafePointer<Int32>>) -> ()) -> ()
@@ -1137,7 +1137,7 @@
 
 // Test a conflict on a noescape closure where multiple closures may be conditionally stored in an ObjC block.
 sil hidden @noEscapeClosureWithConditionalBlockStorage : $@convention(thin) (Int) -> () {
-bb0(%0 : @trivial $Int):
+bb0(%0 : $Int):
   %box = alloc_box ${ var Int }
   %boxadr = project_box %box : ${ var Int }, 0
   store %0 to [trivial] %boxadr : $*Int
@@ -1194,13 +1194,13 @@
 // closure passed through a block argument.
 
 sil hidden @closureWithNoCapture : $@convention(thin) (Int) -> () {
-bb0(%0 : @trivial $Int):
+bb0(%0 : $Int):
   %2 = tuple ()
   return %2 : $()
 }
 
 sil hidden @closureWithConflict : $@convention(thin) (Int, @inout_aliasable Int) -> () {
-bb0(%0 : @trivial $Int, %1 : @trivial $*Int):
+bb0(%0 : $Int, %1 : $*Int):
   %2 = begin_access [modify] [unknown] %1 : $*Int // expected-note {{conflicting access is here}}
   end_access %2 : $*Int
   %v = tuple ()
@@ -1208,11 +1208,11 @@
 }
 
 sil shared [transparent] [serializable] [reabstraction_thunk] @partialApplyPhiThunk : $@convention(thin) (@in_guaranteed Int, @guaranteed @noescape @callee_guaranteed (Int) -> (@error Error)) -> (@error Error) {
-bb0(%0 : @trivial $*Int, %1 : @trivial $@noescape @callee_guaranteed (Int) -> (@error Error)):
+bb0(%0 : $*Int, %1 : $@noescape @callee_guaranteed (Int) -> (@error Error)):
   %val = load [trivial] %0 : $*Int
   try_apply %1(%val) : $@noescape @callee_guaranteed (Int) -> (@error Error), normal bb1, error bb2
 
-bb1(%v : @trivial $()):
+bb1(%v : $()):
   return %v : $()
 
 bb2(%5 : @owned $Error):
@@ -1223,7 +1223,7 @@
 
 // CHECK-LABEL: sil @testPartialApplyPhi
 sil @testPartialApplyPhi : $@convention(thin) (Int, @inout Int) -> (@error Error) {
-bb0(%0 : @trivial $Int, %1 : @trivial $*Int):
+bb0(%0 : $Int, %1 : $*Int):
   cond_br undef, bb1, bb2
 
 bb1:
@@ -1252,7 +1252,7 @@
   %f4 = function_ref @takeGenericNoEscapeFunction : $@convention(method) <τ_0_0> (@inout τ_0_0, @noescape @callee_guaranteed (@in_guaranteed τ_0_0) -> (@error Error)) -> (@error Error)
   try_apply %f4<Int>(%access, %esc4) : $@convention(method) <τ_0_0> (@inout τ_0_0, @noescape @callee_guaranteed (@in_guaranteed τ_0_0) -> (@error Error)) -> (@error Error), normal bb4, error bb5
 
-bb4(%v : @trivial $()):
+bb4(%v : $()):
   end_access %access : $*Int
   return %v : $()
 
@@ -1263,7 +1263,7 @@
 
 // CHECK-LABEL: sil @testDirectPartialApplyPhi
 sil @testDirectPartialApplyPhi : $@convention(thin) (@inout Int) -> (@error Error) {
-bb0(%0 : @trivial $*Int):
+bb0(%0 : $*Int):
   cond_br undef, bb1, bb2
 
 bb1:
@@ -1294,7 +1294,7 @@
 sil @takeEscapingClosure : $@convention(thin) (@guaranteed @callee_guaranteed () -> ()) -> ()
 
 sil private @nestedInWithoutActuallyEscapingVerify : $@convention(thin) (@inout_aliasable Int) -> () {
-bb0(%0 : @trivial $*Int):
+bb0(%0 : $*Int):
   %a = begin_access [modify] [unknown] %0 : $*Int
   end_access %a : $*Int
   %v = tuple ()
@@ -1303,7 +1303,7 @@
 
 // CHECK-LABEL: sil hidden @testWithoutActuallyEscapingVerify : $@convention(thin) (@inout Int) -> () {
 sil hidden @testWithoutActuallyEscapingVerify : $@convention(thin) (@inout Int) -> () {
-bb0(%0 : @trivial $*Int):
+bb0(%0 : $*Int):
   %2 = function_ref @nestedInWithoutActuallyEscapingVerify : $@convention(thin) (@inout_aliasable Int) -> ()
   %3 = partial_apply [callee_guaranteed] %2(%0) : $@convention(thin) (@inout_aliasable Int) -> ()
 
@@ -1343,7 +1343,7 @@
 // CHECK-LABEL: sil hidden @testWithoutActuallyEscapingBlockVerify : $@convention(thin) (Int) -> () {
 // CHECK: convert_function %{{.*}} : $@convention(block) () -> () to [without_actually_escaping] $@convention(block) () -> ()
 sil hidden @testWithoutActuallyEscapingBlockVerify : $@convention(thin) (Int) -> () {
-bb0(%0 : @trivial $Int):
+bb0(%0 : $Int):
   %box = alloc_box ${ var Int }, var, name "localVal"
   %projbox = project_box %box : ${ var Int }, 0
   store %0 to [trivial] %projbox : $*Int
@@ -1375,7 +1375,7 @@
 // thunk for @escaping @callee_guaranteed () -> ()
 sil shared [transparent] [serializable] [reabstraction_thunk] @$sIeg_IeyB_TR : $@convention(c) (@inout_aliasable @block_storage @callee_guaranteed () -> ()) -> () {
 // %0
-bb0(%0 : @trivial $*@block_storage @callee_guaranteed () -> ()):
+bb0(%0 : $*@block_storage @callee_guaranteed () -> ()):
   %1 = project_block_storage %0 : $*@block_storage @callee_guaranteed () -> ()
   %2 = load [copy] %1 : $*@callee_guaranteed () -> ()
   %3 = begin_borrow %2 : $@callee_guaranteed () -> ()
diff --git a/test/SILOptimizer/guaranteed_arc_opts.sil b/test/SILOptimizer/guaranteed_arc_opts.sil
index f11c522..eb294d5 100644
--- a/test/SILOptimizer/guaranteed_arc_opts.sil
+++ b/test/SILOptimizer/guaranteed_arc_opts.sil
@@ -26,7 +26,7 @@
 // CHECK-NOT: destroy_value
 // CHECK: return [[ARG1]]
 sil @copyvalue_test2 : $@convention(thin) (Builtin.NativeObject, @in Builtin.Int32) -> Builtin.NativeObject {
-bb0(%0 : @unowned $Builtin.NativeObject, %1 : @trivial $*Builtin.Int32):
+bb0(%0 : @unowned $Builtin.NativeObject, %1 : $*Builtin.Int32):
   %2 = copy_value %0 : $Builtin.NativeObject
   %3 = integer_literal $Builtin.Int32, 0
   store %3 to [trivial] %1 : $*Builtin.Int32
diff --git a/test/SILOptimizer/inline_begin_apply.sil b/test/SILOptimizer/inline_begin_apply.sil
index 2be4c42..cd3794c 100644
--- a/test/SILOptimizer/inline_begin_apply.sil
+++ b/test/SILOptimizer/inline_begin_apply.sil
@@ -45,7 +45,7 @@
 }
 
 // CHECK-LABEL: sil @test_simple_call
-// CHECK: bb0(%0 : @trivial $Builtin.Int1):
+// CHECK: bb0(%0 : $Builtin.Int1):
 // CHECK:  [[MARKER:%.*]] = function_ref @marker
 // CHECK:  [[MARKER2:%.*]] = function_ref @marker
 // CHECK:  [[I:%.*]] = integer_literal $Builtin.Int32, 1000
@@ -81,7 +81,7 @@
 // CHECK:}
 
 sil @test_simple_call : $(Builtin.Int1) -> () {
-entry(%flag : @trivial $Builtin.Int1):
+entry(%flag : $Builtin.Int1):
   %marker = function_ref @marker : $@convention(thin) (Builtin.Int32) -> ()
   %0 = function_ref @test_one_yield : $@convention(thin) @yield_once <T: SomeClass> () -> (@yields @in Indirect<T>)
   (%value, %token) = begin_apply %0<SomeSubclass>() : $@convention(thin) @yield_once <T: SomeClass> () -> (@yields @in Indirect<T>)
@@ -110,7 +110,7 @@
 }
 
 sil [transparent] @test_two_yield : $@yield_once <C: SomeClass> (Builtin.Int1) -> (@yields @in Indirect<C>, @yields Builtin.Int64) {
-entry(%0 : @trivial $Builtin.Int1):
+entry(%0 : $Builtin.Int1):
   %marker = function_ref @marker : $@convention(thin) (Builtin.Int32) -> ()
   %1000 = integer_literal $Builtin.Int32, 1000
   apply %marker(%1000) : $@convention(thin) (Builtin.Int32) -> ()
@@ -154,12 +154,12 @@
 
 // We don't support inlining functions with multiple yields yet.
 // CHECK-LABEL: sil @test_simple_call_two_yields : $@convention(thin) (Builtin.Int1, Builtin.Int1) -> () {
-// CHECK: bb0(%0 : @trivial $Builtin.Int1, %1 : @trivial $Builtin.Int1):
+// CHECK: bb0(%0 : $Builtin.Int1, %1 : $Builtin.Int1):
 // CHECK:   begin_apply
 // CHECK:   return
 
 sil @test_simple_call_two_yields : $(Builtin.Int1, Builtin.Int1) -> () {
-entry(%flag : @trivial $Builtin.Int1, %flag2 : @trivial $Builtin.Int1):
+entry(%flag : $Builtin.Int1, %flag2 : $Builtin.Int1):
   %marker = function_ref @marker : $@convention(thin) (Builtin.Int32) -> ()
   %0 = function_ref @test_two_yield : $@convention(thin) @yield_once <T: SomeClass> (Builtin.Int1) -> (@yields @in Indirect<T>, @yields Builtin.Int64)
   (%value, %value2, %token) = begin_apply %0<SomeSubclass>(%flag) : $@convention(thin) @yield_once <T: SomeClass> (Builtin.Int1) -> (@yields @in Indirect<T>, @yields Builtin.Int64)
@@ -180,7 +180,7 @@
 }
 
 // CHECK-LABEL: sil @test_simple_call_yield_owned : $@convention(thin) (Builtin.Int1, @owned SomeClass) -> () {
-// CHECK:      bb0(%0 : @trivial $Builtin.Int1, %1 : @owned $SomeClass):
+// CHECK:      bb0(%0 : $Builtin.Int1, %1 : @owned $SomeClass):
 // CHECK-NEXT:   // function_ref
 // CHECK-NEXT:   %2 = function_ref @marker
 // CHECK-NEXT:   %3 = integer_literal $Builtin.Int32, 1000
@@ -223,7 +223,7 @@
 }
 
 sil @test_simple_call_yield_owned : $(Builtin.Int1, @owned SomeClass) -> () {
-entry(%flag : @trivial $Builtin.Int1, %c: @owned $SomeClass):
+entry(%flag : $Builtin.Int1, %c: @owned $SomeClass):
   %0 = function_ref @yield_owned : $@convention(thin) @yield_once(@owned SomeClass) -> (@yields @owned SomeClass)
   (%value, %token) = begin_apply %0(%c) : $@convention(thin) @yield_once(@owned SomeClass) -> (@yields @owned SomeClass)
   cond_br %flag, yes, no
@@ -267,7 +267,7 @@
 
 
 // CHECK-LABEL: sil @test_simple_call_yield_inout : $@convention(thin) (Builtin.Int1) -> () {
-// CHECK:      bb0(%0 : @trivial $Builtin.Int1):
+// CHECK:      bb0(%0 : $Builtin.Int1):
 // CHECK-NEXT:   %1 = alloc_stack $Builtin.Int8
 // CHECK-NEXT:   %2 = integer_literal $Builtin.Int8, 8
 // CHECK-NEXT:   store %2 to [trivial] %1 : $*Builtin.Int8
@@ -297,7 +297,7 @@
 // CHECK:      }
 
 sil @test_simple_call_yield_inout : $(Builtin.Int1) -> () {
-entry(%flag : @trivial $Builtin.Int1):
+entry(%flag : $Builtin.Int1):
   %0 = function_ref @yield_inout : $@convention(thin) @yield_once() -> (@yields @inout Builtin.Int8)
   (%addr, %token) = begin_apply %0() : $@convention(thin) @yield_once() -> (@yields @inout Builtin.Int8)
   cond_br %flag, yes, no
@@ -322,7 +322,7 @@
 // CHECK:       [[T0:%.*]] = function_ref @yield_inout
 // CHECK:       begin_apply [[T0]]
 sil @test_multi_end_yield_inout : $(Builtin.Int1) -> () {
-entry(%flag : @trivial $Builtin.Int1):
+entry(%flag : $Builtin.Int1):
   %0 = function_ref @yield_inout : $@convention(thin) @yield_once() -> (@yields @inout Builtin.Int8)
   (%addr, %token) = begin_apply %0() : $@convention(thin) @yield_once() -> (@yields @inout Builtin.Int8)
   cond_br %flag, yes, no
@@ -345,7 +345,7 @@
 // CHECK:       [[T0:%.*]] = function_ref @yield_inout
 // CHECK:       begin_apply [[T0]]
 sil @test_multi_abort_yield_inout : $(Builtin.Int1) -> () {
-entry(%flag : @trivial $Builtin.Int1):
+entry(%flag : $Builtin.Int1):
   %0 = function_ref @yield_inout : $@convention(thin) @yield_once() -> (@yields @inout Builtin.Int8)
   (%addr, %token) = begin_apply %0() : $@convention(thin) @yield_once() -> (@yields @inout Builtin.Int8)
   cond_br %flag, yes, no
diff --git a/test/SILOptimizer/mandatory_inlining_open_existential.sil b/test/SILOptimizer/mandatory_inlining_open_existential.sil
index 06aef6f..d46ca29 100644
--- a/test/SILOptimizer/mandatory_inlining_open_existential.sil
+++ b/test/SILOptimizer/mandatory_inlining_open_existential.sil
@@ -11,7 +11,7 @@
 }
 
 sil hidden @caller : $@convention(thin) (@in P) -> () {
-bb0(%0 : @trivial $*P):
+bb0(%0 : $*P):
   %2 = open_existential_addr immutable_access %0 : $*P to $*@opened("214EF566-CD33-11E6-A1F0-34363BD08DA0") P
   %3 = witness_method $@opened("214EF566-CD33-11E6-A1F0-34363BD08DA0") P, #P.f7!1, %2 : $*@opened("214EF566-CD33-11E6-A1F0-34363BD08DA0") P : $@convention(witness_method: P) <τ_0_0 where τ_0_0 : P> (@in_guaranteed τ_0_0) -> @owned @callee_owned () -> @out τ_0_0
   %4 = apply %3<@opened("214EF566-CD33-11E6-A1F0-34363BD08DA0") P>(%2) : $@convention(witness_method: P) <τ_0_0 where τ_0_0 : P> (@in_guaranteed τ_0_0) -> @owned @callee_owned () -> @out τ_0_0
@@ -30,7 +30,7 @@
 }
 
 sil hidden [transparent] @callee : $@convention(thin) <τ_0_0 where τ_0_0 : P> (@owned @callee_owned () -> @out τ_0_0) -> @out P {
-bb0(%0 : @trivial $*P, %1 : @owned $@callee_owned () -> @out τ_0_0):
+bb0(%0 : $*P, %1 : @owned $@callee_owned () -> @out τ_0_0):
   %2 = alloc_stack $τ_0_0
   %3 = apply %1(%2) : $@callee_owned () -> @out τ_0_0
   %4 = init_existential_addr %0 : $*P, $τ_0_0
diff --git a/test/SILOptimizer/mandatory_inlining_ownership.sil b/test/SILOptimizer/mandatory_inlining_ownership.sil
index 2ba9b37..eb7d436 100644
--- a/test/SILOptimizer/mandatory_inlining_ownership.sil
+++ b/test/SILOptimizer/mandatory_inlining_ownership.sil
@@ -72,7 +72,7 @@
   %fn = function_ref @calleeWithGuaranteedThrows : $@convention(thin) (@guaranteed C) -> (Builtin.Int64, @error Error)
   try_apply %fn(%0) : $@convention(thin) (@guaranteed C) -> (Builtin.Int64, @error Error), normal bb1, error bb2
 
-bb1(%4 : @trivial $Builtin.Int64):
+bb1(%4 : $Builtin.Int64):
   destroy_value %0 : $C
   return %4 : $Builtin.Int64
 
diff --git a/test/SILOptimizer/mandatory_inlining_resilience.sil b/test/SILOptimizer/mandatory_inlining_resilience.sil
index 1708146..d2035f2 100644
--- a/test/SILOptimizer/mandatory_inlining_resilience.sil
+++ b/test/SILOptimizer/mandatory_inlining_resilience.sil
@@ -32,7 +32,7 @@
 
 // CHECK-LABEL: sil [serialized] @serialized_callee
 sil [serialized] @serialized_callee : $@convention(method) (@thin S.Type) -> S {
-bb0(%0 : @trivial $@thin S.Type):
+bb0(%0 : $@thin S.Type):
   %1 = alloc_box ${ var S }, var, name "self"
   %2 = mark_uninitialized [rootself] %1 : ${ var S }
   %3 = project_box %2 : ${ var S }, 0
diff --git a/test/SILOptimizer/mark_uninitialized_fixup.sil b/test/SILOptimizer/mark_uninitialized_fixup.sil
index 844a09c..fc2e36e 100644
--- a/test/SILOptimizer/mark_uninitialized_fixup.sil
+++ b/test/SILOptimizer/mark_uninitialized_fixup.sil
@@ -69,7 +69,7 @@
 // CHECK: load [trivial] [[MUI]]
 // CHECK: destroy_value [[BOX]]
 sil @test_rauw_uses_of_project_box : $@convention(thin) (Builtin.Int1, @thin Bool.Type) -> Bool {
-bb0(%0 : @trivial $Builtin.Int1, %1 : @trivial $@thin Bool.Type):
+bb0(%0 : $Builtin.Int1, %1 : $@thin Bool.Type):
   %2 = alloc_box ${ var Bool }, var, name "self"
   %3 = mark_uninitialized [rootself] %2 : ${ var Bool }
   %4 = project_box %3 : ${ var Bool }, 0
@@ -85,7 +85,7 @@
 sil @capture_promotion_generated_callee : $@convention(thin) (@in Bool) -> ()
 
 // CHECK-LABEL: sil @test_copyvalue_use_of_projectbox : $@convention(thin) (Builtin.Int1) -> () {
-// CHECK: bb0([[ARG:%.*]] : @trivial $Builtin.Int1):
+// CHECK: bb0([[ARG:%.*]] : $Builtin.Int1):
 // CHECK:   [[BOX:%.*]] = alloc_box ${ var Bool }, var, name "self"
 // CHECK:   [[PB:%.*]] = project_box [[BOX]]
 // CHECK:   [[MUI:%.*]] = mark_uninitialized [rootself] [[PB]]
@@ -94,7 +94,7 @@
 // CHECK:   destroy_value [[BOX_COPY]]
 // CHECK:   destroy_value [[BOX]]
 sil @test_copyvalue_use_of_projectbox : $@convention(thin) (Builtin.Int1) -> () {
-bb0(%0 : @trivial $Builtin.Int1):
+bb0(%0 : $Builtin.Int1):
   // Initial initialization.
   %1 = alloc_box ${ var Bool }, var, name "self"
   %2 = mark_uninitialized [rootself] %1 : ${ var Bool }
diff --git a/test/SILOptimizer/noreturn_folding_ownership.sil b/test/SILOptimizer/noreturn_folding_ownership.sil
index c12d720..8682aba 100644
--- a/test/SILOptimizer/noreturn_folding_ownership.sil
+++ b/test/SILOptimizer/noreturn_folding_ownership.sil
@@ -38,7 +38,7 @@
   %10 = struct $Int64 (%9 : $Builtin.Int64)
   br bb3(%10 : $Int64)
 
-bb3 (%11: @trivial $Int64):
+bb3 (%11: $Int64):
   return %11 : $Int64
 }
 
diff --git a/test/SILOptimizer/opaque_values_mandatory.sil b/test/SILOptimizer/opaque_values_mandatory.sil
index 411f5b5..89ddb5c 100644
--- a/test/SILOptimizer/opaque_values_mandatory.sil
+++ b/test/SILOptimizer/opaque_values_mandatory.sil
@@ -13,7 +13,7 @@
 // CHECK: return %0 : $T
 // CHECK-LABEL: } // end sil function 'f010_diagnose_identity'
 sil hidden @f010_diagnose_identity : $@convention(thin) <T> (@in T) -> @out T {
-bb0(%0 : @trivial $T):
+bb0(%0 : $T):
   %c = copy_value %0 : $T
   destroy_value %0 : $T
   return %c : $T
@@ -31,7 +31,7 @@
 // CHECK: return %{{.*}} : $()
 // CHECK-LABEL: } // end sil function 'f020_assign_inout'
 sil hidden @f020_assign_inout : $@convention(thin) <T> (@inout T, @in T) -> () {
-bb0(%0 : @trivial $*T, %1 : @trivial $T):
+bb0(%0 : $*T, %1 : $T):
   %2 = copy_value %1 : $T
   assign %2 to %0 : $*T
   destroy_value %1 : $T
@@ -52,7 +52,7 @@
 // CHECK:   return %6 : $(Builtin.Int64, Builtin.Int64, Builtin.Int64)
 // CHECK-LABEL: } // end sil function 'f030_callMultiResult'
 sil @f030_callMultiResult : $@convention(thin) (Int) -> (Int, Int, Int) {
-bb0(%0 : @trivial $Int):
+bb0(%0 : $Int):
   %1 = function_ref @f040_multiResult : $@convention(thin) <τ_0_0> (@in τ_0_0) -> (@out τ_0_0, @out τ_0_0, @out τ_0_0)
   %2 = apply %1<Int>(%0) : $@convention(thin) <τ_0_0> (@in τ_0_0) -> (@out τ_0_0, @out τ_0_0, @out τ_0_0)
   %3 = tuple_extract %2 : $(Int, Int, Int), 0
@@ -72,7 +72,7 @@
 // CHECK:   return %3 : $(T, T, T)
 // CHECK-LABEL: } // end sil function 'f040_multiResult'
 sil hidden [noinline] @f040_multiResult : $@convention(thin) <T> (@in T) -> (@out T, @out T, @out T) {
-bb0(%0 : @trivial $T):
+bb0(%0 : $T):
   %2 = copy_value %0 : $T
   %3 = copy_value %0 : $T
   %4 = copy_value %0 : $T
diff --git a/test/SILOptimizer/ownership_model_eliminator.sil b/test/SILOptimizer/ownership_model_eliminator.sil
index 1d55a5f..b55fd43 100644
--- a/test/SILOptimizer/ownership_model_eliminator.sil
+++ b/test/SILOptimizer/ownership_model_eliminator.sil
@@ -24,7 +24,7 @@
 // CHECK: [[LOAD4:%[0-9]+]] = load [[ARG2]] : $*Builtin.Int32
 // CHECK: apply {{%[0-9]+}}([[LOAD4]])
 sil @load : $@convention(thin) (@in Builtin.NativeObject, @in Builtin.Int32) -> () {
-bb0(%0 : @trivial $*Builtin.NativeObject, %1 : @trivial $*Builtin.Int32):
+bb0(%0 : $*Builtin.NativeObject, %1 : $*Builtin.Int32):
   %use_native_object_func = function_ref @use_native_object : $@convention(thin) (@owned Builtin.NativeObject) -> ()
   %use_int32_func = function_ref @use_int32 : $@convention(thin) (Builtin.Int32) -> ()
 
@@ -51,7 +51,7 @@
 // CHECK: strong_release [[OLDVAL]]
 // CHECK: store [[ARG4]] to [[ARG3]] : $*Builtin.Int32
 sil @store : $@convention(thin) (@in Builtin.NativeObject, Builtin.NativeObject, @in Builtin.Int32, Builtin.Int32) -> () {
-bb0(%0 : @trivial $*Builtin.NativeObject, %1 : @unowned $Builtin.NativeObject, %2 : @trivial $*Builtin.Int32, %3 : @trivial $Builtin.Int32):
+bb0(%0 : $*Builtin.NativeObject, %1 : @unowned $Builtin.NativeObject, %2 : $*Builtin.Int32, %3 : $Builtin.Int32):
   %4 = copy_value %1 : $Builtin.NativeObject
   %5 = copy_value %1 : $Builtin.NativeObject
   store %4 to [init] %0 : $*Builtin.NativeObject
@@ -67,7 +67,7 @@
 // CHECK: unchecked_ref_cast [[BORROWED_VALUE]]
 // CHECK-NOT: end_borrow
 sil @borrow : $@convention(thin) (@in Builtin.NativeObject) -> () {
-bb0(%0 : @trivial $*Builtin.NativeObject):
+bb0(%0 : $*Builtin.NativeObject):
   %1 = load_borrow %0 : $*Builtin.NativeObject
   %2 = unchecked_ref_cast %1 : $Builtin.NativeObject to $Builtin.NativeObject
   end_borrow %1 : $Builtin.NativeObject
diff --git a/test/SILOptimizer/raw_sil_inst_lowering.sil b/test/SILOptimizer/raw_sil_inst_lowering.sil
index 2c265dc..3181229 100644
--- a/test/SILOptimizer/raw_sil_inst_lowering.sil
+++ b/test/SILOptimizer/raw_sil_inst_lowering.sil
@@ -12,7 +12,7 @@
 // CHECK: store
 // CHECK: return
 sil @non_box_assign_trivial : $@convention(thin) (@inout Bool, Bool) -> () {
-bb0(%0 : @trivial $*Bool, %1 : @trivial $Bool):
+bb0(%0 : $*Bool, %1 : $Bool):
   assign %1 to %0 : $*Bool
   %9 = tuple ()
   return %9 : $()
@@ -23,7 +23,7 @@
 // CHECK: store
 // CHECK: return
 sil @non_box_assign : $@convention(thin) (@inout SomeClass, @owned SomeClass) -> () {
-bb0(%0 : @trivial $*SomeClass, %1 : @owned $SomeClass):
+bb0(%0 : $*SomeClass, %1 : @owned $SomeClass):
   assign %1 to %0 : $*SomeClass
   %9 = tuple ()
   return %9 : $()
diff --git a/test/SILOptimizer/semantic-arc-opts.sil b/test/SILOptimizer/semantic-arc-opts.sil
index 58e50ff..a16f788 100644
--- a/test/SILOptimizer/semantic-arc-opts.sil
+++ b/test/SILOptimizer/semantic-arc-opts.sil
@@ -9,6 +9,7 @@
 //////////////////
 
 sil @guaranteed_user : $@convention(thin) (@guaranteed Builtin.NativeObject) -> ()
+sil @owned_user : $@convention(thin) (@owned Builtin.NativeObject) -> ()
 
 struct NativeObjectPair {
   var obj1 : Builtin.NativeObject
@@ -188,3 +189,53 @@
   %9999 = tuple()
   return %9999 : $()
 }
+
+// CHECK-LABEL: sil @dead_live_range_multiple_destroy_value : $@convention(thin) (@owned Builtin.NativeObject) -> () {
+// CHECK-NOT: copy_value
+// CHECK-NOT: destroy_value
+// CHECK: bb3:
+// CHECK:     destroy_value
+// CHECK: } // end sil function 'dead_live_range_multiple_destroy_value'
+sil @dead_live_range_multiple_destroy_value : $@convention(thin) (@owned Builtin.NativeObject) -> () {
+bb0(%0 : @owned $Builtin.NativeObject) :
+  %1 = copy_value %0 : $Builtin.NativeObject
+  cond_br undef, bb1, bb2
+
+bb1:
+  destroy_value %1 : $Builtin.NativeObject
+  br bb3
+
+bb2:
+  destroy_value %1 : $Builtin.NativeObject
+  br bb3
+
+bb3:
+  destroy_value %0 : $Builtin.NativeObject
+  %9999 = tuple()
+  return %9999 : $()
+}
+
+// CHECK-LABEL: sil @dead_live_range_multiple_destroy_value_consuming_user : $@convention(thin) (@owned Builtin.NativeObject) -> () {
+// CHECK: copy_value
+// CHECK: destroy_value
+// CHECK: destroy_value
+// CHECK: } // end sil function 'dead_live_range_multiple_destroy_value_consuming_user'
+sil @dead_live_range_multiple_destroy_value_consuming_user : $@convention(thin) (@owned Builtin.NativeObject) -> () {
+bb0(%0 : @owned $Builtin.NativeObject) :
+  %1 = copy_value %0 : $Builtin.NativeObject
+  cond_br undef, bb1, bb2
+
+bb1:
+  destroy_value %1 : $Builtin.NativeObject
+  br bb3
+
+bb2:
+  %2 = function_ref @owned_user : $@convention(thin) (@owned Builtin.NativeObject) -> ()
+  apply %2(%1) : $@convention(thin) (@owned Builtin.NativeObject) -> ()
+  br bb3
+
+bb3:
+  destroy_value %0 : $Builtin.NativeObject
+  %9999 = tuple()
+  return %9999 : $()
+}
diff --git a/test/SILOptimizer/specialize_self_conforming_error.swift b/test/SILOptimizer/specialize_self_conforming_error.swift
new file mode 100644
index 0000000..2c6bd1b
--- /dev/null
+++ b/test/SILOptimizer/specialize_self_conforming_error.swift
@@ -0,0 +1,97 @@
+// RUN: %target-swift-frontend -module-name specialize_self_conforming -emit-sil -O -primary-file %s | %FileCheck %s
+
+// Test 1: apply the substitution
+//   [U:Error => Error:Error]
+// to the type argument map
+//   [T:Error => U:Error]
+// on the call to takesError.
+
+@_optimize(none)
+func takesError<T : Error>(_: T) {}
+
+@inline(__always)
+func callsTakesError<U : Error>(_ error: U) {
+  takesError(error)
+}
+
+// CHECK-LABEL: sil hidden @$s26specialize_self_conforming5test1yys5Error_pF : $@convention(thin) (@guaranteed Error) -> () {
+// CHECK: [[TEMP:%.*]] = alloc_stack $Error
+// CHECK: store %0 to [[TEMP]]
+// CHECK: [[FN:%.*]] = function_ref @$s26specialize_self_conforming10takesErroryyxs0E0RzlF : $@convention(thin) <τ_0_0 where τ_0_0 : Error> (@in_guaranteed τ_0_0) -> ()
+// CHECK: apply [[FN]]<Error>([[TEMP]]) : $@convention(thin) <τ_0_0 where τ_0_0 : Error> (@in_guaranteed τ_0_0) -> ()
+// CHECK: dealloc_stack [[TEMP]]
+// CHECK: return
+
+func test1(_ error: Error) {
+  callsTakesError(error)
+}
+
+// Test 2: apply the substitution
+//   [U => Int]
+// to the type argument map
+//   [T:Error => Error:Error]
+// on the call to takesError.
+
+@inline(__always)
+func callsTakesErrorWithError<U>(_ error: Error, _ value : U) {
+  takesError(error)
+}
+
+// CHECK-LABEL: sil hidden @$s26specialize_self_conforming5test2yys5Error_pF : $@convention(thin) (@guaranteed Error) -> () {
+// CHECK: [[TEMP:%.*]] = alloc_stack $Error
+// CHECK: store %0 to [[TEMP]]
+// CHECK: [[FN:%.*]] = function_ref @$s26specialize_self_conforming10takesErroryyxs0E0RzlF : $@convention(thin) <τ_0_0 where τ_0_0 : Error> (@in_guaranteed τ_0_0) -> ()
+// CHECK: apply [[FN]]<Error>([[TEMP]]) : $@convention(thin) <τ_0_0 where τ_0_0 : Error> (@in_guaranteed τ_0_0) -> ()
+// CHECK: dealloc_stack [[TEMP]]
+// CHECK: return
+
+func test2(_ error: Error) {
+  callsTakesErrorWithError(error, 0)
+}
+
+// Test 3: apply the substitution
+//   [V => Int]
+// to the type argument map
+//   [T:Error => Error:Error, U => V]
+// on the call to takesErrorAndValue.
+
+@_optimize(none)
+func takesErrorAndValue<T : Error, U>(_: T, _: U) {}
+
+@inline(__always)
+func callsTakesErrorAndValueWithError<U>(_ error: Error, _ value : U) {
+  takesErrorAndValue(error, value)
+}
+
+// CHECK-LABEL: sil hidden @$s26specialize_self_conforming5test3yys5Error_pF : $@convention(thin) (@guaranteed Error) -> () {
+// CHECK: [[TEMP:%.*]] = alloc_stack $Error
+// CHECK: store %0 to [[TEMP]]
+// CHECK: [[FN:%.*]] = function_ref @$s26specialize_self_conforming18takesErrorAndValueyyx_q_ts0E0Rzr0_lF : $@convention(thin) <τ_0_0, τ_0_1 where τ_0_0 : Error> (@in_guaranteed τ_0_0, @in_guaranteed τ_0_1) -> ()
+// CHECK: apply [[FN]]<Error, Int>([[TEMP]], {{%.*}}) :
+// CHECK: dealloc_stack [[TEMP]]
+// CHECK: return
+
+func test3(_ error: Error) {
+  callsTakesErrorAndValueWithError(error, 0)
+}
+
+// Test 4: just clone the type argument map
+//   [Self:P => opened:P, T:Error => Error:Error]
+// When the inliner is cloning a substitution map that includes an opened
+// archetype, it uses a substitution function that expects not to be called
+// on types it's not expecting.
+
+protocol P {}
+extension P {
+  @_optimize(none)
+  func exTakesError<T: Error>(_: T) {}
+}
+
+@inline(__always)
+func callsExTakesErrorWithError(_ p: P, _ error: Error) {
+  p.exTakesError(error)
+}
+
+func test4(_ p: P, _ error: Error) {
+  callsExTakesErrorWithError(p, error)
+}
diff --git a/test/SILOptimizer/static_report.sil b/test/SILOptimizer/static_report.sil
index f5fd975..3765e1f 100644
--- a/test/SILOptimizer/static_report.sil
+++ b/test/SILOptimizer/static_report.sil
@@ -4,7 +4,7 @@
 
 // test_static_report
 sil @sil_test_static_report : $@convention(thin) (Builtin.RawPointer) -> Builtin.RawPointer {
-bb0(%0 : @trivial $Builtin.RawPointer):
+bb0(%0 : $Builtin.RawPointer):
   %1 = integer_literal $Builtin.Int1, 1
   %3 = builtin "staticReport"(%1 : $Builtin.Int1, %1 : $Builtin.Int1, %0 : $Builtin.RawPointer) : $() // expected-error {{static report error}}
   return %0 : $Builtin.RawPointer
diff --git a/test/SILOptimizer/verify_noescape_closure.sil b/test/SILOptimizer/verify_noescape_closure.sil
index 65570a6..c1e7823 100644
--- a/test/SILOptimizer/verify_noescape_closure.sil
+++ b/test/SILOptimizer/verify_noescape_closure.sil
@@ -17,13 +17,13 @@
 sil @takesEscapingClosure : $@convention(thin) (@owned @callee_owned () -> ()) -> ()
 
 sil hidden @closureWithArgument : $@convention(thin) (@inout_aliasable Int) -> () {
-bb0(%1 : @trivial $*Int):
+bb0(%1 : $*Int):
   %3 = tuple ()
   return %3 : $()
 }
 
 sil @missingNoescape : $@convention(thin) (Int) ->() {
-bb0(%0 : @trivial $Int):
+bb0(%0 : $Int):
   %2 = alloc_box ${ var Int }
   %3 = project_box %2 : ${ var Int }, 0
   store %0 to [trivial] %3 : $*Int
diff --git a/test/Sema/substring_to_string_conversion_swift4.swift b/test/Sema/substring_to_string_conversion_swift4.swift
index 6f43173..10ab545 100644
--- a/test/Sema/substring_to_string_conversion_swift4.swift
+++ b/test/Sema/substring_to_string_conversion_swift4.swift
@@ -81,12 +81,6 @@
 // Substring-to-String via subscripting in a context expecting String
 func takesString(_ s: String) {}
 
-func apply(_ fn: (String) -> (), _ s: String) {
-  fn(s[s.startIndex..<s.endIndex]) // expected-error{{subscripts returning String were obsoleted in Swift 4; explicitly construct a String from subscripted result}} {{6-6=String(}} {{34-34=)}}
-  let _: String = s[s.startIndex..<s.endIndex] // expected-error{{subscripts returning String were obsoleted in Swift 4; explicitly construct a String from subscripted result}} {{19-19=String(}} {{47-47=)}}
-  _ = s[s.startIndex..<s.endIndex] as String // expected-error{{subscripts returning String were obsoleted in Swift 4; explicitly construct a String from subscripted result}} {{7-7=String(}} {{35-35=)}}
-}
-
 // rdar://33474838
 protocol Derivable {
   func derive() -> Substring
diff --git a/test/Serialization/Inputs/def_basic_objc.sil b/test/Serialization/Inputs/def_basic_objc.sil
index e61d267..885f5b2 100644
--- a/test/Serialization/Inputs/def_basic_objc.sil
+++ b/test/Serialization/Inputs/def_basic_objc.sil
@@ -9,7 +9,7 @@
 
 // CHECK-LABEL: @objc_classes : $@convention(thin) (@thick NSObject.Type) -> ()
 sil [transparent] [serialized] @objc_classes : $@convention(thin) (@thick NSObject.Type) -> () {
-bb0(%0 : @trivial $@thick NSObject.Type):
+bb0(%0 : $@thick NSObject.Type):
   %1 = thick_to_objc_metatype %0 : $@thick NSObject.Type to $@objc_metatype NSObject.Type
   // CHECK: %2 = alloc_ref_dynamic [objc] %1 : $@objc_metatype NSObject.Type, $NSObject
   %2 = alloc_ref_dynamic [objc] %1 : $@objc_metatype NSObject.Type, $NSObject
@@ -35,7 +35,7 @@
 // CHECK:         {{%.*}} = objc_metatype_to_object {{%.*}} : $@objc_metatype SomeClass.Type to $AnyObject
 // CHECK:         {{%.*}} = objc_existential_metatype_to_object {{%.*}} : $@objc_metatype SomeClassProtocol.Type to $AnyObject
 sil [transparent] [serialized] @metatype_to_object : $@convention(thin) (@objc_metatype SomeClass.Type, @objc_metatype SomeClassProtocol.Type) -> @owned (AnyObject, AnyObject) {
-entry(%a : @trivial $@objc_metatype SomeClass.Type, %b : @trivial $@objc_metatype SomeClassProtocol.Type):
+entry(%a : $@objc_metatype SomeClass.Type, %b : $@objc_metatype SomeClassProtocol.Type):
   %x = objc_metatype_to_object %a : $@objc_metatype SomeClass.Type to $AnyObject
   %y = objc_existential_metatype_to_object %b : $@objc_metatype SomeClassProtocol.Type to $AnyObject
   %z = tuple (%x : $AnyObject, %y : $AnyObject)
diff --git a/test/SourceKit/DocSupport/doc_clang_module.swift.response b/test/SourceKit/DocSupport/doc_clang_module.swift.response
index 3c6a5b6..7c3d3a4 100644
--- a/test/SourceKit/DocSupport/doc_clang_module.swift.response
+++ b/test/SourceKit/DocSupport/doc_clang_module.swift.response
@@ -65,7 +65,7 @@
 
 extension FooRuncingOptions {
 
-    @inlinable init<S>(_ sequence: __owned S) where S : Sequence, FooRuncingOptions.Element == S.Element
+    @inlinable init<S>(_ sequence: __owned S) where S : Sequence, Self.Element == S.Element
 
     @inlinable mutating func subtract(_ other: FooRuncingOptions)
 
@@ -1304,1242 +1304,1257 @@
     key.length: 8
   },
   {
-    key.kind: source.lang.swift.ref.struct,
-    key.name: "FooRuncingOptions",
-    key.usr: "c:@E@FooRuncingOptions",
+    key.kind: source.lang.swift.ref.generic_type_param,
+    key.name: "Self",
+    key.usr: "s:s10SetAlgebraP4Selfxmfp",
     key.offset: 1542,
-    key.length: 17
+    key.length: 4
   },
   {
-    key.kind: source.lang.swift.ref.typealias,
-    key.name: "Element",
-    key.usr: "s:So17FooRuncingOptionsV7Elementa",
+    key.kind: source.lang.swift.syntaxtype.typeidentifier,
+    key.offset: 1547,
+    key.length: 7
+  },
+  {
+    key.kind: source.lang.swift.syntaxtype.typeidentifier,
+    key.offset: 1558,
+    key.length: 1
+  },
+  {
+    key.kind: source.lang.swift.syntaxtype.typeidentifier,
     key.offset: 1560,
     key.length: 7
   },
   {
-    key.kind: source.lang.swift.syntaxtype.typeidentifier,
-    key.offset: 1571,
-    key.length: 1
-  },
-  {
-    key.kind: source.lang.swift.syntaxtype.typeidentifier,
+    key.kind: source.lang.swift.syntaxtype.attribute.builtin,
     key.offset: 1573,
-    key.length: 7
-  },
-  {
-    key.kind: source.lang.swift.syntaxtype.attribute.builtin,
-    key.offset: 1586,
     key.length: 10
   },
   {
     key.kind: source.lang.swift.syntaxtype.attribute.builtin,
-    key.offset: 1597,
+    key.offset: 1584,
     key.length: 8
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 1606,
+    key.offset: 1593,
     key.length: 4
   },
   {
     key.kind: source.lang.swift.syntaxtype.identifier,
-    key.offset: 1611,
+    key.offset: 1598,
     key.length: 8
   },
   {
     key.kind: source.lang.swift.syntaxtype.argument,
-    key.offset: 1620,
+    key.offset: 1607,
     key.length: 1
   },
   {
     key.kind: source.lang.swift.syntaxtype.parameter,
-    key.offset: 1622,
+    key.offset: 1609,
     key.length: 5
   },
   {
     key.kind: source.lang.swift.ref.struct,
     key.name: "FooRuncingOptions",
     key.usr: "c:@E@FooRuncingOptions",
-    key.offset: 1629,
+    key.offset: 1616,
     key.length: 17
   },
   {
     key.kind: source.lang.swift.syntaxtype.attribute.builtin,
-    key.offset: 1653,
+    key.offset: 1640,
     key.length: 10
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 1664,
+    key.offset: 1651,
     key.length: 4
   },
   {
     key.kind: source.lang.swift.syntaxtype.identifier,
-    key.offset: 1669,
+    key.offset: 1656,
     key.length: 8
   },
   {
     key.kind: source.lang.swift.syntaxtype.argument,
-    key.offset: 1678,
+    key.offset: 1665,
     key.length: 2
   },
   {
     key.kind: source.lang.swift.syntaxtype.parameter,
-    key.offset: 1681,
+    key.offset: 1668,
     key.length: 5
   },
   {
     key.kind: source.lang.swift.ref.struct,
     key.name: "FooRuncingOptions",
     key.usr: "c:@E@FooRuncingOptions",
-    key.offset: 1688,
+    key.offset: 1675,
     key.length: 17
   },
   {
     key.kind: source.lang.swift.ref.struct,
     key.name: "Bool",
     key.usr: "s:Sb",
-    key.offset: 1710,
+    key.offset: 1697,
     key.length: 4
   },
   {
     key.kind: source.lang.swift.syntaxtype.attribute.builtin,
-    key.offset: 1720,
+    key.offset: 1707,
     key.length: 10
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 1731,
+    key.offset: 1718,
     key.length: 4
   },
   {
     key.kind: source.lang.swift.syntaxtype.identifier,
-    key.offset: 1736,
+    key.offset: 1723,
     key.length: 10
   },
   {
     key.kind: source.lang.swift.syntaxtype.argument,
-    key.offset: 1747,
+    key.offset: 1734,
     key.length: 2
   },
   {
     key.kind: source.lang.swift.syntaxtype.parameter,
-    key.offset: 1750,
+    key.offset: 1737,
     key.length: 5
   },
   {
     key.kind: source.lang.swift.ref.struct,
     key.name: "FooRuncingOptions",
     key.usr: "c:@E@FooRuncingOptions",
-    key.offset: 1757,
+    key.offset: 1744,
     key.length: 17
   },
   {
     key.kind: source.lang.swift.ref.struct,
     key.name: "Bool",
     key.usr: "s:Sb",
-    key.offset: 1779,
+    key.offset: 1766,
     key.length: 4
   },
   {
     key.kind: source.lang.swift.syntaxtype.attribute.builtin,
-    key.offset: 1789,
+    key.offset: 1776,
     key.length: 10
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 1800,
+    key.offset: 1787,
     key.length: 4
   },
   {
     key.kind: source.lang.swift.syntaxtype.identifier,
-    key.offset: 1805,
+    key.offset: 1792,
     key.length: 10
   },
   {
     key.kind: source.lang.swift.syntaxtype.argument,
-    key.offset: 1816,
+    key.offset: 1803,
     key.length: 4
   },
   {
     key.kind: source.lang.swift.syntaxtype.parameter,
-    key.offset: 1821,
+    key.offset: 1808,
     key.length: 5
   },
   {
     key.kind: source.lang.swift.ref.struct,
     key.name: "FooRuncingOptions",
     key.usr: "c:@E@FooRuncingOptions",
-    key.offset: 1828,
+    key.offset: 1815,
     key.length: 17
   },
   {
     key.kind: source.lang.swift.ref.struct,
     key.name: "Bool",
     key.usr: "s:Sb",
-    key.offset: 1850,
+    key.offset: 1837,
     key.length: 4
   },
   {
     key.kind: source.lang.swift.syntaxtype.attribute.builtin,
-    key.offset: 1860,
+    key.offset: 1847,
     key.length: 10
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 1871,
+    key.offset: 1858,
     key.length: 4
   },
   {
     key.kind: source.lang.swift.syntaxtype.identifier,
-    key.offset: 1876,
+    key.offset: 1863,
     key.length: 11
   },
   {
     key.kind: source.lang.swift.syntaxtype.argument,
-    key.offset: 1888,
+    key.offset: 1875,
     key.length: 1
   },
   {
     key.kind: source.lang.swift.syntaxtype.parameter,
-    key.offset: 1890,
+    key.offset: 1877,
     key.length: 5
   },
   {
     key.kind: source.lang.swift.ref.struct,
     key.name: "FooRuncingOptions",
     key.usr: "c:@E@FooRuncingOptions",
-    key.offset: 1897,
+    key.offset: 1884,
     key.length: 17
   },
   {
     key.kind: source.lang.swift.ref.struct,
     key.name: "FooRuncingOptions",
     key.usr: "c:@E@FooRuncingOptions",
-    key.offset: 1919,
+    key.offset: 1906,
     key.length: 17
   },
   {
     key.kind: source.lang.swift.syntaxtype.attribute.builtin,
-    key.offset: 1942,
+    key.offset: 1929,
     key.length: 10
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 1953,
+    key.offset: 1940,
     key.length: 3
   },
   {
     key.kind: source.lang.swift.syntaxtype.identifier,
-    key.offset: 1957,
+    key.offset: 1944,
     key.length: 7
   },
   {
     key.kind: source.lang.swift.ref.struct,
     key.name: "Bool",
     key.usr: "s:Sb",
-    key.offset: 1966,
+    key.offset: 1953,
     key.length: 4
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 1973,
+    key.offset: 1960,
     key.length: 3
   },
   {
     key.kind: source.lang.swift.syntaxtype.attribute.builtin,
-    key.offset: 1984,
+    key.offset: 1971,
     key.length: 10
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 1995,
+    key.offset: 1982,
     key.length: 4
   },
   {
     key.kind: source.lang.swift.syntaxtype.identifier,
-    key.offset: 2000,
+    key.offset: 1987,
     key.length: 16
   },
   {
     key.kind: source.lang.swift.syntaxtype.argument,
-    key.offset: 2017,
+    key.offset: 2004,
     key.length: 2
   },
   {
     key.kind: source.lang.swift.syntaxtype.parameter,
-    key.offset: 2020,
+    key.offset: 2007,
     key.length: 5
   },
   {
     key.kind: source.lang.swift.ref.struct,
     key.name: "FooRuncingOptions",
     key.usr: "c:@E@FooRuncingOptions",
-    key.offset: 2027,
+    key.offset: 2014,
     key.length: 17
   },
   {
     key.kind: source.lang.swift.ref.struct,
     key.name: "Bool",
     key.usr: "s:Sb",
-    key.offset: 2049,
+    key.offset: 2036,
     key.length: 4
   },
   {
     key.kind: source.lang.swift.syntaxtype.attribute.builtin,
-    key.offset: 2059,
+    key.offset: 2046,
     key.length: 10
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 2070,
+    key.offset: 2057,
     key.length: 4
   },
   {
     key.kind: source.lang.swift.syntaxtype.identifier,
-    key.offset: 2075,
+    key.offset: 2062,
     key.length: 14
   },
   {
     key.kind: source.lang.swift.syntaxtype.argument,
-    key.offset: 2090,
+    key.offset: 2077,
     key.length: 2
   },
   {
     key.kind: source.lang.swift.syntaxtype.parameter,
-    key.offset: 2093,
+    key.offset: 2080,
     key.length: 5
   },
   {
     key.kind: source.lang.swift.ref.struct,
     key.name: "FooRuncingOptions",
     key.usr: "c:@E@FooRuncingOptions",
-    key.offset: 2100,
+    key.offset: 2087,
     key.length: 17
   },
   {
     key.kind: source.lang.swift.ref.struct,
     key.name: "Bool",
     key.usr: "s:Sb",
-    key.offset: 2122,
+    key.offset: 2109,
     key.length: 4
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 2130,
+    key.offset: 2117,
     key.length: 9
   },
   {
     key.kind: source.lang.swift.ref.struct,
     key.name: "FooRuncingOptions",
     key.usr: "c:@E@FooRuncingOptions",
-    key.offset: 2140,
+    key.offset: 2127,
     key.length: 17
   },
   {
     key.kind: source.lang.swift.syntaxtype.attribute.builtin,
-    key.offset: 2165,
+    key.offset: 2152,
     key.length: 10
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 2176,
+    key.offset: 2163,
     key.length: 4
   },
   {
     key.kind: source.lang.swift.syntaxtype.identifier,
-    key.offset: 2181,
+    key.offset: 2168,
     key.length: 5
   },
   {
     key.kind: source.lang.swift.syntaxtype.argument,
-    key.offset: 2187,
+    key.offset: 2174,
     key.length: 1
   },
   {
     key.kind: source.lang.swift.syntaxtype.parameter,
-    key.offset: 2189,
+    key.offset: 2176,
     key.length: 5
   },
   {
     key.kind: source.lang.swift.ref.struct,
     key.name: "FooRuncingOptions",
     key.usr: "c:@E@FooRuncingOptions",
-    key.offset: 2196,
+    key.offset: 2183,
     key.length: 17
   },
   {
     key.kind: source.lang.swift.ref.struct,
     key.name: "FooRuncingOptions",
     key.usr: "c:@E@FooRuncingOptions",
-    key.offset: 2218,
+    key.offset: 2205,
     key.length: 17
   },
   {
     key.kind: source.lang.swift.syntaxtype.attribute.builtin,
-    key.offset: 2241,
+    key.offset: 2228,
     key.length: 10
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 2252,
+    key.offset: 2239,
     key.length: 4
   },
   {
     key.kind: source.lang.swift.syntaxtype.identifier,
-    key.offset: 2257,
+    key.offset: 2244,
     key.length: 12
   },
   {
     key.kind: source.lang.swift.syntaxtype.argument,
-    key.offset: 2270,
+    key.offset: 2257,
     key.length: 1
   },
   {
     key.kind: source.lang.swift.syntaxtype.parameter,
-    key.offset: 2272,
+    key.offset: 2259,
     key.length: 5
   },
   {
     key.kind: source.lang.swift.ref.struct,
     key.name: "FooRuncingOptions",
     key.usr: "c:@E@FooRuncingOptions",
-    key.offset: 2279,
+    key.offset: 2266,
     key.length: 17
   },
   {
     key.kind: source.lang.swift.ref.struct,
     key.name: "FooRuncingOptions",
     key.usr: "c:@E@FooRuncingOptions",
-    key.offset: 2301,
+    key.offset: 2288,
     key.length: 17
   },
   {
     key.kind: source.lang.swift.syntaxtype.attribute.builtin,
-    key.offset: 2324,
+    key.offset: 2311,
     key.length: 10
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 2335,
+    key.offset: 2322,
     key.length: 4
   },
   {
     key.kind: source.lang.swift.syntaxtype.identifier,
-    key.offset: 2340,
+    key.offset: 2327,
     key.length: 19
   },
   {
     key.kind: source.lang.swift.syntaxtype.argument,
-    key.offset: 2360,
+    key.offset: 2347,
     key.length: 1
   },
   {
     key.kind: source.lang.swift.syntaxtype.parameter,
-    key.offset: 2362,
+    key.offset: 2349,
     key.length: 5
   },
   {
     key.kind: source.lang.swift.ref.struct,
     key.name: "FooRuncingOptions",
     key.usr: "c:@E@FooRuncingOptions",
-    key.offset: 2369,
+    key.offset: 2356,
     key.length: 17
   },
   {
     key.kind: source.lang.swift.ref.struct,
     key.name: "FooRuncingOptions",
     key.usr: "c:@E@FooRuncingOptions",
-    key.offset: 2391,
+    key.offset: 2378,
     key.length: 17
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 2412,
+    key.offset: 2399,
     key.length: 9
   },
   {
     key.kind: source.lang.swift.ref.struct,
     key.name: "FooRuncingOptions",
     key.usr: "c:@E@FooRuncingOptions",
-    key.offset: 2422,
+    key.offset: 2409,
     key.length: 17
   },
   {
     key.kind: source.lang.swift.syntaxtype.attribute.builtin,
-    key.offset: 2447,
+    key.offset: 2434,
     key.length: 10
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 2458,
+    key.offset: 2445,
     key.length: 4
   },
   {
     key.kind: source.lang.swift.syntaxtype.identifier,
-    key.offset: 2463,
+    key.offset: 2450,
     key.length: 8
   },
   {
     key.kind: source.lang.swift.syntaxtype.argument,
-    key.offset: 2472,
+    key.offset: 2459,
     key.length: 1
   },
   {
     key.kind: source.lang.swift.syntaxtype.parameter,
-    key.offset: 2474,
+    key.offset: 2461,
     key.length: 6
   },
   {
     key.kind: source.lang.swift.ref.struct,
     key.name: "FooRuncingOptions",
     key.usr: "c:@E@FooRuncingOptions",
-    key.offset: 2482,
+    key.offset: 2469,
     key.length: 17
   },
   {
     key.kind: source.lang.swift.ref.struct,
     key.name: "Bool",
     key.usr: "s:Sb",
-    key.offset: 2504,
+    key.offset: 2491,
     key.length: 4
   },
   {
     key.kind: source.lang.swift.syntaxtype.attribute.builtin,
-    key.offset: 2514,
+    key.offset: 2501,
     key.length: 10
   },
   {
     key.kind: source.lang.swift.syntaxtype.attribute.builtin,
-    key.offset: 2525,
+    key.offset: 2512,
     key.length: 8
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 2534,
+    key.offset: 2521,
     key.length: 4
   },
   {
     key.kind: source.lang.swift.syntaxtype.identifier,
-    key.offset: 2539,
+    key.offset: 2526,
     key.length: 6
   },
   {
     key.kind: source.lang.swift.syntaxtype.argument,
+    key.offset: 2533,
+    key.length: 1
+  },
+  {
+    key.kind: source.lang.swift.syntaxtype.parameter,
+    key.offset: 2535,
+    key.length: 9
+  },
+  {
+    key.kind: source.lang.swift.ref.struct,
+    key.name: "FooRuncingOptions",
+    key.usr: "c:@E@FooRuncingOptions",
     key.offset: 2546,
-    key.length: 1
-  },
-  {
-    key.kind: source.lang.swift.syntaxtype.parameter,
-    key.offset: 2548,
-    key.length: 9
-  },
-  {
-    key.kind: source.lang.swift.ref.struct,
-    key.name: "FooRuncingOptions",
-    key.usr: "c:@E@FooRuncingOptions",
-    key.offset: 2559,
     key.length: 17
   },
   {
     key.kind: source.lang.swift.syntaxtype.identifier,
-    key.offset: 2582,
+    key.offset: 2569,
     key.length: 8
   },
   {
     key.kind: source.lang.swift.ref.struct,
     key.name: "Bool",
     key.usr: "s:Sb",
-    key.offset: 2592,
+    key.offset: 2579,
     key.length: 4
   },
   {
     key.kind: source.lang.swift.syntaxtype.identifier,
-    key.offset: 2598,
+    key.offset: 2585,
     key.length: 17
   },
   {
     key.kind: source.lang.swift.ref.struct,
     key.name: "FooRuncingOptions",
     key.usr: "c:@E@FooRuncingOptions",
-    key.offset: 2617,
+    key.offset: 2604,
     key.length: 17
   },
   {
     key.kind: source.lang.swift.syntaxtype.attribute.builtin,
-    key.offset: 2641,
+    key.offset: 2628,
     key.length: 10
   },
   {
     key.kind: source.lang.swift.syntaxtype.attribute.builtin,
-    key.offset: 2652,
+    key.offset: 2639,
     key.length: 8
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 2661,
+    key.offset: 2648,
     key.length: 4
   },
   {
     key.kind: source.lang.swift.syntaxtype.identifier,
-    key.offset: 2666,
+    key.offset: 2653,
     key.length: 6
   },
   {
     key.kind: source.lang.swift.syntaxtype.argument,
-    key.offset: 2673,
+    key.offset: 2660,
     key.length: 1
   },
   {
     key.kind: source.lang.swift.syntaxtype.parameter,
-    key.offset: 2675,
+    key.offset: 2662,
     key.length: 6
   },
   {
     key.kind: source.lang.swift.ref.struct,
     key.name: "FooRuncingOptions",
     key.usr: "c:@E@FooRuncingOptions",
-    key.offset: 2683,
+    key.offset: 2670,
     key.length: 17
   },
   {
     key.kind: source.lang.swift.ref.struct,
     key.name: "FooRuncingOptions",
     key.usr: "c:@E@FooRuncingOptions",
-    key.offset: 2705,
+    key.offset: 2692,
     key.length: 17
   },
   {
     key.kind: source.lang.swift.syntaxtype.attribute.builtin,
-    key.offset: 2729,
+    key.offset: 2716,
     key.length: 10
   },
   {
     key.kind: source.lang.swift.syntaxtype.attribute.builtin,
-    key.offset: 2740,
+    key.offset: 2727,
     key.length: 8
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 2749,
+    key.offset: 2736,
     key.length: 4
   },
   {
     key.kind: source.lang.swift.syntaxtype.identifier,
-    key.offset: 2754,
+    key.offset: 2741,
     key.length: 6
   },
   {
     key.kind: source.lang.swift.syntaxtype.argument,
-    key.offset: 2761,
+    key.offset: 2748,
     key.length: 4
   },
   {
     key.kind: source.lang.swift.syntaxtype.parameter,
-    key.offset: 2766,
+    key.offset: 2753,
     key.length: 9
   },
   {
     key.kind: source.lang.swift.ref.struct,
     key.name: "FooRuncingOptions",
     key.usr: "c:@E@FooRuncingOptions",
-    key.offset: 2777,
+    key.offset: 2764,
     key.length: 17
   },
   {
     key.kind: source.lang.swift.ref.struct,
     key.name: "FooRuncingOptions",
     key.usr: "c:@E@FooRuncingOptions",
-    key.offset: 2799,
+    key.offset: 2786,
     key.length: 17
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 2821,
+    key.offset: 2808,
     key.length: 9
   },
   {
     key.kind: source.lang.swift.ref.struct,
     key.name: "FooRuncingOptions",
     key.usr: "c:@E@FooRuncingOptions",
-    key.offset: 2831,
+    key.offset: 2818,
     key.length: 17
   },
   {
     key.kind: source.lang.swift.syntaxtype.attribute.builtin,
-    key.offset: 2856,
+    key.offset: 2843,
     key.length: 10
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 2867,
+    key.offset: 2854,
     key.length: 4
   },
   {
     key.kind: source.lang.swift.syntaxtype.attribute.builtin,
-    key.offset: 2879,
+    key.offset: 2866,
     key.length: 10
   },
   {
     key.kind: source.lang.swift.syntaxtype.attribute.builtin,
-    key.offset: 2890,
+    key.offset: 2877,
     key.length: 8
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 2899,
+    key.offset: 2886,
     key.length: 4
   },
   {
     key.kind: source.lang.swift.syntaxtype.identifier,
-    key.offset: 2904,
+    key.offset: 2891,
     key.length: 9
   },
   {
     key.kind: source.lang.swift.syntaxtype.argument,
-    key.offset: 2914,
+    key.offset: 2901,
     key.length: 1
   },
   {
     key.kind: source.lang.swift.syntaxtype.parameter,
-    key.offset: 2916,
+    key.offset: 2903,
     key.length: 5
   },
   {
     key.kind: source.lang.swift.ref.struct,
     key.name: "FooRuncingOptions",
     key.usr: "c:@E@FooRuncingOptions",
-    key.offset: 2923,
+    key.offset: 2910,
     key.length: 17
   },
   {
     key.kind: source.lang.swift.syntaxtype.attribute.builtin,
-    key.offset: 2947,
+    key.offset: 2934,
     key.length: 10
   },
   {
     key.kind: source.lang.swift.syntaxtype.attribute.builtin,
-    key.offset: 2958,
+    key.offset: 2945,
     key.length: 8
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 2967,
+    key.offset: 2954,
     key.length: 4
   },
   {
     key.kind: source.lang.swift.syntaxtype.identifier,
-    key.offset: 2972,
+    key.offset: 2959,
     key.length: 16
   },
   {
     key.kind: source.lang.swift.syntaxtype.argument,
-    key.offset: 2989,
+    key.offset: 2976,
     key.length: 1
   },
   {
     key.kind: source.lang.swift.syntaxtype.parameter,
-    key.offset: 2991,
+    key.offset: 2978,
     key.length: 5
   },
   {
     key.kind: source.lang.swift.ref.struct,
     key.name: "FooRuncingOptions",
     key.usr: "c:@E@FooRuncingOptions",
-    key.offset: 2998,
+    key.offset: 2985,
     key.length: 17
   },
   {
     key.kind: source.lang.swift.syntaxtype.attribute.builtin,
-    key.offset: 3022,
+    key.offset: 3009,
     key.length: 10
   },
   {
     key.kind: source.lang.swift.syntaxtype.attribute.builtin,
-    key.offset: 3033,
+    key.offset: 3020,
     key.length: 8
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 3042,
+    key.offset: 3029,
     key.length: 4
   },
   {
     key.kind: source.lang.swift.syntaxtype.identifier,
-    key.offset: 3047,
+    key.offset: 3034,
     key.length: 23
   },
   {
     key.kind: source.lang.swift.syntaxtype.argument,
-    key.offset: 3071,
+    key.offset: 3058,
     key.length: 1
   },
   {
     key.kind: source.lang.swift.syntaxtype.parameter,
-    key.offset: 3073,
+    key.offset: 3060,
     key.length: 5
   },
   {
     key.kind: source.lang.swift.ref.struct,
     key.name: "FooRuncingOptions",
     key.usr: "c:@E@FooRuncingOptions",
-    key.offset: 3080,
+    key.offset: 3067,
     key.length: 17
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 3101,
+    key.offset: 3088,
     key.length: 6
   },
   {
     key.kind: source.lang.swift.syntaxtype.identifier,
-    key.offset: 3108,
+    key.offset: 3095,
     key.length: 10
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 3126,
+    key.offset: 3113,
     key.length: 3
   },
   {
     key.kind: source.lang.swift.syntaxtype.identifier,
-    key.offset: 3130,
+    key.offset: 3117,
     key.length: 1
   },
   {
     key.kind: source.lang.swift.ref.struct,
     key.name: "Int32",
     key.usr: "s:s5Int32V",
-    key.offset: 3133,
+    key.offset: 3120,
     key.length: 5
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 3144,
+    key.offset: 3131,
     key.length: 3
   },
   {
     key.kind: source.lang.swift.syntaxtype.identifier,
-    key.offset: 3148,
+    key.offset: 3135,
     key.length: 1
   },
   {
     key.kind: source.lang.swift.ref.struct,
     key.name: "Double",
     key.usr: "s:Sd",
-    key.offset: 3151,
+    key.offset: 3138,
     key.length: 6
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 3163,
+    key.offset: 3150,
     key.length: 4
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 3175,
+    key.offset: 3162,
     key.length: 4
   },
   {
     key.kind: source.lang.swift.syntaxtype.argument,
-    key.offset: 3180,
+    key.offset: 3167,
     key.length: 1
   },
   {
     key.kind: source.lang.swift.syntaxtype.parameter,
-    key.offset: 3182,
+    key.offset: 3169,
     key.length: 1
   },
   {
     key.kind: source.lang.swift.ref.struct,
     key.name: "Int32",
     key.usr: "s:s5Int32V",
-    key.offset: 3185,
+    key.offset: 3172,
     key.length: 5
   },
   {
     key.kind: source.lang.swift.syntaxtype.argument,
-    key.offset: 3192,
+    key.offset: 3179,
     key.length: 1
   },
   {
     key.kind: source.lang.swift.syntaxtype.parameter,
+    key.offset: 3181,
+    key.length: 1
+  },
+  {
+    key.kind: source.lang.swift.ref.struct,
+    key.name: "Double",
+    key.usr: "s:Sd",
+    key.offset: 3184,
+    key.length: 6
+  },
+  {
+    key.kind: source.lang.swift.syntaxtype.keyword,
     key.offset: 3194,
-    key.length: 1
-  },
-  {
-    key.kind: source.lang.swift.ref.struct,
-    key.name: "Double",
-    key.usr: "s:Sd",
-    key.offset: 3197,
-    key.length: 6
-  },
-  {
-    key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 3207,
     key.length: 9
   },
   {
     key.kind: source.lang.swift.syntaxtype.identifier,
-    key.offset: 3217,
+    key.offset: 3204,
     key.length: 17
   },
   {
     key.kind: source.lang.swift.ref.struct,
     key.name: "UnsafeMutablePointer",
     key.usr: "s:Sp",
-    key.offset: 3237,
+    key.offset: 3224,
     key.length: 20
   },
   {
     key.kind: source.lang.swift.ref.struct,
     key.name: "FooStruct1",
     key.usr: "c:@S@FooStruct1",
-    key.offset: 3258,
+    key.offset: 3245,
     key.length: 10
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 3270,
+    key.offset: 3257,
     key.length: 6
   },
   {
     key.kind: source.lang.swift.syntaxtype.identifier,
-    key.offset: 3277,
+    key.offset: 3264,
     key.length: 10
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 3295,
+    key.offset: 3282,
     key.length: 3
   },
   {
     key.kind: source.lang.swift.syntaxtype.identifier,
-    key.offset: 3299,
+    key.offset: 3286,
     key.length: 1
   },
   {
     key.kind: source.lang.swift.ref.struct,
     key.name: "Int32",
     key.usr: "s:s5Int32V",
-    key.offset: 3302,
+    key.offset: 3289,
     key.length: 5
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 3313,
+    key.offset: 3300,
     key.length: 3
   },
   {
     key.kind: source.lang.swift.syntaxtype.identifier,
-    key.offset: 3317,
+    key.offset: 3304,
     key.length: 1
   },
   {
     key.kind: source.lang.swift.ref.struct,
     key.name: "Double",
     key.usr: "s:Sd",
-    key.offset: 3320,
+    key.offset: 3307,
     key.length: 6
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 3332,
+    key.offset: 3319,
     key.length: 4
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 3344,
+    key.offset: 3331,
     key.length: 4
   },
   {
     key.kind: source.lang.swift.syntaxtype.argument,
-    key.offset: 3349,
+    key.offset: 3336,
     key.length: 1
   },
   {
     key.kind: source.lang.swift.syntaxtype.parameter,
-    key.offset: 3351,
+    key.offset: 3338,
     key.length: 1
   },
   {
     key.kind: source.lang.swift.ref.struct,
     key.name: "Int32",
     key.usr: "s:s5Int32V",
-    key.offset: 3354,
+    key.offset: 3341,
     key.length: 5
   },
   {
     key.kind: source.lang.swift.syntaxtype.argument,
-    key.offset: 3361,
+    key.offset: 3348,
     key.length: 1
   },
   {
     key.kind: source.lang.swift.syntaxtype.parameter,
+    key.offset: 3350,
+    key.length: 1
+  },
+  {
+    key.kind: source.lang.swift.ref.struct,
+    key.name: "Double",
+    key.usr: "s:Sd",
+    key.offset: 3353,
+    key.length: 6
+  },
+  {
+    key.kind: source.lang.swift.syntaxtype.keyword,
     key.offset: 3363,
-    key.length: 1
-  },
-  {
-    key.kind: source.lang.swift.ref.struct,
-    key.name: "Double",
-    key.usr: "s:Sd",
-    key.offset: 3366,
-    key.length: 6
-  },
-  {
-    key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 3376,
     key.length: 9
   },
   {
     key.kind: source.lang.swift.syntaxtype.identifier,
-    key.offset: 3386,
+    key.offset: 3373,
     key.length: 17
   },
   {
     key.kind: source.lang.swift.ref.struct,
     key.name: "FooStruct2",
     key.usr: "c:@S@FooStruct2",
-    key.offset: 3406,
+    key.offset: 3393,
     key.length: 10
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 3417,
+    key.offset: 3404,
     key.length: 6
   },
   {
     key.kind: source.lang.swift.syntaxtype.identifier,
-    key.offset: 3424,
+    key.offset: 3411,
     key.length: 17
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 3449,
+    key.offset: 3436,
     key.length: 3
   },
   {
     key.kind: source.lang.swift.syntaxtype.identifier,
-    key.offset: 3453,
+    key.offset: 3440,
     key.length: 1
   },
   {
     key.kind: source.lang.swift.ref.struct,
     key.name: "Int32",
     key.usr: "s:s5Int32V",
-    key.offset: 3456,
+    key.offset: 3443,
     key.length: 5
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 3467,
+    key.offset: 3454,
     key.length: 3
   },
   {
     key.kind: source.lang.swift.syntaxtype.identifier,
-    key.offset: 3471,
+    key.offset: 3458,
     key.length: 1
   },
   {
     key.kind: source.lang.swift.ref.struct,
     key.name: "Double",
     key.usr: "s:Sd",
-    key.offset: 3474,
+    key.offset: 3461,
     key.length: 6
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 3486,
+    key.offset: 3473,
     key.length: 4
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 3498,
+    key.offset: 3485,
     key.length: 4
   },
   {
     key.kind: source.lang.swift.syntaxtype.argument,
-    key.offset: 3503,
+    key.offset: 3490,
     key.length: 1
   },
   {
     key.kind: source.lang.swift.syntaxtype.parameter,
-    key.offset: 3505,
+    key.offset: 3492,
     key.length: 1
   },
   {
     key.kind: source.lang.swift.ref.struct,
     key.name: "Int32",
     key.usr: "s:s5Int32V",
-    key.offset: 3508,
+    key.offset: 3495,
     key.length: 5
   },
   {
     key.kind: source.lang.swift.syntaxtype.argument,
-    key.offset: 3515,
+    key.offset: 3502,
     key.length: 1
   },
   {
     key.kind: source.lang.swift.syntaxtype.parameter,
+    key.offset: 3504,
+    key.length: 1
+  },
+  {
+    key.kind: source.lang.swift.ref.struct,
+    key.name: "Double",
+    key.usr: "s:Sd",
+    key.offset: 3507,
+    key.length: 6
+  },
+  {
+    key.kind: source.lang.swift.syntaxtype.keyword,
     key.offset: 3517,
-    key.length: 1
-  },
-  {
-    key.kind: source.lang.swift.ref.struct,
-    key.name: "Double",
-    key.usr: "s:Sd",
-    key.offset: 3520,
-    key.length: 6
-  },
-  {
-    key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 3530,
     key.length: 9
   },
   {
     key.kind: source.lang.swift.syntaxtype.identifier,
-    key.offset: 3540,
+    key.offset: 3527,
     key.length: 11
   },
   {
     key.kind: source.lang.swift.ref.struct,
     key.name: "Int32",
     key.usr: "s:s5Int32V",
-    key.offset: 3554,
+    key.offset: 3541,
     key.length: 5
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 3560,
+    key.offset: 3547,
     key.length: 3
   },
   {
     key.kind: source.lang.swift.syntaxtype.identifier,
-    key.offset: 3564,
+    key.offset: 3551,
     key.length: 9
   },
   {
     key.kind: source.lang.swift.ref.struct,
     key.name: "Int32",
     key.usr: "s:s5Int32V",
-    key.offset: 3575,
+    key.offset: 3562,
     key.length: 5
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 3581,
+    key.offset: 3568,
     key.length: 4
   },
   {
     key.kind: source.lang.swift.syntaxtype.identifier,
-    key.offset: 3586,
+    key.offset: 3573,
     key.length: 8
   },
   {
     key.kind: source.lang.swift.syntaxtype.argument,
-    key.offset: 3595,
+    key.offset: 3582,
     key.length: 1
   },
   {
     key.kind: source.lang.swift.syntaxtype.parameter,
-    key.offset: 3597,
+    key.offset: 3584,
     key.length: 1
   },
   {
     key.kind: source.lang.swift.ref.struct,
     key.name: "Int32",
     key.usr: "s:s5Int32V",
-    key.offset: 3600,
+    key.offset: 3587,
     key.length: 5
   },
   {
     key.kind: source.lang.swift.ref.struct,
     key.name: "Int32",
     key.usr: "s:s5Int32V",
-    key.offset: 3610,
+    key.offset: 3597,
     key.length: 5
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 3616,
+    key.offset: 3603,
     key.length: 4
   },
   {
     key.kind: source.lang.swift.syntaxtype.identifier,
-    key.offset: 3621,
+    key.offset: 3608,
     key.length: 22
   },
   {
     key.kind: source.lang.swift.syntaxtype.argument,
-    key.offset: 3644,
+    key.offset: 3631,
     key.length: 1
   },
   {
     key.kind: source.lang.swift.syntaxtype.parameter,
-    key.offset: 3646,
+    key.offset: 3633,
     key.length: 1
   },
   {
     key.kind: source.lang.swift.ref.struct,
     key.name: "Int32",
     key.usr: "s:s5Int32V",
-    key.offset: 3649,
+    key.offset: 3636,
     key.length: 5
   },
   {
     key.kind: source.lang.swift.ref.struct,
     key.name: "Int32",
     key.usr: "s:s5Int32V",
-    key.offset: 3659,
+    key.offset: 3646,
     key.length: 5
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 3665,
+    key.offset: 3652,
     key.length: 4
   },
   {
     key.kind: source.lang.swift.syntaxtype.identifier,
-    key.offset: 3670,
+    key.offset: 3657,
     key.length: 8
   },
   {
     key.kind: source.lang.swift.syntaxtype.argument,
-    key.offset: 3679,
+    key.offset: 3666,
     key.length: 1
   },
   {
     key.kind: source.lang.swift.syntaxtype.parameter,
-    key.offset: 3681,
+    key.offset: 3668,
     key.length: 1
   },
   {
     key.kind: source.lang.swift.ref.struct,
     key.name: "Int32",
     key.usr: "s:s5Int32V",
-    key.offset: 3684,
+    key.offset: 3671,
     key.length: 5
   },
   {
     key.kind: source.lang.swift.syntaxtype.argument,
-    key.offset: 3691,
+    key.offset: 3678,
     key.length: 1
   },
   {
     key.kind: source.lang.swift.syntaxtype.parameter,
-    key.offset: 3693,
+    key.offset: 3680,
     key.length: 1
   },
   {
     key.kind: source.lang.swift.ref.struct,
     key.name: "Float",
     key.usr: "s:Sf",
-    key.offset: 3696,
+    key.offset: 3683,
     key.length: 5
   },
   {
     key.kind: source.lang.swift.syntaxtype.argument,
+    key.offset: 3690,
+    key.length: 1
+  },
+  {
+    key.kind: source.lang.swift.syntaxtype.parameter,
+    key.offset: 3692,
+    key.length: 1
+  },
+  {
+    key.kind: source.lang.swift.ref.struct,
+    key.name: "Double",
+    key.usr: "s:Sd",
+    key.offset: 3695,
+    key.length: 6
+  },
+  {
+    key.kind: source.lang.swift.syntaxtype.argument,
     key.offset: 3703,
     key.length: 1
   },
@@ -2550,2225 +2565,2208 @@
   },
   {
     key.kind: source.lang.swift.ref.struct,
-    key.name: "Double",
-    key.usr: "s:Sd",
-    key.offset: 3708,
-    key.length: 6
-  },
-  {
-    key.kind: source.lang.swift.syntaxtype.argument,
-    key.offset: 3716,
-    key.length: 1
-  },
-  {
-    key.kind: source.lang.swift.syntaxtype.parameter,
-    key.offset: 3718,
-    key.length: 1
-  },
-  {
-    key.kind: source.lang.swift.ref.struct,
     key.name: "UnsafeMutablePointer",
     key.usr: "s:Sp",
-    key.offset: 3721,
+    key.offset: 3708,
     key.length: 20
   },
   {
     key.kind: source.lang.swift.ref.struct,
     key.name: "Int32",
     key.usr: "s:s5Int32V",
-    key.offset: 3742,
+    key.offset: 3729,
     key.length: 5
   },
   {
     key.kind: source.lang.swift.ref.struct,
     key.name: "Int32",
     key.usr: "s:s5Int32V",
-    key.offset: 3754,
+    key.offset: 3741,
     key.length: 5
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 3760,
+    key.offset: 3747,
     key.length: 4
   },
   {
     key.kind: source.lang.swift.syntaxtype.identifier,
-    key.offset: 3765,
+    key.offset: 3752,
     key.length: 16
   },
   {
     key.kind: source.lang.swift.syntaxtype.argument,
-    key.offset: 3782,
+    key.offset: 3769,
     key.length: 1
   },
   {
     key.kind: source.lang.swift.syntaxtype.parameter,
-    key.offset: 3784,
+    key.offset: 3771,
     key.length: 3
   },
   {
     key.kind: source.lang.swift.ref.struct,
     key.name: "Float",
     key.usr: "s:Sf",
-    key.offset: 3791,
+    key.offset: 3778,
     key.length: 5
   },
   {
     key.kind: source.lang.swift.ref.struct,
     key.name: "Int32",
     key.usr: "s:s5Int32V",
-    key.offset: 3801,
+    key.offset: 3788,
     key.length: 5
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 3810,
+    key.offset: 3797,
     key.length: 4
   },
   {
     key.kind: source.lang.swift.syntaxtype.identifier,
-    key.offset: 3815,
+    key.offset: 3802,
     key.length: 26
   },
   {
     key.kind: source.lang.swift.syntaxtype.argument,
-    key.offset: 3842,
+    key.offset: 3829,
     key.length: 1
   },
   {
     key.kind: source.lang.swift.syntaxtype.parameter,
-    key.offset: 3844,
+    key.offset: 3831,
     key.length: 4
   },
   {
     key.kind: source.lang.swift.ref.struct,
     key.name: "Float",
     key.usr: "s:Sf",
-    key.offset: 3852,
+    key.offset: 3839,
     key.length: 5
   },
   {
     key.kind: source.lang.swift.ref.struct,
     key.name: "Int32",
     key.usr: "s:s5Int32V",
-    key.offset: 3862,
+    key.offset: 3849,
     key.length: 5
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 3871,
+    key.offset: 3858,
     key.length: 4
   },
   {
     key.kind: source.lang.swift.syntaxtype.identifier,
-    key.offset: 3876,
+    key.offset: 3863,
     key.length: 16
   },
   {
     key.kind: source.lang.swift.ref.enum,
     key.name: "Never",
     key.usr: "s:s5NeverO",
-    key.offset: 3898,
+    key.offset: 3885,
     key.length: 5
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 3904,
+    key.offset: 3891,
     key.length: 4
   },
   {
     key.kind: source.lang.swift.syntaxtype.identifier,
-    key.offset: 3909,
+    key.offset: 3896,
     key.length: 16
   },
   {
     key.kind: source.lang.swift.ref.enum,
     key.name: "Never",
     key.usr: "s:s5NeverO",
-    key.offset: 3931,
+    key.offset: 3918,
     key.length: 5
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 3937,
+    key.offset: 3924,
     key.length: 4
   },
   {
     key.kind: source.lang.swift.syntaxtype.identifier,
-    key.offset: 3942,
+    key.offset: 3929,
     key.length: 19
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 3964,
+    key.offset: 3951,
     key.length: 4
   },
   {
     key.kind: source.lang.swift.syntaxtype.identifier,
-    key.offset: 3969,
+    key.offset: 3956,
     key.length: 19
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 3991,
+    key.offset: 3978,
     key.length: 4
   },
   {
     key.kind: source.lang.swift.syntaxtype.identifier,
-    key.offset: 3996,
+    key.offset: 3983,
     key.length: 19
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 4018,
+    key.offset: 4005,
     key.length: 4
   },
   {
     key.kind: source.lang.swift.syntaxtype.identifier,
-    key.offset: 4023,
+    key.offset: 4010,
     key.length: 19
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 4045,
+    key.offset: 4032,
     key.length: 4
   },
   {
     key.kind: source.lang.swift.syntaxtype.identifier,
-    key.offset: 4050,
+    key.offset: 4037,
     key.length: 19
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 4072,
+    key.offset: 4059,
     key.length: 4
   },
   {
     key.kind: source.lang.swift.syntaxtype.identifier,
-    key.offset: 4077,
+    key.offset: 4064,
     key.length: 32
   },
   {
     key.kind: source.lang.swift.syntaxtype.argument,
-    key.offset: 4110,
+    key.offset: 4097,
     key.length: 1
   },
   {
     key.kind: source.lang.swift.syntaxtype.parameter,
-    key.offset: 4112,
+    key.offset: 4099,
     key.length: 1
   },
   {
     key.kind: source.lang.swift.ref.struct,
     key.name: "Int32",
     key.usr: "s:s5Int32V",
-    key.offset: 4115,
+    key.offset: 4102,
     key.length: 5
   },
   {
     key.kind: source.lang.swift.ref.struct,
     key.name: "Int32",
     key.usr: "s:s5Int32V",
-    key.offset: 4125,
+    key.offset: 4112,
     key.length: 5
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 4131,
+    key.offset: 4118,
     key.length: 8
   },
   {
     key.kind: source.lang.swift.syntaxtype.identifier,
-    key.offset: 4140,
+    key.offset: 4127,
     key.length: 15
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 4163,
+    key.offset: 4150,
     key.length: 4
   },
   {
     key.kind: source.lang.swift.syntaxtype.identifier,
-    key.offset: 4168,
+    key.offset: 4155,
     key.length: 12
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 4188,
+    key.offset: 4175,
     key.length: 4
   },
   {
     key.kind: source.lang.swift.syntaxtype.identifier,
-    key.offset: 4193,
+    key.offset: 4180,
     key.length: 33
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 4234,
+    key.offset: 4221,
     key.length: 4
   },
   {
     key.kind: source.lang.swift.syntaxtype.identifier,
-    key.offset: 4239,
+    key.offset: 4226,
     key.length: 33
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 4280,
+    key.offset: 4267,
     key.length: 6
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 4287,
+    key.offset: 4274,
     key.length: 4
   },
   {
     key.kind: source.lang.swift.syntaxtype.identifier,
-    key.offset: 4292,
+    key.offset: 4279,
     key.length: 17
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 4317,
+    key.offset: 4304,
     key.length: 3
   },
   {
     key.kind: source.lang.swift.syntaxtype.identifier,
-    key.offset: 4321,
+    key.offset: 4308,
     key.length: 12
   },
   {
     key.kind: source.lang.swift.ref.struct,
     key.name: "Int32",
     key.usr: "s:s5Int32V",
-    key.offset: 4335,
+    key.offset: 4322,
     key.length: 5
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 4343,
+    key.offset: 4330,
     key.length: 3
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 4347,
+    key.offset: 4334,
     key.length: 3
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 4358,
+    key.offset: 4345,
     key.length: 3
   },
   {
     key.kind: source.lang.swift.syntaxtype.identifier,
-    key.offset: 4362,
+    key.offset: 4349,
     key.length: 12
   },
   {
     key.kind: source.lang.swift.ref.struct,
     key.name: "Int32",
     key.usr: "s:s5Int32V",
-    key.offset: 4376,
+    key.offset: 4363,
     key.length: 5
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 4384,
+    key.offset: 4371,
     key.length: 3
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 4388,
+    key.offset: 4375,
     key.length: 3
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 4399,
+    key.offset: 4386,
     key.length: 3
   },
   {
     key.kind: source.lang.swift.syntaxtype.identifier,
-    key.offset: 4403,
+    key.offset: 4390,
     key.length: 12
   },
   {
     key.kind: source.lang.swift.ref.struct,
     key.name: "Int32",
     key.usr: "s:s5Int32V",
-    key.offset: 4417,
+    key.offset: 4404,
     key.length: 5
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 4425,
+    key.offset: 4412,
     key.length: 3
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 4433,
+    key.offset: 4420,
     key.length: 8
   },
   {
     key.kind: source.lang.swift.syntaxtype.identifier,
-    key.offset: 4442,
+    key.offset: 4429,
     key.length: 18
   },
   {
     key.kind: source.lang.swift.ref.protocol,
     key.name: "FooProtocolBase",
     key.usr: "c:objc(pl)FooProtocolBase",
-    key.offset: 4463,
+    key.offset: 4450,
     key.length: 15
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 4483,
+    key.offset: 4470,
     key.length: 5
   },
   {
     key.kind: source.lang.swift.syntaxtype.identifier,
-    key.offset: 4489,
+    key.offset: 4476,
     key.length: 12
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 4509,
+    key.offset: 4496,
     key.length: 4
   },
   {
     key.kind: source.lang.swift.syntaxtype.identifier,
-    key.offset: 4514,
+    key.offset: 4501,
     key.length: 20
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 4542,
+    key.offset: 4529,
     key.length: 4
   },
   {
     key.kind: source.lang.swift.syntaxtype.identifier,
-    key.offset: 4547,
+    key.offset: 4534,
     key.length: 20
   },
   {
     key.kind: source.lang.swift.syntaxtype.argument,
-    key.offset: 4568,
+    key.offset: 4555,
     key.length: 1
   },
   {
     key.kind: source.lang.swift.syntaxtype.parameter,
-    key.offset: 4570,
+    key.offset: 4557,
     key.length: 8
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 4580,
+    key.offset: 4567,
     key.length: 3
   },
   {
     key.kind: source.lang.swift.ref.class,
     key.name: "FooClassBase",
     key.usr: "c:objc(cs)FooClassBase",
-    key.offset: 4589,
+    key.offset: 4576,
     key.length: 12
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 4608,
+    key.offset: 4595,
     key.length: 4
   },
   {
     key.kind: source.lang.swift.syntaxtype.attribute.builtin,
-    key.offset: 4621,
+    key.offset: 4608,
     key.length: 11
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 4633,
+    key.offset: 4620,
     key.length: 4
   },
   {
     key.kind: source.lang.swift.syntaxtype.argument,
-    key.offset: 4639,
+    key.offset: 4626,
     key.length: 5
   },
   {
     key.kind: source.lang.swift.syntaxtype.parameter,
-    key.offset: 4645,
+    key.offset: 4632,
     key.length: 1
   },
   {
     key.kind: source.lang.swift.ref.struct,
     key.name: "Float",
     key.usr: "s:Sf",
-    key.offset: 4648,
+    key.offset: 4635,
     key.length: 5
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 4660,
+    key.offset: 4647,
     key.length: 4
   },
   {
     key.kind: source.lang.swift.syntaxtype.identifier,
-    key.offset: 4665,
+    key.offset: 4652,
     key.length: 29
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 4702,
+    key.offset: 4689,
     key.length: 5
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 4708,
+    key.offset: 4695,
     key.length: 4
   },
   {
     key.kind: source.lang.swift.syntaxtype.identifier,
-    key.offset: 4713,
+    key.offset: 4700,
     key.length: 17
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 4738,
+    key.offset: 4725,
     key.length: 4
   },
   {
     key.kind: source.lang.swift.syntaxtype.identifier,
-    key.offset: 4743,
+    key.offset: 4730,
     key.length: 14
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 4763,
+    key.offset: 4750,
     key.length: 3
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 4773,
+    key.offset: 4760,
     key.length: 4
   },
   {
     key.kind: source.lang.swift.syntaxtype.identifier,
-    key.offset: 4778,
+    key.offset: 4765,
     key.length: 14
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 4798,
+    key.offset: 4785,
     key.length: 3
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 4808,
+    key.offset: 4795,
     key.length: 4
   },
   {
     key.kind: source.lang.swift.syntaxtype.identifier,
-    key.offset: 4813,
+    key.offset: 4800,
     key.length: 15
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 4834,
+    key.offset: 4821,
     key.length: 3
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 4844,
+    key.offset: 4831,
     key.length: 4
   },
   {
     key.kind: source.lang.swift.syntaxtype.identifier,
-    key.offset: 4849,
+    key.offset: 4836,
     key.length: 14
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 4869,
+    key.offset: 4856,
     key.length: 3
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 4876,
+    key.offset: 4863,
     key.length: 5
   },
   {
     key.kind: source.lang.swift.syntaxtype.identifier,
-    key.offset: 4882,
+    key.offset: 4869,
     key.length: 15
   },
   {
     key.kind: source.lang.swift.ref.class,
     key.name: "FooClassBase",
     key.usr: "c:objc(cs)FooClassBase",
-    key.offset: 4900,
+    key.offset: 4887,
     key.length: 12
   },
   {
     key.kind: source.lang.swift.ref.protocol,
     key.name: "FooProtocolDerived",
     key.usr: "c:objc(pl)FooProtocolDerived",
-    key.offset: 4914,
+    key.offset: 4901,
     key.length: 18
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 4940,
+    key.offset: 4927,
     key.length: 3
   },
   {
     key.kind: source.lang.swift.syntaxtype.identifier,
-    key.offset: 4944,
+    key.offset: 4931,
     key.length: 12
   },
   {
     key.kind: source.lang.swift.ref.struct,
     key.name: "Int32",
     key.usr: "s:s5Int32V",
-    key.offset: 4958,
+    key.offset: 4945,
     key.length: 5
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 4969,
+    key.offset: 4956,
     key.length: 3
   },
   {
     key.kind: source.lang.swift.syntaxtype.identifier,
-    key.offset: 4973,
+    key.offset: 4960,
     key.length: 12
   },
   {
     key.kind: source.lang.swift.ref.struct,
     key.name: "Int32",
     key.usr: "s:s5Int32V",
-    key.offset: 4987,
+    key.offset: 4974,
     key.length: 5
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 4998,
+    key.offset: 4985,
     key.length: 3
   },
   {
     key.kind: source.lang.swift.syntaxtype.identifier,
-    key.offset: 5002,
+    key.offset: 4989,
     key.length: 12
   },
   {
     key.kind: source.lang.swift.ref.struct,
     key.name: "Int32",
     key.usr: "s:s5Int32V",
-    key.offset: 5016,
+    key.offset: 5003,
     key.length: 5
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 5024,
+    key.offset: 5011,
     key.length: 3
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 5035,
+    key.offset: 5022,
     key.length: 4
   },
   {
     key.kind: source.lang.swift.syntaxtype.identifier,
-    key.offset: 5040,
+    key.offset: 5027,
     key.length: 16
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 5064,
+    key.offset: 5051,
     key.length: 4
   },
   {
     key.kind: source.lang.swift.syntaxtype.identifier,
-    key.offset: 5069,
+    key.offset: 5056,
     key.length: 16
   },
   {
     key.kind: source.lang.swift.syntaxtype.argument,
-    key.offset: 5086,
+    key.offset: 5073,
     key.length: 1
   },
   {
     key.kind: source.lang.swift.syntaxtype.parameter,
-    key.offset: 5088,
+    key.offset: 5075,
     key.length: 1
   },
   {
     key.kind: source.lang.swift.ref.struct,
     key.name: "Int32",
     key.usr: "s:s5Int32V",
-    key.offset: 5091,
+    key.offset: 5078,
     key.length: 5
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 5103,
+    key.offset: 5090,
     key.length: 4
   },
   {
     key.kind: source.lang.swift.syntaxtype.identifier,
-    key.offset: 5108,
+    key.offset: 5095,
     key.length: 16
   },
   {
     key.kind: source.lang.swift.syntaxtype.argument,
-    key.offset: 5125,
+    key.offset: 5112,
     key.length: 1
   },
   {
     key.kind: source.lang.swift.syntaxtype.parameter,
-    key.offset: 5127,
+    key.offset: 5114,
     key.length: 1
   },
   {
     key.kind: source.lang.swift.ref.struct,
     key.name: "Int32",
     key.usr: "s:s5Int32V",
+    key.offset: 5117,
+    key.length: 5
+  },
+  {
+    key.kind: source.lang.swift.syntaxtype.argument,
+    key.offset: 5124,
+    key.length: 5
+  },
+  {
+    key.kind: source.lang.swift.syntaxtype.parameter,
     key.offset: 5130,
-    key.length: 5
-  },
-  {
-    key.kind: source.lang.swift.syntaxtype.argument,
-    key.offset: 5137,
-    key.length: 5
-  },
-  {
-    key.kind: source.lang.swift.syntaxtype.parameter,
-    key.offset: 5143,
     key.length: 1
   },
   {
     key.kind: source.lang.swift.ref.struct,
     key.name: "Int32",
     key.usr: "s:s5Int32V",
-    key.offset: 5146,
+    key.offset: 5133,
     key.length: 5
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 5158,
+    key.offset: 5145,
     key.length: 4
   },
   {
     key.kind: source.lang.swift.syntaxtype.identifier,
-    key.offset: 5163,
+    key.offset: 5150,
     key.length: 29
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 5200,
+    key.offset: 5187,
     key.length: 5
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 5206,
+    key.offset: 5193,
     key.length: 4
   },
   {
     key.kind: source.lang.swift.syntaxtype.identifier,
-    key.offset: 5211,
+    key.offset: 5198,
     key.length: 13
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 5232,
+    key.offset: 5219,
     key.length: 4
   },
   {
     key.kind: source.lang.swift.syntaxtype.identifier,
-    key.offset: 5237,
+    key.offset: 5224,
     key.length: 14
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 5257,
+    key.offset: 5244,
     key.length: 3
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 5267,
+    key.offset: 5254,
     key.length: 4
   },
   {
     key.kind: source.lang.swift.syntaxtype.identifier,
-    key.offset: 5272,
+    key.offset: 5259,
     key.length: 14
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 5292,
+    key.offset: 5279,
     key.length: 3
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 5302,
+    key.offset: 5289,
     key.length: 4
   },
   {
     key.kind: source.lang.swift.syntaxtype.identifier,
-    key.offset: 5307,
+    key.offset: 5294,
     key.length: 15
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 5328,
+    key.offset: 5315,
     key.length: 3
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 5338,
+    key.offset: 5325,
     key.length: 4
   },
   {
     key.kind: source.lang.swift.syntaxtype.identifier,
-    key.offset: 5343,
+    key.offset: 5330,
     key.length: 14
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 5363,
+    key.offset: 5350,
     key.length: 3
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 5370,
+    key.offset: 5357,
     key.length: 9
   },
   {
     key.kind: source.lang.swift.syntaxtype.identifier,
-    key.offset: 5380,
+    key.offset: 5367,
     key.length: 13
   },
   {
     key.kind: source.lang.swift.ref.struct,
     key.name: "Int32",
     key.usr: "s:s5Int32V",
-    key.offset: 5396,
+    key.offset: 5383,
     key.length: 5
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 5402,
+    key.offset: 5389,
     key.length: 3
   },
   {
     key.kind: source.lang.swift.syntaxtype.identifier,
+    key.offset: 5393,
+    key.length: 11
+  },
+  {
+    key.kind: source.lang.swift.ref.struct,
+    key.name: "Int32",
+    key.usr: "s:s5Int32V",
     key.offset: 5406,
+    key.length: 5
+  },
+  {
+    key.kind: source.lang.swift.syntaxtype.keyword,
+    key.offset: 5414,
+    key.length: 3
+  },
+  {
+    key.kind: source.lang.swift.syntaxtype.keyword,
+    key.offset: 5420,
+    key.length: 3
+  },
+  {
+    key.kind: source.lang.swift.syntaxtype.identifier,
+    key.offset: 5424,
     key.length: 11
   },
   {
     key.kind: source.lang.swift.ref.struct,
     key.name: "Int32",
     key.usr: "s:s5Int32V",
-    key.offset: 5419,
-    key.length: 5
-  },
-  {
-    key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 5427,
-    key.length: 3
-  },
-  {
-    key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 5433,
-    key.length: 3
-  },
-  {
-    key.kind: source.lang.swift.syntaxtype.identifier,
     key.offset: 5437,
+    key.length: 5
+  },
+  {
+    key.kind: source.lang.swift.syntaxtype.keyword,
+    key.offset: 5445,
+    key.length: 3
+  },
+  {
+    key.kind: source.lang.swift.syntaxtype.keyword,
+    key.offset: 5451,
+    key.length: 3
+  },
+  {
+    key.kind: source.lang.swift.syntaxtype.identifier,
+    key.offset: 5455,
     key.length: 11
   },
   {
     key.kind: source.lang.swift.ref.struct,
     key.name: "Int32",
     key.usr: "s:s5Int32V",
-    key.offset: 5450,
-    key.length: 5
-  },
-  {
-    key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 5458,
-    key.length: 3
-  },
-  {
-    key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 5464,
-    key.length: 3
-  },
-  {
-    key.kind: source.lang.swift.syntaxtype.identifier,
     key.offset: 5468,
-    key.length: 11
-  },
-  {
-    key.kind: source.lang.swift.ref.struct,
-    key.name: "Int32",
-    key.usr: "s:s5Int32V",
-    key.offset: 5481,
     key.length: 5
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 5489,
+    key.offset: 5476,
     key.length: 3
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 5495,
+    key.offset: 5482,
     key.length: 3
   },
   {
     key.kind: source.lang.swift.syntaxtype.identifier,
-    key.offset: 5499,
+    key.offset: 5486,
     key.length: 11
   },
   {
     key.kind: source.lang.swift.ref.struct,
     key.name: "UInt32",
     key.usr: "s:s6UInt32V",
-    key.offset: 5512,
+    key.offset: 5499,
     key.length: 6
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 5521,
+    key.offset: 5508,
     key.length: 3
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 5527,
+    key.offset: 5514,
     key.length: 3
   },
   {
     key.kind: source.lang.swift.syntaxtype.identifier,
-    key.offset: 5531,
+    key.offset: 5518,
     key.length: 11
   },
   {
     key.kind: source.lang.swift.ref.struct,
     key.name: "UInt64",
     key.usr: "s:s6UInt64V",
-    key.offset: 5544,
+    key.offset: 5531,
     key.length: 6
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 5553,
+    key.offset: 5540,
     key.length: 3
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 5559,
+    key.offset: 5546,
     key.length: 3
   },
   {
     key.kind: source.lang.swift.syntaxtype.identifier,
+    key.offset: 5550,
+    key.length: 11
+  },
+  {
+    key.kind: source.lang.swift.ref.typealias,
+    key.name: "typedef_int_t",
+    key.usr: "c:Foo.h@T@typedef_int_t",
     key.offset: 5563,
+    key.length: 13
+  },
+  {
+    key.kind: source.lang.swift.syntaxtype.keyword,
+    key.offset: 5579,
+    key.length: 3
+  },
+  {
+    key.kind: source.lang.swift.syntaxtype.keyword,
+    key.offset: 5585,
+    key.length: 3
+  },
+  {
+    key.kind: source.lang.swift.syntaxtype.identifier,
+    key.offset: 5589,
     key.length: 11
   },
   {
     key.kind: source.lang.swift.ref.typealias,
     key.name: "typedef_int_t",
     key.usr: "c:Foo.h@T@typedef_int_t",
-    key.offset: 5576,
-    key.length: 13
-  },
-  {
-    key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 5592,
-    key.length: 3
-  },
-  {
-    key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 5598,
-    key.length: 3
-  },
-  {
-    key.kind: source.lang.swift.syntaxtype.identifier,
     key.offset: 5602,
-    key.length: 11
-  },
-  {
-    key.kind: source.lang.swift.ref.typealias,
-    key.name: "typedef_int_t",
-    key.usr: "c:Foo.h@T@typedef_int_t",
-    key.offset: 5615,
     key.length: 13
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 5631,
+    key.offset: 5618,
     key.length: 3
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 5637,
+    key.offset: 5624,
     key.length: 3
   },
   {
     key.kind: source.lang.swift.syntaxtype.identifier,
-    key.offset: 5641,
+    key.offset: 5628,
     key.length: 11
   },
   {
     key.kind: source.lang.swift.ref.struct,
     key.name: "Int8",
     key.usr: "s:s4Int8V",
-    key.offset: 5654,
+    key.offset: 5641,
     key.length: 4
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 5661,
+    key.offset: 5648,
     key.length: 3
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 5667,
+    key.offset: 5654,
     key.length: 3
   },
   {
     key.kind: source.lang.swift.syntaxtype.identifier,
-    key.offset: 5671,
+    key.offset: 5658,
     key.length: 11
   },
   {
     key.kind: source.lang.swift.ref.struct,
     key.name: "Int32",
     key.usr: "s:s5Int32V",
-    key.offset: 5684,
+    key.offset: 5671,
     key.length: 5
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 5692,
+    key.offset: 5679,
     key.length: 3
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 5698,
+    key.offset: 5685,
     key.length: 3
   },
   {
     key.kind: source.lang.swift.syntaxtype.identifier,
-    key.offset: 5702,
+    key.offset: 5689,
     key.length: 12
   },
   {
     key.kind: source.lang.swift.ref.struct,
     key.name: "Int16",
     key.usr: "s:s5Int16V",
-    key.offset: 5716,
+    key.offset: 5703,
     key.length: 5
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 5724,
+    key.offset: 5711,
     key.length: 3
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 5730,
+    key.offset: 5717,
     key.length: 3
   },
   {
     key.kind: source.lang.swift.syntaxtype.identifier,
-    key.offset: 5734,
+    key.offset: 5721,
     key.length: 12
   },
   {
     key.kind: source.lang.swift.ref.struct,
     key.name: "Int",
     key.usr: "s:Si",
-    key.offset: 5748,
+    key.offset: 5735,
     key.length: 3
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 5754,
+    key.offset: 5741,
     key.length: 3
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 5760,
+    key.offset: 5747,
     key.length: 3
   },
   {
     key.kind: source.lang.swift.syntaxtype.identifier,
-    key.offset: 5764,
+    key.offset: 5751,
     key.length: 12
   },
   {
     key.kind: source.lang.swift.ref.struct,
     key.name: "Int32",
     key.usr: "s:s5Int32V",
-    key.offset: 5778,
+    key.offset: 5765,
     key.length: 5
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 5786,
+    key.offset: 5773,
     key.length: 3
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 5792,
+    key.offset: 5779,
     key.length: 3
   },
   {
     key.kind: source.lang.swift.syntaxtype.identifier,
-    key.offset: 5796,
+    key.offset: 5783,
     key.length: 13
   },
   {
     key.kind: source.lang.swift.ref.struct,
     key.name: "Int32",
     key.usr: "s:s5Int32V",
-    key.offset: 5811,
+    key.offset: 5798,
     key.length: 5
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 5819,
+    key.offset: 5806,
     key.length: 3
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 5825,
+    key.offset: 5812,
     key.length: 3
   },
   {
     key.kind: source.lang.swift.syntaxtype.identifier,
-    key.offset: 5829,
+    key.offset: 5816,
     key.length: 18
   },
   {
     key.kind: source.lang.swift.ref.struct,
     key.name: "UInt64",
     key.usr: "s:s6UInt64V",
-    key.offset: 5849,
+    key.offset: 5836,
     key.length: 6
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 5858,
+    key.offset: 5845,
     key.length: 3
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 5864,
+    key.offset: 5851,
     key.length: 3
   },
   {
     key.kind: source.lang.swift.syntaxtype.identifier,
-    key.offset: 5868,
+    key.offset: 5855,
     key.length: 16
   },
   {
     key.kind: source.lang.swift.ref.struct,
     key.name: "UInt32",
     key.usr: "s:s6UInt32V",
-    key.offset: 5886,
+    key.offset: 5873,
     key.length: 6
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 5895,
+    key.offset: 5882,
     key.length: 3
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 5901,
+    key.offset: 5888,
     key.length: 3
   },
   {
     key.kind: source.lang.swift.syntaxtype.identifier,
-    key.offset: 5905,
+    key.offset: 5892,
     key.length: 17
   },
   {
     key.kind: source.lang.swift.ref.struct,
     key.name: "Int32",
     key.usr: "s:s5Int32V",
-    key.offset: 5924,
+    key.offset: 5911,
     key.length: 5
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 5932,
+    key.offset: 5919,
     key.length: 3
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 5938,
+    key.offset: 5925,
     key.length: 3
   },
   {
     key.kind: source.lang.swift.syntaxtype.identifier,
-    key.offset: 5942,
+    key.offset: 5929,
     key.length: 17
   },
   {
     key.kind: source.lang.swift.ref.struct,
     key.name: "Int32",
     key.usr: "s:s5Int32V",
-    key.offset: 5961,
+    key.offset: 5948,
     key.length: 5
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 5969,
+    key.offset: 5956,
     key.length: 3
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 5975,
+    key.offset: 5962,
     key.length: 4
   },
   {
     key.kind: source.lang.swift.syntaxtype.identifier,
-    key.offset: 5980,
+    key.offset: 5967,
     key.length: 16
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 5999,
+    key.offset: 5986,
     key.length: 4
   },
   {
     key.kind: source.lang.swift.syntaxtype.identifier,
-    key.offset: 6004,
+    key.offset: 5991,
     key.length: 21
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 6028,
+    key.offset: 6015,
     key.length: 6
   },
   {
     key.kind: source.lang.swift.syntaxtype.identifier,
-    key.offset: 6035,
+    key.offset: 6022,
     key.length: 15
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 6058,
+    key.offset: 6045,
     key.length: 3
   },
   {
     key.kind: source.lang.swift.syntaxtype.identifier,
-    key.offset: 6062,
+    key.offset: 6049,
     key.length: 1
   },
   {
     key.kind: source.lang.swift.ref.struct,
     key.name: "Int32",
     key.usr: "s:s5Int32V",
-    key.offset: 6065,
+    key.offset: 6052,
     key.length: 5
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 6076,
+    key.offset: 6063,
     key.length: 4
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 6088,
+    key.offset: 6075,
     key.length: 4
   },
   {
     key.kind: source.lang.swift.syntaxtype.argument,
-    key.offset: 6093,
+    key.offset: 6080,
     key.length: 1
   },
   {
     key.kind: source.lang.swift.syntaxtype.parameter,
-    key.offset: 6095,
+    key.offset: 6082,
     key.length: 1
   },
   {
     key.kind: source.lang.swift.ref.struct,
     key.name: "Int32",
     key.usr: "s:s5Int32V",
-    key.offset: 6098,
+    key.offset: 6085,
     key.length: 5
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 6107,
+    key.offset: 6094,
     key.length: 9
   },
   {
     key.kind: source.lang.swift.ref.class,
     key.name: "FooClassBase",
     key.usr: "c:objc(cs)FooClassBase",
-    key.offset: 6117,
+    key.offset: 6104,
     key.length: 12
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 6137,
+    key.offset: 6124,
     key.length: 4
   },
   {
     key.kind: source.lang.swift.syntaxtype.identifier,
-    key.offset: 6142,
+    key.offset: 6129,
     key.length: 14
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 6162,
+    key.offset: 6149,
     key.length: 3
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 6169,
+    key.offset: 6156,
     key.length: 9
   },
   {
     key.kind: source.lang.swift.ref.class,
     key.name: "FooClassBase",
     key.usr: "c:objc(cs)FooClassBase",
-    key.offset: 6179,
+    key.offset: 6166,
     key.length: 12
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 6199,
+    key.offset: 6186,
     key.length: 4
   },
   {
     key.kind: source.lang.swift.syntaxtype.identifier,
-    key.offset: 6204,
+    key.offset: 6191,
     key.length: 14
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 6224,
+    key.offset: 6211,
     key.length: 3
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 6234,
+    key.offset: 6221,
     key.length: 4
   },
   {
     key.kind: source.lang.swift.syntaxtype.identifier,
-    key.offset: 6239,
+    key.offset: 6226,
     key.length: 15
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 6260,
+    key.offset: 6247,
     key.length: 3
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 6267,
+    key.offset: 6254,
     key.length: 9
   },
   {
     key.kind: source.lang.swift.ref.class,
     key.name: "FooClassBase",
     key.usr: "c:objc(cs)FooClassBase",
-    key.offset: 6277,
+    key.offset: 6264,
     key.length: 12
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 6297,
+    key.offset: 6284,
     key.length: 4
   },
   {
     key.kind: source.lang.swift.syntaxtype.identifier,
-    key.offset: 6302,
+    key.offset: 6289,
     key.length: 14
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 6322,
+    key.offset: 6309,
     key.length: 3
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 6329,
+    key.offset: 6316,
     key.length: 8
   },
   {
     key.kind: source.lang.swift.syntaxtype.identifier,
-    key.offset: 6338,
+    key.offset: 6325,
     key.length: 13
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 6356,
+    key.offset: 6343,
     key.length: 5
   },
   {
     key.kind: source.lang.swift.syntaxtype.identifier,
-    key.offset: 6362,
+    key.offset: 6349,
     key.length: 21
   },
   {
     key.kind: source.lang.swift.ref.protocol,
     key.name: "_InternalProt",
     key.usr: "c:objc(pl)_InternalProt",
-    key.offset: 6386,
+    key.offset: 6373,
     key.length: 13
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 6404,
+    key.offset: 6391,
     key.length: 5
   },
   {
     key.kind: source.lang.swift.syntaxtype.identifier,
-    key.offset: 6410,
+    key.offset: 6397,
     key.length: 25
   },
   {
     key.kind: source.lang.swift.ref.class,
     key.name: "FooClassBase",
     key.usr: "c:objc(cs)FooClassBase",
-    key.offset: 6438,
+    key.offset: 6425,
     key.length: 12
   },
   {
     key.kind: source.lang.swift.syntaxtype.attribute.builtin,
-    key.offset: 6458,
+    key.offset: 6445,
     key.length: 15
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 6474,
+    key.offset: 6461,
     key.length: 3
   },
   {
     key.kind: source.lang.swift.syntaxtype.identifier,
-    key.offset: 6478,
+    key.offset: 6465,
     key.length: 10
   },
   {
     key.kind: source.lang.swift.syntaxtype.typeidentifier,
-    key.offset: 6490,
+    key.offset: 6477,
     key.length: 9
   },
   {
     key.kind: source.lang.swift.syntaxtype.attribute.builtin,
-    key.offset: 6506,
+    key.offset: 6493,
     key.length: 15
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 6522,
+    key.offset: 6509,
     key.length: 3
   },
   {
     key.kind: source.lang.swift.syntaxtype.identifier,
-    key.offset: 6526,
+    key.offset: 6513,
     key.length: 16
   },
   {
     key.kind: source.lang.swift.syntaxtype.typeidentifier,
-    key.offset: 6544,
+    key.offset: 6531,
     key.length: 9
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 6560,
+    key.offset: 6547,
     key.length: 3
   },
   {
     key.kind: source.lang.swift.syntaxtype.identifier,
-    key.offset: 6564,
+    key.offset: 6551,
     key.length: 10
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 6576,
+    key.offset: 6563,
     key.length: 3
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 6586,
+    key.offset: 6573,
     key.length: 3
   },
   {
     key.kind: source.lang.swift.syntaxtype.identifier,
-    key.offset: 6590,
+    key.offset: 6577,
     key.length: 9
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 6601,
+    key.offset: 6588,
     key.length: 3
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 6611,
+    key.offset: 6598,
     key.length: 3
   },
   {
     key.kind: source.lang.swift.syntaxtype.identifier,
-    key.offset: 6615,
+    key.offset: 6602,
     key.length: 8
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 6625,
+    key.offset: 6612,
     key.length: 3
   },
   {
     key.kind: source.lang.swift.syntaxtype.attribute.builtin,
-    key.offset: 6635,
+    key.offset: 6622,
     key.length: 4
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 6640,
+    key.offset: 6627,
     key.length: 3
   },
   {
     key.kind: source.lang.swift.syntaxtype.identifier,
-    key.offset: 6644,
+    key.offset: 6631,
     key.length: 7
   },
   {
     key.kind: source.lang.swift.syntaxtype.typeidentifier,
-    key.offset: 6653,
+    key.offset: 6640,
     key.length: 9
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 6669,
+    key.offset: 6656,
     key.length: 3
   },
   {
     key.kind: source.lang.swift.syntaxtype.identifier,
-    key.offset: 6673,
+    key.offset: 6660,
     key.length: 6
   },
   {
     key.kind: source.lang.swift.ref.struct,
     key.name: "Int32",
     key.usr: "s:s5Int32V",
-    key.offset: 6681,
+    key.offset: 6668,
     key.length: 5
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 6692,
+    key.offset: 6679,
     key.length: 4
   },
   {
     key.kind: source.lang.swift.syntaxtype.identifier,
-    key.offset: 6697,
+    key.offset: 6684,
     key.length: 14
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 6717,
+    key.offset: 6704,
     key.length: 3
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 6727,
+    key.offset: 6714,
     key.length: 4
   },
   {
     key.kind: source.lang.swift.syntaxtype.identifier,
-    key.offset: 6732,
+    key.offset: 6719,
     key.length: 14
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 6752,
+    key.offset: 6739,
     key.length: 3
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 6762,
+    key.offset: 6749,
     key.length: 4
   },
   {
     key.kind: source.lang.swift.syntaxtype.identifier,
-    key.offset: 6767,
+    key.offset: 6754,
     key.length: 15
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 6788,
+    key.offset: 6775,
     key.length: 3
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 6798,
+    key.offset: 6785,
     key.length: 4
   },
   {
     key.kind: source.lang.swift.syntaxtype.identifier,
-    key.offset: 6803,
+    key.offset: 6790,
     key.length: 14
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 6823,
+    key.offset: 6810,
     key.length: 3
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 6830,
+    key.offset: 6817,
     key.length: 3
   },
   {
     key.kind: source.lang.swift.syntaxtype.identifier,
-    key.offset: 6834,
+    key.offset: 6821,
     key.length: 7
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 6846,
+    key.offset: 6833,
     key.length: 5
   },
   {
     key.kind: source.lang.swift.syntaxtype.identifier,
-    key.offset: 6852,
+    key.offset: 6839,
     key.length: 21
   },
   {
     key.kind: source.lang.swift.ref.class,
     key.name: "FooClassBase",
     key.usr: "c:objc(cs)FooClassBase",
-    key.offset: 6876,
+    key.offset: 6863,
     key.length: 12
   },
   {
     key.kind: source.lang.swift.syntaxtype.attribute.builtin,
-    key.offset: 6896,
+    key.offset: 6883,
     key.length: 11
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 6908,
+    key.offset: 6895,
     key.length: 4
   },
   {
     key.kind: source.lang.swift.syntaxtype.argument,
-    key.offset: 6914,
+    key.offset: 6901,
     key.length: 3
   },
   {
     key.kind: source.lang.swift.syntaxtype.parameter,
-    key.offset: 6918,
+    key.offset: 6905,
     key.length: 1
   },
   {
     key.kind: source.lang.swift.ref.struct,
     key.name: "Int32",
     key.usr: "s:s5Int32V",
-    key.offset: 6921,
+    key.offset: 6908,
     key.length: 5
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 6933,
+    key.offset: 6920,
     key.length: 4
   },
   {
     key.kind: source.lang.swift.syntaxtype.identifier,
-    key.offset: 6938,
+    key.offset: 6925,
     key.length: 11
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 6957,
+    key.offset: 6944,
     key.length: 4
   },
   {
     key.kind: source.lang.swift.syntaxtype.identifier,
-    key.offset: 6962,
+    key.offset: 6949,
     key.length: 16
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 6986,
+    key.offset: 6973,
     key.length: 4
   },
   {
     key.kind: source.lang.swift.syntaxtype.identifier,
-    key.offset: 6991,
+    key.offset: 6978,
     key.length: 10
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 7009,
+    key.offset: 6996,
     key.length: 4
   },
   {
     key.kind: source.lang.swift.syntaxtype.identifier,
-    key.offset: 7014,
+    key.offset: 7001,
     key.length: 22
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 7044,
+    key.offset: 7031,
     key.length: 4
   },
   {
     key.kind: source.lang.swift.syntaxtype.identifier,
-    key.offset: 7049,
+    key.offset: 7036,
     key.length: 22
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 7079,
+    key.offset: 7066,
     key.length: 4
   },
   {
     key.kind: source.lang.swift.syntaxtype.identifier,
-    key.offset: 7084,
+    key.offset: 7071,
     key.length: 21
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 7113,
+    key.offset: 7100,
     key.length: 4
   },
   {
     key.kind: source.lang.swift.syntaxtype.identifier,
-    key.offset: 7118,
+    key.offset: 7105,
     key.length: 23
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 7149,
+    key.offset: 7136,
     key.length: 4
   },
   {
     key.kind: source.lang.swift.syntaxtype.identifier,
-    key.offset: 7154,
+    key.offset: 7141,
     key.length: 25
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 7187,
+    key.offset: 7174,
     key.length: 4
   },
   {
     key.kind: source.lang.swift.syntaxtype.identifier,
-    key.offset: 7192,
+    key.offset: 7179,
     key.length: 25
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 7225,
+    key.offset: 7212,
     key.length: 4
   },
   {
     key.kind: source.lang.swift.syntaxtype.identifier,
-    key.offset: 7230,
+    key.offset: 7217,
     key.length: 24
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 7262,
+    key.offset: 7249,
     key.length: 4
   },
   {
     key.kind: source.lang.swift.syntaxtype.identifier,
-    key.offset: 7267,
+    key.offset: 7254,
     key.length: 26
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 7301,
+    key.offset: 7288,
     key.length: 4
   },
   {
     key.kind: source.lang.swift.syntaxtype.identifier,
-    key.offset: 7306,
+    key.offset: 7293,
     key.length: 14
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 7326,
+    key.offset: 7313,
     key.length: 3
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 7336,
+    key.offset: 7323,
     key.length: 4
   },
   {
     key.kind: source.lang.swift.syntaxtype.identifier,
-    key.offset: 7341,
+    key.offset: 7328,
     key.length: 14
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 7361,
+    key.offset: 7348,
     key.length: 3
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 7371,
+    key.offset: 7358,
     key.length: 4
   },
   {
     key.kind: source.lang.swift.syntaxtype.identifier,
-    key.offset: 7376,
+    key.offset: 7363,
     key.length: 15
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 7397,
+    key.offset: 7384,
     key.length: 3
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 7407,
+    key.offset: 7394,
     key.length: 4
   },
   {
     key.kind: source.lang.swift.syntaxtype.identifier,
-    key.offset: 7412,
+    key.offset: 7399,
     key.length: 14
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 7432,
+    key.offset: 7419,
     key.length: 3
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 7439,
+    key.offset: 7426,
     key.length: 5
   },
   {
     key.kind: source.lang.swift.syntaxtype.identifier,
-    key.offset: 7445,
+    key.offset: 7432,
     key.length: 9
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 7459,
+    key.offset: 7446,
     key.length: 4
   },
   {
     key.kind: source.lang.swift.syntaxtype.identifier,
-    key.offset: 7464,
+    key.offset: 7451,
     key.length: 16
   },
   {
     key.kind: source.lang.swift.syntaxtype.argument,
-    key.offset: 7481,
+    key.offset: 7468,
     key.length: 1
   },
   {
     key.kind: source.lang.swift.syntaxtype.parameter,
-    key.offset: 7483,
+    key.offset: 7470,
     key.length: 1
   },
   {
     key.kind: source.lang.swift.ref.class,
     key.name: "FooCFType",
     key.usr: "c:Foo.h@T@FooCFTypeRef",
-    key.offset: 7486,
+    key.offset: 7473,
     key.length: 9
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 7498,
+    key.offset: 7485,
     key.length: 4
   },
   {
     key.kind: source.lang.swift.syntaxtype.identifier,
-    key.offset: 7503,
+    key.offset: 7490,
     key.length: 21
   },
   {
     key.kind: source.lang.swift.ref.struct,
     key.name: "Int",
     key.usr: "s:Si",
-    key.offset: 7527,
+    key.offset: 7514,
     key.length: 3
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 7538,
+    key.offset: 7525,
     key.length: 4
   },
   {
     key.kind: source.lang.swift.syntaxtype.identifier,
-    key.offset: 7543,
+    key.offset: 7530,
     key.length: 13
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 7562,
+    key.offset: 7549,
     key.length: 4
   },
   {
     key.kind: source.lang.swift.syntaxtype.identifier,
-    key.offset: 7567,
+    key.offset: 7554,
     key.length: 10
   },
   {
     key.kind: source.lang.swift.syntaxtype.attribute.builtin,
-    key.offset: 7583,
+    key.offset: 7570,
     key.length: 10
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 7594,
+    key.offset: 7581,
     key.length: 3
   },
   {
     key.kind: source.lang.swift.syntaxtype.identifier,
-    key.offset: 7598,
+    key.offset: 7585,
     key.length: 9
   },
   {
     key.kind: source.lang.swift.ref.struct,
     key.name: "Int",
     key.usr: "s:Si",
-    key.offset: 7609,
+    key.offset: 7596,
     key.length: 3
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 7615,
+    key.offset: 7602,
     key.length: 3
   },
   {
     key.kind: source.lang.swift.syntaxtype.attribute.builtin,
-    key.offset: 7626,
+    key.offset: 7613,
     key.length: 10
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 7637,
+    key.offset: 7624,
     key.length: 4
   },
   {
     key.kind: source.lang.swift.syntaxtype.identifier,
-    key.offset: 7642,
+    key.offset: 7629,
     key.length: 4
   },
   {
     key.kind: source.lang.swift.syntaxtype.argument,
-    key.offset: 7647,
+    key.offset: 7634,
     key.length: 4
   },
   {
     key.kind: source.lang.swift.syntaxtype.parameter,
-    key.offset: 7652,
+    key.offset: 7639,
     key.length: 6
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 7660,
+    key.offset: 7647,
     key.length: 5
   },
   {
     key.kind: source.lang.swift.ref.struct,
     key.name: "Hasher",
     key.usr: "s:s6HasherV",
+    key.offset: 7653,
+    key.length: 6
+  },
+  {
+    key.kind: source.lang.swift.syntaxtype.keyword,
     key.offset: 7666,
     key.length: 6
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 7679,
-    key.length: 6
-  },
-  {
-    key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 7686,
+    key.offset: 7673,
     key.length: 4
   },
   {
     key.kind: source.lang.swift.syntaxtype.argument,
-    key.offset: 7695,
+    key.offset: 7682,
     key.length: 1
   },
   {
     key.kind: source.lang.swift.syntaxtype.parameter,
-    key.offset: 7697,
+    key.offset: 7684,
     key.length: 3
   },
   {
     key.kind: source.lang.swift.ref.enum,
     key.name: "ABAuthorizationStatus",
     key.usr: "c:@E@ABAuthorizationStatus",
-    key.offset: 7702,
+    key.offset: 7689,
     key.length: 21
   },
   {
     key.kind: source.lang.swift.syntaxtype.argument,
-    key.offset: 7725,
+    key.offset: 7712,
     key.length: 1
   },
   {
     key.kind: source.lang.swift.syntaxtype.parameter,
-    key.offset: 7727,
+    key.offset: 7714,
     key.length: 3
   },
   {
     key.kind: source.lang.swift.ref.enum,
     key.name: "ABAuthorizationStatus",
     key.usr: "c:@E@ABAuthorizationStatus",
-    key.offset: 7732,
+    key.offset: 7719,
     key.length: 21
   },
   {
     key.kind: source.lang.swift.ref.struct,
     key.name: "Bool",
     key.usr: "s:Sb",
-    key.offset: 7758,
+    key.offset: 7745,
     key.length: 4
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 7765,
+    key.offset: 7752,
     key.length: 4
   },
   {
     key.kind: source.lang.swift.syntaxtype.identifier,
-    key.offset: 7770,
+    key.offset: 7757,
     key.length: 11
   },
   {
     key.kind: source.lang.swift.syntaxtype.argument,
-    key.offset: 7782,
+    key.offset: 7769,
     key.length: 1
   },
   {
     key.kind: source.lang.swift.syntaxtype.parameter,
-    key.offset: 7784,
+    key.offset: 7771,
     key.length: 1
   },
   {
     key.kind: source.lang.swift.ref.struct,
     key.name: "Int32",
     key.usr: "s:s5Int32V",
-    key.offset: 7787,
+    key.offset: 7774,
     key.length: 5
   },
   {
     key.kind: source.lang.swift.ref.struct,
     key.name: "Int32",
     key.usr: "s:s5Int32V",
-    key.offset: 7797,
+    key.offset: 7784,
     key.length: 5
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 7803,
+    key.offset: 7790,
     key.length: 6
   },
   {
     key.kind: source.lang.swift.syntaxtype.identifier,
-    key.offset: 7810,
+    key.offset: 7797,
     key.length: 11
   },
   {
     key.kind: source.lang.swift.ref.protocol,
     key.name: "Equatable",
     key.usr: "s:SQ",
-    key.offset: 7824,
+    key.offset: 7811,
     key.length: 9
   },
   {
     key.kind: source.lang.swift.ref.protocol,
     key.name: "RawRepresentable",
     key.usr: "s:SY",
-    key.offset: 7835,
+    key.offset: 7822,
     key.length: 16
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 7859,
+    key.offset: 7846,
     key.length: 4
   },
   {
     key.kind: source.lang.swift.syntaxtype.argument,
-    key.offset: 7864,
+    key.offset: 7851,
     key.length: 1
   },
   {
     key.kind: source.lang.swift.syntaxtype.parameter,
-    key.offset: 7866,
+    key.offset: 7853,
     key.length: 8
   },
   {
     key.kind: source.lang.swift.ref.struct,
     key.name: "UInt32",
     key.usr: "s:s6UInt32V",
-    key.offset: 7876,
+    key.offset: 7863,
     key.length: 6
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 7889,
+    key.offset: 7876,
     key.length: 4
   },
   {
     key.kind: source.lang.swift.syntaxtype.argument,
-    key.offset: 7894,
+    key.offset: 7881,
     key.length: 8
   },
   {
     key.kind: source.lang.swift.syntaxtype.parameter,
-    key.offset: 7903,
+    key.offset: 7890,
     key.length: 8
   },
   {
     key.kind: source.lang.swift.ref.struct,
     key.name: "UInt32",
     key.usr: "s:s6UInt32V",
-    key.offset: 7913,
+    key.offset: 7900,
     key.length: 6
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 7926,
+    key.offset: 7913,
     key.length: 3
   },
   {
     key.kind: source.lang.swift.syntaxtype.identifier,
-    key.offset: 7930,
+    key.offset: 7917,
     key.length: 8
   },
   {
     key.kind: source.lang.swift.ref.struct,
     key.name: "UInt32",
     key.usr: "s:s6UInt32V",
-    key.offset: 7940,
+    key.offset: 7927,
     key.length: 6
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 7952,
+    key.offset: 7939,
     key.length: 6
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 7959,
+    key.offset: 7946,
     key.length: 4
   },
   {
     key.kind: source.lang.swift.syntaxtype.argument,
-    key.offset: 7968,
+    key.offset: 7955,
     key.length: 1
   },
   {
     key.kind: source.lang.swift.syntaxtype.parameter,
-    key.offset: 7970,
+    key.offset: 7957,
     key.length: 3
   },
   {
     key.kind: source.lang.swift.ref.struct,
     key.name: "FooSubEnum1",
     key.usr: "c:@E@FooSubEnum1",
-    key.offset: 7975,
+    key.offset: 7962,
     key.length: 11
   },
   {
     key.kind: source.lang.swift.syntaxtype.argument,
-    key.offset: 7988,
+    key.offset: 7975,
     key.length: 1
   },
   {
     key.kind: source.lang.swift.syntaxtype.parameter,
-    key.offset: 7990,
+    key.offset: 7977,
     key.length: 3
   },
   {
     key.kind: source.lang.swift.ref.struct,
     key.name: "FooSubEnum1",
     key.usr: "c:@E@FooSubEnum1",
-    key.offset: 7995,
+    key.offset: 7982,
     key.length: 11
   },
   {
     key.kind: source.lang.swift.ref.struct,
     key.name: "Bool",
     key.usr: "s:Sb",
-    key.offset: 8011,
+    key.offset: 7998,
     key.length: 4
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 8018,
+    key.offset: 8005,
     key.length: 3
   },
   {
     key.kind: source.lang.swift.syntaxtype.identifier,
-    key.offset: 8022,
+    key.offset: 8009,
     key.length: 12
   },
   {
     key.kind: source.lang.swift.ref.struct,
     key.name: "FooSubEnum1",
     key.usr: "c:@E@FooSubEnum1",
-    key.offset: 8036,
+    key.offset: 8023,
     key.length: 11
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 8050,
+    key.offset: 8037,
     key.length: 3
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 8056,
+    key.offset: 8043,
     key.length: 3
   },
   {
     key.kind: source.lang.swift.syntaxtype.identifier,
-    key.offset: 8060,
+    key.offset: 8047,
     key.length: 12
   },
   {
     key.kind: source.lang.swift.ref.struct,
     key.name: "FooSubEnum1",
     key.usr: "c:@E@FooSubEnum1",
-    key.offset: 8074,
+    key.offset: 8061,
     key.length: 11
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 8088,
+    key.offset: 8075,
     key.length: 3
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 8094,
+    key.offset: 8081,
     key.length: 3
   },
   {
     key.kind: source.lang.swift.syntaxtype.identifier,
-    key.offset: 8098,
+    key.offset: 8085,
     key.length: 25
   },
   {
     key.kind: source.lang.swift.ref.struct,
     key.name: "Int",
     key.usr: "s:Si",
-    key.offset: 8125,
+    key.offset: 8112,
     key.length: 3
   },
   {
     key.kind: source.lang.swift.syntaxtype.keyword,
-    key.offset: 8131,
+    key.offset: 8118,
     key.length: 3
   }
 ]
@@ -5275,7 +5273,8 @@
     key.kind: source.lang.swift.decl.extension.struct,
     key.doc.full_as_xml: "<Other><Name></Name><Declaration>extension FooRuncingOptions</Declaration><CommentParts><Abstract><Para><codeVoice>SetAlgebra</codeVoice> requirements for which default implementations are supplied.</Para></Abstract><Discussion><Note><Para>A type conforming to <codeVoice>SetAlgebra</codeVoice> can implement any of these initializers or methods, and those implementations will be used in lieu of these defaults.</Para></Note></Discussion></CommentParts></Other>",
     key.offset: 1445,
-    key.length: 683,
+    key.length: 670,
+    key.fully_annotated_generic_signature: "&lt;<decl.generic_type_param usr=\"s:s10SetAlgebraP4Selfxmfp\"><decl.generic_type_param.name>Self</decl.generic_type_param.name></decl.generic_type_param> <syntaxtype.keyword>where</syntaxtype.keyword> <decl.generic_type_requirement><ref.generic_type_param usr=\"s:s10SetAlgebraP4Selfxmfp\">Self</ref.generic_type_param> : <ref.protocol usr=\"s:s10SetAlgebraP\">SetAlgebra</ref.protocol></decl.generic_type_requirement>&gt;",
     key.extends: {
       key.kind: source.lang.swift.ref.struct,
       key.name: "FooRuncingOptions",
@@ -5302,8 +5301,8 @@
         ],
         key.doc.full_as_xml: "<Function><Name>init(_:)</Name><USR>s:s10SetAlgebraPsEyxqd__ncSTRd__7ElementQyd__ACRtzlufc</USR><Declaration>@inlinable init&lt;S&gt;(_ sequence: __owned S) where S : Sequence, Self.Element == S.Element</Declaration><CommentParts><Abstract><Para>Creates a new set from a finite sequence of items.</Para></Abstract><Parameters><Parameter><Name>sequence</Name><Direction isExplicit=\"0\">in</Direction><Discussion><Para>The elements to use as members of the new set.</Para></Discussion></Parameter></Parameters><Discussion><Para>Use this initializer to create a new set from an existing sequence, like an array or a range:</Para><CodeListing language=\"swift\"><zCodeLineNumbered><![CDATA[let validIndices = Set(0..<7).subtracting([2, 4, 5])]]></zCodeLineNumbered><zCodeLineNumbered><![CDATA[print(validIndices)]]></zCodeLineNumbered><zCodeLineNumbered><![CDATA[// Prints \"[6, 0, 1, 3]\"]]></zCodeLineNumbered><zCodeLineNumbered></zCodeLineNumbered></CodeListing></Discussion></CommentParts></Function>",
         key.offset: 1480,
-        key.length: 100,
-        key.fully_annotated_decl: "<decl.function.constructor><syntaxtype.attribute.builtin><syntaxtype.attribute.name>@inlinable</syntaxtype.attribute.name></syntaxtype.attribute.builtin> <syntaxtype.keyword>init</syntaxtype.keyword>&lt;S&gt;(<decl.var.parameter><decl.var.parameter.argument_label>_</decl.var.parameter.argument_label> <decl.var.parameter.name>sequence</decl.var.parameter.name>: __owned <decl.var.parameter.type>S</decl.var.parameter.type></decl.var.parameter>) <syntaxtype.keyword>where</syntaxtype.keyword> <decl.generic_type_requirement>S : <ref.protocol usr=\"s:ST\">Sequence</ref.protocol></decl.generic_type_requirement>, <decl.generic_type_requirement><ref.struct usr=\"c:@E@FooRuncingOptions\">FooRuncingOptions</ref.struct>.<ref.typealias usr=\"s:So17FooRuncingOptionsV7Elementa\">Element</ref.typealias> == S.Element</decl.generic_type_requirement></decl.function.constructor>",
+        key.length: 87,
+        key.fully_annotated_decl: "<decl.function.constructor><syntaxtype.attribute.builtin><syntaxtype.attribute.name>@inlinable</syntaxtype.attribute.name></syntaxtype.attribute.builtin> <syntaxtype.keyword>init</syntaxtype.keyword>&lt;S&gt;(<decl.var.parameter><decl.var.parameter.argument_label>_</decl.var.parameter.argument_label> <decl.var.parameter.name>sequence</decl.var.parameter.name>: __owned <decl.var.parameter.type>S</decl.var.parameter.type></decl.var.parameter>) <syntaxtype.keyword>where</syntaxtype.keyword> <decl.generic_type_requirement>S : <ref.protocol usr=\"s:ST\">Sequence</ref.protocol></decl.generic_type_requirement>, <decl.generic_type_requirement><ref.generic_type_param usr=\"s:s10SetAlgebraP4Selfxmfp\">Self</ref.generic_type_param>.Element == S.Element</decl.generic_type_requirement></decl.function.constructor>",
         key.entities: [
           {
             key.kind: source.lang.swift.decl.var.local,
@@ -5320,7 +5319,7 @@
         key.usr: "s:s10SetAlgebraPsE8subtractyyxF::SYNTHESIZED::c:@E@FooRuncingOptions",
         key.original_usr: "s:s10SetAlgebraPsE8subtractyyxF",
         key.doc.full_as_xml: "<Function><Name>subtract(_:)</Name><USR>s:s10SetAlgebraPsE8subtractyyxF</USR><Declaration>@inlinable mutating func subtract(_ other: Self)</Declaration><CommentParts><Abstract><Para>Removes the elements of the given set from this set.</Para></Abstract><Parameters><Parameter><Name>other</Name><Direction isExplicit=\"0\">in</Direction><Discussion><Para>A set of the same type as the current set.</Para></Discussion></Parameter></Parameters><Discussion><Para>In the following example, the elements of the <codeVoice>employees</codeVoice> set that are also members of the <codeVoice>neighbors</codeVoice> set are removed. In particular, the names <codeVoice>&quot;Bethany&quot;</codeVoice> and <codeVoice>&quot;Eric&quot;</codeVoice> are removed from <codeVoice>employees</codeVoice>.</Para><CodeListing language=\"swift\"><zCodeLineNumbered><![CDATA[var employees: Set = [\"Alicia\", \"Bethany\", \"Chris\", \"Diana\", \"Eric\"]]]></zCodeLineNumbered><zCodeLineNumbered><![CDATA[let neighbors: Set = [\"Bethany\", \"Eric\", \"Forlani\", \"Greta\"]]]></zCodeLineNumbered><zCodeLineNumbered><![CDATA[employees.subtract(neighbors)]]></zCodeLineNumbered><zCodeLineNumbered><![CDATA[print(employees)]]></zCodeLineNumbered><zCodeLineNumbered><![CDATA[// Prints \"[\"Diana\", \"Chris\", \"Alicia\"]\"]]></zCodeLineNumbered><zCodeLineNumbered></zCodeLineNumbered></CodeListing></Discussion></CommentParts></Function>",
-        key.offset: 1586,
+        key.offset: 1573,
         key.length: 61,
         key.fully_annotated_decl: "<decl.function.method.instance><syntaxtype.attribute.builtin><syntaxtype.attribute.name>@inlinable</syntaxtype.attribute.name></syntaxtype.attribute.builtin> <syntaxtype.keyword>mutating</syntaxtype.keyword> <syntaxtype.keyword>func</syntaxtype.keyword> <decl.name>subtract</decl.name>(<decl.var.parameter><decl.var.parameter.argument_label>_</decl.var.parameter.argument_label> <decl.var.parameter.name>other</decl.var.parameter.name>: <decl.var.parameter.type><ref.struct usr=\"c:@E@FooRuncingOptions\">FooRuncingOptions</ref.struct></decl.var.parameter.type></decl.var.parameter>)</decl.function.method.instance>",
         key.entities: [
@@ -5328,7 +5327,7 @@
             key.kind: source.lang.swift.decl.var.local,
             key.keyword: "_",
             key.name: "other",
-            key.offset: 1629,
+            key.offset: 1616,
             key.length: 17
           }
         ]
@@ -5339,7 +5338,7 @@
         key.usr: "s:s10SetAlgebraPsE8isSubset2ofSbx_tF::SYNTHESIZED::c:@E@FooRuncingOptions",
         key.original_usr: "s:s10SetAlgebraPsE8isSubset2ofSbx_tF",
         key.doc.full_as_xml: "<Function><Name>isSubset(of:)</Name><USR>s:s10SetAlgebraPsE8isSubset2ofSbx_tF</USR><Declaration>@inlinable func isSubset(of other: Self) -&gt; Bool</Declaration><CommentParts><Abstract><Para>Returns a Boolean value that indicates whether the set is a subset of another set.</Para></Abstract><Parameters><Parameter><Name>other</Name><Direction isExplicit=\"0\">in</Direction><Discussion><Para>A set of the same type as the current set.</Para></Discussion></Parameter></Parameters><ResultDiscussion><Para><codeVoice>true</codeVoice> if the set is a subset of <codeVoice>other</codeVoice>; otherwise, <codeVoice>false</codeVoice>.</Para></ResultDiscussion><Discussion><Para>Set <emphasis>A</emphasis> is a subset of another set <emphasis>B</emphasis> if every member of <emphasis>A</emphasis> is also a member of <emphasis>B</emphasis>.</Para><CodeListing language=\"swift\"><zCodeLineNumbered><![CDATA[let employees: Set = [\"Alicia\", \"Bethany\", \"Chris\", \"Diana\", \"Eric\"]]]></zCodeLineNumbered><zCodeLineNumbered><![CDATA[let attendees: Set = [\"Alicia\", \"Bethany\", \"Diana\"]]]></zCodeLineNumbered><zCodeLineNumbered><![CDATA[print(attendees.isSubset(of: employees))]]></zCodeLineNumbered><zCodeLineNumbered><![CDATA[// Prints \"true\"]]></zCodeLineNumbered><zCodeLineNumbered></zCodeLineNumbered></CodeListing></Discussion></CommentParts></Function>",
-        key.offset: 1653,
+        key.offset: 1640,
         key.length: 61,
         key.fully_annotated_decl: "<decl.function.method.instance><syntaxtype.attribute.builtin><syntaxtype.attribute.name>@inlinable</syntaxtype.attribute.name></syntaxtype.attribute.builtin> <syntaxtype.keyword>func</syntaxtype.keyword> <decl.name>isSubset</decl.name>(<decl.var.parameter><decl.var.parameter.argument_label>of</decl.var.parameter.argument_label> <decl.var.parameter.name>other</decl.var.parameter.name>: <decl.var.parameter.type><ref.struct usr=\"c:@E@FooRuncingOptions\">FooRuncingOptions</ref.struct></decl.var.parameter.type></decl.var.parameter>) -&gt; <decl.function.returntype><ref.struct usr=\"s:Sb\">Bool</ref.struct></decl.function.returntype></decl.function.method.instance>",
         key.entities: [
@@ -5347,7 +5346,7 @@
             key.kind: source.lang.swift.decl.var.local,
             key.keyword: "of",
             key.name: "other",
-            key.offset: 1688,
+            key.offset: 1675,
             key.length: 17
           }
         ]
@@ -5358,7 +5357,7 @@
         key.usr: "s:s10SetAlgebraPsE10isSuperset2ofSbx_tF::SYNTHESIZED::c:@E@FooRuncingOptions",
         key.original_usr: "s:s10SetAlgebraPsE10isSuperset2ofSbx_tF",
         key.doc.full_as_xml: "<Function><Name>isSuperset(of:)</Name><USR>s:s10SetAlgebraPsE10isSuperset2ofSbx_tF</USR><Declaration>@inlinable func isSuperset(of other: Self) -&gt; Bool</Declaration><CommentParts><Abstract><Para>Returns a Boolean value that indicates whether the set is a superset of the given set.</Para></Abstract><Parameters><Parameter><Name>other</Name><Direction isExplicit=\"0\">in</Direction><Discussion><Para>A set of the same type as the current set.</Para></Discussion></Parameter></Parameters><ResultDiscussion><Para><codeVoice>true</codeVoice> if the set is a superset of <codeVoice>other</codeVoice>; otherwise, <codeVoice>false</codeVoice>.</Para></ResultDiscussion><Discussion><Para>Set <emphasis>A</emphasis> is a superset of another set <emphasis>B</emphasis> if every member of <emphasis>B</emphasis> is also a member of <emphasis>A</emphasis>.</Para><CodeListing language=\"swift\"><zCodeLineNumbered><![CDATA[let employees: Set = [\"Alicia\", \"Bethany\", \"Chris\", \"Diana\", \"Eric\"]]]></zCodeLineNumbered><zCodeLineNumbered><![CDATA[let attendees: Set = [\"Alicia\", \"Bethany\", \"Diana\"]]]></zCodeLineNumbered><zCodeLineNumbered><![CDATA[print(employees.isSuperset(of: attendees))]]></zCodeLineNumbered><zCodeLineNumbered><![CDATA[// Prints \"true\"]]></zCodeLineNumbered><zCodeLineNumbered></zCodeLineNumbered></CodeListing></Discussion></CommentParts></Function>",
-        key.offset: 1720,
+        key.offset: 1707,
         key.length: 63,
         key.fully_annotated_decl: "<decl.function.method.instance><syntaxtype.attribute.builtin><syntaxtype.attribute.name>@inlinable</syntaxtype.attribute.name></syntaxtype.attribute.builtin> <syntaxtype.keyword>func</syntaxtype.keyword> <decl.name>isSuperset</decl.name>(<decl.var.parameter><decl.var.parameter.argument_label>of</decl.var.parameter.argument_label> <decl.var.parameter.name>other</decl.var.parameter.name>: <decl.var.parameter.type><ref.struct usr=\"c:@E@FooRuncingOptions\">FooRuncingOptions</ref.struct></decl.var.parameter.type></decl.var.parameter>) -&gt; <decl.function.returntype><ref.struct usr=\"s:Sb\">Bool</ref.struct></decl.function.returntype></decl.function.method.instance>",
         key.entities: [
@@ -5366,7 +5365,7 @@
             key.kind: source.lang.swift.decl.var.local,
             key.keyword: "of",
             key.name: "other",
-            key.offset: 1757,
+            key.offset: 1744,
             key.length: 17
           }
         ]
@@ -5377,7 +5376,7 @@
         key.usr: "s:s10SetAlgebraPsE10isDisjoint4withSbx_tF::SYNTHESIZED::c:@E@FooRuncingOptions",
         key.original_usr: "s:s10SetAlgebraPsE10isDisjoint4withSbx_tF",
         key.doc.full_as_xml: "<Function><Name>isDisjoint(with:)</Name><USR>s:s10SetAlgebraPsE10isDisjoint4withSbx_tF</USR><Declaration>@inlinable func isDisjoint(with other: Self) -&gt; Bool</Declaration><CommentParts><Abstract><Para>Returns a Boolean value that indicates whether the set has no members in common with the given set.</Para></Abstract><Parameters><Parameter><Name>other</Name><Direction isExplicit=\"0\">in</Direction><Discussion><Para>A set of the same type as the current set.</Para></Discussion></Parameter></Parameters><ResultDiscussion><Para><codeVoice>true</codeVoice> if the set has no elements in common with <codeVoice>other</codeVoice>; otherwise, <codeVoice>false</codeVoice>.</Para></ResultDiscussion><Discussion><Para>In the following example, the <codeVoice>employees</codeVoice> set is disjoint with the <codeVoice>visitors</codeVoice> set because no name appears in both sets.</Para><CodeListing language=\"swift\"><zCodeLineNumbered><![CDATA[let employees: Set = [\"Alicia\", \"Bethany\", \"Chris\", \"Diana\", \"Eric\"]]]></zCodeLineNumbered><zCodeLineNumbered><![CDATA[let visitors: Set = [\"Marcia\", \"Nathaniel\", \"Olivia\"]]]></zCodeLineNumbered><zCodeLineNumbered><![CDATA[print(employees.isDisjoint(with: visitors))]]></zCodeLineNumbered><zCodeLineNumbered><![CDATA[// Prints \"true\"]]></zCodeLineNumbered><zCodeLineNumbered></zCodeLineNumbered></CodeListing></Discussion></CommentParts></Function>",
-        key.offset: 1789,
+        key.offset: 1776,
         key.length: 65,
         key.fully_annotated_decl: "<decl.function.method.instance><syntaxtype.attribute.builtin><syntaxtype.attribute.name>@inlinable</syntaxtype.attribute.name></syntaxtype.attribute.builtin> <syntaxtype.keyword>func</syntaxtype.keyword> <decl.name>isDisjoint</decl.name>(<decl.var.parameter><decl.var.parameter.argument_label>with</decl.var.parameter.argument_label> <decl.var.parameter.name>other</decl.var.parameter.name>: <decl.var.parameter.type><ref.struct usr=\"c:@E@FooRuncingOptions\">FooRuncingOptions</ref.struct></decl.var.parameter.type></decl.var.parameter>) -&gt; <decl.function.returntype><ref.struct usr=\"s:Sb\">Bool</ref.struct></decl.function.returntype></decl.function.method.instance>",
         key.entities: [
@@ -5385,7 +5384,7 @@
             key.kind: source.lang.swift.decl.var.local,
             key.keyword: "with",
             key.name: "other",
-            key.offset: 1828,
+            key.offset: 1815,
             key.length: 17
           }
         ]
@@ -5396,7 +5395,7 @@
         key.usr: "s:s10SetAlgebraPsE11subtractingyxxF::SYNTHESIZED::c:@E@FooRuncingOptions",
         key.original_usr: "s:s10SetAlgebraPsE11subtractingyxxF",
         key.doc.full_as_xml: "<Function><Name>subtracting(_:)</Name><USR>s:s10SetAlgebraPsE11subtractingyxxF</USR><Declaration>@inlinable func subtracting(_ other: Self) -&gt; Self</Declaration><CommentParts><Abstract><Para>Returns a new set containing the elements of this set that do not occur in the given set.</Para></Abstract><Parameters><Parameter><Name>other</Name><Direction isExplicit=\"0\">in</Direction><Discussion><Para>A set of the same type as the current set.</Para></Discussion></Parameter></Parameters><ResultDiscussion><Para>A new set.</Para></ResultDiscussion><Discussion><Para>In the following example, the <codeVoice>nonNeighbors</codeVoice> set is made up of the elements of the <codeVoice>employees</codeVoice> set that are not elements of <codeVoice>neighbors</codeVoice>:</Para><CodeListing language=\"swift\"><zCodeLineNumbered><![CDATA[let employees: Set = [\"Alicia\", \"Bethany\", \"Chris\", \"Diana\", \"Eric\"]]]></zCodeLineNumbered><zCodeLineNumbered><![CDATA[let neighbors: Set = [\"Bethany\", \"Eric\", \"Forlani\", \"Greta\"]]]></zCodeLineNumbered><zCodeLineNumbered><![CDATA[let nonNeighbors = employees.subtract(neighbors)]]></zCodeLineNumbered><zCodeLineNumbered><![CDATA[print(nonNeighbors)]]></zCodeLineNumbered><zCodeLineNumbered><![CDATA[// Prints \"[\"Diana\", \"Chris\", \"Alicia\"]\"]]></zCodeLineNumbered><zCodeLineNumbered></zCodeLineNumbered></CodeListing></Discussion></CommentParts></Function>",
-        key.offset: 1860,
+        key.offset: 1847,
         key.length: 76,
         key.fully_annotated_decl: "<decl.function.method.instance><syntaxtype.attribute.builtin><syntaxtype.attribute.name>@inlinable</syntaxtype.attribute.name></syntaxtype.attribute.builtin> <syntaxtype.keyword>func</syntaxtype.keyword> <decl.name>subtracting</decl.name>(<decl.var.parameter><decl.var.parameter.argument_label>_</decl.var.parameter.argument_label> <decl.var.parameter.name>other</decl.var.parameter.name>: <decl.var.parameter.type><ref.struct usr=\"c:@E@FooRuncingOptions\">FooRuncingOptions</ref.struct></decl.var.parameter.type></decl.var.parameter>) -&gt; <decl.function.returntype><ref.struct usr=\"c:@E@FooRuncingOptions\">FooRuncingOptions</ref.struct></decl.function.returntype></decl.function.method.instance>",
         key.entities: [
@@ -5404,7 +5403,7 @@
             key.kind: source.lang.swift.decl.var.local,
             key.keyword: "_",
             key.name: "other",
-            key.offset: 1897,
+            key.offset: 1884,
             key.length: 17
           }
         ]
@@ -5415,7 +5414,7 @@
         key.usr: "s:s10SetAlgebraPsE7isEmptySbvp::SYNTHESIZED::c:@E@FooRuncingOptions",
         key.original_usr: "s:s10SetAlgebraPsE7isEmptySbvp",
         key.doc.full_as_xml: "<Other><Name>isEmpty</Name><USR>s:s10SetAlgebraPsE7isEmptySbvp</USR><Declaration>@inlinable var isEmpty: Bool { get }</Declaration><CommentParts><Abstract><Para>A Boolean value that indicates whether the set has no elements.</Para></Abstract></CommentParts></Other>",
-        key.offset: 1942,
+        key.offset: 1929,
         key.length: 36,
         key.fully_annotated_decl: "<decl.var.instance><syntaxtype.attribute.builtin><syntaxtype.attribute.name>@inlinable</syntaxtype.attribute.name></syntaxtype.attribute.builtin> <syntaxtype.keyword>var</syntaxtype.keyword> <decl.name>isEmpty</decl.name>: <decl.var.type><ref.struct usr=\"s:Sb\">Bool</ref.struct></decl.var.type> { <syntaxtype.keyword>get</syntaxtype.keyword> }</decl.var.instance>"
       },
@@ -5425,7 +5424,7 @@
         key.usr: "s:s10SetAlgebraPsE16isStrictSuperset2ofSbx_tF::SYNTHESIZED::c:@E@FooRuncingOptions",
         key.original_usr: "s:s10SetAlgebraPsE16isStrictSuperset2ofSbx_tF",
         key.doc.full_as_xml: "<Function><Name>isStrictSuperset(of:)</Name><USR>s:s10SetAlgebraPsE16isStrictSuperset2ofSbx_tF</USR><Declaration>@inlinable func isStrictSuperset(of other: Self) -&gt; Bool</Declaration><CommentParts><Abstract><Para>Returns a Boolean value that indicates whether this set is a strict superset of the given set.</Para></Abstract><Parameters><Parameter><Name>other</Name><Direction isExplicit=\"0\">in</Direction><Discussion><Para>A set of the same type as the current set.</Para></Discussion></Parameter></Parameters><ResultDiscussion><Para><codeVoice>true</codeVoice> if the set is a strict superset of <codeVoice>other</codeVoice>; otherwise, <codeVoice>false</codeVoice>.</Para></ResultDiscussion><Discussion><Para>Set <emphasis>A</emphasis> is a strict superset of another set <emphasis>B</emphasis> if every member of <emphasis>B</emphasis> is also a member of <emphasis>A</emphasis> and <emphasis>A</emphasis> contains at least one element that is <emphasis>not</emphasis> a member of <emphasis>B</emphasis>.</Para><CodeListing language=\"swift\"><zCodeLineNumbered><![CDATA[let employees: Set = [\"Alicia\", \"Bethany\", \"Chris\", \"Diana\", \"Eric\"]]]></zCodeLineNumbered><zCodeLineNumbered><![CDATA[let attendees: Set = [\"Alicia\", \"Bethany\", \"Diana\"]]]></zCodeLineNumbered><zCodeLineNumbered><![CDATA[print(employees.isStrictSuperset(of: attendees))]]></zCodeLineNumbered><zCodeLineNumbered><![CDATA[// Prints \"true\"]]></zCodeLineNumbered><zCodeLineNumbered></zCodeLineNumbered><zCodeLineNumbered><![CDATA[// A set is never a strict superset of itself:]]></zCodeLineNumbered><zCodeLineNumbered><![CDATA[print(employees.isStrictSuperset(of: employees))]]></zCodeLineNumbered><zCodeLineNumbered><![CDATA[// Prints \"false\"]]></zCodeLineNumbered><zCodeLineNumbered></zCodeLineNumbered></CodeListing></Discussion></CommentParts></Function>",
-        key.offset: 1984,
+        key.offset: 1971,
         key.length: 69,
         key.fully_annotated_decl: "<decl.function.method.instance><syntaxtype.attribute.builtin><syntaxtype.attribute.name>@inlinable</syntaxtype.attribute.name></syntaxtype.attribute.builtin> <syntaxtype.keyword>func</syntaxtype.keyword> <decl.name>isStrictSuperset</decl.name>(<decl.var.parameter><decl.var.parameter.argument_label>of</decl.var.parameter.argument_label> <decl.var.parameter.name>other</decl.var.parameter.name>: <decl.var.parameter.type><ref.struct usr=\"c:@E@FooRuncingOptions\">FooRuncingOptions</ref.struct></decl.var.parameter.type></decl.var.parameter>) -&gt; <decl.function.returntype><ref.struct usr=\"s:Sb\">Bool</ref.struct></decl.function.returntype></decl.function.method.instance>",
         key.entities: [
@@ -5433,7 +5432,7 @@
             key.kind: source.lang.swift.decl.var.local,
             key.keyword: "of",
             key.name: "other",
-            key.offset: 2027,
+            key.offset: 2014,
             key.length: 17
           }
         ]
@@ -5444,7 +5443,7 @@
         key.usr: "s:s10SetAlgebraPsE14isStrictSubset2ofSbx_tF::SYNTHESIZED::c:@E@FooRuncingOptions",
         key.original_usr: "s:s10SetAlgebraPsE14isStrictSubset2ofSbx_tF",
         key.doc.full_as_xml: "<Function><Name>isStrictSubset(of:)</Name><USR>s:s10SetAlgebraPsE14isStrictSubset2ofSbx_tF</USR><Declaration>@inlinable func isStrictSubset(of other: Self) -&gt; Bool</Declaration><CommentParts><Abstract><Para>Returns a Boolean value that indicates whether this set is a strict subset of the given set.</Para></Abstract><Parameters><Parameter><Name>other</Name><Direction isExplicit=\"0\">in</Direction><Discussion><Para>A set of the same type as the current set.</Para></Discussion></Parameter></Parameters><ResultDiscussion><Para><codeVoice>true</codeVoice> if the set is a strict subset of <codeVoice>other</codeVoice>; otherwise, <codeVoice>false</codeVoice>.</Para></ResultDiscussion><Discussion><Para>Set <emphasis>A</emphasis> is a strict subset of another set <emphasis>B</emphasis> if every member of <emphasis>A</emphasis> is also a member of <emphasis>B</emphasis> and <emphasis>B</emphasis> contains at least one element that is not a member of <emphasis>A</emphasis>.</Para><CodeListing language=\"swift\"><zCodeLineNumbered><![CDATA[let employees: Set = [\"Alicia\", \"Bethany\", \"Chris\", \"Diana\", \"Eric\"]]]></zCodeLineNumbered><zCodeLineNumbered><![CDATA[let attendees: Set = [\"Alicia\", \"Bethany\", \"Diana\"]]]></zCodeLineNumbered><zCodeLineNumbered><![CDATA[print(attendees.isStrictSubset(of: employees))]]></zCodeLineNumbered><zCodeLineNumbered><![CDATA[// Prints \"true\"]]></zCodeLineNumbered><zCodeLineNumbered></zCodeLineNumbered><zCodeLineNumbered><![CDATA[// A set is never a strict subset of itself:]]></zCodeLineNumbered><zCodeLineNumbered><![CDATA[print(attendees.isStrictSubset(of: attendees))]]></zCodeLineNumbered><zCodeLineNumbered><![CDATA[// Prints \"false\"]]></zCodeLineNumbered><zCodeLineNumbered></zCodeLineNumbered></CodeListing></Discussion></CommentParts></Function>",
-        key.offset: 2059,
+        key.offset: 2046,
         key.length: 67,
         key.fully_annotated_decl: "<decl.function.method.instance><syntaxtype.attribute.builtin><syntaxtype.attribute.name>@inlinable</syntaxtype.attribute.name></syntaxtype.attribute.builtin> <syntaxtype.keyword>func</syntaxtype.keyword> <decl.name>isStrictSubset</decl.name>(<decl.var.parameter><decl.var.parameter.argument_label>of</decl.var.parameter.argument_label> <decl.var.parameter.name>other</decl.var.parameter.name>: <decl.var.parameter.type><ref.struct usr=\"c:@E@FooRuncingOptions\">FooRuncingOptions</ref.struct></decl.var.parameter.type></decl.var.parameter>) -&gt; <decl.function.returntype><ref.struct usr=\"s:Sb\">Bool</ref.struct></decl.function.returntype></decl.function.method.instance>",
         key.entities: [
@@ -5452,7 +5451,7 @@
             key.kind: source.lang.swift.decl.var.local,
             key.keyword: "of",
             key.name: "other",
-            key.offset: 2100,
+            key.offset: 2087,
             key.length: 17
           }
         ]
@@ -5462,8 +5461,9 @@
   {
     key.kind: source.lang.swift.decl.extension.struct,
     key.doc.full_as_xml: "<Other><Name></Name><Declaration>extension FooRuncingOptions</Declaration><CommentParts><Abstract><Para><codeVoice>OptionSet</codeVoice> requirements for which default implementations are supplied.</Para></Abstract><Discussion><Note><Para>A type conforming to <codeVoice>OptionSet</codeVoice> can implement any of these initializers or methods, and those implementations will be used in lieu of these defaults.</Para></Note></Discussion></CommentParts></Other>",
-    key.offset: 2130,
+    key.offset: 2117,
     key.length: 280,
+    key.fully_annotated_generic_signature: "&lt;<decl.generic_type_param usr=\"s:s9OptionSetP4Selfxmfp\"><decl.generic_type_param.name>Self</decl.generic_type_param.name></decl.generic_type_param> <syntaxtype.keyword>where</syntaxtype.keyword> <decl.generic_type_requirement><ref.generic_type_param usr=\"s:s9OptionSetP4Selfxmfp\">Self</ref.generic_type_param> : <ref.protocol usr=\"s:s9OptionSetP\">OptionSet</ref.protocol></decl.generic_type_requirement>&gt;",
     key.extends: {
       key.kind: source.lang.swift.ref.struct,
       key.name: "FooRuncingOptions",
@@ -5476,7 +5476,7 @@
         key.usr: "s:s9OptionSetPsE5unionyxxF::SYNTHESIZED::c:@E@FooRuncingOptions",
         key.original_usr: "s:s9OptionSetPsE5unionyxxF",
         key.doc.full_as_xml: "<Function><Name>union(_:)</Name><USR>s:s9OptionSetPsE5unionyxxF</USR><Declaration>@inlinable func union(_ other: Self) -&gt; Self</Declaration><CommentParts><Abstract><Para>Returns a new option set of the elements contained in this set, in the given set, or in both.</Para></Abstract><Parameters><Parameter><Name>other</Name><Direction isExplicit=\"0\">in</Direction><Discussion><Para>An option set.</Para></Discussion></Parameter></Parameters><ResultDiscussion><Para>A new option set made up of the elements contained in this set, in <codeVoice>other</codeVoice>, or in both.</Para></ResultDiscussion><Discussion><Para>This example uses the <codeVoice>union(_:)</codeVoice> method to add two more shipping options to the default set.</Para><CodeListing language=\"swift\"><zCodeLineNumbered><![CDATA[let defaultShipping = ShippingOptions.standard]]></zCodeLineNumbered><zCodeLineNumbered><![CDATA[let memberShipping = defaultShipping.union([.secondDay, .priority])]]></zCodeLineNumbered><zCodeLineNumbered><![CDATA[print(memberShipping.contains(.priority))]]></zCodeLineNumbered><zCodeLineNumbered><![CDATA[// Prints \"true\"]]></zCodeLineNumbered><zCodeLineNumbered></zCodeLineNumbered></CodeListing></Discussion></CommentParts></Function>",
-        key.offset: 2165,
+        key.offset: 2152,
         key.length: 70,
         key.fully_annotated_decl: "<decl.function.method.instance><syntaxtype.attribute.builtin><syntaxtype.attribute.name>@inlinable</syntaxtype.attribute.name></syntaxtype.attribute.builtin> <syntaxtype.keyword>func</syntaxtype.keyword> <decl.name>union</decl.name>(<decl.var.parameter><decl.var.parameter.argument_label>_</decl.var.parameter.argument_label> <decl.var.parameter.name>other</decl.var.parameter.name>: <decl.var.parameter.type><ref.struct usr=\"c:@E@FooRuncingOptions\">FooRuncingOptions</ref.struct></decl.var.parameter.type></decl.var.parameter>) -&gt; <decl.function.returntype><ref.struct usr=\"c:@E@FooRuncingOptions\">FooRuncingOptions</ref.struct></decl.function.returntype></decl.function.method.instance>",
         key.entities: [
@@ -5484,7 +5484,7 @@
             key.kind: source.lang.swift.decl.var.local,
             key.keyword: "_",
             key.name: "other",
-            key.offset: 2196,
+            key.offset: 2183,
             key.length: 17
           }
         ]
@@ -5495,7 +5495,7 @@
         key.usr: "s:s9OptionSetPsE12intersectionyxxF::SYNTHESIZED::c:@E@FooRuncingOptions",
         key.original_usr: "s:s9OptionSetPsE12intersectionyxxF",
         key.doc.full_as_xml: "<Function><Name>intersection(_:)</Name><USR>s:s9OptionSetPsE12intersectionyxxF</USR><Declaration>@inlinable func intersection(_ other: Self) -&gt; Self</Declaration><CommentParts><Abstract><Para>Returns a new option set with only the elements contained in both this set and the given set.</Para></Abstract><Parameters><Parameter><Name>other</Name><Direction isExplicit=\"0\">in</Direction><Discussion><Para>An option set.</Para></Discussion></Parameter></Parameters><ResultDiscussion><Para>A new option set with only the elements contained in both this set and <codeVoice>other</codeVoice>.</Para></ResultDiscussion><Discussion><Para>This example uses the <codeVoice>intersection(_:)</codeVoice> method to limit the available shipping options to what can be used with a PO Box destination.</Para><CodeListing language=\"swift\"><zCodeLineNumbered><![CDATA[// Can only ship standard or priority to PO Boxes]]></zCodeLineNumbered><zCodeLineNumbered><![CDATA[let poboxShipping: ShippingOptions = [.standard, .priority]]]></zCodeLineNumbered><zCodeLineNumbered><![CDATA[let memberShipping: ShippingOptions =]]></zCodeLineNumbered><zCodeLineNumbered><![CDATA[        [.standard, .priority, .secondDay]]]></zCodeLineNumbered><zCodeLineNumbered></zCodeLineNumbered><zCodeLineNumbered><![CDATA[let availableOptions = memberShipping.intersection(poboxShipping)]]></zCodeLineNumbered><zCodeLineNumbered><![CDATA[print(availableOptions.contains(.priority))]]></zCodeLineNumbered><zCodeLineNumbered><![CDATA[// Prints \"true\"]]></zCodeLineNumbered><zCodeLineNumbered><![CDATA[print(availableOptions.contains(.secondDay))]]></zCodeLineNumbered><zCodeLineNumbered><![CDATA[// Prints \"false\"]]></zCodeLineNumbered><zCodeLineNumbered></zCodeLineNumbered></CodeListing></Discussion></CommentParts></Function>",
-        key.offset: 2241,
+        key.offset: 2228,
         key.length: 77,
         key.fully_annotated_decl: "<decl.function.method.instance><syntaxtype.attribute.builtin><syntaxtype.attribute.name>@inlinable</syntaxtype.attribute.name></syntaxtype.attribute.builtin> <syntaxtype.keyword>func</syntaxtype.keyword> <decl.name>intersection</decl.name>(<decl.var.parameter><decl.var.parameter.argument_label>_</decl.var.parameter.argument_label> <decl.var.parameter.name>other</decl.var.parameter.name>: <decl.var.parameter.type><ref.struct usr=\"c:@E@FooRuncingOptions\">FooRuncingOptions</ref.struct></decl.var.parameter.type></decl.var.parameter>) -&gt; <decl.function.returntype><ref.struct usr=\"c:@E@FooRuncingOptions\">FooRuncingOptions</ref.struct></decl.function.returntype></decl.function.method.instance>",
         key.entities: [
@@ -5503,7 +5503,7 @@
             key.kind: source.lang.swift.decl.var.local,
             key.keyword: "_",
             key.name: "other",
-            key.offset: 2279,
+            key.offset: 2266,
             key.length: 17
           }
         ]
@@ -5514,7 +5514,7 @@
         key.usr: "s:s9OptionSetPsE19symmetricDifferenceyxxF::SYNTHESIZED::c:@E@FooRuncingOptions",
         key.original_usr: "s:s9OptionSetPsE19symmetricDifferenceyxxF",
         key.doc.full_as_xml: "<Function><Name>symmetricDifference(_:)</Name><USR>s:s9OptionSetPsE19symmetricDifferenceyxxF</USR><Declaration>@inlinable func symmetricDifference(_ other: Self) -&gt; Self</Declaration><CommentParts><Abstract><Para>Returns a new option set with the elements contained in this set or in the given set, but not in both.</Para></Abstract><Parameters><Parameter><Name>other</Name><Direction isExplicit=\"0\">in</Direction><Discussion><Para>An option set.</Para></Discussion></Parameter></Parameters><ResultDiscussion><Para>A new option set with only the elements contained in either this set or <codeVoice>other</codeVoice>, but not in both.</Para></ResultDiscussion></CommentParts></Function>",
-        key.offset: 2324,
+        key.offset: 2311,
         key.length: 84,
         key.fully_annotated_decl: "<decl.function.method.instance><syntaxtype.attribute.builtin><syntaxtype.attribute.name>@inlinable</syntaxtype.attribute.name></syntaxtype.attribute.builtin> <syntaxtype.keyword>func</syntaxtype.keyword> <decl.name>symmetricDifference</decl.name>(<decl.var.parameter><decl.var.parameter.argument_label>_</decl.var.parameter.argument_label> <decl.var.parameter.name>other</decl.var.parameter.name>: <decl.var.parameter.type><ref.struct usr=\"c:@E@FooRuncingOptions\">FooRuncingOptions</ref.struct></decl.var.parameter.type></decl.var.parameter>) -&gt; <decl.function.returntype><ref.struct usr=\"c:@E@FooRuncingOptions\">FooRuncingOptions</ref.struct></decl.function.returntype></decl.function.method.instance>",
         key.entities: [
@@ -5522,7 +5522,7 @@
             key.kind: source.lang.swift.decl.var.local,
             key.keyword: "_",
             key.name: "other",
-            key.offset: 2369,
+            key.offset: 2356,
             key.length: 17
           }
         ]
@@ -5537,8 +5537,9 @@
       }
     ],
     key.doc.full_as_xml: "<Other><Name></Name><Declaration>extension FooRuncingOptions where Self == Self.Element</Declaration><CommentParts><Abstract><Para><codeVoice>OptionSet</codeVoice> requirements for which default implementations are supplied when <codeVoice>Element == Self</codeVoice>, which is the default.</Para></Abstract><Discussion><Note><Para>A type conforming to <codeVoice>OptionSet</codeVoice> can implement any of these initializers or methods, and those implementations will be used in lieu of these defaults.</Para></Note></Discussion></CommentParts></Other>",
-    key.offset: 2412,
+    key.offset: 2399,
     key.length: 407,
+    key.fully_annotated_generic_signature: "&lt;<decl.generic_type_param usr=\"s:s9OptionSetPs7ElementQzRszrlE4Selfxmfp\"><decl.generic_type_param.name>Self</decl.generic_type_param.name></decl.generic_type_param> <syntaxtype.keyword>where</syntaxtype.keyword> <decl.generic_type_requirement><ref.generic_type_param usr=\"s:s9OptionSetPs7ElementQzRszrlE4Selfxmfp\">Self</ref.generic_type_param> : <ref.protocol usr=\"s:s9OptionSetP\">OptionSet</ref.protocol></decl.generic_type_requirement>, <decl.generic_type_requirement><ref.generic_type_param usr=\"s:s9OptionSetPs7ElementQzRszrlE4Selfxmfp\">Self</ref.generic_type_param> == <ref.generic_type_param usr=\"s:s9OptionSetPs7ElementQzRszrlE4Selfxmfp\">Self</ref.generic_type_param>.Element</decl.generic_type_requirement>&gt;",
     key.extends: {
       key.kind: source.lang.swift.ref.struct,
       key.name: "FooRuncingOptions",
@@ -5551,7 +5552,7 @@
         key.usr: "s:s9OptionSetPs7ElementQzRszrlE8containsySbxF::SYNTHESIZED::c:@E@FooRuncingOptions",
         key.original_usr: "s:s9OptionSetPs7ElementQzRszrlE8containsySbxF",
         key.doc.full_as_xml: "<Function><Name>contains(_:)</Name><USR>s:s9OptionSetPs7ElementQzRszrlE8containsySbxF</USR><Declaration>@inlinable func contains(_ member: Self) -&gt; Bool</Declaration><CommentParts><Abstract><Para>Returns a Boolean value that indicates whether a given element is a member of the option set.</Para></Abstract><Parameters><Parameter><Name>member</Name><Direction isExplicit=\"0\">in</Direction><Discussion><Para>The element to look for in the option set.</Para></Discussion></Parameter></Parameters><ResultDiscussion><Para><codeVoice>true</codeVoice> if the option set contains <codeVoice>member</codeVoice>; otherwise, <codeVoice>false</codeVoice>.</Para></ResultDiscussion><Discussion><Para>This example uses the <codeVoice>contains(_:)</codeVoice> method to check whether next-day shipping is in the <codeVoice>availableOptions</codeVoice> instance.</Para><CodeListing language=\"swift\"><zCodeLineNumbered><![CDATA[let availableOptions = ShippingOptions.express]]></zCodeLineNumbered><zCodeLineNumbered><![CDATA[if availableOptions.contains(.nextDay) {]]></zCodeLineNumbered><zCodeLineNumbered><![CDATA[    print(\"Next day shipping available\")]]></zCodeLineNumbered><zCodeLineNumbered><![CDATA[}]]></zCodeLineNumbered><zCodeLineNumbered><![CDATA[// Prints \"Next day shipping available\"]]></zCodeLineNumbered><zCodeLineNumbered></zCodeLineNumbered></CodeListing></Discussion></CommentParts></Function>",
-        key.offset: 2447,
+        key.offset: 2434,
         key.length: 61,
         key.fully_annotated_decl: "<decl.function.method.instance><syntaxtype.attribute.builtin><syntaxtype.attribute.name>@inlinable</syntaxtype.attribute.name></syntaxtype.attribute.builtin> <syntaxtype.keyword>func</syntaxtype.keyword> <decl.name>contains</decl.name>(<decl.var.parameter><decl.var.parameter.argument_label>_</decl.var.parameter.argument_label> <decl.var.parameter.name>member</decl.var.parameter.name>: <decl.var.parameter.type><ref.struct usr=\"c:@E@FooRuncingOptions\">FooRuncingOptions</ref.struct></decl.var.parameter.type></decl.var.parameter>) -&gt; <decl.function.returntype><ref.struct usr=\"s:Sb\">Bool</ref.struct></decl.function.returntype></decl.function.method.instance>",
         key.entities: [
@@ -5559,7 +5560,7 @@
             key.kind: source.lang.swift.decl.var.local,
             key.keyword: "_",
             key.name: "member",
-            key.offset: 2482,
+            key.offset: 2469,
             key.length: 17
           }
         ]
@@ -5570,7 +5571,7 @@
         key.usr: "s:s9OptionSetPs7ElementQzRszrlE6insertySb8inserted_x17memberAfterInserttxF::SYNTHESIZED::c:@E@FooRuncingOptions",
         key.original_usr: "s:s9OptionSetPs7ElementQzRszrlE6insertySb8inserted_x17memberAfterInserttxF",
         key.doc.full_as_xml: "<Function><Name>insert(_:)</Name><USR>s:s9OptionSetPs7ElementQzRszrlE6insertySb8inserted_x17memberAfterInserttxF</USR><Declaration>@inlinable mutating func insert(_ newMember: Self.Element) -&gt; (inserted: Bool, memberAfterInsert: Self.Element)</Declaration><CommentParts><Abstract><Para>Adds the given element to the option set if it is not already a member.</Para></Abstract><Parameters><Parameter><Name>newMember</Name><Direction isExplicit=\"0\">in</Direction><Discussion><Para>The element to insert.</Para></Discussion></Parameter></Parameters><ResultDiscussion><Para><codeVoice>(true, newMember)</codeVoice> if <codeVoice>newMember</codeVoice> was not contained in <codeVoice>self</codeVoice>. Otherwise, returns <codeVoice>(false, oldMember)</codeVoice>, where <codeVoice>oldMember</codeVoice> is the member of the set equal to <codeVoice>newMember</codeVoice>.</Para></ResultDiscussion><Discussion><Para>In the following example, the <codeVoice>.secondDay</codeVoice> shipping option is added to the <codeVoice>freeOptions</codeVoice> option set if <codeVoice>purchasePrice</codeVoice> is greater than 50.0. For the <codeVoice>ShippingOptions</codeVoice> declaration, see the <codeVoice>OptionSet</codeVoice> protocol discussion.</Para><CodeListing language=\"swift\"><zCodeLineNumbered><![CDATA[let purchasePrice = 87.55]]></zCodeLineNumbered><zCodeLineNumbered></zCodeLineNumbered><zCodeLineNumbered><![CDATA[var freeOptions: ShippingOptions = [.standard, .priority]]]></zCodeLineNumbered><zCodeLineNumbered><![CDATA[if purchasePrice > 50 {]]></zCodeLineNumbered><zCodeLineNumbered><![CDATA[    freeOptions.insert(.secondDay)]]></zCodeLineNumbered><zCodeLineNumbered><![CDATA[}]]></zCodeLineNumbered><zCodeLineNumbered><![CDATA[print(freeOptions.contains(.secondDay))]]></zCodeLineNumbered><zCodeLineNumbered><![CDATA[// Prints \"true\"]]></zCodeLineNumbered><zCodeLineNumbered></zCodeLineNumbered></CodeListing></Discussion></CommentParts></Function>",
-        key.offset: 2514,
+        key.offset: 2501,
         key.length: 121,
         key.fully_annotated_decl: "<decl.function.method.instance><syntaxtype.attribute.builtin><syntaxtype.attribute.name>@discardableResult</syntaxtype.attribute.name></syntaxtype.attribute.builtin> <syntaxtype.attribute.builtin><syntaxtype.attribute.name>@inlinable</syntaxtype.attribute.name></syntaxtype.attribute.builtin> <syntaxtype.keyword>mutating</syntaxtype.keyword> <syntaxtype.keyword>func</syntaxtype.keyword> <decl.name>insert</decl.name>(<decl.var.parameter><decl.var.parameter.argument_label>_</decl.var.parameter.argument_label> <decl.var.parameter.name>newMember</decl.var.parameter.name>: <decl.var.parameter.type><ref.struct usr=\"c:@E@FooRuncingOptions\">FooRuncingOptions</ref.struct></decl.var.parameter.type></decl.var.parameter>) -&gt; <decl.function.returntype><tuple>(<tuple.element><tuple.element.argument_label>inserted</tuple.element.argument_label>: <tuple.element.type><ref.struct usr=\"s:Sb\">Bool</ref.struct></tuple.element.type></tuple.element>, <tuple.element><tuple.element.argument_label>memberAfterInsert</tuple.element.argument_label>: <tuple.element.type><ref.struct usr=\"c:@E@FooRuncingOptions\">FooRuncingOptions</ref.struct></tuple.element.type></tuple.element>)</tuple></decl.function.returntype></decl.function.method.instance>",
         key.entities: [
@@ -5578,7 +5579,7 @@
             key.kind: source.lang.swift.decl.var.local,
             key.keyword: "_",
             key.name: "newMember",
-            key.offset: 2559,
+            key.offset: 2546,
             key.length: 17
           }
         ]
@@ -5589,7 +5590,7 @@
         key.usr: "s:s9OptionSetPs7ElementQzRszrlE6removeyxSgxF::SYNTHESIZED::c:@E@FooRuncingOptions",
         key.original_usr: "s:s9OptionSetPs7ElementQzRszrlE6removeyxSgxF",
         key.doc.full_as_xml: "<Function><Name>remove(_:)</Name><USR>s:s9OptionSetPs7ElementQzRszrlE6removeyxSgxF</USR><Declaration>@inlinable mutating func remove(_ member: Self.Element) -&gt; Self.Element?</Declaration><CommentParts><Abstract><Para>Removes the given element and all elements subsumed by it.</Para></Abstract><Parameters><Parameter><Name>member</Name><Direction isExplicit=\"0\">in</Direction><Discussion><Para>The element of the set to remove.</Para></Discussion></Parameter></Parameters><ResultDiscussion><Para>The intersection of <codeVoice>[member]</codeVoice> and the set, if the intersection was nonempty; otherwise, <codeVoice>nil</codeVoice>.</Para></ResultDiscussion><Discussion><Para>In the following example, the <codeVoice>.priority</codeVoice> shipping option is removed from the <codeVoice>options</codeVoice> option set. Attempting to remove the same shipping option a second time results in <codeVoice>nil</codeVoice>, because <codeVoice>options</codeVoice> no longer contains <codeVoice>.priority</codeVoice> as a member.</Para><CodeListing language=\"swift\"><zCodeLineNumbered><![CDATA[var options: ShippingOptions = [.secondDay, .priority]]]></zCodeLineNumbered><zCodeLineNumbered><![CDATA[let priorityOption = options.remove(.priority)]]></zCodeLineNumbered><zCodeLineNumbered><![CDATA[print(priorityOption == .priority)]]></zCodeLineNumbered><zCodeLineNumbered><![CDATA[// Prints \"true\"]]></zCodeLineNumbered><zCodeLineNumbered></zCodeLineNumbered><zCodeLineNumbered><![CDATA[print(options.remove(.priority))]]></zCodeLineNumbered><zCodeLineNumbered><![CDATA[// Prints \"nil\"]]></zCodeLineNumbered><zCodeLineNumbered></zCodeLineNumbered></CodeListing><Para>In the next example, the <codeVoice>.express</codeVoice> element is passed to <codeVoice>remove(_:)</codeVoice>. Although <codeVoice>.express</codeVoice> is not a member of <codeVoice>options</codeVoice>, <codeVoice>.express</codeVoice> subsumes the remaining <codeVoice>.secondDay</codeVoice> element of the option set. Therefore, <codeVoice>options</codeVoice> is emptied and the intersection between <codeVoice>.express</codeVoice> and <codeVoice>options</codeVoice> is returned.</Para><CodeListing language=\"swift\"><zCodeLineNumbered><![CDATA[let expressOption = options.remove(.express)]]></zCodeLineNumbered><zCodeLineNumbered><![CDATA[print(expressOption == .express)]]></zCodeLineNumbered><zCodeLineNumbered><![CDATA[// Prints \"false\"]]></zCodeLineNumbered><zCodeLineNumbered><![CDATA[print(expressOption == .secondDay)]]></zCodeLineNumbered><zCodeLineNumbered><![CDATA[// Prints \"true\"]]></zCodeLineNumbered><zCodeLineNumbered></zCodeLineNumbered></CodeListing></Discussion></CommentParts></Function>",
-        key.offset: 2641,
+        key.offset: 2628,
         key.length: 82,
         key.fully_annotated_decl: "<decl.function.method.instance><syntaxtype.attribute.builtin><syntaxtype.attribute.name>@discardableResult</syntaxtype.attribute.name></syntaxtype.attribute.builtin> <syntaxtype.attribute.builtin><syntaxtype.attribute.name>@inlinable</syntaxtype.attribute.name></syntaxtype.attribute.builtin> <syntaxtype.keyword>mutating</syntaxtype.keyword> <syntaxtype.keyword>func</syntaxtype.keyword> <decl.name>remove</decl.name>(<decl.var.parameter><decl.var.parameter.argument_label>_</decl.var.parameter.argument_label> <decl.var.parameter.name>member</decl.var.parameter.name>: <decl.var.parameter.type><ref.struct usr=\"c:@E@FooRuncingOptions\">FooRuncingOptions</ref.struct></decl.var.parameter.type></decl.var.parameter>) -&gt; <decl.function.returntype><ref.struct usr=\"c:@E@FooRuncingOptions\">FooRuncingOptions</ref.struct>?</decl.function.returntype></decl.function.method.instance>",
         key.entities: [
@@ -5597,7 +5598,7 @@
             key.kind: source.lang.swift.decl.var.local,
             key.keyword: "_",
             key.name: "member",
-            key.offset: 2683,
+            key.offset: 2670,
             key.length: 17
           }
         ]
@@ -5608,7 +5609,7 @@
         key.usr: "s:s9OptionSetPs7ElementQzRszrlE6update4withxSgx_tF::SYNTHESIZED::c:@E@FooRuncingOptions",
         key.original_usr: "s:s9OptionSetPs7ElementQzRszrlE6update4withxSgx_tF",
         key.doc.full_as_xml: "<Function><Name>update(with:)</Name><USR>s:s9OptionSetPs7ElementQzRszrlE6update4withxSgx_tF</USR><Declaration>@inlinable mutating func update(with newMember: Self.Element) -&gt; Self.Element?</Declaration><CommentParts><Abstract><Para>Inserts the given element into the set.</Para></Abstract><ResultDiscussion><Para>The intersection of <codeVoice>[newMember]</codeVoice> and the set if the intersection was nonempty; otherwise, <codeVoice>nil</codeVoice>.</Para></ResultDiscussion><Discussion><Para>If <codeVoice>newMember</codeVoice> is not contained in the set but subsumes current members of the set, the subsumed members are returned.</Para><CodeListing language=\"swift\"><zCodeLineNumbered><![CDATA[var options: ShippingOptions = [.secondDay, .priority]]]></zCodeLineNumbered><zCodeLineNumbered><![CDATA[let replaced = options.update(with: .express)]]></zCodeLineNumbered><zCodeLineNumbered><![CDATA[print(replaced == .secondDay)]]></zCodeLineNumbered><zCodeLineNumbered><![CDATA[// Prints \"true\"]]></zCodeLineNumbered><zCodeLineNumbered></zCodeLineNumbered></CodeListing></Discussion></CommentParts></Function>",
-        key.offset: 2729,
+        key.offset: 2716,
         key.length: 88,
         key.fully_annotated_decl: "<decl.function.method.instance><syntaxtype.attribute.builtin><syntaxtype.attribute.name>@discardableResult</syntaxtype.attribute.name></syntaxtype.attribute.builtin> <syntaxtype.attribute.builtin><syntaxtype.attribute.name>@inlinable</syntaxtype.attribute.name></syntaxtype.attribute.builtin> <syntaxtype.keyword>mutating</syntaxtype.keyword> <syntaxtype.keyword>func</syntaxtype.keyword> <decl.name>update</decl.name>(<decl.var.parameter><decl.var.parameter.argument_label>with</decl.var.parameter.argument_label> <decl.var.parameter.name>newMember</decl.var.parameter.name>: <decl.var.parameter.type><ref.struct usr=\"c:@E@FooRuncingOptions\">FooRuncingOptions</ref.struct></decl.var.parameter.type></decl.var.parameter>) -&gt; <decl.function.returntype><ref.struct usr=\"c:@E@FooRuncingOptions\">FooRuncingOptions</ref.struct>?</decl.function.returntype></decl.function.method.instance>",
         key.entities: [
@@ -5616,7 +5617,7 @@
             key.kind: source.lang.swift.decl.var.local,
             key.keyword: "with",
             key.name: "newMember",
-            key.offset: 2777,
+            key.offset: 2764,
             key.length: 17
           }
         ]
@@ -5631,8 +5632,9 @@
       }
     ],
     key.doc.full_as_xml: "<Other><Name></Name><Declaration>extension FooRuncingOptions where Self.RawValue : FixedWidthInteger</Declaration><CommentParts><Abstract><Para><codeVoice>OptionSet</codeVoice> requirements for which default implementations are supplied when <codeVoice>RawValue</codeVoice> conforms to <codeVoice>FixedWidthInteger</codeVoice>, which is the usual case.  Each distinct bit of an option set’s <codeVoice>.rawValue</codeVoice> corresponds to a disjoint value of the <codeVoice>OptionSet</codeVoice>.</Para></Abstract><Discussion><Note><Para>A type conforming to <codeVoice>OptionSet</codeVoice> can implement any of these initializers or methods, and those implementations will be used in lieu of these defaults.</Para></Note><List-Bullet><Item><Para><codeVoice>union</codeVoice> is implemented as a bitwise “or” (<codeVoice>|</codeVoice>) of <codeVoice>rawValue</codeVoice>s</Para></Item><Item><Para><codeVoice>intersection</codeVoice> is implemented as a bitwise “and” (<codeVoice>&amp;</codeVoice>) of <codeVoice>rawValue</codeVoice>s</Para></Item><Item><Para><codeVoice>symmetricDifference</codeVoice> is implemented as a bitwise “exclusive or” (<codeVoice>^</codeVoice>) of <codeVoice>rawValue</codeVoice>s</Para></Item></List-Bullet></Discussion></CommentParts></Other>",
-    key.offset: 2821,
+    key.offset: 2808,
     key.length: 279,
+    key.fully_annotated_generic_signature: "&lt;<decl.generic_type_param usr=\"s:s9OptionSetPss17FixedWidthInteger8RawValueRpzrlE4Selfxmfp\"><decl.generic_type_param.name>Self</decl.generic_type_param.name></decl.generic_type_param> <syntaxtype.keyword>where</syntaxtype.keyword> <decl.generic_type_requirement><ref.generic_type_param usr=\"s:s9OptionSetPss17FixedWidthInteger8RawValueRpzrlE4Selfxmfp\">Self</ref.generic_type_param> : <ref.protocol usr=\"s:s9OptionSetP\">OptionSet</ref.protocol></decl.generic_type_requirement>, <decl.generic_type_requirement><ref.generic_type_param usr=\"s:s9OptionSetPss17FixedWidthInteger8RawValueRpzrlE4Selfxmfp\">Self</ref.generic_type_param>.RawValue : <ref.protocol usr=\"s:s17FixedWidthIntegerP\">FixedWidthInteger</ref.protocol></decl.generic_type_requirement>&gt;",
     key.extends: {
       key.kind: source.lang.swift.ref.struct,
       key.name: "FooRuncingOptions",
@@ -5645,7 +5647,7 @@
         key.usr: "s:s9OptionSetPss17FixedWidthInteger8RawValueRpzrlExycfc::SYNTHESIZED::c:@E@FooRuncingOptions",
         key.original_usr: "s:s9OptionSetPss17FixedWidthInteger8RawValueRpzrlExycfc",
         key.doc.full_as_xml: "<Function><Name>init()</Name><USR>s:s9OptionSetPss17FixedWidthInteger8RawValueRpzrlExycfc</USR><Declaration>@inlinable init()</Declaration><CommentParts><Abstract><Para>Creates an empty option set.</Para></Abstract><Discussion><Para>This initializer creates an option set with a raw value of zero.</Para></Discussion></CommentParts></Function>",
-        key.offset: 2856,
+        key.offset: 2843,
         key.length: 17,
         key.fully_annotated_decl: "<decl.function.constructor><syntaxtype.attribute.builtin><syntaxtype.attribute.name>@inlinable</syntaxtype.attribute.name></syntaxtype.attribute.builtin> <syntaxtype.keyword>init</syntaxtype.keyword>()</decl.function.constructor>"
       },
@@ -5655,7 +5657,7 @@
         key.usr: "s:s9OptionSetPss17FixedWidthInteger8RawValueRpzrlE9formUnionyyxF::SYNTHESIZED::c:@E@FooRuncingOptions",
         key.original_usr: "s:s9OptionSetPss17FixedWidthInteger8RawValueRpzrlE9formUnionyyxF",
         key.doc.full_as_xml: "<Function><Name>formUnion(_:)</Name><USR>s:s9OptionSetPss17FixedWidthInteger8RawValueRpzrlE9formUnionyyxF</USR><Declaration>@inlinable mutating func formUnion(_ other: Self)</Declaration><CommentParts><Abstract><Para>Inserts the elements of another set into this option set.</Para></Abstract><Parameters><Parameter><Name>other</Name><Direction isExplicit=\"0\">in</Direction><Discussion><Para>An option set.</Para></Discussion></Parameter></Parameters><Discussion><Para>This method is implemented as a <codeVoice>|</codeVoice> (bitwise OR) operation on the two sets’ raw values.</Para></Discussion></CommentParts></Function>",
-        key.offset: 2879,
+        key.offset: 2866,
         key.length: 62,
         key.fully_annotated_decl: "<decl.function.method.instance><syntaxtype.attribute.builtin><syntaxtype.attribute.name>@inlinable</syntaxtype.attribute.name></syntaxtype.attribute.builtin> <syntaxtype.keyword>mutating</syntaxtype.keyword> <syntaxtype.keyword>func</syntaxtype.keyword> <decl.name>formUnion</decl.name>(<decl.var.parameter><decl.var.parameter.argument_label>_</decl.var.parameter.argument_label> <decl.var.parameter.name>other</decl.var.parameter.name>: <decl.var.parameter.type><ref.struct usr=\"c:@E@FooRuncingOptions\">FooRuncingOptions</ref.struct></decl.var.parameter.type></decl.var.parameter>)</decl.function.method.instance>",
         key.entities: [
@@ -5663,7 +5665,7 @@
             key.kind: source.lang.swift.decl.var.local,
             key.keyword: "_",
             key.name: "other",
-            key.offset: 2923,
+            key.offset: 2910,
             key.length: 17
           }
         ]
@@ -5674,7 +5676,7 @@
         key.usr: "s:s9OptionSetPss17FixedWidthInteger8RawValueRpzrlE16formIntersectionyyxF::SYNTHESIZED::c:@E@FooRuncingOptions",
         key.original_usr: "s:s9OptionSetPss17FixedWidthInteger8RawValueRpzrlE16formIntersectionyyxF",
         key.doc.full_as_xml: "<Function><Name>formIntersection(_:)</Name><USR>s:s9OptionSetPss17FixedWidthInteger8RawValueRpzrlE16formIntersectionyyxF</USR><Declaration>@inlinable mutating func formIntersection(_ other: Self)</Declaration><CommentParts><Abstract><Para>Removes all elements of this option set that are not also present in the given set.</Para></Abstract><Parameters><Parameter><Name>other</Name><Direction isExplicit=\"0\">in</Direction><Discussion><Para>An option set.</Para></Discussion></Parameter></Parameters><Discussion><Para>This method is implemented as a <codeVoice>&amp;</codeVoice> (bitwise AND) operation on the two sets’ raw values.</Para></Discussion></CommentParts></Function>",
-        key.offset: 2947,
+        key.offset: 2934,
         key.length: 69,
         key.fully_annotated_decl: "<decl.function.method.instance><syntaxtype.attribute.builtin><syntaxtype.attribute.name>@inlinable</syntaxtype.attribute.name></syntaxtype.attribute.builtin> <syntaxtype.keyword>mutating</syntaxtype.keyword> <syntaxtype.keyword>func</syntaxtype.keyword> <decl.name>formIntersection</decl.name>(<decl.var.parameter><decl.var.parameter.argument_label>_</decl.var.parameter.argument_label> <decl.var.parameter.name>other</decl.var.parameter.name>: <decl.var.parameter.type><ref.struct usr=\"c:@E@FooRuncingOptions\">FooRuncingOptions</ref.struct></decl.var.parameter.type></decl.var.parameter>)</decl.function.method.instance>",
         key.entities: [
@@ -5682,7 +5684,7 @@
             key.kind: source.lang.swift.decl.var.local,
             key.keyword: "_",
             key.name: "other",
-            key.offset: 2998,
+            key.offset: 2985,
             key.length: 17
           }
         ]
@@ -5693,7 +5695,7 @@
         key.usr: "s:s9OptionSetPss17FixedWidthInteger8RawValueRpzrlE23formSymmetricDifferenceyyxF::SYNTHESIZED::c:@E@FooRuncingOptions",
         key.original_usr: "s:s9OptionSetPss17FixedWidthInteger8RawValueRpzrlE23formSymmetricDifferenceyyxF",
         key.doc.full_as_xml: "<Function><Name>formSymmetricDifference(_:)</Name><USR>s:s9OptionSetPss17FixedWidthInteger8RawValueRpzrlE23formSymmetricDifferenceyyxF</USR><Declaration>@inlinable mutating func formSymmetricDifference(_ other: Self)</Declaration><CommentParts><Abstract><Para>Replaces this set with a new set containing all elements contained in either this set or the given set, but not in both.</Para></Abstract><Parameters><Parameter><Name>other</Name><Direction isExplicit=\"0\">in</Direction><Discussion><Para>An option set.</Para></Discussion></Parameter></Parameters><Discussion><Para>This method is implemented as a <codeVoice>^</codeVoice> (bitwise XOR) operation on the two sets’ raw values.</Para></Discussion></CommentParts></Function>",
-        key.offset: 3022,
+        key.offset: 3009,
         key.length: 76,
         key.fully_annotated_decl: "<decl.function.method.instance><syntaxtype.attribute.builtin><syntaxtype.attribute.name>@inlinable</syntaxtype.attribute.name></syntaxtype.attribute.builtin> <syntaxtype.keyword>mutating</syntaxtype.keyword> <syntaxtype.keyword>func</syntaxtype.keyword> <decl.name>formSymmetricDifference</decl.name>(<decl.var.parameter><decl.var.parameter.argument_label>_</decl.var.parameter.argument_label> <decl.var.parameter.name>other</decl.var.parameter.name>: <decl.var.parameter.type><ref.struct usr=\"c:@E@FooRuncingOptions\">FooRuncingOptions</ref.struct></decl.var.parameter.type></decl.var.parameter>)</decl.function.method.instance>",
         key.entities: [
@@ -5701,7 +5703,7 @@
             key.kind: source.lang.swift.decl.var.local,
             key.keyword: "_",
             key.name: "other",
-            key.offset: 3080,
+            key.offset: 3067,
             key.length: 17
           }
         ]
@@ -5712,7 +5714,7 @@
     key.kind: source.lang.swift.decl.struct,
     key.name: "FooStruct1",
     key.usr: "c:@S@FooStruct1",
-    key.offset: 3101,
+    key.offset: 3088,
     key.length: 105,
     key.fully_annotated_decl: "<decl.struct><syntaxtype.keyword>struct</syntaxtype.keyword> <decl.name>FooStruct1</decl.name></decl.struct>",
     key.entities: [
@@ -5720,7 +5722,7 @@
         key.kind: source.lang.swift.decl.var.instance,
         key.name: "x",
         key.usr: "c:@S@FooStruct1@FI@x",
-        key.offset: 3126,
+        key.offset: 3113,
         key.length: 12,
         key.fully_annotated_decl: "<decl.var.instance><syntaxtype.keyword>var</syntaxtype.keyword> <decl.name>x</decl.name>: <decl.var.type><ref.struct usr=\"s:s5Int32V\">Int32</ref.struct></decl.var.type></decl.var.instance>"
       },
@@ -5728,7 +5730,7 @@
         key.kind: source.lang.swift.decl.var.instance,
         key.name: "y",
         key.usr: "c:@S@FooStruct1@FI@y",
-        key.offset: 3144,
+        key.offset: 3131,
         key.length: 13,
         key.fully_annotated_decl: "<decl.var.instance><syntaxtype.keyword>var</syntaxtype.keyword> <decl.name>y</decl.name>: <decl.var.type><ref.struct usr=\"s:Sd\">Double</ref.struct></decl.var.type></decl.var.instance>"
       },
@@ -5736,7 +5738,7 @@
         key.kind: source.lang.swift.decl.function.constructor,
         key.name: "init()",
         key.usr: "s:So10FooStruct1VABycfc",
-        key.offset: 3163,
+        key.offset: 3150,
         key.length: 6,
         key.fully_annotated_decl: "<decl.function.constructor><syntaxtype.keyword>init</syntaxtype.keyword>()</decl.function.constructor>"
       },
@@ -5744,7 +5746,7 @@
         key.kind: source.lang.swift.decl.function.constructor,
         key.name: "init(x:y:)",
         key.usr: "s:So10FooStruct1V1x1yABs5Int32V_Sdtcfc",
-        key.offset: 3175,
+        key.offset: 3162,
         key.length: 29,
         key.fully_annotated_decl: "<decl.function.constructor><syntaxtype.keyword>init</syntaxtype.keyword>(<decl.var.parameter><decl.var.parameter.argument_label>x</decl.var.parameter.argument_label>: <decl.var.parameter.type><ref.struct usr=\"s:s5Int32V\">Int32</ref.struct></decl.var.parameter.type></decl.var.parameter>, <decl.var.parameter><decl.var.parameter.argument_label>y</decl.var.parameter.argument_label>: <decl.var.parameter.type><ref.struct usr=\"s:Sd\">Double</ref.struct></decl.var.parameter.type></decl.var.parameter>)</decl.function.constructor>",
         key.entities: [
@@ -5752,14 +5754,14 @@
             key.kind: source.lang.swift.decl.var.local,
             key.keyword: "x",
             key.name: "x",
-            key.offset: 3185,
+            key.offset: 3172,
             key.length: 5
           },
           {
             key.kind: source.lang.swift.decl.var.local,
             key.keyword: "y",
             key.name: "y",
-            key.offset: 3197,
+            key.offset: 3184,
             key.length: 6
           }
         ]
@@ -5770,7 +5772,7 @@
     key.kind: source.lang.swift.decl.typealias,
     key.name: "FooStruct1Pointer",
     key.usr: "c:Foo.h@T@FooStruct1Pointer",
-    key.offset: 3207,
+    key.offset: 3194,
     key.length: 62,
     key.fully_annotated_decl: "<decl.typealias><syntaxtype.keyword>typealias</syntaxtype.keyword> <decl.name>FooStruct1Pointer</decl.name> = <ref.struct usr=\"s:Sp\">UnsafeMutablePointer</ref.struct>&lt;<ref.struct usr=\"c:@S@FooStruct1\">FooStruct1</ref.struct>&gt;</decl.typealias>",
     key.conforms: [
@@ -5785,7 +5787,7 @@
     key.kind: source.lang.swift.decl.struct,
     key.name: "FooStruct2",
     key.usr: "c:@S@FooStruct2",
-    key.offset: 3270,
+    key.offset: 3257,
     key.length: 105,
     key.fully_annotated_decl: "<decl.struct><syntaxtype.keyword>struct</syntaxtype.keyword> <decl.name>FooStruct2</decl.name></decl.struct>",
     key.entities: [
@@ -5793,7 +5795,7 @@
         key.kind: source.lang.swift.decl.var.instance,
         key.name: "x",
         key.usr: "c:@S@FooStruct2@FI@x",
-        key.offset: 3295,
+        key.offset: 3282,
         key.length: 12,
         key.fully_annotated_decl: "<decl.var.instance><syntaxtype.keyword>var</syntaxtype.keyword> <decl.name>x</decl.name>: <decl.var.type><ref.struct usr=\"s:s5Int32V\">Int32</ref.struct></decl.var.type></decl.var.instance>"
       },
@@ -5801,7 +5803,7 @@
         key.kind: source.lang.swift.decl.var.instance,
         key.name: "y",
         key.usr: "c:@S@FooStruct2@FI@y",
-        key.offset: 3313,
+        key.offset: 3300,
         key.length: 13,
         key.fully_annotated_decl: "<decl.var.instance><syntaxtype.keyword>var</syntaxtype.keyword> <decl.name>y</decl.name>: <decl.var.type><ref.struct usr=\"s:Sd\">Double</ref.struct></decl.var.type></decl.var.instance>"
       },
@@ -5809,7 +5811,7 @@
         key.kind: source.lang.swift.decl.function.constructor,
         key.name: "init()",
         key.usr: "s:So10FooStruct2VABycfc",
-        key.offset: 3332,
+        key.offset: 3319,
         key.length: 6,
         key.fully_annotated_decl: "<decl.function.constructor><syntaxtype.keyword>init</syntaxtype.keyword>()</decl.function.constructor>"
       },
@@ -5817,7 +5819,7 @@
         key.kind: source.lang.swift.decl.function.constructor,
         key.name: "init(x:y:)",
         key.usr: "s:So10FooStruct2V1x1yABs5Int32V_Sdtcfc",
-        key.offset: 3344,
+        key.offset: 3331,
         key.length: 29,
         key.fully_annotated_decl: "<decl.function.constructor><syntaxtype.keyword>init</syntaxtype.keyword>(<decl.var.parameter><decl.var.parameter.argument_label>x</decl.var.parameter.argument_label>: <decl.var.parameter.type><ref.struct usr=\"s:s5Int32V\">Int32</ref.struct></decl.var.parameter.type></decl.var.parameter>, <decl.var.parameter><decl.var.parameter.argument_label>y</decl.var.parameter.argument_label>: <decl.var.parameter.type><ref.struct usr=\"s:Sd\">Double</ref.struct></decl.var.parameter.type></decl.var.parameter>)</decl.function.constructor>",
         key.entities: [
@@ -5825,14 +5827,14 @@
             key.kind: source.lang.swift.decl.var.local,
             key.keyword: "x",
             key.name: "x",
-            key.offset: 3354,
+            key.offset: 3341,
             key.length: 5
           },
           {
             key.kind: source.lang.swift.decl.var.local,
             key.keyword: "y",
             key.name: "y",
-            key.offset: 3366,
+            key.offset: 3353,
             key.length: 6
           }
         ]
@@ -5843,7 +5845,7 @@
     key.kind: source.lang.swift.decl.typealias,
     key.name: "FooStructTypedef1",
     key.usr: "c:Foo.h@T@FooStructTypedef1",
-    key.offset: 3376,
+    key.offset: 3363,
     key.length: 40,
     key.fully_annotated_decl: "<decl.typealias><syntaxtype.keyword>typealias</syntaxtype.keyword> <decl.name>FooStructTypedef1</decl.name> = <ref.struct usr=\"c:@S@FooStruct2\">FooStruct2</ref.struct></decl.typealias>"
   },
@@ -5851,7 +5853,7 @@
     key.kind: source.lang.swift.decl.struct,
     key.name: "FooStructTypedef2",
     key.usr: "c:@SA@FooStructTypedef2",
-    key.offset: 3417,
+    key.offset: 3404,
     key.length: 112,
     key.fully_annotated_decl: "<decl.struct><syntaxtype.keyword>struct</syntaxtype.keyword> <decl.name>FooStructTypedef2</decl.name></decl.struct>",
     key.entities: [
@@ -5859,7 +5861,7 @@
         key.kind: source.lang.swift.decl.var.instance,
         key.name: "x",
         key.usr: "c:@SA@FooStructTypedef2@FI@x",
-        key.offset: 3449,
+        key.offset: 3436,
         key.length: 12,
         key.fully_annotated_decl: "<decl.var.instance><syntaxtype.keyword>var</syntaxtype.keyword> <decl.name>x</decl.name>: <decl.var.type><ref.struct usr=\"s:s5Int32V\">Int32</ref.struct></decl.var.type></decl.var.instance>"
       },
@@ -5867,7 +5869,7 @@
         key.kind: source.lang.swift.decl.var.instance,
         key.name: "y",
         key.usr: "c:@SA@FooStructTypedef2@FI@y",
-        key.offset: 3467,
+        key.offset: 3454,
         key.length: 13,
         key.fully_annotated_decl: "<decl.var.instance><syntaxtype.keyword>var</syntaxtype.keyword> <decl.name>y</decl.name>: <decl.var.type><ref.struct usr=\"s:Sd\">Double</ref.struct></decl.var.type></decl.var.instance>"
       },
@@ -5875,7 +5877,7 @@
         key.kind: source.lang.swift.decl.function.constructor,
         key.name: "init()",
         key.usr: "s:So17FooStructTypedef2aABycfc",
-        key.offset: 3486,
+        key.offset: 3473,
         key.length: 6,
         key.fully_annotated_decl: "<decl.function.constructor><syntaxtype.keyword>init</syntaxtype.keyword>()</decl.function.constructor>"
       },
@@ -5883,7 +5885,7 @@
         key.kind: source.lang.swift.decl.function.constructor,
         key.name: "init(x:y:)",
         key.usr: "s:So17FooStructTypedef2a1x1yABs5Int32V_Sdtcfc",
-        key.offset: 3498,
+        key.offset: 3485,
         key.length: 29,
         key.fully_annotated_decl: "<decl.function.constructor><syntaxtype.keyword>init</syntaxtype.keyword>(<decl.var.parameter><decl.var.parameter.argument_label>x</decl.var.parameter.argument_label>: <decl.var.parameter.type><ref.struct usr=\"s:s5Int32V\">Int32</ref.struct></decl.var.parameter.type></decl.var.parameter>, <decl.var.parameter><decl.var.parameter.argument_label>y</decl.var.parameter.argument_label>: <decl.var.parameter.type><ref.struct usr=\"s:Sd\">Double</ref.struct></decl.var.parameter.type></decl.var.parameter>)</decl.function.constructor>",
         key.entities: [
@@ -5891,14 +5893,14 @@
             key.kind: source.lang.swift.decl.var.local,
             key.keyword: "x",
             key.name: "x",
-            key.offset: 3508,
+            key.offset: 3495,
             key.length: 5
           },
           {
             key.kind: source.lang.swift.decl.var.local,
             key.keyword: "y",
             key.name: "y",
-            key.offset: 3520,
+            key.offset: 3507,
             key.length: 6
           }
         ]
@@ -5910,7 +5912,7 @@
     key.name: "FooTypedef1",
     key.usr: "c:Foo.h@T@FooTypedef1",
     key.doc.full_as_xml: "<Typedef file=Foo.h line=\"60\" column=\"13\"><Name>FooTypedef1</Name><USR>c:Foo.h@T@FooTypedef1</USR><Declaration>typealias FooTypedef1 = Int32</Declaration><Abstract><Para> Aaa.  FooTypedef1.  Bbb.</Para></Abstract></Typedef>",
-    key.offset: 3530,
+    key.offset: 3517,
     key.length: 29,
     key.fully_annotated_decl: "<decl.typealias><syntaxtype.keyword>typealias</syntaxtype.keyword> <decl.name>FooTypedef1</decl.name> = <ref.struct usr=\"s:s5Int32V\">Int32</ref.struct></decl.typealias>",
     key.conforms: [
@@ -5936,7 +5938,7 @@
     key.name: "fooIntVar",
     key.usr: "c:@fooIntVar",
     key.doc.full_as_xml: "<Variable file=Foo.h line=\"63\" column=\"12\"><Name>fooIntVar</Name><USR>c:@fooIntVar</USR><Declaration>var fooIntVar: Int32</Declaration><Abstract><Para> Aaa.  fooIntVar.  Bbb.</Para></Abstract></Variable>",
-    key.offset: 3560,
+    key.offset: 3547,
     key.length: 20,
     key.fully_annotated_decl: "<decl.var.global><syntaxtype.keyword>var</syntaxtype.keyword> <decl.name>fooIntVar</decl.name>: <decl.var.type><ref.struct usr=\"s:s5Int32V\">Int32</ref.struct></decl.var.type></decl.var.global>"
   },
@@ -5945,7 +5947,7 @@
     key.name: "fooFunc1(_:)",
     key.usr: "c:@F@fooFunc1",
     key.doc.full_as_xml: "<Function file=Foo.h line=\"66\" column=\"5\"><Name>fooFunc1</Name><USR>c:@F@fooFunc1</USR><Declaration>func fooFunc1(_ a: Int32) -&gt; Int32</Declaration><Abstract><Para> Aaa.  fooFunc1.  Bbb.</Para></Abstract></Function>",
-    key.offset: 3581,
+    key.offset: 3568,
     key.length: 34,
     key.fully_annotated_decl: "<decl.function.free><syntaxtype.keyword>func</syntaxtype.keyword> <decl.name>fooFunc1</decl.name>(<decl.var.parameter><decl.var.parameter.argument_label>_</decl.var.parameter.argument_label> <decl.var.parameter.name>a</decl.var.parameter.name>: <decl.var.parameter.type><ref.struct usr=\"s:s5Int32V\">Int32</ref.struct></decl.var.parameter.type></decl.var.parameter>) -&gt; <decl.function.returntype><ref.struct usr=\"s:s5Int32V\">Int32</ref.struct></decl.function.returntype></decl.function.free>",
     key.entities: [
@@ -5953,7 +5955,7 @@
         key.kind: source.lang.swift.decl.var.local,
         key.keyword: "_",
         key.name: "a",
-        key.offset: 3600,
+        key.offset: 3587,
         key.length: 5
       }
     ]
@@ -5962,14 +5964,14 @@
     key.kind: source.lang.swift.decl.function.free,
     key.name: "fooFunc1AnonymousParam(_:)",
     key.usr: "c:@F@fooFunc1AnonymousParam",
-    key.offset: 3616,
+    key.offset: 3603,
     key.length: 48,
     key.fully_annotated_decl: "<decl.function.free><syntaxtype.keyword>func</syntaxtype.keyword> <decl.name>fooFunc1AnonymousParam</decl.name>(<decl.var.parameter><decl.var.parameter.argument_label>_</decl.var.parameter.argument_label>: <decl.var.parameter.type><ref.struct usr=\"s:s5Int32V\">Int32</ref.struct></decl.var.parameter.type></decl.var.parameter>) -&gt; <decl.function.returntype><ref.struct usr=\"s:s5Int32V\">Int32</ref.struct></decl.function.returntype></decl.function.free>",
     key.entities: [
       {
         key.kind: source.lang.swift.decl.var.local,
         key.keyword: "_",
-        key.offset: 3649,
+        key.offset: 3636,
         key.length: 5
       }
     ]
@@ -5978,7 +5980,7 @@
     key.kind: source.lang.swift.decl.function.free,
     key.name: "fooFunc3(_:_:_:_:)",
     key.usr: "c:@F@fooFunc3",
-    key.offset: 3665,
+    key.offset: 3652,
     key.length: 94,
     key.fully_annotated_decl: "<decl.function.free><syntaxtype.keyword>func</syntaxtype.keyword> <decl.name>fooFunc3</decl.name>(<decl.var.parameter><decl.var.parameter.argument_label>_</decl.var.parameter.argument_label> <decl.var.parameter.name>a</decl.var.parameter.name>: <decl.var.parameter.type><ref.struct usr=\"s:s5Int32V\">Int32</ref.struct></decl.var.parameter.type></decl.var.parameter>, <decl.var.parameter><decl.var.parameter.argument_label>_</decl.var.parameter.argument_label> <decl.var.parameter.name>b</decl.var.parameter.name>: <decl.var.parameter.type><ref.struct usr=\"s:Sf\">Float</ref.struct></decl.var.parameter.type></decl.var.parameter>, <decl.var.parameter><decl.var.parameter.argument_label>_</decl.var.parameter.argument_label> <decl.var.parameter.name>c</decl.var.parameter.name>: <decl.var.parameter.type><ref.struct usr=\"s:Sd\">Double</ref.struct></decl.var.parameter.type></decl.var.parameter>, <decl.var.parameter><decl.var.parameter.argument_label>_</decl.var.parameter.argument_label> <decl.var.parameter.name>d</decl.var.parameter.name>: <decl.var.parameter.type><ref.struct usr=\"s:Sp\">UnsafeMutablePointer</ref.struct>&lt;<ref.struct usr=\"s:s5Int32V\">Int32</ref.struct>&gt;!</decl.var.parameter.type></decl.var.parameter>) -&gt; <decl.function.returntype><ref.struct usr=\"s:s5Int32V\">Int32</ref.struct></decl.function.returntype></decl.function.free>",
     key.entities: [
@@ -5986,28 +5988,28 @@
         key.kind: source.lang.swift.decl.var.local,
         key.keyword: "_",
         key.name: "a",
-        key.offset: 3684,
+        key.offset: 3671,
         key.length: 5
       },
       {
         key.kind: source.lang.swift.decl.var.local,
         key.keyword: "_",
         key.name: "b",
-        key.offset: 3696,
+        key.offset: 3683,
         key.length: 5
       },
       {
         key.kind: source.lang.swift.decl.var.local,
         key.keyword: "_",
         key.name: "c",
-        key.offset: 3708,
+        key.offset: 3695,
         key.length: 6
       },
       {
         key.kind: source.lang.swift.decl.var.local,
         key.keyword: "_",
         key.name: "d",
-        key.offset: 3721,
+        key.offset: 3708,
         key.length: 28
       }
     ]
@@ -6016,7 +6018,7 @@
     key.kind: source.lang.swift.decl.function.free,
     key.name: "fooFuncWithBlock(_:)",
     key.usr: "c:@F@fooFuncWithBlock",
-    key.offset: 3760,
+    key.offset: 3747,
     key.length: 49,
     key.fully_annotated_decl: "<decl.function.free><syntaxtype.keyword>func</syntaxtype.keyword> <decl.name>fooFuncWithBlock</decl.name>(<decl.var.parameter><decl.var.parameter.argument_label>_</decl.var.parameter.argument_label> <decl.var.parameter.name>blk</decl.var.parameter.name>: <decl.var.parameter.type>((<decl.var.parameter><decl.var.parameter.type><ref.struct usr=\"s:Sf\">Float</ref.struct></decl.var.parameter.type></decl.var.parameter>) -&gt; <decl.function.returntype><ref.struct usr=\"s:s5Int32V\">Int32</ref.struct></decl.function.returntype>)!</decl.var.parameter.type></decl.var.parameter>)</decl.function.free>",
     key.entities: [
@@ -6024,7 +6026,7 @@
         key.kind: source.lang.swift.decl.var.local,
         key.keyword: "_",
         key.name: "blk",
-        key.offset: 3789,
+        key.offset: 3776,
         key.length: 19
       }
     ]
@@ -6033,7 +6035,7 @@
     key.kind: source.lang.swift.decl.function.free,
     key.name: "fooFuncWithFunctionPointer(_:)",
     key.usr: "c:@F@fooFuncWithFunctionPointer",
-    key.offset: 3810,
+    key.offset: 3797,
     key.length: 60,
     key.fully_annotated_decl: "<decl.function.free><syntaxtype.keyword>func</syntaxtype.keyword> <decl.name>fooFuncWithFunctionPointer</decl.name>(<decl.var.parameter><decl.var.parameter.argument_label>_</decl.var.parameter.argument_label> <decl.var.parameter.name>fptr</decl.var.parameter.name>: <decl.var.parameter.type>((<decl.var.parameter><decl.var.parameter.type><ref.struct usr=\"s:Sf\">Float</ref.struct></decl.var.parameter.type></decl.var.parameter>) -&gt; <decl.function.returntype><ref.struct usr=\"s:s5Int32V\">Int32</ref.struct></decl.function.returntype>)!</decl.var.parameter.type></decl.var.parameter>)</decl.function.free>",
     key.entities: [
@@ -6041,7 +6043,7 @@
         key.kind: source.lang.swift.decl.var.local,
         key.keyword: "_",
         key.name: "fptr",
-        key.offset: 3850,
+        key.offset: 3837,
         key.length: 19
       }
     ]
@@ -6050,7 +6052,7 @@
     key.kind: source.lang.swift.decl.function.free,
     key.name: "fooFuncNoreturn1()",
     key.usr: "c:@F@fooFuncNoreturn1",
-    key.offset: 3871,
+    key.offset: 3858,
     key.length: 32,
     key.fully_annotated_decl: "<decl.function.free><syntaxtype.keyword>func</syntaxtype.keyword> <decl.name>fooFuncNoreturn1</decl.name>() -&gt; <decl.function.returntype><ref.enum usr=\"s:s5NeverO\">Never</ref.enum></decl.function.returntype></decl.function.free>"
   },
@@ -6058,7 +6060,7 @@
     key.kind: source.lang.swift.decl.function.free,
     key.name: "fooFuncNoreturn2()",
     key.usr: "c:@F@fooFuncNoreturn2",
-    key.offset: 3904,
+    key.offset: 3891,
     key.length: 32,
     key.fully_annotated_decl: "<decl.function.free><syntaxtype.keyword>func</syntaxtype.keyword> <decl.name>fooFuncNoreturn2</decl.name>() -&gt; <decl.function.returntype><ref.enum usr=\"s:s5NeverO\">Never</ref.enum></decl.function.returntype></decl.function.free>"
   },
@@ -6067,7 +6069,7 @@
     key.name: "fooFuncWithComment1()",
     key.usr: "c:@F@fooFuncWithComment1",
     key.doc.full_as_xml: "<Function file=Foo.h line=\"89\" column=\"6\"><Name>fooFuncWithComment1</Name><USR>c:@F@fooFuncWithComment1</USR><Declaration>func fooFuncWithComment1()</Declaration><Abstract><Para> Aaa.  fooFuncWithComment1.  Bbb. Ccc.</Para></Abstract><Discussion><Para> Ddd.</Para></Discussion></Function>",
-    key.offset: 3937,
+    key.offset: 3924,
     key.length: 26,
     key.fully_annotated_decl: "<decl.function.free><syntaxtype.keyword>func</syntaxtype.keyword> <decl.name>fooFuncWithComment1</decl.name>()</decl.function.free>"
   },
@@ -6076,7 +6078,7 @@
     key.name: "fooFuncWithComment2()",
     key.usr: "c:@F@fooFuncWithComment2",
     key.doc.full_as_xml: "<Function file=Foo.h line=\"94\" column=\"6\"><Name>fooFuncWithComment2</Name><USR>c:@F@fooFuncWithComment2</USR><Declaration>func fooFuncWithComment2()</Declaration><Abstract><Para>  Aaa.  fooFuncWithComment2.  Bbb.</Para></Abstract></Function>",
-    key.offset: 3964,
+    key.offset: 3951,
     key.length: 26,
     key.fully_annotated_decl: "<decl.function.free><syntaxtype.keyword>func</syntaxtype.keyword> <decl.name>fooFuncWithComment2</decl.name>()</decl.function.free>"
   },
@@ -6085,7 +6087,7 @@
     key.name: "fooFuncWithComment3()",
     key.usr: "c:@F@fooFuncWithComment3",
     key.doc.full_as_xml: "<Function file=Foo.h line=\"102\" column=\"6\"><Name>fooFuncWithComment3</Name><USR>c:@F@fooFuncWithComment3</USR><Declaration>func fooFuncWithComment3()</Declaration><Abstract><Para> Aaa.  fooFuncWithComment3.  Bbb.</Para></Abstract><Discussion><Para> Ccc.</Para></Discussion></Function>",
-    key.offset: 3991,
+    key.offset: 3978,
     key.length: 26,
     key.fully_annotated_decl: "<decl.function.free><syntaxtype.keyword>func</syntaxtype.keyword> <decl.name>fooFuncWithComment3</decl.name>()</decl.function.free>"
   },
@@ -6094,7 +6096,7 @@
     key.name: "fooFuncWithComment4()",
     key.usr: "c:@F@fooFuncWithComment4",
     key.doc.full_as_xml: "<Function file=Foo.h line=\"108\" column=\"6\"><Name>fooFuncWithComment4</Name><USR>c:@F@fooFuncWithComment4</USR><Declaration>func fooFuncWithComment4()</Declaration><Abstract><Para> Aaa.  fooFuncWithComment4.  Bbb.</Para></Abstract><Discussion><Para> Ddd.</Para></Discussion></Function>",
-    key.offset: 4018,
+    key.offset: 4005,
     key.length: 26,
     key.fully_annotated_decl: "<decl.function.free><syntaxtype.keyword>func</syntaxtype.keyword> <decl.name>fooFuncWithComment4</decl.name>()</decl.function.free>"
   },
@@ -6103,7 +6105,7 @@
     key.name: "fooFuncWithComment5()",
     key.usr: "c:@F@fooFuncWithComment5",
     key.doc.full_as_xml: "<Function file=Foo.h line=\"114\" column=\"6\"><Name>fooFuncWithComment5</Name><USR>c:@F@fooFuncWithComment5</USR><Declaration>func fooFuncWithComment5()</Declaration><Abstract><Para> Aaa.  fooFuncWithComment5.  Bbb. Ccc.</Para></Abstract><Discussion><Para> Ddd.</Para></Discussion></Function>",
-    key.offset: 4045,
+    key.offset: 4032,
     key.length: 26,
     key.fully_annotated_decl: "<decl.function.free><syntaxtype.keyword>func</syntaxtype.keyword> <decl.name>fooFuncWithComment5</decl.name>()</decl.function.free>"
   },
@@ -6112,7 +6114,7 @@
     key.name: "redeclaredInMultipleModulesFunc1(_:)",
     key.usr: "c:@F@redeclaredInMultipleModulesFunc1",
     key.doc.full_as_xml: "<Function file=Foo.h line=\"118\" column=\"5\"><Name>redeclaredInMultipleModulesFunc1</Name><USR>c:@F@redeclaredInMultipleModulesFunc1</USR><Declaration>func redeclaredInMultipleModulesFunc1(_ a: Int32) -&gt; Int32</Declaration><Abstract><Para> Aaa.  redeclaredInMultipleModulesFunc1.  Bbb.</Para></Abstract></Function>",
-    key.offset: 4072,
+    key.offset: 4059,
     key.length: 58,
     key.fully_annotated_decl: "<decl.function.free><syntaxtype.keyword>func</syntaxtype.keyword> <decl.name>redeclaredInMultipleModulesFunc1</decl.name>(<decl.var.parameter><decl.var.parameter.argument_label>_</decl.var.parameter.argument_label> <decl.var.parameter.name>a</decl.var.parameter.name>: <decl.var.parameter.type><ref.struct usr=\"s:s5Int32V\">Int32</ref.struct></decl.var.parameter.type></decl.var.parameter>) -&gt; <decl.function.returntype><ref.struct usr=\"s:s5Int32V\">Int32</ref.struct></decl.function.returntype></decl.function.free>",
     key.entities: [
@@ -6120,7 +6122,7 @@
         key.kind: source.lang.swift.decl.var.local,
         key.keyword: "_",
         key.name: "a",
-        key.offset: 4115,
+        key.offset: 4102,
         key.length: 5
       }
     ]
@@ -6130,7 +6132,7 @@
     key.name: "FooProtocolBase",
     key.usr: "c:objc(pl)FooProtocolBase",
     key.doc.full_as_xml: "<Other file=Foo.h line=\"121\" column=\"11\"><Name>FooProtocolBase</Name><USR>c:objc(pl)FooProtocolBase</USR><Declaration>protocol FooProtocolBase</Declaration><Abstract><Para> Aaa.  FooProtocolBase.  Bbb.</Para></Abstract></Other>",
-    key.offset: 4131,
+    key.offset: 4118,
     key.length: 301,
     key.fully_annotated_decl: "<decl.protocol><syntaxtype.keyword>protocol</syntaxtype.keyword> <decl.name>FooProtocolBase</decl.name></decl.protocol>",
     key.entities: [
@@ -6139,7 +6141,7 @@
         key.name: "fooProtoFunc()",
         key.usr: "c:objc(pl)FooProtocolBase(im)fooProtoFunc",
         key.doc.full_as_xml: "<Function isInstanceMethod=\"1\" file=Foo.h line=\"125\" column=\"1\"><Name>fooProtoFunc</Name><USR>c:objc(pl)FooProtocolBase(im)fooProtoFunc</USR><Declaration>func fooProtoFunc()</Declaration><Abstract><Para> Aaa.  fooProtoFunc.  Bbb. Ccc.</Para></Abstract></Function>",
-        key.offset: 4163,
+        key.offset: 4150,
         key.length: 19,
         key.fully_annotated_decl: "<decl.function.method.instance><syntaxtype.keyword>func</syntaxtype.keyword> <decl.name>fooProtoFunc</decl.name>()</decl.function.method.instance>"
       },
@@ -6148,7 +6150,7 @@
         key.name: "fooProtoFuncWithExtraIndentation1()",
         key.usr: "c:objc(pl)FooProtocolBase(im)fooProtoFuncWithExtraIndentation1",
         key.doc.full_as_xml: "<Function isInstanceMethod=\"1\" file=Foo.h line=\"129\" column=\"3\"><Name>fooProtoFuncWithExtraIndentation1</Name><USR>c:objc(pl)FooProtocolBase(im)fooProtoFuncWithExtraIndentation1</USR><Declaration>func fooProtoFuncWithExtraIndentation1()</Declaration><Abstract><Para> Aaa.  fooProtoFuncWithExtraIndentation1.  Bbb. Ccc.</Para></Abstract></Function>",
-        key.offset: 4188,
+        key.offset: 4175,
         key.length: 40,
         key.fully_annotated_decl: "<decl.function.method.instance><syntaxtype.keyword>func</syntaxtype.keyword> <decl.name>fooProtoFuncWithExtraIndentation1</decl.name>()</decl.function.method.instance>"
       },
@@ -6157,7 +6159,7 @@
         key.name: "fooProtoFuncWithExtraIndentation2()",
         key.usr: "c:objc(pl)FooProtocolBase(im)fooProtoFuncWithExtraIndentation2",
         key.doc.full_as_xml: "<Function isInstanceMethod=\"1\" file=Foo.h line=\"135\" column=\"3\"><Name>fooProtoFuncWithExtraIndentation2</Name><USR>c:objc(pl)FooProtocolBase(im)fooProtoFuncWithExtraIndentation2</USR><Declaration>func fooProtoFuncWithExtraIndentation2()</Declaration><Abstract><Para> Aaa.  fooProtoFuncWithExtraIndentation2.  Bbb. Ccc.</Para></Abstract></Function>",
-        key.offset: 4234,
+        key.offset: 4221,
         key.length: 40,
         key.fully_annotated_decl: "<decl.function.method.instance><syntaxtype.keyword>func</syntaxtype.keyword> <decl.name>fooProtoFuncWithExtraIndentation2</decl.name>()</decl.function.method.instance>"
       },
@@ -6165,7 +6167,7 @@
         key.kind: source.lang.swift.decl.function.method.static,
         key.name: "fooProtoClassFunc()",
         key.usr: "c:objc(pl)FooProtocolBase(cm)fooProtoClassFunc",
-        key.offset: 4280,
+        key.offset: 4267,
         key.length: 31,
         key.fully_annotated_decl: "<decl.function.method.static><syntaxtype.keyword>static</syntaxtype.keyword> <syntaxtype.keyword>func</syntaxtype.keyword> <decl.name>fooProtoClassFunc</decl.name>()</decl.function.method.static>"
       },
@@ -6173,7 +6175,7 @@
         key.kind: source.lang.swift.decl.var.instance,
         key.name: "fooProperty1",
         key.usr: "c:objc(pl)FooProtocolBase(py)fooProperty1",
-        key.offset: 4317,
+        key.offset: 4304,
         key.length: 35,
         key.fully_annotated_decl: "<decl.var.instance><syntaxtype.keyword>var</syntaxtype.keyword> <decl.name>fooProperty1</decl.name>: <decl.var.type><ref.struct usr=\"s:s5Int32V\">Int32</ref.struct></decl.var.type> { <syntaxtype.keyword>get</syntaxtype.keyword> <syntaxtype.keyword>set</syntaxtype.keyword> }</decl.var.instance>"
       },
@@ -6181,7 +6183,7 @@
         key.kind: source.lang.swift.decl.var.instance,
         key.name: "fooProperty2",
         key.usr: "c:objc(pl)FooProtocolBase(py)fooProperty2",
-        key.offset: 4358,
+        key.offset: 4345,
         key.length: 35,
         key.fully_annotated_decl: "<decl.var.instance><syntaxtype.keyword>var</syntaxtype.keyword> <decl.name>fooProperty2</decl.name>: <decl.var.type><ref.struct usr=\"s:s5Int32V\">Int32</ref.struct></decl.var.type> { <syntaxtype.keyword>get</syntaxtype.keyword> <syntaxtype.keyword>set</syntaxtype.keyword> }</decl.var.instance>"
       },
@@ -6189,7 +6191,7 @@
         key.kind: source.lang.swift.decl.var.instance,
         key.name: "fooProperty3",
         key.usr: "c:objc(pl)FooProtocolBase(py)fooProperty3",
-        key.offset: 4399,
+        key.offset: 4386,
         key.length: 31,
         key.fully_annotated_decl: "<decl.var.instance><syntaxtype.keyword>var</syntaxtype.keyword> <decl.name>fooProperty3</decl.name>: <decl.var.type><ref.struct usr=\"s:s5Int32V\">Int32</ref.struct></decl.var.type> { <syntaxtype.keyword>get</syntaxtype.keyword> }</decl.var.instance>"
       }
@@ -6199,7 +6201,7 @@
     key.kind: source.lang.swift.decl.protocol,
     key.name: "FooProtocolDerived",
     key.usr: "c:objc(pl)FooProtocolDerived",
-    key.offset: 4433,
+    key.offset: 4420,
     key.length: 49,
     key.fully_annotated_decl: "<decl.protocol><syntaxtype.keyword>protocol</syntaxtype.keyword> <decl.name>FooProtocolDerived</decl.name> : <ref.protocol usr=\"c:objc(pl)FooProtocolBase\">FooProtocolBase</ref.protocol></decl.protocol>",
     key.conforms: [
@@ -6214,7 +6216,7 @@
     key.kind: source.lang.swift.decl.class,
     key.name: "FooClassBase",
     key.usr: "c:objc(cs)FooClassBase",
-    key.offset: 4483,
+    key.offset: 4470,
     key.length: 392,
     key.fully_annotated_decl: "<decl.class><syntaxtype.keyword>class</syntaxtype.keyword> <decl.name>FooClassBase</decl.name></decl.class>",
     key.entities: [
@@ -6222,7 +6224,7 @@
         key.kind: source.lang.swift.decl.function.method.instance,
         key.name: "fooBaseInstanceFunc0()",
         key.usr: "c:objc(cs)FooClassBase(im)fooBaseInstanceFunc0",
-        key.offset: 4509,
+        key.offset: 4496,
         key.length: 27,
         key.fully_annotated_decl: "<decl.function.method.instance><syntaxtype.keyword>func</syntaxtype.keyword> <decl.name>fooBaseInstanceFunc0</decl.name>()</decl.function.method.instance>"
       },
@@ -6230,7 +6232,7 @@
         key.kind: source.lang.swift.decl.function.method.instance,
         key.name: "fooBaseInstanceFunc1(_:)",
         key.usr: "c:objc(cs)FooClassBase(im)fooBaseInstanceFunc1:",
-        key.offset: 4542,
+        key.offset: 4529,
         key.length: 60,
         key.fully_annotated_decl: "<decl.function.method.instance><syntaxtype.keyword>func</syntaxtype.keyword> <decl.name>fooBaseInstanceFunc1</decl.name>(<decl.var.parameter><decl.var.parameter.argument_label>_</decl.var.parameter.argument_label> <decl.var.parameter.name>anObject</decl.var.parameter.name>: <decl.var.parameter.type>Any!</decl.var.parameter.type></decl.var.parameter>) -&gt; <decl.function.returntype><ref.class usr=\"c:objc(cs)FooClassBase\">FooClassBase</ref.class>!</decl.function.returntype></decl.function.method.instance>",
         key.entities: [
@@ -6238,7 +6240,7 @@
             key.kind: source.lang.swift.decl.var.local,
             key.keyword: "_",
             key.name: "anObject",
-            key.offset: 4580,
+            key.offset: 4567,
             key.length: 4
           }
         ]
@@ -6247,7 +6249,7 @@
         key.kind: source.lang.swift.decl.function.constructor,
         key.name: "init()",
         key.usr: "c:objc(cs)FooClassBase(im)init",
-        key.offset: 4608,
+        key.offset: 4595,
         key.length: 7,
         key.fully_annotated_decl: "<decl.function.constructor><syntaxtype.keyword>init</syntaxtype.keyword>!()</decl.function.constructor>"
       },
@@ -6255,7 +6257,7 @@
         key.kind: source.lang.swift.decl.function.constructor,
         key.name: "init(float:)",
         key.usr: "c:objc(cs)FooClassBase(im)initWithFloat:",
-        key.offset: 4621,
+        key.offset: 4608,
         key.length: 33,
         key.fully_annotated_decl: "<decl.function.constructor><syntaxtype.keyword>convenience</syntaxtype.keyword> <syntaxtype.keyword>init</syntaxtype.keyword>!(<decl.var.parameter><decl.var.parameter.argument_label>float</decl.var.parameter.argument_label> <decl.var.parameter.name>f</decl.var.parameter.name>: <decl.var.parameter.type><ref.struct usr=\"s:Sf\">Float</ref.struct></decl.var.parameter.type></decl.var.parameter>)</decl.function.constructor>",
         key.entities: [
@@ -6263,7 +6265,7 @@
             key.kind: source.lang.swift.decl.var.local,
             key.keyword: "float",
             key.name: "f",
-            key.offset: 4648,
+            key.offset: 4635,
             key.length: 5
           }
         ]
@@ -6272,7 +6274,7 @@
         key.kind: source.lang.swift.decl.function.method.instance,
         key.name: "fooBaseInstanceFuncOverridden()",
         key.usr: "c:objc(cs)FooClassBase(im)fooBaseInstanceFuncOverridden",
-        key.offset: 4660,
+        key.offset: 4647,
         key.length: 36,
         key.fully_annotated_decl: "<decl.function.method.instance><syntaxtype.keyword>func</syntaxtype.keyword> <decl.name>fooBaseInstanceFuncOverridden</decl.name>()</decl.function.method.instance>"
       },
@@ -6280,7 +6282,7 @@
         key.kind: source.lang.swift.decl.function.method.class,
         key.name: "fooBaseClassFunc0()",
         key.usr: "c:objc(cs)FooClassBase(cm)fooBaseClassFunc0",
-        key.offset: 4702,
+        key.offset: 4689,
         key.length: 30,
         key.fully_annotated_decl: "<decl.function.method.class><syntaxtype.keyword>class</syntaxtype.keyword> <syntaxtype.keyword>func</syntaxtype.keyword> <decl.name>fooBaseClassFunc0</decl.name>()</decl.function.method.class>"
       },
@@ -6288,7 +6290,7 @@
         key.kind: source.lang.swift.decl.function.method.instance,
         key.name: "_internalMeth1()",
         key.usr: "c:objc(cs)FooClassBase(im)_internalMeth1",
-        key.offset: 4738,
+        key.offset: 4725,
         key.length: 29,
         key.fully_annotated_decl: "<decl.function.method.instance><syntaxtype.keyword>func</syntaxtype.keyword> <decl.name>_internalMeth1</decl.name>() -&gt; <decl.function.returntype>Any!</decl.function.returntype></decl.function.method.instance>"
       },
@@ -6296,7 +6298,7 @@
         key.kind: source.lang.swift.decl.function.method.instance,
         key.name: "_internalMeth2()",
         key.usr: "c:objc(cs)FooClassBase(im)_internalMeth2",
-        key.offset: 4773,
+        key.offset: 4760,
         key.length: 29,
         key.fully_annotated_decl: "<decl.function.method.instance><syntaxtype.keyword>func</syntaxtype.keyword> <decl.name>_internalMeth2</decl.name>() -&gt; <decl.function.returntype>Any!</decl.function.returntype></decl.function.method.instance>"
       },
@@ -6304,7 +6306,7 @@
         key.kind: source.lang.swift.decl.function.method.instance,
         key.name: "nonInternalMeth()",
         key.usr: "c:objc(cs)FooClassBase(im)nonInternalMeth",
-        key.offset: 4808,
+        key.offset: 4795,
         key.length: 30,
         key.fully_annotated_decl: "<decl.function.method.instance><syntaxtype.keyword>func</syntaxtype.keyword> <decl.name>nonInternalMeth</decl.name>() -&gt; <decl.function.returntype>Any!</decl.function.returntype></decl.function.method.instance>"
       },
@@ -6312,7 +6314,7 @@
         key.kind: source.lang.swift.decl.function.method.instance,
         key.name: "_internalMeth3()",
         key.usr: "c:objc(cs)FooClassBase(im)_internalMeth3",
-        key.offset: 4844,
+        key.offset: 4831,
         key.length: 29,
         key.fully_annotated_decl: "<decl.function.method.instance><syntaxtype.keyword>func</syntaxtype.keyword> <decl.name>_internalMeth3</decl.name>() -&gt; <decl.function.returntype>Any!</decl.function.returntype></decl.function.method.instance>"
       }
@@ -6323,7 +6325,7 @@
     key.name: "FooClassDerived",
     key.usr: "c:objc(cs)FooClassDerived",
     key.doc.full_as_xml: "<Other file=Foo.h line=\"158\" column=\"12\"><Name>FooClassDerived</Name><USR>c:objc(cs)FooClassDerived</USR><Declaration>class FooClassDerived : FooClassBase, FooProtocolDerived</Declaration><Abstract><Para> Aaa.  FooClassDerived.  Bbb.</Para></Abstract></Other>",
-    key.offset: 4876,
+    key.offset: 4863,
     key.length: 493,
     key.fully_annotated_decl: "<decl.class><syntaxtype.keyword>class</syntaxtype.keyword> <decl.name>FooClassDerived</decl.name> : <ref.class usr=\"c:objc(cs)FooClassBase\">FooClassBase</ref.class>, <ref.protocol usr=\"c:objc(pl)FooProtocolDerived\">FooProtocolDerived</ref.protocol></decl.class>",
     key.inherits: [
@@ -6345,7 +6347,7 @@
         key.kind: source.lang.swift.decl.var.instance,
         key.name: "fooProperty1",
         key.usr: "c:objc(cs)FooClassDerived(py)fooProperty1",
-        key.offset: 4940,
+        key.offset: 4927,
         key.length: 23,
         key.fully_annotated_decl: "<decl.var.instance><syntaxtype.keyword>var</syntaxtype.keyword> <decl.name>fooProperty1</decl.name>: <decl.var.type><ref.struct usr=\"s:s5Int32V\">Int32</ref.struct></decl.var.type> { <syntaxtype.keyword>get</syntaxtype.keyword> <syntaxtype.keyword>set</syntaxtype.keyword> }</decl.var.instance>"
       },
@@ -6353,7 +6355,7 @@
         key.kind: source.lang.swift.decl.var.instance,
         key.name: "fooProperty2",
         key.usr: "c:objc(cs)FooClassDerived(py)fooProperty2",
-        key.offset: 4969,
+        key.offset: 4956,
         key.length: 23,
         key.fully_annotated_decl: "<decl.var.instance><syntaxtype.keyword>var</syntaxtype.keyword> <decl.name>fooProperty2</decl.name>: <decl.var.type><ref.struct usr=\"s:s5Int32V\">Int32</ref.struct></decl.var.type> { <syntaxtype.keyword>get</syntaxtype.keyword> <syntaxtype.keyword>set</syntaxtype.keyword> }</decl.var.instance>"
       },
@@ -6361,7 +6363,7 @@
         key.kind: source.lang.swift.decl.var.instance,
         key.name: "fooProperty3",
         key.usr: "c:objc(cs)FooClassDerived(py)fooProperty3",
-        key.offset: 4998,
+        key.offset: 4985,
         key.length: 31,
         key.fully_annotated_decl: "<decl.var.instance><syntaxtype.keyword>var</syntaxtype.keyword> <decl.name>fooProperty3</decl.name>: <decl.var.type><ref.struct usr=\"s:s5Int32V\">Int32</ref.struct></decl.var.type> { <syntaxtype.keyword>get</syntaxtype.keyword> }</decl.var.instance>"
       },
@@ -6369,7 +6371,7 @@
         key.kind: source.lang.swift.decl.function.method.instance,
         key.name: "fooInstanceFunc0()",
         key.usr: "c:objc(cs)FooClassDerived(im)fooInstanceFunc0",
-        key.offset: 5035,
+        key.offset: 5022,
         key.length: 23,
         key.fully_annotated_decl: "<decl.function.method.instance><syntaxtype.keyword>func</syntaxtype.keyword> <decl.name>fooInstanceFunc0</decl.name>()</decl.function.method.instance>"
       },
@@ -6377,7 +6379,7 @@
         key.kind: source.lang.swift.decl.function.method.instance,
         key.name: "fooInstanceFunc1(_:)",
         key.usr: "c:objc(cs)FooClassDerived(im)fooInstanceFunc1:",
-        key.offset: 5064,
+        key.offset: 5051,
         key.length: 33,
         key.fully_annotated_decl: "<decl.function.method.instance><syntaxtype.keyword>func</syntaxtype.keyword> <decl.name>fooInstanceFunc1</decl.name>(<decl.var.parameter><decl.var.parameter.argument_label>_</decl.var.parameter.argument_label> <decl.var.parameter.name>a</decl.var.parameter.name>: <decl.var.parameter.type><ref.struct usr=\"s:s5Int32V\">Int32</ref.struct></decl.var.parameter.type></decl.var.parameter>)</decl.function.method.instance>",
         key.entities: [
@@ -6385,7 +6387,7 @@
             key.kind: source.lang.swift.decl.var.local,
             key.keyword: "_",
             key.name: "a",
-            key.offset: 5091,
+            key.offset: 5078,
             key.length: 5
           }
         ]
@@ -6394,7 +6396,7 @@
         key.kind: source.lang.swift.decl.function.method.instance,
         key.name: "fooInstanceFunc2(_:withB:)",
         key.usr: "c:objc(cs)FooClassDerived(im)fooInstanceFunc2:withB:",
-        key.offset: 5103,
+        key.offset: 5090,
         key.length: 49,
         key.fully_annotated_decl: "<decl.function.method.instance><syntaxtype.keyword>func</syntaxtype.keyword> <decl.name>fooInstanceFunc2</decl.name>(<decl.var.parameter><decl.var.parameter.argument_label>_</decl.var.parameter.argument_label> <decl.var.parameter.name>a</decl.var.parameter.name>: <decl.var.parameter.type><ref.struct usr=\"s:s5Int32V\">Int32</ref.struct></decl.var.parameter.type></decl.var.parameter>, <decl.var.parameter><decl.var.parameter.argument_label>withB</decl.var.parameter.argument_label> <decl.var.parameter.name>b</decl.var.parameter.name>: <decl.var.parameter.type><ref.struct usr=\"s:s5Int32V\">Int32</ref.struct></decl.var.parameter.type></decl.var.parameter>)</decl.function.method.instance>",
         key.entities: [
@@ -6402,14 +6404,14 @@
             key.kind: source.lang.swift.decl.var.local,
             key.keyword: "_",
             key.name: "a",
-            key.offset: 5130,
+            key.offset: 5117,
             key.length: 5
           },
           {
             key.kind: source.lang.swift.decl.var.local,
             key.keyword: "withB",
             key.name: "b",
-            key.offset: 5146,
+            key.offset: 5133,
             key.length: 5
           }
         ]
@@ -6418,7 +6420,7 @@
         key.kind: source.lang.swift.decl.function.method.instance,
         key.name: "fooBaseInstanceFuncOverridden()",
         key.usr: "c:objc(cs)FooClassDerived(im)fooBaseInstanceFuncOverridden",
-        key.offset: 5158,
+        key.offset: 5145,
         key.length: 36,
         key.fully_annotated_decl: "<decl.function.method.instance><syntaxtype.keyword>func</syntaxtype.keyword> <decl.name>fooBaseInstanceFuncOverridden</decl.name>()</decl.function.method.instance>",
         key.inherits: [
@@ -6433,7 +6435,7 @@
         key.kind: source.lang.swift.decl.function.method.class,
         key.name: "fooClassFunc0()",
         key.usr: "c:objc(cs)FooClassDerived(cm)fooClassFunc0",
-        key.offset: 5200,
+        key.offset: 5187,
         key.length: 26,
         key.fully_annotated_decl: "<decl.function.method.class><syntaxtype.keyword>class</syntaxtype.keyword> <syntaxtype.keyword>func</syntaxtype.keyword> <decl.name>fooClassFunc0</decl.name>()</decl.function.method.class>"
       },
@@ -6442,7 +6444,7 @@
         key.name: "_internalMeth1()",
         key.usr: "c:objc(cs)FooClassBase(im)_internalMeth1::SYNTHESIZED::c:objc(cs)FooClassDerived",
         key.original_usr: "c:objc(cs)FooClassBase(im)_internalMeth1",
-        key.offset: 5232,
+        key.offset: 5219,
         key.length: 29,
         key.fully_annotated_decl: "<decl.function.method.instance><syntaxtype.keyword>func</syntaxtype.keyword> <decl.name>_internalMeth1</decl.name>() -&gt; <decl.function.returntype>Any!</decl.function.returntype></decl.function.method.instance>"
       },
@@ -6451,7 +6453,7 @@
         key.name: "_internalMeth2()",
         key.usr: "c:objc(cs)FooClassBase(im)_internalMeth2::SYNTHESIZED::c:objc(cs)FooClassDerived",
         key.original_usr: "c:objc(cs)FooClassBase(im)_internalMeth2",
-        key.offset: 5267,
+        key.offset: 5254,
         key.length: 29,
         key.fully_annotated_decl: "<decl.function.method.instance><syntaxtype.keyword>func</syntaxtype.keyword> <decl.name>_internalMeth2</decl.name>() -&gt; <decl.function.returntype>Any!</decl.function.returntype></decl.function.method.instance>"
       },
@@ -6460,7 +6462,7 @@
         key.name: "nonInternalMeth()",
         key.usr: "c:objc(cs)FooClassBase(im)nonInternalMeth::SYNTHESIZED::c:objc(cs)FooClassDerived",
         key.original_usr: "c:objc(cs)FooClassBase(im)nonInternalMeth",
-        key.offset: 5302,
+        key.offset: 5289,
         key.length: 30,
         key.fully_annotated_decl: "<decl.function.method.instance><syntaxtype.keyword>func</syntaxtype.keyword> <decl.name>nonInternalMeth</decl.name>() -&gt; <decl.function.returntype>Any!</decl.function.returntype></decl.function.method.instance>"
       },
@@ -6469,7 +6471,7 @@
         key.name: "_internalMeth3()",
         key.usr: "c:objc(cs)FooClassBase(im)_internalMeth3::SYNTHESIZED::c:objc(cs)FooClassDerived",
         key.original_usr: "c:objc(cs)FooClassBase(im)_internalMeth3",
-        key.offset: 5338,
+        key.offset: 5325,
         key.length: 29,
         key.fully_annotated_decl: "<decl.function.method.instance><syntaxtype.keyword>func</syntaxtype.keyword> <decl.name>_internalMeth3</decl.name>() -&gt; <decl.function.returntype>Any!</decl.function.returntype></decl.function.method.instance>"
       }
@@ -6479,7 +6481,7 @@
     key.kind: source.lang.swift.decl.typealias,
     key.name: "typedef_int_t",
     key.usr: "c:Foo.h@T@typedef_int_t",
-    key.offset: 5370,
+    key.offset: 5357,
     key.length: 31,
     key.fully_annotated_decl: "<decl.typealias><syntaxtype.keyword>typealias</syntaxtype.keyword> <decl.name>typedef_int_t</decl.name> = <ref.struct usr=\"s:s5Int32V\">Int32</ref.struct></decl.typealias>",
     key.conforms: [
@@ -6504,7 +6506,7 @@
     key.kind: source.lang.swift.decl.var.global,
     key.name: "FOO_MACRO_1",
     key.usr: "c:Foo.h@3720@macro@FOO_MACRO_1",
-    key.offset: 5402,
+    key.offset: 5389,
     key.length: 30,
     key.fully_annotated_decl: "<decl.var.global><syntaxtype.keyword>var</syntaxtype.keyword> <decl.name>FOO_MACRO_1</decl.name>: <decl.var.type><ref.struct usr=\"s:s5Int32V\">Int32</ref.struct></decl.var.type> { <syntaxtype.keyword>get</syntaxtype.keyword> }</decl.var.global>"
   },
@@ -6512,7 +6514,7 @@
     key.kind: source.lang.swift.decl.var.global,
     key.name: "FOO_MACRO_2",
     key.usr: "c:Foo.h@3742@macro@FOO_MACRO_2",
-    key.offset: 5433,
+    key.offset: 5420,
     key.length: 30,
     key.fully_annotated_decl: "<decl.var.global><syntaxtype.keyword>var</syntaxtype.keyword> <decl.name>FOO_MACRO_2</decl.name>: <decl.var.type><ref.struct usr=\"s:s5Int32V\">Int32</ref.struct></decl.var.type> { <syntaxtype.keyword>get</syntaxtype.keyword> }</decl.var.global>"
   },
@@ -6520,7 +6522,7 @@
     key.kind: source.lang.swift.decl.var.global,
     key.name: "FOO_MACRO_3",
     key.usr: "c:Foo.h@3764@macro@FOO_MACRO_3",
-    key.offset: 5464,
+    key.offset: 5451,
     key.length: 30,
     key.fully_annotated_decl: "<decl.var.global><syntaxtype.keyword>var</syntaxtype.keyword> <decl.name>FOO_MACRO_3</decl.name>: <decl.var.type><ref.struct usr=\"s:s5Int32V\">Int32</ref.struct></decl.var.type> { <syntaxtype.keyword>get</syntaxtype.keyword> }</decl.var.global>"
   },
@@ -6528,7 +6530,7 @@
     key.kind: source.lang.swift.decl.var.global,
     key.name: "FOO_MACRO_4",
     key.usr: "c:Foo.h@3828@macro@FOO_MACRO_4",
-    key.offset: 5495,
+    key.offset: 5482,
     key.length: 31,
     key.fully_annotated_decl: "<decl.var.global><syntaxtype.keyword>var</syntaxtype.keyword> <decl.name>FOO_MACRO_4</decl.name>: <decl.var.type><ref.struct usr=\"s:s6UInt32V\">UInt32</ref.struct></decl.var.type> { <syntaxtype.keyword>get</syntaxtype.keyword> }</decl.var.global>"
   },
@@ -6536,7 +6538,7 @@
     key.kind: source.lang.swift.decl.var.global,
     key.name: "FOO_MACRO_5",
     key.usr: "c:Foo.h@3860@macro@FOO_MACRO_5",
-    key.offset: 5527,
+    key.offset: 5514,
     key.length: 31,
     key.fully_annotated_decl: "<decl.var.global><syntaxtype.keyword>var</syntaxtype.keyword> <decl.name>FOO_MACRO_5</decl.name>: <decl.var.type><ref.struct usr=\"s:s6UInt64V\">UInt64</ref.struct></decl.var.type> { <syntaxtype.keyword>get</syntaxtype.keyword> }</decl.var.global>"
   },
@@ -6544,7 +6546,7 @@
     key.kind: source.lang.swift.decl.var.global,
     key.name: "FOO_MACRO_6",
     key.usr: "c:Foo.h@3902@macro@FOO_MACRO_6",
-    key.offset: 5559,
+    key.offset: 5546,
     key.length: 38,
     key.fully_annotated_decl: "<decl.var.global><syntaxtype.keyword>var</syntaxtype.keyword> <decl.name>FOO_MACRO_6</decl.name>: <decl.var.type><ref.typealias usr=\"c:Foo.h@T@typedef_int_t\">typedef_int_t</ref.typealias></decl.var.type> { <syntaxtype.keyword>get</syntaxtype.keyword> }</decl.var.global>"
   },
@@ -6552,7 +6554,7 @@
     key.kind: source.lang.swift.decl.var.global,
     key.name: "FOO_MACRO_7",
     key.usr: "c:Foo.h@3943@macro@FOO_MACRO_7",
-    key.offset: 5598,
+    key.offset: 5585,
     key.length: 38,
     key.fully_annotated_decl: "<decl.var.global><syntaxtype.keyword>var</syntaxtype.keyword> <decl.name>FOO_MACRO_7</decl.name>: <decl.var.type><ref.typealias usr=\"c:Foo.h@T@typedef_int_t\">typedef_int_t</ref.typealias></decl.var.type> { <syntaxtype.keyword>get</syntaxtype.keyword> }</decl.var.global>"
   },
@@ -6560,7 +6562,7 @@
     key.kind: source.lang.swift.decl.var.global,
     key.name: "FOO_MACRO_8",
     key.usr: "c:Foo.h@3984@macro@FOO_MACRO_8",
-    key.offset: 5637,
+    key.offset: 5624,
     key.length: 29,
     key.fully_annotated_decl: "<decl.var.global><syntaxtype.keyword>var</syntaxtype.keyword> <decl.name>FOO_MACRO_8</decl.name>: <decl.var.type><ref.struct usr=\"s:s4Int8V\">Int8</ref.struct></decl.var.type> { <syntaxtype.keyword>get</syntaxtype.keyword> }</decl.var.global>"
   },
@@ -6568,7 +6570,7 @@
     key.kind: source.lang.swift.decl.var.global,
     key.name: "FOO_MACRO_9",
     key.usr: "c:Foo.h@4015@macro@FOO_MACRO_9",
-    key.offset: 5667,
+    key.offset: 5654,
     key.length: 30,
     key.fully_annotated_decl: "<decl.var.global><syntaxtype.keyword>var</syntaxtype.keyword> <decl.name>FOO_MACRO_9</decl.name>: <decl.var.type><ref.struct usr=\"s:s5Int32V\">Int32</ref.struct></decl.var.type> { <syntaxtype.keyword>get</syntaxtype.keyword> }</decl.var.global>"
   },
@@ -6576,7 +6578,7 @@
     key.kind: source.lang.swift.decl.var.global,
     key.name: "FOO_MACRO_10",
     key.usr: "c:Foo.h@4045@macro@FOO_MACRO_10",
-    key.offset: 5698,
+    key.offset: 5685,
     key.length: 31,
     key.fully_annotated_decl: "<decl.var.global><syntaxtype.keyword>var</syntaxtype.keyword> <decl.name>FOO_MACRO_10</decl.name>: <decl.var.type><ref.struct usr=\"s:s5Int16V\">Int16</ref.struct></decl.var.type> { <syntaxtype.keyword>get</syntaxtype.keyword> }</decl.var.global>"
   },
@@ -6584,7 +6586,7 @@
     key.kind: source.lang.swift.decl.var.global,
     key.name: "FOO_MACRO_11",
     key.usr: "c:Foo.h@4079@macro@FOO_MACRO_11",
-    key.offset: 5730,
+    key.offset: 5717,
     key.length: 29,
     key.fully_annotated_decl: "<decl.var.global><syntaxtype.keyword>var</syntaxtype.keyword> <decl.name>FOO_MACRO_11</decl.name>: <decl.var.type><ref.struct usr=\"s:Si\">Int</ref.struct></decl.var.type> { <syntaxtype.keyword>get</syntaxtype.keyword> }</decl.var.global>"
   },
@@ -6592,7 +6594,7 @@
     key.kind: source.lang.swift.decl.var.global,
     key.name: "FOO_MACRO_OR",
     key.usr: "c:Foo.h@4112@macro@FOO_MACRO_OR",
-    key.offset: 5760,
+    key.offset: 5747,
     key.length: 31,
     key.fully_annotated_decl: "<decl.var.global><syntaxtype.keyword>var</syntaxtype.keyword> <decl.name>FOO_MACRO_OR</decl.name>: <decl.var.type><ref.struct usr=\"s:s5Int32V\">Int32</ref.struct></decl.var.type> { <syntaxtype.keyword>get</syntaxtype.keyword> }</decl.var.global>"
   },
@@ -6600,7 +6602,7 @@
     key.kind: source.lang.swift.decl.var.global,
     key.name: "FOO_MACRO_AND",
     key.usr: "c:Foo.h@4161@macro@FOO_MACRO_AND",
-    key.offset: 5792,
+    key.offset: 5779,
     key.length: 32,
     key.fully_annotated_decl: "<decl.var.global><syntaxtype.keyword>var</syntaxtype.keyword> <decl.name>FOO_MACRO_AND</decl.name>: <decl.var.type><ref.struct usr=\"s:s5Int32V\">Int32</ref.struct></decl.var.type> { <syntaxtype.keyword>get</syntaxtype.keyword> }</decl.var.global>"
   },
@@ -6608,7 +6610,7 @@
     key.kind: source.lang.swift.decl.var.global,
     key.name: "FOO_MACRO_BITWIDTH",
     key.usr: "c:Foo.h@4211@macro@FOO_MACRO_BITWIDTH",
-    key.offset: 5825,
+    key.offset: 5812,
     key.length: 38,
     key.fully_annotated_decl: "<decl.var.global><syntaxtype.keyword>var</syntaxtype.keyword> <decl.name>FOO_MACRO_BITWIDTH</decl.name>: <decl.var.type><ref.struct usr=\"s:s6UInt64V\">UInt64</ref.struct></decl.var.type> { <syntaxtype.keyword>get</syntaxtype.keyword> }</decl.var.global>"
   },
@@ -6616,7 +6618,7 @@
     key.kind: source.lang.swift.decl.var.global,
     key.name: "FOO_MACRO_SIGNED",
     key.usr: "c:Foo.h@4266@macro@FOO_MACRO_SIGNED",
-    key.offset: 5864,
+    key.offset: 5851,
     key.length: 36,
     key.fully_annotated_decl: "<decl.var.global><syntaxtype.keyword>var</syntaxtype.keyword> <decl.name>FOO_MACRO_SIGNED</decl.name>: <decl.var.type><ref.struct usr=\"s:s6UInt32V\">UInt32</ref.struct></decl.var.type> { <syntaxtype.keyword>get</syntaxtype.keyword> }</decl.var.global>"
   },
@@ -6624,7 +6626,7 @@
     key.kind: source.lang.swift.decl.var.global,
     key.name: "FOO_MACRO_REDEF_1",
     key.usr: "c:Foo.h@4477@macro@FOO_MACRO_REDEF_1",
-    key.offset: 5901,
+    key.offset: 5888,
     key.length: 36,
     key.fully_annotated_decl: "<decl.var.global><syntaxtype.keyword>var</syntaxtype.keyword> <decl.name>FOO_MACRO_REDEF_1</decl.name>: <decl.var.type><ref.struct usr=\"s:s5Int32V\">Int32</ref.struct></decl.var.type> { <syntaxtype.keyword>get</syntaxtype.keyword> }</decl.var.global>"
   },
@@ -6632,7 +6634,7 @@
     key.kind: source.lang.swift.decl.var.global,
     key.name: "FOO_MACRO_REDEF_2",
     key.usr: "c:Foo.h@4534@macro@FOO_MACRO_REDEF_2",
-    key.offset: 5938,
+    key.offset: 5925,
     key.length: 36,
     key.fully_annotated_decl: "<decl.var.global><syntaxtype.keyword>var</syntaxtype.keyword> <decl.name>FOO_MACRO_REDEF_2</decl.name>: <decl.var.type><ref.struct usr=\"s:s5Int32V\">Int32</ref.struct></decl.var.type> { <syntaxtype.keyword>get</syntaxtype.keyword> }</decl.var.global>"
   },
@@ -6640,7 +6642,7 @@
     key.kind: source.lang.swift.decl.function.free,
     key.name: "theLastDeclInFoo()",
     key.usr: "c:@F@theLastDeclInFoo",
-    key.offset: 5975,
+    key.offset: 5962,
     key.length: 23,
     key.fully_annotated_decl: "<decl.function.free><syntaxtype.keyword>func</syntaxtype.keyword> <decl.name>theLastDeclInFoo</decl.name>()</decl.function.free>"
   },
@@ -6648,7 +6650,7 @@
     key.kind: source.lang.swift.decl.function.free,
     key.name: "_internalTopLevelFunc()",
     key.usr: "c:@F@_internalTopLevelFunc",
-    key.offset: 5999,
+    key.offset: 5986,
     key.length: 28,
     key.fully_annotated_decl: "<decl.function.free><syntaxtype.keyword>func</syntaxtype.keyword> <decl.name>_internalTopLevelFunc</decl.name>()</decl.function.free>"
   },
@@ -6656,7 +6658,7 @@
     key.kind: source.lang.swift.decl.struct,
     key.name: "_InternalStruct",
     key.usr: "c:@S@_InternalStruct",
-    key.offset: 6028,
+    key.offset: 6015,
     key.length: 78,
     key.fully_annotated_decl: "<decl.struct><syntaxtype.keyword>struct</syntaxtype.keyword> <decl.name>_InternalStruct</decl.name></decl.struct>",
     key.entities: [
@@ -6664,7 +6666,7 @@
         key.kind: source.lang.swift.decl.var.instance,
         key.name: "x",
         key.usr: "c:@S@_InternalStruct@FI@x",
-        key.offset: 6058,
+        key.offset: 6045,
         key.length: 12,
         key.fully_annotated_decl: "<decl.var.instance><syntaxtype.keyword>var</syntaxtype.keyword> <decl.name>x</decl.name>: <decl.var.type><ref.struct usr=\"s:s5Int32V\">Int32</ref.struct></decl.var.type></decl.var.instance>"
       },
@@ -6672,7 +6674,7 @@
         key.kind: source.lang.swift.decl.function.constructor,
         key.name: "init()",
         key.usr: "s:So15_InternalStructVABycfc",
-        key.offset: 6076,
+        key.offset: 6063,
         key.length: 6,
         key.fully_annotated_decl: "<decl.function.constructor><syntaxtype.keyword>init</syntaxtype.keyword>()</decl.function.constructor>"
       },
@@ -6680,7 +6682,7 @@
         key.kind: source.lang.swift.decl.function.constructor,
         key.name: "init(x:)",
         key.usr: "s:So15_InternalStructV1xABs5Int32V_tcfc",
-        key.offset: 6088,
+        key.offset: 6075,
         key.length: 16,
         key.fully_annotated_decl: "<decl.function.constructor><syntaxtype.keyword>init</syntaxtype.keyword>(<decl.var.parameter><decl.var.parameter.argument_label>x</decl.var.parameter.argument_label>: <decl.var.parameter.type><ref.struct usr=\"s:s5Int32V\">Int32</ref.struct></decl.var.parameter.type></decl.var.parameter>)</decl.function.constructor>",
         key.entities: [
@@ -6688,7 +6690,7 @@
             key.kind: source.lang.swift.decl.var.local,
             key.keyword: "x",
             key.name: "x",
-            key.offset: 6098,
+            key.offset: 6085,
             key.length: 5
           }
         ]
@@ -6697,7 +6699,7 @@
   },
   {
     key.kind: source.lang.swift.decl.extension.class,
-    key.offset: 6107,
+    key.offset: 6094,
     key.length: 61,
     key.extends: {
       key.kind: source.lang.swift.ref.class,
@@ -6709,7 +6711,7 @@
         key.kind: source.lang.swift.decl.function.method.instance,
         key.name: "_internalMeth1()",
         key.usr: "c:objc(cs)FooClassBase(im)_internalMeth1",
-        key.offset: 6137,
+        key.offset: 6124,
         key.length: 29,
         key.fully_annotated_decl: "<decl.function.method.instance><syntaxtype.keyword>func</syntaxtype.keyword> <decl.name>_internalMeth1</decl.name>() -&gt; <decl.function.returntype>Any!</decl.function.returntype></decl.function.method.instance>"
       }
@@ -6717,7 +6719,7 @@
   },
   {
     key.kind: source.lang.swift.decl.extension.class,
-    key.offset: 6169,
+    key.offset: 6156,
     key.length: 97,
     key.extends: {
       key.kind: source.lang.swift.ref.class,
@@ -6729,7 +6731,7 @@
         key.kind: source.lang.swift.decl.function.method.instance,
         key.name: "_internalMeth2()",
         key.usr: "c:objc(cs)FooClassBase(im)_internalMeth2",
-        key.offset: 6199,
+        key.offset: 6186,
         key.length: 29,
         key.fully_annotated_decl: "<decl.function.method.instance><syntaxtype.keyword>func</syntaxtype.keyword> <decl.name>_internalMeth2</decl.name>() -&gt; <decl.function.returntype>Any!</decl.function.returntype></decl.function.method.instance>"
       },
@@ -6737,7 +6739,7 @@
         key.kind: source.lang.swift.decl.function.method.instance,
         key.name: "nonInternalMeth()",
         key.usr: "c:objc(cs)FooClassBase(im)nonInternalMeth",
-        key.offset: 6234,
+        key.offset: 6221,
         key.length: 30,
         key.fully_annotated_decl: "<decl.function.method.instance><syntaxtype.keyword>func</syntaxtype.keyword> <decl.name>nonInternalMeth</decl.name>() -&gt; <decl.function.returntype>Any!</decl.function.returntype></decl.function.method.instance>"
       }
@@ -6745,7 +6747,7 @@
   },
   {
     key.kind: source.lang.swift.decl.extension.class,
-    key.offset: 6267,
+    key.offset: 6254,
     key.length: 61,
     key.extends: {
       key.kind: source.lang.swift.ref.class,
@@ -6757,7 +6759,7 @@
         key.kind: source.lang.swift.decl.function.method.instance,
         key.name: "_internalMeth3()",
         key.usr: "c:objc(cs)FooClassBase(im)_internalMeth3",
-        key.offset: 6297,
+        key.offset: 6284,
         key.length: 29,
         key.fully_annotated_decl: "<decl.function.method.instance><syntaxtype.keyword>func</syntaxtype.keyword> <decl.name>_internalMeth3</decl.name>() -&gt; <decl.function.returntype>Any!</decl.function.returntype></decl.function.method.instance>"
       }
@@ -6767,7 +6769,7 @@
     key.kind: source.lang.swift.decl.protocol,
     key.name: "_InternalProt",
     key.usr: "c:objc(pl)_InternalProt",
-    key.offset: 6329,
+    key.offset: 6316,
     key.length: 26,
     key.fully_annotated_decl: "<decl.protocol><syntaxtype.keyword>protocol</syntaxtype.keyword> <decl.name>_InternalProt</decl.name></decl.protocol>"
   },
@@ -6775,7 +6777,7 @@
     key.kind: source.lang.swift.decl.class,
     key.name: "ClassWithInternalProt",
     key.usr: "c:objc(cs)ClassWithInternalProt",
-    key.offset: 6356,
+    key.offset: 6343,
     key.length: 47,
     key.fully_annotated_decl: "<decl.class><syntaxtype.keyword>class</syntaxtype.keyword> <decl.name>ClassWithInternalProt</decl.name> : <ref.protocol usr=\"c:objc(pl)_InternalProt\">_InternalProt</ref.protocol></decl.class>",
     key.conforms: [
@@ -6790,7 +6792,7 @@
     key.kind: source.lang.swift.decl.class,
     key.name: "FooClassPropertyOwnership",
     key.usr: "c:objc(cs)FooClassPropertyOwnership",
-    key.offset: 6404,
+    key.offset: 6391,
     key.length: 425,
     key.fully_annotated_decl: "<decl.class><syntaxtype.keyword>class</syntaxtype.keyword> <decl.name>FooClassPropertyOwnership</decl.name> : <ref.class usr=\"c:objc(cs)FooClassBase\">FooClassBase</ref.class></decl.class>",
     key.inherits: [
@@ -6805,7 +6807,7 @@
         key.kind: source.lang.swift.decl.var.instance,
         key.name: "assignable",
         key.usr: "c:objc(cs)FooClassPropertyOwnership(py)assignable",
-        key.offset: 6458,
+        key.offset: 6445,
         key.length: 42,
         key.fully_annotated_decl: "<decl.var.instance><syntaxtype.keyword>unowned(unsafe)</syntaxtype.keyword> <syntaxtype.keyword>var</syntaxtype.keyword> <decl.name>assignable</decl.name>: <decl.var.type>AnyObject!</decl.var.type> { <syntaxtype.keyword>get</syntaxtype.keyword> <syntaxtype.keyword>set</syntaxtype.keyword> }</decl.var.instance>"
       },
@@ -6813,7 +6815,7 @@
         key.kind: source.lang.swift.decl.var.instance,
         key.name: "unsafeAssignable",
         key.usr: "c:objc(cs)FooClassPropertyOwnership(py)unsafeAssignable",
-        key.offset: 6506,
+        key.offset: 6493,
         key.length: 48,
         key.fully_annotated_decl: "<decl.var.instance><syntaxtype.keyword>unowned(unsafe)</syntaxtype.keyword> <syntaxtype.keyword>var</syntaxtype.keyword> <decl.name>unsafeAssignable</decl.name>: <decl.var.type>AnyObject!</decl.var.type> { <syntaxtype.keyword>get</syntaxtype.keyword> <syntaxtype.keyword>set</syntaxtype.keyword> }</decl.var.instance>"
       },
@@ -6821,7 +6823,7 @@
         key.kind: source.lang.swift.decl.var.instance,
         key.name: "retainable",
         key.usr: "c:objc(cs)FooClassPropertyOwnership(py)retainable",
-        key.offset: 6560,
+        key.offset: 6547,
         key.length: 20,
         key.fully_annotated_decl: "<decl.var.instance><syntaxtype.keyword>var</syntaxtype.keyword> <decl.name>retainable</decl.name>: <decl.var.type>Any!</decl.var.type> { <syntaxtype.keyword>get</syntaxtype.keyword> <syntaxtype.keyword>set</syntaxtype.keyword> }</decl.var.instance>"
       },
@@ -6829,7 +6831,7 @@
         key.kind: source.lang.swift.decl.var.instance,
         key.name: "strongRef",
         key.usr: "c:objc(cs)FooClassPropertyOwnership(py)strongRef",
-        key.offset: 6586,
+        key.offset: 6573,
         key.length: 19,
         key.fully_annotated_decl: "<decl.var.instance><syntaxtype.keyword>var</syntaxtype.keyword> <decl.name>strongRef</decl.name>: <decl.var.type>Any!</decl.var.type> { <syntaxtype.keyword>get</syntaxtype.keyword> <syntaxtype.keyword>set</syntaxtype.keyword> }</decl.var.instance>"
       },
@@ -6837,7 +6839,7 @@
         key.kind: source.lang.swift.decl.var.instance,
         key.name: "copyable",
         key.usr: "c:objc(cs)FooClassPropertyOwnership(py)copyable",
-        key.offset: 6611,
+        key.offset: 6598,
         key.length: 18,
         key.fully_annotated_decl: "<decl.var.instance><syntaxtype.keyword>var</syntaxtype.keyword> <decl.name>copyable</decl.name>: <decl.var.type>Any!</decl.var.type> { <syntaxtype.keyword>get</syntaxtype.keyword> <syntaxtype.keyword>set</syntaxtype.keyword> }</decl.var.instance>"
       },
@@ -6845,7 +6847,7 @@
         key.kind: source.lang.swift.decl.var.instance,
         key.name: "weakRef",
         key.usr: "c:objc(cs)FooClassPropertyOwnership(py)weakRef",
-        key.offset: 6635,
+        key.offset: 6622,
         key.length: 28,
         key.fully_annotated_decl: "<decl.var.instance><syntaxtype.keyword>weak</syntaxtype.keyword> <syntaxtype.keyword>var</syntaxtype.keyword> <decl.name>weakRef</decl.name>: <decl.var.type>AnyObject!</decl.var.type> { <syntaxtype.keyword>get</syntaxtype.keyword> <syntaxtype.keyword>set</syntaxtype.keyword> }</decl.var.instance>"
       },
@@ -6853,7 +6855,7 @@
         key.kind: source.lang.swift.decl.var.instance,
         key.name: "scalar",
         key.usr: "c:objc(cs)FooClassPropertyOwnership(py)scalar",
-        key.offset: 6669,
+        key.offset: 6656,
         key.length: 17,
         key.fully_annotated_decl: "<decl.var.instance><syntaxtype.keyword>var</syntaxtype.keyword> <decl.name>scalar</decl.name>: <decl.var.type><ref.struct usr=\"s:s5Int32V\">Int32</ref.struct></decl.var.type> { <syntaxtype.keyword>get</syntaxtype.keyword> <syntaxtype.keyword>set</syntaxtype.keyword> }</decl.var.instance>"
       },
@@ -6862,7 +6864,7 @@
         key.name: "_internalMeth1()",
         key.usr: "c:objc(cs)FooClassBase(im)_internalMeth1::SYNTHESIZED::c:objc(cs)FooClassPropertyOwnership",
         key.original_usr: "c:objc(cs)FooClassBase(im)_internalMeth1",
-        key.offset: 6692,
+        key.offset: 6679,
         key.length: 29,
         key.fully_annotated_decl: "<decl.function.method.instance><syntaxtype.keyword>func</syntaxtype.keyword> <decl.name>_internalMeth1</decl.name>() -&gt; <decl.function.returntype>Any!</decl.function.returntype></decl.function.method.instance>"
       },
@@ -6871,7 +6873,7 @@
         key.name: "_internalMeth2()",
         key.usr: "c:objc(cs)FooClassBase(im)_internalMeth2::SYNTHESIZED::c:objc(cs)FooClassPropertyOwnership",
         key.original_usr: "c:objc(cs)FooClassBase(im)_internalMeth2",
-        key.offset: 6727,
+        key.offset: 6714,
         key.length: 29,
         key.fully_annotated_decl: "<decl.function.method.instance><syntaxtype.keyword>func</syntaxtype.keyword> <decl.name>_internalMeth2</decl.name>() -&gt; <decl.function.returntype>Any!</decl.function.returntype></decl.function.method.instance>"
       },
@@ -6880,7 +6882,7 @@
         key.name: "nonInternalMeth()",
         key.usr: "c:objc(cs)FooClassBase(im)nonInternalMeth::SYNTHESIZED::c:objc(cs)FooClassPropertyOwnership",
         key.original_usr: "c:objc(cs)FooClassBase(im)nonInternalMeth",
-        key.offset: 6762,
+        key.offset: 6749,
         key.length: 30,
         key.fully_annotated_decl: "<decl.function.method.instance><syntaxtype.keyword>func</syntaxtype.keyword> <decl.name>nonInternalMeth</decl.name>() -&gt; <decl.function.returntype>Any!</decl.function.returntype></decl.function.method.instance>"
       },
@@ -6889,7 +6891,7 @@
         key.name: "_internalMeth3()",
         key.usr: "c:objc(cs)FooClassBase(im)_internalMeth3::SYNTHESIZED::c:objc(cs)FooClassPropertyOwnership",
         key.original_usr: "c:objc(cs)FooClassBase(im)_internalMeth3",
-        key.offset: 6798,
+        key.offset: 6785,
         key.length: 29,
         key.fully_annotated_decl: "<decl.function.method.instance><syntaxtype.keyword>func</syntaxtype.keyword> <decl.name>_internalMeth3</decl.name>() -&gt; <decl.function.returntype>Any!</decl.function.returntype></decl.function.method.instance>"
       }
@@ -6899,7 +6901,7 @@
     key.kind: source.lang.swift.decl.var.global,
     key.name: "FOO_NIL",
     key.usr: "c:Foo.h@5323@macro@FOO_NIL",
-    key.offset: 6830,
+    key.offset: 6817,
     key.length: 15,
     key.fully_annotated_decl: "<decl.var.global><syntaxtype.keyword>var</syntaxtype.keyword> <decl.name>FOO_NIL</decl.name>: <decl.var.type><tuple>()</tuple></decl.var.type></decl.var.global>",
     key.attributes: [
@@ -6915,7 +6917,7 @@
     key.kind: source.lang.swift.decl.class,
     key.name: "FooUnavailableMembers",
     key.usr: "c:objc(cs)FooUnavailableMembers",
-    key.offset: 6846,
+    key.offset: 6833,
     key.length: 592,
     key.fully_annotated_decl: "<decl.class><syntaxtype.keyword>class</syntaxtype.keyword> <decl.name>FooUnavailableMembers</decl.name> : <ref.class usr=\"c:objc(cs)FooClassBase\">FooClassBase</ref.class></decl.class>",
     key.inherits: [
@@ -6930,7 +6932,7 @@
         key.kind: source.lang.swift.decl.function.constructor,
         key.name: "init(int:)",
         key.usr: "c:objc(cs)FooUnavailableMembers(cm)unavailableMembersWithInt:",
-        key.offset: 6896,
+        key.offset: 6883,
         key.length: 31,
         key.fully_annotated_decl: "<decl.function.constructor><syntaxtype.keyword>convenience</syntaxtype.keyword> <syntaxtype.keyword>init</syntaxtype.keyword>!(<decl.var.parameter><decl.var.parameter.argument_label>int</decl.var.parameter.argument_label> <decl.var.parameter.name>i</decl.var.parameter.name>: <decl.var.parameter.type><ref.struct usr=\"s:s5Int32V\">Int32</ref.struct></decl.var.parameter.type></decl.var.parameter>)</decl.function.constructor>",
         key.entities: [
@@ -6938,7 +6940,7 @@
             key.kind: source.lang.swift.decl.var.local,
             key.keyword: "int",
             key.name: "i",
-            key.offset: 6921,
+            key.offset: 6908,
             key.length: 5
           }
         ]
@@ -6947,7 +6949,7 @@
         key.kind: source.lang.swift.decl.function.method.instance,
         key.name: "unavailable()",
         key.usr: "c:objc(cs)FooUnavailableMembers(im)unavailable",
-        key.offset: 6933,
+        key.offset: 6920,
         key.length: 18,
         key.fully_annotated_decl: "<decl.function.method.instance><syntaxtype.keyword>func</syntaxtype.keyword> <decl.name>unavailable</decl.name>()</decl.function.method.instance>",
         key.attributes: [
@@ -6963,7 +6965,7 @@
         key.kind: source.lang.swift.decl.function.method.instance,
         key.name: "swiftUnavailable()",
         key.usr: "c:objc(cs)FooUnavailableMembers(im)swiftUnavailable",
-        key.offset: 6957,
+        key.offset: 6944,
         key.length: 23,
         key.fully_annotated_decl: "<decl.function.method.instance><syntaxtype.keyword>func</syntaxtype.keyword> <decl.name>swiftUnavailable</decl.name>()</decl.function.method.instance>",
         key.attributes: [
@@ -6978,7 +6980,7 @@
         key.kind: source.lang.swift.decl.function.method.instance,
         key.name: "deprecated()",
         key.usr: "c:objc(cs)FooUnavailableMembers(im)deprecated",
-        key.offset: 6986,
+        key.offset: 6973,
         key.length: 17,
         key.fully_annotated_decl: "<decl.function.method.instance><syntaxtype.keyword>func</syntaxtype.keyword> <decl.name>deprecated</decl.name>()</decl.function.method.instance>",
         key.attributes: [
@@ -6994,7 +6996,7 @@
         key.kind: source.lang.swift.decl.function.method.instance,
         key.name: "availabilityIntroduced()",
         key.usr: "c:objc(cs)FooUnavailableMembers(im)availabilityIntroduced",
-        key.offset: 7009,
+        key.offset: 6996,
         key.length: 29,
         key.fully_annotated_decl: "<decl.function.method.instance><syntaxtype.keyword>func</syntaxtype.keyword> <decl.name>availabilityIntroduced</decl.name>()</decl.function.method.instance>",
         key.attributes: [
@@ -7009,7 +7011,7 @@
         key.kind: source.lang.swift.decl.function.method.instance,
         key.name: "availabilityDeprecated()",
         key.usr: "c:objc(cs)FooUnavailableMembers(im)availabilityDeprecated",
-        key.offset: 7044,
+        key.offset: 7031,
         key.length: 29,
         key.fully_annotated_decl: "<decl.function.method.instance><syntaxtype.keyword>func</syntaxtype.keyword> <decl.name>availabilityDeprecated</decl.name>()</decl.function.method.instance>",
         key.attributes: [
@@ -7028,7 +7030,7 @@
         key.kind: source.lang.swift.decl.function.method.instance,
         key.name: "availabilityObsoleted()",
         key.usr: "c:objc(cs)FooUnavailableMembers(im)availabilityObsoleted",
-        key.offset: 7079,
+        key.offset: 7066,
         key.length: 28,
         key.fully_annotated_decl: "<decl.function.method.instance><syntaxtype.keyword>func</syntaxtype.keyword> <decl.name>availabilityObsoleted</decl.name>()</decl.function.method.instance>",
         key.attributes: [
@@ -7044,7 +7046,7 @@
         key.kind: source.lang.swift.decl.function.method.instance,
         key.name: "availabilityUnavailable()",
         key.usr: "c:objc(cs)FooUnavailableMembers(im)availabilityUnavailable",
-        key.offset: 7113,
+        key.offset: 7100,
         key.length: 30,
         key.fully_annotated_decl: "<decl.function.method.instance><syntaxtype.keyword>func</syntaxtype.keyword> <decl.name>availabilityUnavailable</decl.name>()</decl.function.method.instance>",
         key.attributes: [
@@ -7060,7 +7062,7 @@
         key.kind: source.lang.swift.decl.function.method.instance,
         key.name: "availabilityIntroducedMsg()",
         key.usr: "c:objc(cs)FooUnavailableMembers(im)availabilityIntroducedMsg",
-        key.offset: 7149,
+        key.offset: 7136,
         key.length: 32,
         key.fully_annotated_decl: "<decl.function.method.instance><syntaxtype.keyword>func</syntaxtype.keyword> <decl.name>availabilityIntroducedMsg</decl.name>()</decl.function.method.instance>",
         key.attributes: [
@@ -7076,7 +7078,7 @@
         key.kind: source.lang.swift.decl.function.method.instance,
         key.name: "availabilityDeprecatedMsg()",
         key.usr: "c:objc(cs)FooUnavailableMembers(im)availabilityDeprecatedMsg",
-        key.offset: 7187,
+        key.offset: 7174,
         key.length: 32,
         key.fully_annotated_decl: "<decl.function.method.instance><syntaxtype.keyword>func</syntaxtype.keyword> <decl.name>availabilityDeprecatedMsg</decl.name>()</decl.function.method.instance>",
         key.attributes: [
@@ -7095,7 +7097,7 @@
         key.kind: source.lang.swift.decl.function.method.instance,
         key.name: "availabilityObsoletedMsg()",
         key.usr: "c:objc(cs)FooUnavailableMembers(im)availabilityObsoletedMsg",
-        key.offset: 7225,
+        key.offset: 7212,
         key.length: 31,
         key.fully_annotated_decl: "<decl.function.method.instance><syntaxtype.keyword>func</syntaxtype.keyword> <decl.name>availabilityObsoletedMsg</decl.name>()</decl.function.method.instance>",
         key.attributes: [
@@ -7112,7 +7114,7 @@
         key.kind: source.lang.swift.decl.function.method.instance,
         key.name: "availabilityUnavailableMsg()",
         key.usr: "c:objc(cs)FooUnavailableMembers(im)availabilityUnavailableMsg",
-        key.offset: 7262,
+        key.offset: 7249,
         key.length: 33,
         key.fully_annotated_decl: "<decl.function.method.instance><syntaxtype.keyword>func</syntaxtype.keyword> <decl.name>availabilityUnavailableMsg</decl.name>()</decl.function.method.instance>",
         key.attributes: [
@@ -7130,7 +7132,7 @@
         key.name: "_internalMeth1()",
         key.usr: "c:objc(cs)FooClassBase(im)_internalMeth1::SYNTHESIZED::c:objc(cs)FooUnavailableMembers",
         key.original_usr: "c:objc(cs)FooClassBase(im)_internalMeth1",
-        key.offset: 7301,
+        key.offset: 7288,
         key.length: 29,
         key.fully_annotated_decl: "<decl.function.method.instance><syntaxtype.keyword>func</syntaxtype.keyword> <decl.name>_internalMeth1</decl.name>() -&gt; <decl.function.returntype>Any!</decl.function.returntype></decl.function.method.instance>"
       },
@@ -7139,7 +7141,7 @@
         key.name: "_internalMeth2()",
         key.usr: "c:objc(cs)FooClassBase(im)_internalMeth2::SYNTHESIZED::c:objc(cs)FooUnavailableMembers",
         key.original_usr: "c:objc(cs)FooClassBase(im)_internalMeth2",
-        key.offset: 7336,
+        key.offset: 7323,
         key.length: 29,
         key.fully_annotated_decl: "<decl.function.method.instance><syntaxtype.keyword>func</syntaxtype.keyword> <decl.name>_internalMeth2</decl.name>() -&gt; <decl.function.returntype>Any!</decl.function.returntype></decl.function.method.instance>"
       },
@@ -7148,7 +7150,7 @@
         key.name: "nonInternalMeth()",
         key.usr: "c:objc(cs)FooClassBase(im)nonInternalMeth::SYNTHESIZED::c:objc(cs)FooUnavailableMembers",
         key.original_usr: "c:objc(cs)FooClassBase(im)nonInternalMeth",
-        key.offset: 7371,
+        key.offset: 7358,
         key.length: 30,
         key.fully_annotated_decl: "<decl.function.method.instance><syntaxtype.keyword>func</syntaxtype.keyword> <decl.name>nonInternalMeth</decl.name>() -&gt; <decl.function.returntype>Any!</decl.function.returntype></decl.function.method.instance>"
       },
@@ -7157,7 +7159,7 @@
         key.name: "_internalMeth3()",
         key.usr: "c:objc(cs)FooClassBase(im)_internalMeth3::SYNTHESIZED::c:objc(cs)FooUnavailableMembers",
         key.original_usr: "c:objc(cs)FooClassBase(im)_internalMeth3",
-        key.offset: 7407,
+        key.offset: 7394,
         key.length: 29,
         key.fully_annotated_decl: "<decl.function.method.instance><syntaxtype.keyword>func</syntaxtype.keyword> <decl.name>_internalMeth3</decl.name>() -&gt; <decl.function.returntype>Any!</decl.function.returntype></decl.function.method.instance>"
       }
@@ -7167,7 +7169,7 @@
     key.kind: source.lang.swift.decl.class,
     key.name: "FooCFType",
     key.usr: "c:Foo.h@T@FooCFTypeRef",
-    key.offset: 7439,
+    key.offset: 7426,
     key.length: 19,
     key.fully_annotated_decl: "<decl.class><syntaxtype.keyword>class</syntaxtype.keyword> <decl.name>FooCFType</decl.name></decl.class>"
   },
@@ -7175,14 +7177,14 @@
     key.kind: source.lang.swift.decl.function.free,
     key.name: "FooCFTypeRelease(_:)",
     key.usr: "c:@F@FooCFTypeRelease",
-    key.offset: 7459,
+    key.offset: 7446,
     key.length: 38,
     key.fully_annotated_decl: "<decl.function.free><syntaxtype.keyword>func</syntaxtype.keyword> <decl.name>FooCFTypeRelease</decl.name>(<decl.var.parameter><decl.var.parameter.argument_label>_</decl.var.parameter.argument_label>: <decl.var.parameter.type><ref.class usr=\"c:Foo.h@T@FooCFTypeRef\">FooCFType</ref.class>!</decl.var.parameter.type></decl.var.parameter>)</decl.function.free>",
     key.entities: [
       {
         key.kind: source.lang.swift.decl.var.local,
         key.keyword: "_",
-        key.offset: 7486,
+        key.offset: 7473,
         key.length: 10
       }
     ],
@@ -7199,7 +7201,7 @@
     key.kind: source.lang.swift.decl.enum,
     key.name: "ABAuthorizationStatus",
     key.usr: "c:@E@ABAuthorizationStatus",
-    key.offset: 7498,
+    key.offset: 7485,
     key.length: 266,
     key.fully_annotated_decl: "<decl.enum><syntaxtype.keyword>enum</syntaxtype.keyword> <decl.name>ABAuthorizationStatus</decl.name> : <ref.struct usr=\"s:Si\">Int</ref.struct></decl.enum>",
     key.inherits: [
@@ -7214,7 +7216,7 @@
         key.kind: source.lang.swift.decl.enumelement,
         key.name: "notDetermined",
         key.usr: "c:@E@ABAuthorizationStatus@kABAuthorizationStatusNotDetermined",
-        key.offset: 7538,
+        key.offset: 7525,
         key.length: 18,
         key.fully_annotated_decl: "<decl.enumelement><syntaxtype.keyword>case</syntaxtype.keyword> <decl.name>notDetermined</decl.name> = <syntaxtype.number>0</syntaxtype.number></decl.enumelement>",
         key.attributes: [
@@ -7229,7 +7231,7 @@
         key.kind: source.lang.swift.decl.enumelement,
         key.name: "restricted",
         key.usr: "c:@E@ABAuthorizationStatus@kABAuthorizationStatusRestricted",
-        key.offset: 7562,
+        key.offset: 7549,
         key.length: 15,
         key.fully_annotated_decl: "<decl.enumelement><syntaxtype.keyword>case</syntaxtype.keyword> <decl.name>restricted</decl.name> = <syntaxtype.number>1</syntaxtype.number></decl.enumelement>",
         key.attributes: [
@@ -7245,7 +7247,7 @@
         key.name: "hashValue",
         key.usr: "s:SYsSHRzSH8RawValueSYRpzrlE04hashB0Sivp::SYNTHESIZED::c:@E@ABAuthorizationStatus",
         key.original_usr: "s:SYsSHRzSH8RawValueSYRpzrlE04hashB0Sivp",
-        key.offset: 7583,
+        key.offset: 7570,
         key.length: 37,
         key.fully_annotated_decl: "<decl.var.instance><syntaxtype.attribute.builtin><syntaxtype.attribute.name>@inlinable</syntaxtype.attribute.name></syntaxtype.attribute.builtin> <syntaxtype.keyword>var</syntaxtype.keyword> <decl.name>hashValue</decl.name>: <decl.var.type><ref.struct usr=\"s:Si\">Int</ref.struct></decl.var.type> { <syntaxtype.keyword>get</syntaxtype.keyword> }</decl.var.instance>"
       },
@@ -7254,7 +7256,7 @@
         key.name: "hash(into:)",
         key.usr: "s:SYsSHRzSH8RawValueSYRpzrlE4hash4intoys6HasherVz_tF::SYNTHESIZED::c:@E@ABAuthorizationStatus",
         key.original_usr: "s:SYsSHRzSH8RawValueSYRpzrlE4hash4intoys6HasherVz_tF",
-        key.offset: 7626,
+        key.offset: 7613,
         key.length: 47,
         key.fully_annotated_decl: "<decl.function.method.instance><syntaxtype.attribute.builtin><syntaxtype.attribute.name>@inlinable</syntaxtype.attribute.name></syntaxtype.attribute.builtin> <syntaxtype.keyword>func</syntaxtype.keyword> <decl.name>hash</decl.name>(<decl.var.parameter><decl.var.parameter.argument_label>into</decl.var.parameter.argument_label> <decl.var.parameter.name>hasher</decl.var.parameter.name>: inout <decl.var.parameter.type><ref.struct usr=\"s:s6HasherV\">Hasher</ref.struct></decl.var.parameter.type></decl.var.parameter>)</decl.function.method.instance>",
         key.entities: [
@@ -7262,7 +7264,7 @@
             key.kind: source.lang.swift.decl.var.local,
             key.keyword: "into",
             key.name: "hasher",
-            key.offset: 7666,
+            key.offset: 7653,
             key.length: 6
           }
         ]
@@ -7272,7 +7274,7 @@
         key.name: "!=(_:_:)",
         key.usr: "s:SQsE2neoiySbx_xtFZ::SYNTHESIZED::c:@E@ABAuthorizationStatus",
         key.original_usr: "s:SQsE2neoiySbx_xtFZ",
-        key.offset: 7679,
+        key.offset: 7666,
         key.length: 83,
         key.fully_annotated_decl: "<decl.function.operator.infix><syntaxtype.keyword>static</syntaxtype.keyword> <syntaxtype.keyword>func</syntaxtype.keyword> <decl.name>!= </decl.name>(<decl.var.parameter><decl.var.parameter.name>lhs</decl.var.parameter.name>: <decl.var.parameter.type><ref.enum usr=\"c:@E@ABAuthorizationStatus\">ABAuthorizationStatus</ref.enum></decl.var.parameter.type></decl.var.parameter>, <decl.var.parameter><decl.var.parameter.name>rhs</decl.var.parameter.name>: <decl.var.parameter.type><ref.enum usr=\"c:@E@ABAuthorizationStatus\">ABAuthorizationStatus</ref.enum></decl.var.parameter.type></decl.var.parameter>) -&gt; <decl.function.returntype><ref.struct usr=\"s:Sb\">Bool</ref.struct></decl.function.returntype></decl.function.operator.infix>",
         key.entities: [
@@ -7280,14 +7282,14 @@
             key.kind: source.lang.swift.decl.var.local,
             key.keyword: "_",
             key.name: "lhs",
-            key.offset: 7702,
+            key.offset: 7689,
             key.length: 21
           },
           {
             key.kind: source.lang.swift.decl.var.local,
             key.keyword: "_",
             key.name: "rhs",
-            key.offset: 7732,
+            key.offset: 7719,
             key.length: 21
           }
         ]
@@ -7306,7 +7308,7 @@
     key.kind: source.lang.swift.decl.function.free,
     key.name: "fooSubFunc1(_:)",
     key.usr: "c:@F@fooSubFunc1",
-    key.offset: 7765,
+    key.offset: 7752,
     key.length: 37,
     key.fully_annotated_decl: "<decl.function.free><syntaxtype.keyword>func</syntaxtype.keyword> <decl.name>fooSubFunc1</decl.name>(<decl.var.parameter><decl.var.parameter.argument_label>_</decl.var.parameter.argument_label> <decl.var.parameter.name>a</decl.var.parameter.name>: <decl.var.parameter.type><ref.struct usr=\"s:s5Int32V\">Int32</ref.struct></decl.var.parameter.type></decl.var.parameter>) -&gt; <decl.function.returntype><ref.struct usr=\"s:s5Int32V\">Int32</ref.struct></decl.function.returntype></decl.function.free>",
     key.entities: [
@@ -7314,7 +7316,7 @@
         key.kind: source.lang.swift.decl.var.local,
         key.keyword: "_",
         key.name: "a",
-        key.offset: 7787,
+        key.offset: 7774,
         key.length: 5
       }
     ],
@@ -7324,7 +7326,7 @@
     key.kind: source.lang.swift.decl.struct,
     key.name: "FooSubEnum1",
     key.usr: "c:@E@FooSubEnum1",
-    key.offset: 7803,
+    key.offset: 7790,
     key.length: 214,
     key.fully_annotated_decl: "<decl.struct><syntaxtype.keyword>struct</syntaxtype.keyword> <decl.name>FooSubEnum1</decl.name> : <ref.protocol usr=\"s:SQ\">Equatable</ref.protocol>, <ref.protocol usr=\"s:SY\">RawRepresentable</ref.protocol></decl.struct>",
     key.conforms: [
@@ -7344,7 +7346,7 @@
         key.kind: source.lang.swift.decl.function.constructor,
         key.name: "init(_:)",
         key.usr: "s:So11FooSubEnum1VyABs6UInt32Vcfc",
-        key.offset: 7859,
+        key.offset: 7846,
         key.length: 24,
         key.fully_annotated_decl: "<decl.function.constructor><syntaxtype.keyword>init</syntaxtype.keyword>(<decl.var.parameter><decl.var.parameter.argument_label>_</decl.var.parameter.argument_label> <decl.var.parameter.name>rawValue</decl.var.parameter.name>: <decl.var.parameter.type><ref.struct usr=\"s:s6UInt32V\">UInt32</ref.struct></decl.var.parameter.type></decl.var.parameter>)</decl.function.constructor>",
         key.entities: [
@@ -7352,7 +7354,7 @@
             key.kind: source.lang.swift.decl.var.local,
             key.keyword: "_",
             key.name: "rawValue",
-            key.offset: 7876,
+            key.offset: 7863,
             key.length: 6
           }
         ]
@@ -7361,7 +7363,7 @@
         key.kind: source.lang.swift.decl.function.constructor,
         key.name: "init(rawValue:)",
         key.usr: "s:So11FooSubEnum1V8rawValueABs6UInt32V_tcfc",
-        key.offset: 7889,
+        key.offset: 7876,
         key.length: 31,
         key.fully_annotated_decl: "<decl.function.constructor><syntaxtype.keyword>init</syntaxtype.keyword>(<decl.var.parameter><decl.var.parameter.argument_label>rawValue</decl.var.parameter.argument_label>: <decl.var.parameter.type><ref.struct usr=\"s:s6UInt32V\">UInt32</ref.struct></decl.var.parameter.type></decl.var.parameter>)</decl.function.constructor>",
         key.entities: [
@@ -7369,7 +7371,7 @@
             key.kind: source.lang.swift.decl.var.local,
             key.keyword: "rawValue",
             key.name: "rawValue",
-            key.offset: 7913,
+            key.offset: 7900,
             key.length: 6
           }
         ]
@@ -7378,7 +7380,7 @@
         key.kind: source.lang.swift.decl.var.instance,
         key.name: "rawValue",
         key.usr: "s:So11FooSubEnum1V8rawValues6UInt32Vvp",
-        key.offset: 7926,
+        key.offset: 7913,
         key.length: 20,
         key.fully_annotated_decl: "<decl.var.instance><syntaxtype.keyword>var</syntaxtype.keyword> <decl.name>rawValue</decl.name>: <decl.var.type><ref.struct usr=\"s:s6UInt32V\">UInt32</ref.struct></decl.var.type></decl.var.instance>"
       },
@@ -7387,7 +7389,7 @@
         key.name: "!=(_:_:)",
         key.usr: "s:SQsE2neoiySbx_xtFZ::SYNTHESIZED::c:@E@FooSubEnum1",
         key.original_usr: "s:SQsE2neoiySbx_xtFZ",
-        key.offset: 7952,
+        key.offset: 7939,
         key.length: 63,
         key.fully_annotated_decl: "<decl.function.operator.infix><syntaxtype.keyword>static</syntaxtype.keyword> <syntaxtype.keyword>func</syntaxtype.keyword> <decl.name>!= </decl.name>(<decl.var.parameter><decl.var.parameter.name>lhs</decl.var.parameter.name>: <decl.var.parameter.type><ref.struct usr=\"c:@E@FooSubEnum1\">FooSubEnum1</ref.struct></decl.var.parameter.type></decl.var.parameter>, <decl.var.parameter><decl.var.parameter.name>rhs</decl.var.parameter.name>: <decl.var.parameter.type><ref.struct usr=\"c:@E@FooSubEnum1\">FooSubEnum1</ref.struct></decl.var.parameter.type></decl.var.parameter>) -&gt; <decl.function.returntype><ref.struct usr=\"s:Sb\">Bool</ref.struct></decl.function.returntype></decl.function.operator.infix>",
         key.entities: [
@@ -7395,14 +7397,14 @@
             key.kind: source.lang.swift.decl.var.local,
             key.keyword: "_",
             key.name: "lhs",
-            key.offset: 7975,
+            key.offset: 7962,
             key.length: 11
           },
           {
             key.kind: source.lang.swift.decl.var.local,
             key.keyword: "_",
             key.name: "rhs",
-            key.offset: 7995,
+            key.offset: 7982,
             key.length: 11
           }
         ]
@@ -7414,7 +7416,7 @@
     key.kind: source.lang.swift.decl.var.global,
     key.name: "FooSubEnum1X",
     key.usr: "c:@E@FooSubEnum1@FooSubEnum1X",
-    key.offset: 8018,
+    key.offset: 8005,
     key.length: 37,
     key.fully_annotated_decl: "<decl.var.global><syntaxtype.keyword>var</syntaxtype.keyword> <decl.name>FooSubEnum1X</decl.name>: <decl.var.type><ref.struct usr=\"c:@E@FooSubEnum1\">FooSubEnum1</ref.struct></decl.var.type> { <syntaxtype.keyword>get</syntaxtype.keyword> }</decl.var.global>",
     key.modulename: "Foo.FooSub"
@@ -7423,7 +7425,7 @@
     key.kind: source.lang.swift.decl.var.global,
     key.name: "FooSubEnum1Y",
     key.usr: "c:@E@FooSubEnum1@FooSubEnum1Y",
-    key.offset: 8056,
+    key.offset: 8043,
     key.length: 37,
     key.fully_annotated_decl: "<decl.var.global><syntaxtype.keyword>var</syntaxtype.keyword> <decl.name>FooSubEnum1Y</decl.name>: <decl.var.type><ref.struct usr=\"c:@E@FooSubEnum1\">FooSubEnum1</ref.struct></decl.var.type> { <syntaxtype.keyword>get</syntaxtype.keyword> }</decl.var.global>",
     key.modulename: "Foo.FooSub"
@@ -7432,7 +7434,7 @@
     key.kind: source.lang.swift.decl.var.global,
     key.name: "FooSubUnnamedEnumeratorA1",
     key.usr: "c:@Ea@FooSubUnnamedEnumeratorA1@FooSubUnnamedEnumeratorA1",
-    key.offset: 8094,
+    key.offset: 8081,
     key.length: 42,
     key.fully_annotated_decl: "<decl.var.global><syntaxtype.keyword>var</syntaxtype.keyword> <decl.name>FooSubUnnamedEnumeratorA1</decl.name>: <decl.var.type><ref.struct usr=\"s:Si\">Int</ref.struct></decl.var.type> { <syntaxtype.keyword>get</syntaxtype.keyword> }</decl.var.global>",
     key.modulename: "Foo.FooSub"
diff --git a/test/SourceKit/DocSupport/doc_swift_module.swift.response b/test/SourceKit/DocSupport/doc_swift_module.swift.response
index 6abdd9a..cc0ffc4 100644
--- a/test/SourceKit/DocSupport/doc_swift_module.swift.response
+++ b/test/SourceKit/DocSupport/doc_swift_module.swift.response
@@ -1874,6 +1874,7 @@
     ],
     key.offset: 427,
     key.length: 187,
+    key.fully_annotated_generic_signature: "&lt;<decl.generic_type_param usr=\"s:SYsSHRzSH8RawValueSYRpzrlE4Selfxmfp\"><decl.generic_type_param.name>Self</decl.generic_type_param.name></decl.generic_type_param> <syntaxtype.keyword>where</syntaxtype.keyword> <decl.generic_type_requirement><ref.generic_type_param usr=\"s:SYsSHRzSH8RawValueSYRpzrlE4Selfxmfp\">Self</ref.generic_type_param> : <ref.protocol usr=\"s:SH\">Hashable</ref.protocol></decl.generic_type_requirement>, <decl.generic_type_requirement><ref.generic_type_param usr=\"s:SYsSHRzSH8RawValueSYRpzrlE4Selfxmfp\">Self</ref.generic_type_param> : <ref.protocol usr=\"s:SY\">RawRepresentable</ref.protocol></decl.generic_type_requirement>, <decl.generic_type_requirement><ref.generic_type_param usr=\"s:SYsSHRzSH8RawValueSYRpzrlE4Selfxmfp\">Self</ref.generic_type_param>.RawValue : <ref.protocol usr=\"s:SH\">Hashable</ref.protocol></decl.generic_type_requirement>&gt;",
     key.extends: {
       key.kind: source.lang.swift.ref.enum,
       key.name: "C1Cases",
@@ -2236,6 +2237,7 @@
     key.kind: source.lang.swift.decl.extension.protocol,
     key.offset: 1258,
     key.length: 53,
+    key.fully_annotated_generic_signature: "&lt;<decl.generic_type_param usr=\"s:4cake2P6P4Selfxmfp\"><decl.generic_type_param.name>Self</decl.generic_type_param.name></decl.generic_type_param> <syntaxtype.keyword>where</syntaxtype.keyword> <decl.generic_type_requirement><ref.generic_type_param usr=\"s:4cake2P6P4Selfxmfp\">Self</ref.generic_type_param> : <ref.protocol usr=\"s:4cake2P6P\">P6</ref.protocol></decl.generic_type_requirement>&gt;",
     key.extends: {
       key.kind: source.lang.swift.ref.protocol,
       key.name: "P6",
@@ -2298,6 +2300,7 @@
     key.kind: source.lang.swift.decl.extension.protocol,
     key.offset: 1417,
     key.length: 79,
+    key.fully_annotated_generic_signature: "&lt;<decl.generic_type_param usr=\"s:4cake4ProtP4Selfxmfp\"><decl.generic_type_param.name>Self</decl.generic_type_param.name></decl.generic_type_param> <syntaxtype.keyword>where</syntaxtype.keyword> <decl.generic_type_requirement><ref.generic_type_param usr=\"s:4cake4ProtP4Selfxmfp\">Self</ref.generic_type_param> : <ref.protocol usr=\"s:4cake4ProtP\">Prot</ref.protocol></decl.generic_type_requirement>&gt;",
     key.extends: {
       key.kind: source.lang.swift.ref.protocol,
       key.name: "Prot",
@@ -2341,6 +2344,7 @@
     ],
     key.offset: 1498,
     key.length: 63,
+    key.fully_annotated_generic_signature: "&lt;<decl.generic_type_param usr=\"s:4cake4ProtPAASi7ElementRtzrlE4Selfxmfp\"><decl.generic_type_param.name>Self</decl.generic_type_param.name></decl.generic_type_param> <syntaxtype.keyword>where</syntaxtype.keyword> <decl.generic_type_requirement><ref.generic_type_param usr=\"s:4cake4ProtPAASi7ElementRtzrlE4Selfxmfp\">Self</ref.generic_type_param> : <ref.protocol usr=\"s:4cake4ProtP\">Prot</ref.protocol></decl.generic_type_requirement>, <decl.generic_type_requirement><ref.generic_type_param usr=\"s:4cake4ProtPAASi7ElementRtzrlE4Selfxmfp\">Self</ref.generic_type_param>.Element == <ref.struct usr=\"s:Si\">Int</ref.struct></decl.generic_type_requirement>&gt;",
     key.extends: {
       key.kind: source.lang.swift.ref.protocol,
       key.name: "Prot",
@@ -2431,6 +2435,7 @@
     key.kind: source.lang.swift.decl.extension.enum,
     key.offset: 1707,
     key.length: 76,
+    key.fully_annotated_generic_signature: "&lt;<decl.generic_type_param usr=\"s:SQ4Selfxmfp\"><decl.generic_type_param.name>Self</decl.generic_type_param.name></decl.generic_type_param> <syntaxtype.keyword>where</syntaxtype.keyword> <decl.generic_type_requirement><ref.generic_type_param usr=\"s:SQ4Selfxmfp\">Self</ref.generic_type_param> : <ref.protocol usr=\"s:SQ\">Equatable</ref.protocol></decl.generic_type_requirement>&gt;",
     key.extends: {
       key.kind: source.lang.swift.ref.enum,
       key.name: "SE",
@@ -2542,6 +2547,7 @@
     key.kind: source.lang.swift.decl.extension.struct,
     key.offset: 1921,
     key.length: 56,
+    key.fully_annotated_generic_signature: "&lt;<decl.generic_type_param usr=\"s:4cake2P6P4Selfxmfp\"><decl.generic_type_param.name>Self</decl.generic_type_param.name></decl.generic_type_param> <syntaxtype.keyword>where</syntaxtype.keyword> <decl.generic_type_requirement><ref.generic_type_param usr=\"s:4cake2P6P4Selfxmfp\">Self</ref.generic_type_param> : <ref.protocol usr=\"s:4cake2P6P\">P6</ref.protocol></decl.generic_type_requirement>&gt;",
     key.extends: {
       key.kind: source.lang.swift.ref.struct,
       key.name: "S3",
diff --git a/test/SourceKit/DocSupport/doc_swift_module1.swift.response b/test/SourceKit/DocSupport/doc_swift_module1.swift.response
index 0b9a8ea..a4f9d04 100644
--- a/test/SourceKit/DocSupport/doc_swift_module1.swift.response
+++ b/test/SourceKit/DocSupport/doc_swift_module1.swift.response
@@ -742,6 +742,7 @@
     key.kind: source.lang.swift.decl.extension.protocol,
     key.offset: 160,
     key.length: 35,
+    key.fully_annotated_generic_signature: "&lt;<decl.generic_type_param usr=\"s:5cake19InitProtoP4Selfxmfp\"><decl.generic_type_param.name>Self</decl.generic_type_param.name></decl.generic_type_param> <syntaxtype.keyword>where</syntaxtype.keyword> <decl.generic_type_requirement><ref.generic_type_param usr=\"s:5cake19InitProtoP4Selfxmfp\">Self</ref.generic_type_param> : <ref.protocol usr=\"s:5cake19InitProtoP\">InitProto</ref.protocol></decl.generic_type_requirement>&gt;",
     key.extends: {
       key.kind: source.lang.swift.ref.protocol,
       key.name: "InitProto",
@@ -920,6 +921,7 @@
     key.kind: source.lang.swift.decl.extension.protocol,
     key.offset: 493,
     key.length: 118,
+    key.fully_annotated_generic_signature: "&lt;<decl.generic_type_param usr=\"s:5cake12P2P4Selfxmfp\"><decl.generic_type_param.name>Self</decl.generic_type_param.name></decl.generic_type_param> <syntaxtype.keyword>where</syntaxtype.keyword> <decl.generic_type_requirement><ref.generic_type_param usr=\"s:5cake12P2P4Selfxmfp\">Self</ref.generic_type_param> : <ref.protocol usr=\"s:5cake12P2P\">P2</ref.protocol></decl.generic_type_requirement>&gt;",
     key.extends: {
       key.kind: source.lang.swift.ref.protocol,
       key.name: "P2",
@@ -998,6 +1000,7 @@
     ],
     key.offset: 613,
     key.length: 58,
+    key.fully_annotated_generic_signature: "&lt;<decl.generic_type_param usr=\"s:5cake12P2PA2A2P3RzrlE4Selfxmfp\"><decl.generic_type_param.name>Self</decl.generic_type_param.name></decl.generic_type_param> <syntaxtype.keyword>where</syntaxtype.keyword> <decl.generic_type_requirement><ref.generic_type_param usr=\"s:5cake12P2PA2A2P3RzrlE4Selfxmfp\">Self</ref.generic_type_param> : <ref.protocol usr=\"s:5cake12P2P\">P2</ref.protocol></decl.generic_type_requirement>, <decl.generic_type_requirement><ref.generic_type_param usr=\"s:5cake12P2PA2A2P3RzrlE4Selfxmfp\">Self</ref.generic_type_param> : <ref.protocol usr=\"s:5cake12P3P\">P3</ref.protocol></decl.generic_type_requirement>&gt;",
     key.extends: {
       key.kind: source.lang.swift.ref.protocol,
       key.name: "P2",
@@ -1050,6 +1053,7 @@
     ],
     key.offset: 713,
     key.length: 45,
+    key.fully_annotated_generic_signature: "&lt;<decl.generic_type_param usr=\"s:SD3Keyxmfp\"><decl.generic_type_param.name>Key</decl.generic_type_param.name></decl.generic_type_param>, <decl.generic_type_param usr=\"s:SD5Valueq_mfp\"><decl.generic_type_param.name>Value</decl.generic_type_param.name></decl.generic_type_param> <syntaxtype.keyword>where</syntaxtype.keyword> <decl.generic_type_requirement>Key : <ref.protocol usr=\"s:SH\">Hashable</ref.protocol></decl.generic_type_requirement>&gt;",
     key.extends: {
       key.kind: source.lang.swift.ref.struct,
       key.name: "Keys",
@@ -1078,6 +1082,7 @@
     ],
     key.offset: 760,
     key.length: 60,
+    key.fully_annotated_generic_signature: "&lt;<decl.generic_type_param usr=\"s:SD4KeysV5cake1AC2P1RzrlE3Keyxmfp\"><decl.generic_type_param.name>Key</decl.generic_type_param.name></decl.generic_type_param>, <decl.generic_type_param usr=\"s:SD4KeysV5cake1AC2P1RzrlE5Valueq_mfp\"><decl.generic_type_param.name>Value</decl.generic_type_param.name></decl.generic_type_param> <syntaxtype.keyword>where</syntaxtype.keyword> <decl.generic_type_requirement>Key : <ref.protocol usr=\"s:SH\">Hashable</ref.protocol></decl.generic_type_requirement>, <decl.generic_type_requirement>Key : <ref.protocol usr=\"s:5cake12P1P\">P1</ref.protocol></decl.generic_type_requirement>&gt;",
     key.extends: {
       key.kind: source.lang.swift.ref.struct,
       key.name: "Keys",
diff --git a/test/api-digester/Outputs/stability-stdlib-abi.swift.expected b/test/api-digester/Outputs/stability-stdlib-abi.swift.expected
index 6ba2fd6..1694783 100644
--- a/test/api-digester/Outputs/stability-stdlib-abi.swift.expected
+++ b/test/api-digester/Outputs/stability-stdlib-abi.swift.expected
@@ -359,8 +359,6 @@
 Struct _DropWhileSequence has removed conformance to IteratorProtocol
 Struct _DropWhileSequence has type witness type for Sequence.Iterator changing from _DropWhileSequence<τ_0_0> to DropWhileSequence<τ_0_0>.Iterator
 Var Collection.lazy has been removed
-Var Dictionary.keys has declared type change from LazyMapCollection<Dictionary<τ_0_0, τ_0_1>, τ_0_0> to LazyMapSequence<Dictionary<τ_0_0, τ_0_1>, τ_0_0>
-Var Dictionary.values has declared type change from LazyMapCollection<Dictionary<τ_0_0, τ_0_1>, τ_0_1> to LazyMapSequence<Dictionary<τ_0_0, τ_0_1>, τ_0_1>
 Var LazySequence._base has removed its setter
 Var _DropWhileSequence._iterator has declared type change from τ_0_0 to τ_0_0.Iterator
 Func Collection._preprocessingPass(_:) has been removed
@@ -545,3 +543,61 @@
 Func _AbstractStringStorage.getOrComputeBreadcrumbs() has been removed
 
 Func Sequence.reduce(into:_:) has parameter 0 changing from Default to Owned
+
+Constructor String.Index.init(_codeUnitOffset:) has been removed (deprecated)
+Constructor String.Index.init(_position:) has been removed (deprecated)
+Constructor String.init(_:) has been removed (deprecated)
+Constructor String.init(_:obsoletedInSwift4:) has been removed
+Constructor _ExpressibleByColorLiteral.init(colorLiteralRed:green:blue:alpha:) has been removed (deprecated)
+Func BinaryInteger.toIntMax() has been removed
+Func Dictionary.filter(_:obsoletedInSwift4:) has been removed
+Func FixedWidthInteger.unsafeAdding(_:) has been removed
+Func FixedWidthInteger.unsafeDivided(by:) has been removed
+Func FixedWidthInteger.unsafeMultiplied(by:) has been removed
+Func FixedWidthInteger.unsafeSubtracting(_:) has been removed
+Func FloatingPoint._fromBitPattern(_:) has been removed
+Func FloatingPoint._toBitPattern() has been removed
+Func FloatingPoint.abs(_:) has been removed (deprecated)
+Func FloatingPoint.add(_:) has been removed
+Func FloatingPoint.adding(_:) has been removed
+Func FloatingPoint.divide(by:) has been removed
+Func FloatingPoint.divided(by:) has been removed
+Func FloatingPoint.multiplied(by:) has been removed
+Func FloatingPoint.multiply(by:) has been removed
+Func FloatingPoint.negated() has been removed
+Func FloatingPoint.subtract(_:) has been removed
+Func FloatingPoint.subtracting(_:) has been removed
+Func Optional....(_:_:) has been removed
+Func Optional...<(_:_:) has been removed
+Func Set.filter(_:obsoletedInSwift4:) has been removed
+Func SignedNumeric.abs(_:) has been removed
+Func Strideable.+(_:_:) has been removed (deprecated)
+Func Strideable.+=(_:_:) has been removed (deprecated)
+Func Strideable.-(_:_:) has been removed (deprecated)
+Func Strideable.-=(_:_:) has been removed (deprecated)
+Func String.UTF16View.distance(from:to:) has been removed
+Func String.UTF16View.index(_:offsetBy:) has been removed
+Func String.UTF16View.index(after:) has been removed
+Func String.UTF8View.distance(from:to:) has been removed
+Func String.UTF8View.index(_:offsetBy:) has been removed
+Func String.UTF8View.index(after:) has been removed
+Func String.UnicodeScalarView.distance(from:to:) has been removed
+Func String.UnicodeScalarView.index(_:offsetBy:) has been removed
+Func String.UnicodeScalarView.index(after:) has been removed
+Func String.UnicodeScalarView.popFirst() has been removed (deprecated)
+Func String.popFirst() has been removed (deprecated)
+Func TextOutputStreamable.writeTo(_:) has been removed
+Func UnsignedInteger.toUIntMax() has been removed
+Protocol _BitwiseOperations has been removed
+Subscript String.UTF16View.subscript(_:) has been removed
+Subscript String.UTF8View.subscript(_:) has been removed
+Subscript String.UnicodeScalarView.subscript(_:) has been removed
+Subscript String.subscript(_:) has been removed
+Var BinaryFloatingPoint.NaN has been removed
+Var BinaryFloatingPoint.isSignaling has been removed
+Var BinaryFloatingPoint.quietNaN has been removed
+Var Dictionary.keys has been removed
+Var Dictionary.values has been removed
+Var FixedWidthInteger.allZeros has been removed (deprecated)
+Var String.Index._offset has been removed (deprecated)
+Var String.Index._utf16Index has been removed (deprecated)
diff --git a/test/decl/init/failable.swift b/test/decl/init/failable.swift
index d93e439..d678ff8 100644
--- a/test/decl/init/failable.swift
+++ b/test/decl/init/failable.swift
@@ -60,7 +60,7 @@
   }
 
   convenience init(forceNonfail: Int) {
-    self.init(nonfail: forceNonfail)! // expected-error{{cannot force unwrap value of non-optional type '()'}} {{37-38=}}
+    self.init(nonfail: forceNonfail)! // expected-error{{cannot force unwrap value of non-optional type 'Sub'}} {{37-38=}}
   }
 
   init(nonfail2: Int) { // okay, traps on nil
diff --git a/test/decl/protocol/conforms/error_self_conformance.swift b/test/decl/protocol/conforms/error_self_conformance.swift
new file mode 100644
index 0000000..7293d02
--- /dev/null
+++ b/test/decl/protocol/conforms/error_self_conformance.swift
@@ -0,0 +1,22 @@
+// RUN: %target-typecheck-verify-swift
+
+func wantsError<T: Error>(_: T) {}
+
+func testSimple(error: Error) {
+  wantsError(error)
+}
+
+protocol ErrorRefinement : Error {}
+func testErrorRefinment(error: ErrorRefinement) {
+  wantsError(error) // expected-error {{protocol type 'ErrorRefinement' cannot conform to 'Error' because only concrete types can conform to protocols}}
+}
+
+protocol OtherProtocol {}
+func testErrorComposition(error: Error & OtherProtocol) {
+  wantsError(error) // expected-error {{protocol type 'Error & OtherProtocol' cannot conform to 'Error' because only concrete types can conform to protocols}}
+}
+
+class C {}
+func testErrorCompositionWithClass(error: Error & C) {
+  wantsError(error) // expected-error {{protocol type 'C & Error' cannot conform to 'Error' because only concrete types can conform to protocols}}
+}
diff --git a/test/stdlib/IntegerRenames4.swift b/test/stdlib/IntegerRenames4.swift
index b6603c4..dbc1b1f 100644
--- a/test/stdlib/IntegerRenames4.swift
+++ b/test/stdlib/IntegerRenames4.swift
@@ -21,14 +21,8 @@
   let _: UIntMax = 0 // expected-error {{'UIntMax' has been renamed to 'UInt64'}}
 }
 
-func integer<T : Integer>(x: T) {} // expected-error {{'Integer' has been renamed to 'BinaryInteger'}}
-func integerArithmetic<T : IntegerArithmetic>(x: T) {} // expected-error {{'IntegerArithmetic' has been renamed to 'BinaryInteger'}}
-func signedNumber<T : SignedNumber>(x: T) {} // expected-error {{Please use 'SignedNumeric & Comparable' instead.}}
-func absoluteValuable<T : AbsoluteValuable>(x: T) {} // expected-error {{Please use 'SignedNumeric & Comparable' instead.}}
-func _signedInteger<T : _SignedInteger>(x: T) {} // expected-error {{'_SignedInteger' has been renamed to 'SignedInteger'}}
-
 func absolutaValuable<T : SignedNumeric & Comparable>(x: T) {
-  _ = T.abs(x) // expected-error {{use the 'abs(_:)' free function}}
+  _ = T.abs(x) // expected-error {{type 'T' has no member 'abs'}}
 }
 
 func signedIntegerMaskingArithmetics<T : SignedInteger>(x: T) {
diff --git a/test/stdlib/StringCompatibilityDiagnostics.swift b/test/stdlib/StringCompatibilityDiagnostics.swift
index 46b0542..5a594f1 100644
--- a/test/stdlib/StringCompatibilityDiagnostics.swift
+++ b/test/stdlib/StringCompatibilityDiagnostics.swift
@@ -2,11 +2,6 @@
 
 func testPopFirst() {
   var str = "abc"
-  _ = str.popFirst() // expected-error{{'popFirst()' is unavailable: Please use 'first', 'dropFirst()', or 'Substring.popFirst()'}}
-  _ = str.characters.popFirst() // expected-error{{'characters' is unavailable: Please use String directly}}
-  // expected-error@-1{{'popFirst()' is unavailable: Please use 'first', 'dropFirst()', or 'Substring.popFirst()'}}
-  _ = str.unicodeScalars.popFirst() // expected-error{{'popFirst()' is unavailable: Please use 'first', 'dropFirst()', or 'Substring.UnicodeScalarView.popFirst()'}}
-
   var charView: String.CharacterView // expected-error{{'CharacterView' is unavailable: Please use String directly}}
   _ = str.characters // expected-error{{'characters' is unavailable: Please use String directly}}
   dump(charView)
diff --git a/test/stdlib/StringCompatibilityDiagnostics4.swift b/test/stdlib/StringCompatibilityDiagnostics4.swift
index 0bcc8f8..fcd3665 100644
--- a/test/stdlib/StringCompatibilityDiagnostics4.swift
+++ b/test/stdlib/StringCompatibilityDiagnostics4.swift
@@ -2,12 +2,6 @@
 
 func testPopFirst() {
   var str = "abc"
-  _ = str.popFirst() // expected-error{{'popFirst()' is unavailable: Please use 'first', 'dropFirst()', or 'Substring.popFirst()'}}
-  _ = str.characters.popFirst() // expected-warning{{'characters' is deprecated: Please use String directly}}
-    // expected-error@-1{{'popFirst()' is unavailable: Please use 'first', 'dropFirst()', or 'Substring.popFirst()'}}
-  _ = str.popFirst() // expected-error{{'popFirst()' is unavailable: Please use 'first', 'dropFirst()', or 'Substring.popFirst()'}}
-  _ = str.unicodeScalars.popFirst() // expected-error{{'popFirst()' is unavailable: Please use 'first', 'dropFirst()', or 'Substring.UnicodeScalarView.popFirst()'}}
-
   var charView: String.CharacterView // expected-warning{{'CharacterView' is deprecated: Please use String directly}}
   charView = str.characters // expected-warning{{'characters' is deprecated: Please use String directly}}
   dump(charView)
@@ -22,7 +16,6 @@
   dump(charSubView)
 
   var _ = String(str.utf8) ?? "" // expected-warning{{left side of nil coalescing operator '??' has non-optional type 'String', so the right side is never used}}
-  var _: String = String(str.utf8)! // expected-error{{'init(_:)' is unavailable: Please use non-failable String.init(_:UTF8View) instead}}
   var _: String = String(str.utf8) // ok
 }
 
diff --git a/tools/SourceKit/include/SourceKit/Core/LLVM.h b/tools/SourceKit/include/SourceKit/Core/LLVM.h
index 437d3bc..a5dc041 100644
--- a/tools/SourceKit/include/SourceKit/Core/LLVM.h
+++ b/tools/SourceKit/include/SourceKit/Core/LLVM.h
@@ -11,7 +11,7 @@
 //===----------------------------------------------------------------------===//
 //
 /// \file
-/// \brief Forward declares and imports various common LLVM datatypes.
+/// Forward declares and imports various common LLVM datatypes.
 ///
 //===----------------------------------------------------------------------===//
 
diff --git a/tools/SourceKit/include/SourceKit/Core/LangSupport.h b/tools/SourceKit/include/SourceKit/Core/LangSupport.h
index 811323c..eb659d1 100644
--- a/tools/SourceKit/include/SourceKit/Core/LangSupport.h
+++ b/tools/SourceKit/include/SourceKit/Core/LangSupport.h
@@ -398,6 +398,7 @@
   llvm::SmallString<64> ProvideImplementationOfUSR;
   llvm::SmallString<64> DocComment;
   llvm::SmallString<64> FullyAnnotatedDecl;
+  llvm::SmallString<64> FullyAnnotatedGenericSig;
   llvm::SmallString<64> LocalizationKey;
   std::vector<DocGenericParam> GenericParams;
   std::vector<std::string> GenericRequirements;
diff --git a/tools/SourceKit/include/SourceKit/Support/Logging.h b/tools/SourceKit/include/SourceKit/Support/Logging.h
index cf2d19f..662577b 100644
--- a/tools/SourceKit/include/SourceKit/Support/Logging.h
+++ b/tools/SourceKit/include/SourceKit/Support/Logging.h
@@ -31,7 +31,7 @@
 
 typedef IntrusiveRefCntPtr<Logger> LogRef;
 
-/// \brief Collects logging output and writes it to stderr when it's destructed.
+/// Collects logging output and writes it to stderr when it's destructed.
 /// Common use case:
 /// \code
 ///   if (LogRef Log = Logger::make(__func__, Logger::Level::Warning)) {
@@ -41,15 +41,15 @@
 class Logger : public llvm::RefCountedBase<Logger> {
 public:
   enum class Level : uint8_t {
-    /// \brief No logging.
+    /// No logging.
     None = 0,
-    /// \brief Warning level.
+    /// Warning level.
     Warning = 1,
-    /// \brief Information level for high priority messages.
+    /// Information level for high priority messages.
     InfoHighPrio = 2,
-    /// \brief Information level for medium priority messages.
+    /// Information level for medium priority messages.
     InfoMediumPrio = 3,
-    /// \brief Information level for low priority messages.
+    /// Information level for low priority messages.
     InfoLowPrio = 4
   };
 
@@ -97,7 +97,7 @@
 
 } // namespace SourceKit
 
-/// \brief Macros to automate common uses of Logger. Like this:
+/// Macros to automate common uses of Logger. Like this:
 /// \code
 ///   LOG_FUNC_SECTION_WARN {
 ///     *Log << "blah";
diff --git a/tools/SourceKit/include/SourceKit/Support/UIdent.h b/tools/SourceKit/include/SourceKit/Support/UIdent.h
index 816bd8b..7a06de4 100644
--- a/tools/SourceKit/include/SourceKit/Support/UIdent.h
+++ b/tools/SourceKit/include/SourceKit/Support/UIdent.h
@@ -23,7 +23,7 @@
 
 namespace SourceKit {
 
-/// \brief A string identifier that is uniqued for the process lifetime.
+/// A string identifier that is uniqued for the process lifetime.
 /// The string identifier should not contain any spaces.
 class UIdent {
   void *Ptr = 0;
diff --git a/tools/SourceKit/lib/SwiftLang/CMakeLists.txt b/tools/SourceKit/lib/SwiftLang/CMakeLists.txt
index 1ce8356..25b0cee 100644
--- a/tools/SourceKit/lib/SwiftLang/CMakeLists.txt
+++ b/tools/SourceKit/lib/SwiftLang/CMakeLists.txt
@@ -9,7 +9,8 @@
   SwiftLangSupport.cpp
   SwiftSourceDocInfo.cpp
   LINK_LIBS
-    SourceKitCore swiftDriver swiftFrontend swiftClangImporter swiftIDE
+    SourceKitCore swiftDriver swiftFrontend
+    swiftDWARFImporter swiftClangImporter swiftIDE
     swiftAST swiftMarkup swiftParse swiftParseSIL swiftSIL swiftSILGen
     swiftSILOptimizer swiftIRGen swiftSema swiftBasic swiftSerialization
     swiftSyntax swiftOption libcmark_static
diff --git a/tools/SourceKit/lib/SwiftLang/SwiftDocSupport.cpp b/tools/SourceKit/lib/SwiftLang/SwiftDocSupport.cpp
index bee4396..f401953 100644
--- a/tools/SourceKit/lib/SwiftLang/SwiftDocSupport.cpp
+++ b/tools/SourceKit/lib/SwiftLang/SwiftDocSupport.cpp
@@ -397,6 +397,14 @@
             VD, SynthesizedTarget, OS);
       else
         SwiftLangSupport::printFullyAnnotatedDeclaration(VD, Type(), OS);
+    } else if (auto *E = dyn_cast<ExtensionDecl>(D)) {
+      if (auto *Sig = E->getGenericSignature()) {
+        // The extension under printing is potentially part of a synthesized
+        // extension. Thus it's hard to print the fully annotated decl. We
+        // need to at least print the generic signature here.
+        llvm::raw_svector_ostream OS(Info.FullyAnnotatedGenericSig);
+        SwiftLangSupport::printFullyAnnotatedGenericReq(Sig, OS);
+      }
     }
   }
 
diff --git a/tools/SourceKit/lib/SwiftLang/SwiftLangSupport.h b/tools/SourceKit/lib/SwiftLang/SwiftLangSupport.h
index 4e148ed..bac2d2c 100644
--- a/tools/SourceKit/lib/SwiftLang/SwiftLangSupport.h
+++ b/tools/SourceKit/lib/SwiftLang/SwiftLangSupport.h
@@ -41,6 +41,7 @@
   class SourceFile;
   class SILOptions;
   class ValueDecl;
+  class GenericSignature;
   enum class AccessorKind;
 
 namespace syntax {
@@ -377,6 +378,9 @@
                                             swift::TypeOrExtensionDecl Target,
                                             llvm::raw_ostream &OS);
 
+  static void
+  printFullyAnnotatedGenericReq(const swift::GenericSignature *Sig,
+                                llvm::raw_ostream &OS);
   /// Tries to resolve the path to the real file-system path. If it fails it
   /// returns the original path;
   static std::string resolvePathSymlinks(StringRef FilePath);
diff --git a/tools/SourceKit/lib/SwiftLang/SwiftSourceDocInfo.cpp b/tools/SourceKit/lib/SwiftLang/SwiftSourceDocInfo.cpp
index 62bdd2e..8d7881c 100644
--- a/tools/SourceKit/lib/SwiftLang/SwiftSourceDocInfo.cpp
+++ b/tools/SourceKit/lib/SwiftLang/SwiftSourceDocInfo.cpp
@@ -20,6 +20,7 @@
 #include "swift/AST/Decl.h"
 #include "swift/AST/NameLookup.h"
 #include "swift/AST/SwiftNameTranslation.h"
+#include "swift/AST/GenericSignature.h"
 #include "swift/Basic/SourceManager.h"
 #include "swift/Frontend/Frontend.h"
 #include "swift/Frontend/PrintingDiagnosticConsumer.h"
@@ -431,6 +432,14 @@
   VD->print(Printer, PO);
 }
 
+void SwiftLangSupport::printFullyAnnotatedGenericReq(
+    const swift::GenericSignature *Sig, llvm::raw_ostream &OS) {
+  assert(Sig);
+  FullyAnnotatedDeclarationPrinter Printer(OS);
+  PrintOptions PO = PrintOptions::printQuickHelpDeclaration();
+  Sig->print(Printer, PO);
+}
+
 void SwiftLangSupport::printFullyAnnotatedSynthesizedDeclaration(
     const swift::ValueDecl *VD, TypeOrExtensionDecl Target,
     llvm::raw_ostream &OS) {
diff --git a/tools/SourceKit/tools/sourcekitd/bin/XPC/Service/XPCService.cpp b/tools/SourceKit/tools/sourcekitd/bin/XPC/Service/XPCService.cpp
index 9f05d24..9c80853 100644
--- a/tools/SourceKit/tools/sourcekitd/bin/XPC/Service/XPCService.cpp
+++ b/tools/SourceKit/tools/sourcekitd/bin/XPC/Service/XPCService.cpp
@@ -57,7 +57,7 @@
 }
 
 namespace {
-/// \brief Associates sourcekitd_uid_t to a UIdent.
+/// Associates sourcekitd_uid_t to a UIdent.
 class SKUIDToUIDMap {
   typedef llvm::DenseMap<void *, UIdent> MapTy;
   MapTy Map;
diff --git a/tools/SourceKit/tools/sourcekitd/include/sourcekitd/Internal.h b/tools/SourceKit/tools/sourcekitd/include/sourcekitd/Internal.h
index c91c4ab..6c2ac41 100644
--- a/tools/SourceKit/tools/sourcekitd/include/sourcekitd/Internal.h
+++ b/tools/SourceKit/tools/sourcekitd/include/sourcekitd/Internal.h
@@ -129,7 +129,7 @@
   Optional<llvm::StringRef> getString(SourceKit::UIdent Key);
   Optional<RequestDict> getDictionary(SourceKit::UIdent Key);
 
-  /// \brief Populate the vector with an array of C strings.
+  /// Populate the vector with an array of C strings.
   /// \param isOptional true if the key is optional. If false and the key is
   /// missing, the function will return true to indicate an error.
   /// \returns true if there is an error, like the key is not of an array type or
diff --git a/tools/SourceKit/tools/sourcekitd/include/sourcekitd/sourcekitd.h b/tools/SourceKit/tools/sourcekitd/include/sourcekitd/sourcekitd.h
index f99d30f..ab404b1 100644
--- a/tools/SourceKit/tools/sourcekitd/include/sourcekitd/sourcekitd.h
+++ b/tools/SourceKit/tools/sourcekitd/include/sourcekitd/sourcekitd.h
@@ -17,7 +17,7 @@
 #include <stdint.h>
 #include <stdbool.h>
 
-/// \brief The version constants for the sourcekitd API.
+/// The version constants for the sourcekitd API.
 /// SOURCEKITD_VERSION_MINOR should increase when there are API additions.
 /// SOURCEKITD_VERSION_MAJOR is intended for "major" source/ABI breaking
 /// changes.
@@ -87,7 +87,7 @@
 
 SOURCEKITD_BEGIN_DECLS
 
-/// \brief Initializes structures needed across the rest of the sourcekitd API.
+/// Initializes structures needed across the rest of the sourcekitd API.
 ///
 /// Must be called before any other sourcekitd call.
 /// Can be called multiple times as long as it is matched with a
@@ -100,7 +100,7 @@
 void
 sourcekitd_initialize(void);
 
-/// \brief Deallocates structures needed across the rest of the sourcekitd API.
+/// Deallocates structures needed across the rest of the sourcekitd API.
 ///
 /// If there are response handlers still waiting for a response, they will
 /// receive a SOURCEKITD_ERROR_REQUEST_CANCELLED response.
@@ -115,7 +115,7 @@
 
 typedef void(^sourcekitd_interrupted_connection_handler_t)(void);
 
-/// \brief Sets the handler which should be called whenever the connection to
+/// Sets the handler which should be called whenever the connection to
 /// SourceKit is interrupted.
 ///
 /// The handler should reestablish any necessary state, such as re-opening any
@@ -133,7 +133,7 @@
 
 #endif
 
-/// \brief A "unique identifier" utilized by the request/response protocol.
+/// A "unique identifier" utilized by the request/response protocol.
 ///
 /// A \c sourcekitd_uid_t object is associated with a string and is uniqued for
 /// the lifetime of the process. Its usefulness is in providing an "infinite
@@ -141,22 +141,22 @@
 /// A \c sourcekitd_uid_t object remains valid even if the service crashes.
 typedef struct sourcekitd_uid_s *sourcekitd_uid_t;
 
-/// \brief Create a \c sourcekitd_uid_t from a C string.
+/// Create a \c sourcekitd_uid_t from a C string.
 SOURCEKITD_PUBLIC SOURCEKITD_NONNULL1 SOURCEKITD_WARN_RESULT
 sourcekitd_uid_t
 sourcekitd_uid_get_from_cstr(const char *string);
 
-/// \brief Create a \c sourcekitd_uid_t from a string buffer.
+/// Create a \c sourcekitd_uid_t from a string buffer.
 SOURCEKITD_PUBLIC SOURCEKITD_NONNULL1 SOURCEKITD_WARN_RESULT
 sourcekitd_uid_t
 sourcekitd_uid_get_from_buf(const char *buf, size_t length);
 
-/// \brief Get the length of the string associated with a \c sourcekitd_uid_t.
+/// Get the length of the string associated with a \c sourcekitd_uid_t.
 SOURCEKITD_PUBLIC SOURCEKITD_NONNULL1 SOURCEKITD_WARN_RESULT
 size_t
 sourcekitd_uid_get_length(sourcekitd_uid_t obj);
 
-/// \brief Get the C string pointer associated with a \c sourcekitd_uid_t.
+/// Get the C string pointer associated with a \c sourcekitd_uid_t.
 SOURCEKITD_PUBLIC SOURCEKITD_NONNULL1 SOURCEKITD_WARN_RESULT
 const char *
 sourcekitd_uid_get_string_ptr(sourcekitd_uid_t obj);
@@ -165,7 +165,7 @@
 ///
 /// @{
 ///
-/// \brief Used for constructing a request object.
+/// Used for constructing a request object.
 typedef void *sourcekitd_object_t;
 
 SOURCEKITD_PUBLIC SOURCEKITD_NONNULL1
@@ -255,7 +255,7 @@
 sourcekitd_object_t
 sourcekitd_request_uid_create(sourcekitd_uid_t uid);
 
-/// \brief Creates a request object by parsing the provided string in YAML
+/// Creates a request object by parsing the provided string in YAML
 /// format.
 ///
 /// \param yaml The string in YAML format.
@@ -269,13 +269,13 @@
 sourcekitd_object_t
 sourcekitd_request_create_from_yaml(const char *yaml, char **error);
 
-/// \brief Prints to stderr a string representation of the request object in
+/// Prints to stderr a string representation of the request object in
 /// YAML format.
 SOURCEKITD_PUBLIC SOURCEKITD_NONNULL1
 void
 sourcekitd_request_description_dump(sourcekitd_object_t obj);
 
-/// \brief Copies a string representation of the request object in YAML format.
+/// Copies a string representation of the request object in YAML format.
 /// \returns A string representation of the request object. This string should
 /// be disposed of with \c free when done.
 SOURCEKITD_PUBLIC SOURCEKITD_NONNULL1
@@ -288,14 +288,14 @@
 ///
 /// @{
 
-/// \brief The result of a request.
+/// The result of a request.
 ///
 /// If the request failed \c sourcekitd_response_t will be an error response and
 /// will contain information about the error, otherwise it will contain the
 /// resulting values of the request.
 typedef void *sourcekitd_response_t;
 
-/// \brief A value of the response object.
+/// A value of the response object.
 ///
 /// Its lifetime is tied to the sourcekitd_response_t object that it came from.
 typedef struct {
@@ -326,12 +326,12 @@
 void
 sourcekitd_response_dispose(sourcekitd_response_t obj);
 
-/// \brief Returns true if the given response is an error.
+/// Returns true if the given response is an error.
 SOURCEKITD_PUBLIC SOURCEKITD_NONNULL_ALL SOURCEKITD_WARN_RESULT
 bool
 sourcekitd_response_is_error(sourcekitd_response_t obj);
 
-/// \brief Returns the error kind given a response error.
+/// Returns the error kind given a response error.
 ///
 /// Passing a response object that is not an error will result in undefined
 /// behavior.
@@ -339,7 +339,7 @@
 sourcekitd_error_t
 sourcekitd_response_error_get_kind(sourcekitd_response_t err);
 
-/// \brief Returns a C string of the error description.
+/// Returns a C string of the error description.
 ///
 /// Passing a response object that is not an error will result in undefined
 /// behavior.
@@ -347,7 +347,7 @@
 const char *
 sourcekitd_response_error_get_description(sourcekitd_response_t err);
 
-/// \brief Returns the value contained in the response.
+/// Returns the value contained in the response.
 ///
 /// If the response is an error it will return a null variant.
 SOURCEKITD_PUBLIC SOURCEKITD_NONNULL1 SOURCEKITD_WARN_RESULT
@@ -396,7 +396,7 @@
                                       sourcekitd_uid_t key);
 
 #if SOURCEKITD_HAS_BLOCKS
-/// \brief A block to be invoked for every key/value pair in the dictionary.
+/// A block to be invoked for every key/value pair in the dictionary.
 ///
 /// \param key The current key in the iteration.
 ///
@@ -406,7 +406,7 @@
 typedef bool (^sourcekitd_variant_dictionary_applier_t)(sourcekitd_uid_t key,
                                                     sourcekitd_variant_t value);
 
-/// \brief Invokes the given block for every key/value pair in the dictionary.
+/// Invokes the given block for every key/value pair in the dictionary.
 ///
 /// \returns true to indicate that iteration of the dictionary completed
 /// successfully. Iteration will only fail if the applier block returns false.
@@ -416,7 +416,7 @@
                                sourcekitd_variant_dictionary_applier_t applier);
 #endif
 
-/// \brief A function to be invoked for every key/value pair in the dictionary.
+/// A function to be invoked for every key/value pair in the dictionary.
 ///
 /// \param key The current key in the iteration.
 ///
@@ -427,7 +427,7 @@
                                                     sourcekitd_variant_t value,
                                                     void *context);
 
-/// \brief Invokes the given function for every key/value pair in the
+/// Invokes the given function for every key/value pair in the
 /// dictionary.
 ///
 /// \returns true to indicate that iteration of the dictionary completed
@@ -463,7 +463,7 @@
 sourcekitd_variant_array_get_uid(sourcekitd_variant_t array, size_t index);
 
 #if SOURCEKITD_HAS_BLOCKS
-/// \brief A block to be invoked for every value in the array.
+/// A block to be invoked for every value in the array.
 ///
 /// \param index The current index in the iteration.
 ///
@@ -473,7 +473,7 @@
 typedef bool (^sourcekitd_variant_array_applier_t)(size_t index,
                                                    sourcekitd_variant_t value);
 
-/// \brief Invokes the given block for every value in the array.
+/// Invokes the given block for every value in the array.
 ///
 /// \returns true to indicate that iteration of the array completed
 /// successfully. Iteration will only fail if the applier block returns false.
@@ -483,7 +483,7 @@
                                sourcekitd_variant_array_applier_t applier);
 #endif
 
-/// \brief A function to be invoked for every value in the array.
+/// A function to be invoked for every value in the array.
 ///
 /// \param index The current index in the iteration.
 ///
@@ -494,7 +494,7 @@
                                                      sourcekitd_variant_t value,
                                                      void *context);
 
-/// \brief Invokes the given function for every value in the array.
+/// Invokes the given function for every value in the array.
 ///
 /// \returns true to indicate that iteration of the array completed
 /// successfully. Iteration will only fail if the applier block returns false.
@@ -532,46 +532,46 @@
 sourcekitd_uid_t
 sourcekitd_variant_uid_get_value(sourcekitd_variant_t obj);
 
-/// \brief Prints to stderr a string representation of the response object in
+/// Prints to stderr a string representation of the response object in
 /// YAML format.
 SOURCEKITD_PUBLIC SOURCEKITD_NONNULL1
 void
 sourcekitd_response_description_dump(sourcekitd_response_t resp);
 
-/// \brief Prints to the given file descriptor a string representation of the
+/// Prints to the given file descriptor a string representation of the
 /// response object.
 SOURCEKITD_PUBLIC SOURCEKITD_NONNULL1
 void
 sourcekitd_response_description_dump_filedesc(sourcekitd_response_t resp,
                                               int fd);
 
-/// \brief Copies a string representation of the response object in YAML format.
+/// Copies a string representation of the response object in YAML format.
 /// \returns A string representation of the response object. This string should
 /// be disposed of with \c free when done.
 SOURCEKITD_PUBLIC SOURCEKITD_NONNULL1
 char *
 sourcekitd_response_description_copy(sourcekitd_response_t resp);
 
-/// \brief Prints to stderr a string representation of the variant object in
+/// Prints to stderr a string representation of the variant object in
 /// YAML format.
 SOURCEKITD_PUBLIC
 void
 sourcekitd_variant_description_dump(sourcekitd_variant_t obj);
 
-/// \brief Prints to the given file descriptor a string representation of the
+/// Prints to the given file descriptor a string representation of the
 /// variant object.
 SOURCEKITD_PUBLIC
 void
 sourcekitd_variant_description_dump_filedesc(sourcekitd_variant_t obj, int fd);
 
-/// \brief Copies a string representation of the variant object in YAML format.
+/// Copies a string representation of the variant object in YAML format.
 /// \returns A string representation of the variant object. This string should
 /// be disposed of with \c free when done.
 SOURCEKITD_PUBLIC
 char *
 sourcekitd_variant_description_copy(sourcekitd_variant_t obj);
 
-/// \brief Copies a string representation of the variant object in JSON format.
+/// Copies a string representation of the variant object in JSON format.
 /// \returns A string representation of the variant object. This string should
 /// be disposed of with \c free when done.
 SOURCEKITD_PUBLIC
@@ -580,7 +580,7 @@
 
 /// @}
 
-/// \brief Invoke a request synchronously.
+/// Invoke a request synchronously.
 ///
 /// The caller accepts ownership of the returned sourcekitd_response_t object
 /// and should invoke \c sourcekitd_response_dispose on it when it is done with
@@ -589,17 +589,17 @@
 sourcekitd_response_t
 sourcekitd_send_request_sync(sourcekitd_object_t req);
 
-/// \brief Used to cancel a request that has been invoked asynchronously.
+/// Used to cancel a request that has been invoked asynchronously.
 typedef void *sourcekitd_request_handle_t;
 
 #if SOURCEKITD_HAS_BLOCKS
-/// \brief Receives the response of an asynchronous request or notification.
+/// Receives the response of an asynchronous request or notification.
 ///
 /// The receiver accepts ownership of the response object and should invoke
 /// \c sourcekitd_response_dispose on it when it is done with it.
 typedef void (^sourcekitd_response_receiver_t)(sourcekitd_response_t resp);
 
-/// \brief Invoke a request asynchronously.
+/// Invoke a request asynchronously.
 ///
 /// \param req the request object.
 ///
@@ -614,7 +614,7 @@
                         sourcekitd_response_receiver_t receiver);
 #endif
 
-/// \brief Cancel a request using the associated request handle returned by
+/// Cancel a request using the associated request handle returned by
 /// \c sourcekitd_send_request.
 ///
 /// It is not guaranteed that invoking \c sourcekitd_cancel_request will cancel
@@ -629,7 +629,7 @@
 
 #if SOURCEKITD_HAS_BLOCKS
 
-/// \brief Sets the handler which should be called to receive notifications.
+/// Sets the handler which should be called to receive notifications.
 /// The block will be set to be executed in the main thread queue.
 ///
 /// If the connection to SourceKit is interrupted the handler will receive an
diff --git a/tools/SourceKit/tools/sourcekitd/lib/API/DictionaryKeys.h b/tools/SourceKit/tools/sourcekitd/lib/API/DictionaryKeys.h
index 4a60d27..04606d8 100644
--- a/tools/SourceKit/tools/sourcekitd/lib/API/DictionaryKeys.h
+++ b/tools/SourceKit/tools/sourcekitd/lib/API/DictionaryKeys.h
@@ -22,7 +22,7 @@
 #define KEY(NAME, CONTENT) extern SourceKit::UIdent Key##NAME;
 #include "SourceKit/Core/ProtocolUIDs.def"
 
-/// \brief Used for determining the printing order of dictionary keys.
+/// Used for determining the printing order of dictionary keys.
 bool compareDictKeys(SourceKit::UIdent LHS, SourceKit::UIdent RHS);
 
 }
diff --git a/tools/SourceKit/tools/sourcekitd/lib/API/Requests.cpp b/tools/SourceKit/tools/sourcekitd/lib/API/Requests.cpp
index ef4332e..40baa90 100644
--- a/tools/SourceKit/tools/sourcekitd/lib/API/Requests.cpp
+++ b/tools/SourceKit/tools/sourcekitd/lib/API/Requests.cpp
@@ -1410,6 +1410,8 @@
     Elem.set(KeyDocFullAsXML, Info.DocComment);
   if (!Info.FullyAnnotatedDecl.empty())
     Elem.set(KeyFullyAnnotatedDecl, Info.FullyAnnotatedDecl);
+  if (!Info.FullyAnnotatedGenericSig.empty())
+    Elem.set(KeyFullyAnnotatedGenericSignature, Info.FullyAnnotatedGenericSig);
   if (!Info.LocalizationKey.empty())
     Elem.set(KeyLocalizationKey, Info.LocalizationKey);
 
diff --git a/tools/SourceKit/tools/sourcekitd/lib/API/sourcekitdAPI-Common.cpp b/tools/SourceKit/tools/sourcekitd/lib/API/sourcekitdAPI-Common.cpp
index d3a234c..7b0cd6e 100644
--- a/tools/SourceKit/tools/sourcekitd/lib/API/sourcekitdAPI-Common.cpp
+++ b/tools/SourceKit/tools/sourcekitd/lib/API/sourcekitdAPI-Common.cpp
@@ -35,7 +35,7 @@
 #define KEY(NAME, CONTENT) UIdent sourcekitd::Key##NAME(CONTENT);
 #include "SourceKit/Core/ProtocolUIDs.def"
 
-/// \brief Order for the keys to use when emitting the debug description of
+/// Order for the keys to use when emitting the debug description of
 /// dictionaries.
 static UIdent *OrderedKeys[] = {
 #define KEY(NAME, CONTENT) &Key##NAME,
diff --git a/tools/driver/api_notes.cpp b/tools/driver/api_notes.cpp
index 8e0c57e..57f85bb 100644
--- a/tools/driver/api_notes.cpp
+++ b/tools/driver/api_notes.cpp
@@ -11,7 +11,7 @@
 //===----------------------------------------------------------------------===//
 ///
 /// \file
-/// \brief This is the YAML to binary converter for API notes.
+/// This is the YAML to binary converter for API notes.
 ///
 //===----------------------------------------------------------------------===//
 #include "clang/APINotes/APINotesYAMLCompiler.h"
diff --git a/tools/lldb-moduleimport-test/CMakeLists.txt b/tools/lldb-moduleimport-test/CMakeLists.txt
index 3256cbc..62811e1 100644
--- a/tools/lldb-moduleimport-test/CMakeLists.txt
+++ b/tools/lldb-moduleimport-test/CMakeLists.txt
@@ -6,5 +6,6 @@
                       PRIVATE
                         swiftASTSectionImporter
                         swiftClangImporter
+                        swiftDWARFImporter
                         swiftFrontend)
 
diff --git a/tools/lldb-moduleimport-test/lldb-moduleimport-test.cpp b/tools/lldb-moduleimport-test/lldb-moduleimport-test.cpp
index db9ac84..5627cf4 100644
--- a/tools/lldb-moduleimport-test/lldb-moduleimport-test.cpp
+++ b/tools/lldb-moduleimport-test/lldb-moduleimport-test.cpp
@@ -212,7 +212,12 @@
       desc("The directory that holds the compiler resource files"),
       cat(Visible));
 
+  opt<bool> EnableDWARFImporter(
+      "enable-dwarf-importer",
+      desc("Import with LangOptions.EnableDWARFImporter = true"), cat(Visible));
+
   ParseCommandLineOptions(argc, argv);
+
   // Unregister our options so they don't interfere with the command line
   // parsing in CodeGen/BackendUtil.cpp.
   ModuleCachePath.removeArgument();
@@ -273,6 +278,7 @@
 
   Invocation.setModuleName("lldbtest");
   Invocation.getClangImporterOptions().ModuleCachePath = ModuleCachePath;
+  Invocation.getLangOptions().EnableDWARFImporter = EnableDWARFImporter;
 
   if (!ResourceDir.empty()) {
     Invocation.setRuntimeResourcePath(ResourceDir);
diff --git a/tools/sil-func-extractor/CMakeLists.txt b/tools/sil-func-extractor/CMakeLists.txt
index 491b70c..5fbffe7 100644
--- a/tools/sil-func-extractor/CMakeLists.txt
+++ b/tools/sil-func-extractor/CMakeLists.txt
@@ -5,6 +5,7 @@
 target_link_libraries(sil-func-extractor
                       PRIVATE
                         swiftClangImporter
+                        swiftDWARFImporter
                         swiftFrontend
                         swiftSerialization
                         swiftSILGen
diff --git a/tools/sil-nm/CMakeLists.txt b/tools/sil-nm/CMakeLists.txt
index 851f4ae..0a7838a 100644
--- a/tools/sil-nm/CMakeLists.txt
+++ b/tools/sil-nm/CMakeLists.txt
@@ -5,6 +5,7 @@
 target_link_libraries(sil-nm
                       PRIVATE
                         swiftClangImporter
+                        swiftDWARFImporter
                         swiftFrontend
                         swiftSerialization
                         swiftSILGen
diff --git a/tools/sil-passpipeline-dumper/CMakeLists.txt b/tools/sil-passpipeline-dumper/CMakeLists.txt
index a968e53..5fa881f 100644
--- a/tools/sil-passpipeline-dumper/CMakeLists.txt
+++ b/tools/sil-passpipeline-dumper/CMakeLists.txt
@@ -5,6 +5,7 @@
 target_link_libraries(sil-passpipeline-dumper
                       PRIVATE
                         swiftClangImporter
+                        swiftDWARFImporter
                         swiftFrontend
                         swiftSerialization
                         swiftSILGen
diff --git a/tools/swift-api-digester/ModuleDiagsConsumer.h b/tools/swift-api-digester/ModuleDiagsConsumer.h
index 83de957..5ef90d1 100644
--- a/tools/swift-api-digester/ModuleDiagsConsumer.h
+++ b/tools/swift-api-digester/ModuleDiagsConsumer.h
@@ -30,7 +30,7 @@
 namespace ide {
 namespace api {
 
-/// \brief Diagnostic consumer that displays diagnostics to standard output.
+/// Diagnostic consumer that displays diagnostics to standard output.
 class ModuleDifferDiagsConsumer: public PrintingDiagnosticConsumer {
   llvm::raw_ostream &OS;
   bool DiagnoseModuleDiff;
diff --git a/unittests/Basic/BlotMapVectorTest.cpp b/unittests/Basic/BlotMapVectorTest.cpp
index ae06980..4e07d78 100644
--- a/unittests/Basic/BlotMapVectorTest.cpp
+++ b/unittests/Basic/BlotMapVectorTest.cpp
@@ -78,7 +78,7 @@
 
 Lazy<CtorTesterSet> ConstructedTesters;
 
-/// \brief A test class that tries to check that construction and destruction
+/// A test class that tries to check that construction and destruction
 /// occur correctly.
 class CtorTester {
   friend class CtorTesterSet;
diff --git a/unittests/Parse/CMakeLists.txt b/unittests/Parse/CMakeLists.txt
index d94b310..d762d4b 100644
--- a/unittests/Parse/CMakeLists.txt
+++ b/unittests/Parse/CMakeLists.txt
@@ -10,6 +10,7 @@
     PRIVATE
     swiftSIL
     swiftClangImporter
+    swiftDWARFImporter
     swiftParse
     swiftAST
     # FIXME: Sema must go last because of circular dependencies with AST.
diff --git a/utils/gyb_sourcekit_support/UIDs.py b/utils/gyb_sourcekit_support/UIDs.py
index 83f12b1..789ef1b 100644
--- a/utils/gyb_sourcekit_support/UIDs.py
+++ b/utils/gyb_sourcekit_support/UIDs.py
@@ -59,6 +59,8 @@
     KEY('SelectorName', 'key.selector_name'),
     KEY('AnnotatedDecl', 'key.annotated_decl'),
     KEY('FullyAnnotatedDecl', 'key.fully_annotated_decl'),
+    KEY('FullyAnnotatedGenericSignature',
+        'key.fully_annotated_generic_signature'),
     KEY('DocBrief', 'key.doc.brief'),
     KEY('Context', 'key.context'),
     KEY('ModuleImportDepth', 'key.moduleimportdepth'),
diff --git a/utils/incrparse/validate_parse.py b/utils/incrparse/validate_parse.py
index f7c38a9..f61999d 100755
--- a/utils/incrparse/validate_parse.py
+++ b/utils/incrparse/validate_parse.py
@@ -3,12 +3,11 @@
 from __future__ import print_function
 
 import argparse
+import difflib
 import os
-import subprocess
 import sys
 
-from test_util import TestFailedError, run_command, \
-    serializeIncrParseMarkupFile
+from test_util import TestFailedError, serializeIncrParseMarkupFile
 
 
 def main():
@@ -102,19 +101,17 @@
         sys.exit(1)
 
     # Check if the two syntax trees are the same
-    try:
-        run_command(
-            [
-                'diff', '-u',
-                incremental_serialized_file,
-                post_edit_serialized_file
-            ])
-    except subprocess.CalledProcessError as e:
+    lines = difflib.unified_diff(open(incremental_serialized_file).readlines(),
+                                 open(post_edit_serialized_file).readlines(),
+                                 fromfile=incremental_serialized_file,
+                                 tofile=incremental_serialized_file)
+    diff = '\n'.join(line for line in lines)
+    if diff:
         print('Test case "%s" of %s FAILed' % (test_case, test_file),
               file=sys.stderr)
         print('Syntax tree of incremental parsing does not match '
               'from-scratch parsing of post-edit file:\n\n', file=sys.stderr)
-        print(e.output, file=sys.stderr)
+        print(diff, file=sys.stderr)
         sys.exit(1)
 
 
diff --git a/validation-test/Sema/wmo_verify_loaded.swift b/validation-test/Sema/wmo_verify_loaded.swift
index 090aa4e..01cc236 100644
--- a/validation-test/Sema/wmo_verify_loaded.swift
+++ b/validation-test/Sema/wmo_verify_loaded.swift
@@ -21,6 +21,6 @@
 // NSPasteboardType.init(rawValue:)
 // - just make sure it has a body.
 // CHECK-LABEL: sil shared [transparent] [serializable] @$sSo16NSPasteboardTypea8rawValueABSS_tcfC : $@convention(method) (@owned String, @thin NSPasteboard.PasteboardType.Type) -> @owned NSPasteboard.PasteboardType {
-// CHECK: bb0(%0 : @owned $String, %1 : @trivial $@thin NSPasteboard.PasteboardType.Type):
+// CHECK: bb0(%0 : @owned $String, %1 : $@thin NSPasteboard.PasteboardType.Type):
 // CHECK: return %{{.*}} : $NSPasteboard.PasteboardType
 // CHECK-LABEL: } // end sil function '$sSo16NSPasteboardTypea8rawValueABSS_tcfC'
diff --git a/validation-test/stdlib/FixedPointDiagnostics.swift.gyb b/validation-test/stdlib/FixedPointDiagnostics.swift.gyb
index 164a162..dfdaf7f 100644
--- a/validation-test/stdlib/FixedPointDiagnostics.swift.gyb
+++ b/validation-test/stdlib/FixedPointDiagnostics.swift.gyb
@@ -87,23 +87,22 @@
     typealias Stride = ${T}.Stride
     _ = ${T}(1) + 0     // OK
     _ = 0 + ${T}(1)     // OK
-    _ = ${T}(1) + Stride(0) // expected-error {{'+' is unavailable: Please use explicit type conversions or Strideable methods for mixed-type arithmetics.}}
-    _ = Stride(1) + ${T}(0) // expected-error {{'+' is unavailable: Please use explicit type conversions or Strideable methods for mixed-type arithmetics.}}
-    _ = ${T}(1) - Stride(0) // expected-error {{'-' is unavailable: Please use explicit type conversions or Strideable methods for mixed-type arithmetics.}}
+    _ = ${T}(1) + Stride(0) // expected-error {{}} expected-note {{}}
+    _ = Stride(1) + ${T}(0) // expected-error {{}} expected-note {{}}
+    _ = ${T}(1) - Stride(0) // expected-error {{}} expected-note {{}}
     var x: ${T} = 0
     x += 1              // OK
-    x += Stride(1) // expected-error {{'+=' is unavailable: Please use explicit type conversions or Strideable methods for mixed-type arithmetics.}}
-    x -= Stride(1) // expected-error {{'-=' is unavailable: Please use explicit type conversions or Strideable methods for mixed-type arithmetics.}}
+    x += Stride(1) // expected-error {{}} expected-note {{}}
+    x -= Stride(1) // expected-error {{}} expected-note {{}}
 
-    // Terrible over-specific error, but at least disabled
-    _ = (x - x) as Stride // expected-error {{'(@lvalue ${T}, @lvalue ${T}) -> ${T}' is not convertible to '(${T}, ${T}) -> ${T}'}}
+    _ = (x - x) as Stride // expected-error {{}}
 
     //===------------------------------------------------------------------===//
     // The following errors are different because they're not being
     // disabled by the ambiguity trick.
     //===------------------------------------------------------------------===//
 
-    (x + x) as Stride   // expected-error {{cannot convert value of type '${T}' to type 'Stride' (aka 'Int') in coercion}}
+    (x + x) as Stride   // expected-error {{}}
     Stride(1) - ${T}(0) // expected-error {{}} expected-note {{}}
 
     // These tests are expected to start failing when we get improved diagnostics.
diff --git a/validation-test/stdlib/StringNormalization.swift b/validation-test/stdlib/StringNormalization.swift
index 3b820bf..1bd3f706 100644
--- a/validation-test/stdlib/StringNormalization.swift
+++ b/validation-test/stdlib/StringNormalization.swift
@@ -9,8 +9,16 @@
 // See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors
 //
 //===----------------------------------------------------------------------===//
-// RUN: mkdir -p %t
-// RUN: %target-build-swift %s -o %t/a.out
+// RUN: %empty-directory(%t)
+// RUN: if [ %target-runtime == "objc" ]; \
+// RUN: then \
+// RUN:   %target-clang -fobjc-arc %S/Inputs/NSSlowString/NSSlowString.m -c -o %t/NSSlowString.o && \
+// RUN:   %target-build-swift -I %S/Inputs/NSSlowString/ %t/NSSlowString.o %s -o %t/a.out; \
+// RUN: else \
+// RUN:   %target-build-swift %s -o %t/a.out; \
+// RUN: fi
+
+// RUN: %target-codesign %t/a.out
 // RUN: %target-run %t/a.out %S/Inputs/NormalizationTest.txt
 // REQUIRES: executable_test
 // REQUIRES: objc_interop
@@ -19,6 +27,10 @@
 import StdlibUnittest
 import StdlibUnicodeUnittest
 
+#if _runtime(_ObjC)
+import NSSlowString
+#endif
+
 private func expectEqualIterators(
   label: String,
   expected: [UInt8],
@@ -453,6 +465,18 @@
     let codeUnits = test.1._nfcCodeUnits
     expectEqual(test.0, codeUnits)
   }
+#if _runtime(_ObjC)
+  tests.test("CodeUnitNormalizationTest#\(i)/Opaque")
+.skip(.custom({
+      if #available(macOS 10.14, iOS 12, watchOS 5, tvOS 12, *) { return false }
+      return true
+    }, reason: "NormalizationTest.txt requires Unicode 11"))
+.code {
+    let opaqueString = NSSlowString(string: test.1) as String
+    let codeUnits = opaqueString._nfcCodeUnits
+    expectEqual(test.0, codeUnits)
+  }
+#endif
 }
 
 runAllTests()