diff --git a/include/clang/APINotes/Types.h b/include/clang/APINotes/Types.h
index 3cf1493..79f34cc 100644
--- a/include/clang/APINotes/Types.h
+++ b/include/clang/APINotes/Types.h
@@ -58,7 +58,7 @@
 
 /// Describes API notes data for any entity.
 ///
-/// This is used as the base of
+/// This is used as the base of all API notes.
 class CommonEntityInfo {
 public:
   /// Message to use when this entity is unavailable.
@@ -70,13 +70,17 @@
   /// Whether this entity is marked unavailable in Swift.
   unsigned UnavailableInSwift : 1;
 
+  /// Swift name of this entity.
+  std::string SwiftName;
+
   CommonEntityInfo() : Unavailable(0), UnavailableInSwift(0) { }
 
   friend bool operator==(const CommonEntityInfo &lhs,
                          const CommonEntityInfo &rhs) {
     return lhs.UnavailableMsg == rhs.UnavailableMsg &&
            lhs.Unavailable == rhs.Unavailable &&
-           lhs.UnavailableInSwift == rhs.UnavailableInSwift;
+           lhs.UnavailableInSwift == rhs.UnavailableInSwift &&
+           lhs.SwiftName == rhs.SwiftName;
   }
 
   friend bool operator!=(const CommonEntityInfo &lhs,
@@ -103,6 +107,10 @@
       }
     }
 
+    if (rhs.SwiftName.length() != 0 &&
+        lhs.SwiftName.length() == 0)
+      lhs.SwiftName = rhs.SwiftName;
+
     return lhs;
   }
 
diff --git a/lib/APINotes/APINotesFormat.h b/lib/APINotes/APINotesFormat.h
index 0801d2c..7924104 100644
--- a/lib/APINotes/APINotesFormat.h
+++ b/lib/APINotes/APINotesFormat.h
@@ -35,7 +35,7 @@
 /// API notes file minor version number.
 ///
 /// When the format changes IN ANY WAY, this number should be incremented.
-const uint16_t VERSION_MINOR = 7;
+const uint16_t VERSION_MINOR = 8;
 
 using IdentifierID = Fixnum<31>;
 using IdentifierIDField = BCVBR<16>;
diff --git a/lib/APINotes/APINotesReader.cpp b/lib/APINotes/APINotesReader.cpp
index c768f3a..2583128 100644
--- a/lib/APINotes/APINotesReader.cpp
+++ b/lib/APINotes/APINotesReader.cpp
@@ -39,6 +39,13 @@
       = std::string(reinterpret_cast<const char *>(data),
                     reinterpret_cast<const char *>(data) + msgLength);
     data += msgLength;
+
+    unsigned swiftNameLength
+      = endian::readNext<uint16_t, little, unaligned>(data);
+    info.SwiftName
+      = std::string(reinterpret_cast<const char *>(data),
+                    reinterpret_cast<const char *>(data) + swiftNameLength);
+    data += swiftNameLength;
   }
 
   /// Used to deserialize the on-disk identifier table.
diff --git a/lib/APINotes/APINotesWriter.cpp b/lib/APINotes/APINotesWriter.cpp
index 0e498a7..a9d83d9 100644
--- a/lib/APINotes/APINotesWriter.cpp
+++ b/lib/APINotes/APINotesWriter.cpp
@@ -265,7 +265,7 @@
   /// Retrieve the serialized size of the given CommonEntityInfo, for use in
   /// on-disk hash tables.
   static unsigned getCommonEntityInfoSize(const CommonEntityInfo &info) {
-    return 3 + info.UnavailableMsg.size();
+    return 5 + info.UnavailableMsg.size() + info.SwiftName.size();
   }
 
   /// Emit a serialized representation of the common entity information.
@@ -275,6 +275,8 @@
     writer.write<uint8_t>(info.Unavailable << 1 | info.UnavailableInSwift);
     writer.write<uint16_t>(info.UnavailableMsg.size());
     out.write(info.UnavailableMsg.c_str(), info.UnavailableMsg.size());
