Add some more implicit conversions for Objective-C++

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@61229 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/Sema/SemaOverload.cpp b/lib/Sema/SemaOverload.cpp
index 5e3ec3f..3671711 100644
--- a/lib/Sema/SemaOverload.cpp
+++ b/lib/Sema/SemaOverload.cpp
@@ -846,6 +846,16 @@
     return true;
   } 
 
+  // Objective C++: Allow conversions between the Objective-C "id" and
+  // "Class", in either direction.
+  if ((Context.isObjCIdType(FromPointeeType) && 
+       Context.isObjCClassType(ToPointeeType)) ||
+      (Context.isObjCClassType(FromPointeeType) &&
+       Context.isObjCIdType(ToPointeeType))) {
+    ConvertedType = ToType;
+    return true;
+  }
+
   return false;
 }
 
@@ -864,6 +874,16 @@
                       /*DetectVirtual=*/false);
       QualType FromPointeeType = FromPtrType->getPointeeType(),
                ToPointeeType   = ToPtrType->getPointeeType();
+
+      // Objective-C++ conversions are always okay.
+      // FIXME: We should have a different class of conversions for
+      // the Objective-C++ implicit conversions.
+      if (Context.isObjCIdType(FromPointeeType) || 
+          Context.isObjCIdType(ToPointeeType) ||
+          Context.isObjCClassType(FromPointeeType) ||
+          Context.isObjCClassType(ToPointeeType))
+        return false;
+
       if (FromPointeeType->isRecordType() &&
           ToPointeeType->isRecordType()) {
         // We must have a derived-to-base conversion. Check an