+    writer.write<uint16_t>(info.SwiftName.size());
+    out.write(info.SwiftName.c_str(), info.SwiftName.size());
   }
 
   /// Used to serialize the on-disk Objective-C context table.
diff --git a/lib/APINotes/APINotesYAMLCompiler.cpp b/lib/APINotes/APINotesYAMLCompiler.cpp
index 8c27a01..8896c40 100644
--- a/lib/APINotes/APINotesYAMLCompiler.cpp
+++ b/lib/APINotes/APINotesYAMLCompiler.cpp
@@ -168,6 +168,7 @@
     NullabilitySeq Nullability;
     llvm::Optional<NullabilityKind> NullabilityOfRet;
     AvailabilityItem Availability;
+    StringRef SwiftName;
     api_notes::FactoryAsInitKind FactoryAsInit
       = api_notes::FactoryAsInitKind::Infer;
     bool DesignatedInit = false;
@@ -179,6 +180,7 @@
     StringRef Name;
     llvm::Optional<NullabilityKind> Nullability;
     AvailabilityItem Availability;
+    StringRef SwiftName;
   };
   typedef std::vector<Property> PropertiesSeq;
 
@@ -186,6 +188,7 @@
     StringRef Name;
     bool AuditedForNullability = false;
     AvailabilityItem Availability;
+    StringRef SwiftName;
     MethodsSeq Methods;
     PropertiesSeq Properties;
   };
@@ -196,6 +199,7 @@
     NullabilitySeq Nullability;
     llvm::Optional<NullabilityKind> NullabilityOfRet;
     AvailabilityItem Availability;
+    StringRef SwiftName;
   };
   typedef std::vector<Function> FunctionsSeq;
 
@@ -203,6 +207,7 @@
     StringRef Name;
     llvm::Optional<NullabilityKind> Nullability;
     AvailabilityItem Availability;
+    StringRef SwiftName;
   };
   typedef std::vector<GlobalVariable> GlobalVariablesSeq;
 
@@ -278,6 +283,7 @@
                                           AbsentNullability);
         io.mapOptional("Availability",    p.Availability.Mode);
         io.mapOptional("AvailabilityMsg", p.Availability.Msg);
+        io.mapOptional("SwiftName",       p.SwiftName);
       }
     };
 
@@ -291,6 +297,7 @@
                                             AbsentNullability);
         io.mapOptional("Availability",    m.Availability.Mode);
         io.mapOptional("AvailabilityMsg", m.Availability.Msg);
+        io.mapOptional("SwiftName",       m.SwiftName);
         io.mapOptional("FactoryAsInit",   m.FactoryAsInit,
                                           api_notes::FactoryAsInitKind::Infer);
         io.mapOptional("DesignatedInit",  m.DesignatedInit, false);
@@ -305,6 +312,7 @@
         io.mapOptional("AuditedForNullability", c.AuditedForNullability, false);
         io.mapOptional("Availability",          c.Availability.Mode);
         io.mapOptional("AvailabilityMsg",       c.Availability.Msg);
+        io.mapOptional("SwiftName",             c.SwiftName);
         io.mapOptional("Methods",               c.Methods);
         io.mapOptional("Properties",            c.Properties);
       }
@@ -319,6 +327,7 @@
                                            AbsentNullability);
         io.mapOptional("Availability",     f.Availability.Mode);
         io.mapOptional("AvailabilityMsg",  f.Availability.Msg);
+        io.mapOptional("SwiftName",        f.SwiftName);
       }
     };
 
@@ -330,6 +339,7 @@
                                           AbsentNullability);
         io.mapOptional("Availability",    v.Availability.Mode);
         io.mapOptional("AvailabilityMsg", v.Availability.Msg);
+        io.mapOptional("SwiftName",       v.SwiftName);
       }
     };
 
@@ -463,6 +473,7 @@
         return;
 
       convertAvailability(meth.Availability, mInfo, meth.Selector);
+      mInfo.SwiftName = meth.SwiftName;
 
       // Check if the selector ends with ':' to determine if it takes arguments.
       bool takesArguments = meth.Selector.endswith(":");
@@ -505,6 +516,7 @@
         return;
 
       convertAvailability(cl.Availability, cInfo, cl.Name);
+      cInfo.SwiftName = cl.SwiftName;
 
       if (cl.AuditedForNullability)
         cInfo.setDefaultNullability(*DefaultNullability);
@@ -545,6 +557,7 @@
         if (!isAvailable(prop.Availability))
           continue;
         convertAvailability(prop.Availability, pInfo, prop.Name);
+        pInfo.SwiftName = prop.SwiftName;
         if (prop.Nullability)
           pInfo.setNullabilityAudited(*prop.Nullability);
         Writer->addObjCProperty(clID, prop.Name, pInfo);
@@ -598,6 +611,7 @@
         if (!isAvailable(global.Availability))
           continue;
         convertAvailability(global.Availability, info, global.Name);
+        info.SwiftName = global.SwiftName;
         if (global.Nullability)
           info.setNullabilityAudited(*global.Nullability);
         Writer->addGlobalVariable(global.Name, info);
@@ -617,6 +631,7 @@
         if (!isAvailable(function.Availability))
           continue;
         convertAvailability(function.Availability, info, function.Name);
+        info.SwiftName = function.SwiftName;
         convertNullability(function.Nullability,
                            function.NullabilityOfRet,
                            info, function.Name);
@@ -707,6 +722,8 @@
 
       // Handle class information.
       handleAvailability(record.Availability, info);
+      record.SwiftName = copyString(info.SwiftName);
+
       if (info.getDefaultNullability()) {
         record.AuditedForNullability = true;
       }
@@ -771,6 +788,7 @@
       handleNullability(method.Nullability, method.NullabilityOfRet, info,
                         selector.count(':'));
       handleAvailability(method.Availability, info);
+      method.SwiftName = copyString(info.SwiftName);
       method.FactoryAsInit = info.getFactoryAsInitKind();
       method.DesignatedInit = info.DesignatedInit;
       method.Required = info.Required;
@@ -787,6 +805,7 @@
       Property property;
       property.Name = name;
       handleAvailability(property.Availability, info);
+      property.SwiftName = copyString(info.SwiftName);
 
       // FIXME: No way to represent "not audited for nullability".
       if (auto nullability = info.getNullability()) {
@@ -805,6 +824,7 @@
       Function function;
       function.Name = name;
       handleAvailability(function.Availability, info);
+      function.SwiftName = copyString(info.SwiftName);
       if (info.NumAdjustedNullable > 0)
         handleNullability(function.Nullability, function.NullabilityOfRet,
                           info, info.NumAdjustedNullable-1);
@@ -817,6 +837,7 @@
       GlobalVariable global;
       global.Name = name;
       handleAvailability(global.Availability, info);
+      global.SwiftName = copyString(info.SwiftName);
 
       // FIXME: No way to represent "not audited for nullability".
       if (auto nullability = info.getNullability()) {
diff --git a/lib/Sema/SemaAPINotes.cpp b/lib/Sema/SemaAPINotes.cpp
index 6f08fd4..4faabd0 100644
--- a/lib/Sema/SemaAPINotes.cpp
+++ b/lib/Sema/SemaAPINotes.cpp
@@ -93,21 +93,38 @@
   }
 }
 
+/// Copy a string into ASTContext-allocated memory.
+static StringRef CopyString(ASTContext &ctx, StringRef string) {
+  void *mem = ctx.Allocate(string.size(), alignof(char));
+  memcpy(mem, string.data(), string.size());
+  return StringRef(static_cast<char *>(mem), string.size());
+}
+
 static void ProcessAPINotes(Sema &S, Decl *D,
                             const api_notes::CommonEntityInfo &Info) {
   // Availability
   if (Info.Unavailable && !D->hasAttr<UnavailableAttr>()) {
-    D->addAttr(UnavailableAttr::CreateImplicit(S.Context, Info.UnavailableMsg));
+    D->addAttr(UnavailableAttr::CreateImplicit(S.Context,
+					       CopyString(S.Context,
+							  Info.UnavailableMsg)));
   }
 
   if (Info.UnavailableInSwift) {
-    D->addAttr(AvailabilityAttr::CreateImplicit(S.Context, 
-                                                &S.Context.Idents.get("swift"),
-                                                VersionTuple(),
-                                                VersionTuple(),
-                                                VersionTuple(),
-                                                /*Unavailable=*/true,
-                                                Info.UnavailableMsg));
+    D->addAttr(AvailabilityAttr::CreateImplicit(
+		 S.Context,
+                 &S.Context.Idents.get("swift"),
+                 VersionTuple(),
+                 VersionTuple(),
+                 VersionTuple(),
+                 /*Unavailable=*/true,
+                 CopyString(S.Context, Info.UnavailableMsg)));
+  }
+
+  // swift_name
+  if (!Info.SwiftName.empty() && !D->hasAttr<SwiftNameAttr>()) {
+    D->addAttr(SwiftNameAttr::CreateImplicit(S.Context,
+					     CopyString(S.Context,
+							Info.SwiftName)));
   }
 }
 
diff --git a/test/APINotes/Inputs/roundtrip.apinotes b/test/APINotes/Inputs/roundtrip.apinotes
index b172240..a1b60e5 100644
--- a/test/APINotes/Inputs/roundtrip.apinotes
+++ b/test/APINotes/Inputs/roundtrip.apinotes
@@ -6,12 +6,14 @@
   - Name:            NSCell
     Availability:    available
     AvailabilityMsg: ''
+    SwiftName:       ''
     Methods:         
       - Selector:        init
         MethodKind:      Instance
         NullabilityOfRet: U
         Availability:    available
         AvailabilityMsg: ''
+        SwiftName:       ''
         DesignatedInit:  true
       - Selector:        'initImageCell:'
         MethodKind:      Instance
@@ -19,6 +21,7 @@
         NullabilityOfRet: U
         Availability:    available
         AvailabilityMsg: ''
+        SwiftName:       ''
         DesignatedInit:  true
       - Selector:        'initTextCell:'
         MethodKind:      Instance
@@ -26,6 +29,7 @@
         NullabilityOfRet: U
         Availability:    available
         AvailabilityMsg: ''
+        SwiftName:       ''
         DesignatedInit:  true
       - Selector:        'initWithCoder:'
         MethodKind:      Instance
@@ -33,12 +37,14 @@
         NullabilityOfRet: U
         Availability:    available
         AvailabilityMsg: ''
+        SwiftName:       ''
         DesignatedInit:  true
         Required:        true
   - Name:            NSView
     AuditedForNullability: true
     Availability:    available
     AvailabilityMsg: ''
+    SwiftName:       ''
     Methods:         
       - Selector:        'addSubview:'
         MethodKind:      Instance
@@ -46,34 +52,41 @@
         NullabilityOfRet: N
         Availability:    available
         AvailabilityMsg: ''
+        SwiftName:       ''
       - Selector:        'addSubview:positioned:relativeTo:'
         MethodKind:      Instance
         Nullability:     [ N, N, O ]
         NullabilityOfRet: N
         Availability:    available
         AvailabilityMsg: ''
+        SwiftName:       ''
       - Selector:        'beginDraggingSessionWithItems:event:source:'
         MethodKind:      Instance
         Nullability:     [ U, U, N ]
         NullabilityOfRet: N
         Availability:    available
         AvailabilityMsg: ''
+        SwiftName:       'beginDragginSession(_:event:source:)'
     Properties:      
       - Name:            enclosingScrollView
         Nullability:     O
         Availability:    available
         AvailabilityMsg: ''
+        SwiftName:       enclosing
       - Name:            makeBackingLayer
         Nullability:     N
         Availability:    available
         AvailabilityMsg: ''
+        SwiftName:       ''
 Functions:       
   - Name:            NSAvailableWindowDepths
     NullabilityOfRet: N
     Availability:    available
     AvailabilityMsg: ''
+    SwiftName:       'availableWindowDepths()'
 Globals:         
   - Name:            NSCalibratedWhiteColorSpace
     Nullability:     N
     Availability:    available
     AvailabilityMsg: ''
+    SwiftName:       calibratedWhite
