[cfe-commits] r61229 - in /cfe/trunk: lib/Sema/SemaOverload.cpp test/SemaObjCXX/overload.mm

Douglas Gregor dgregor at apple.com
Thu Dec 18 15:43:32 PST 2008


Author: dgregor
Date: Thu Dec 18 17:43:31 2008
New Revision: 61229

URL: http://llvm.org/viewvc/llvm-project?rev=61229&view=rev
Log:
Add some more implicit conversions for Objective-C++

Modified:
    cfe/trunk/lib/Sema/SemaOverload.cpp
    cfe/trunk/test/SemaObjCXX/overload.mm

Modified: cfe/trunk/lib/Sema/SemaOverload.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaOverload.cpp?rev=61229&r1=61228&r2=61229&view=diff

==============================================================================
--- cfe/trunk/lib/Sema/SemaOverload.cpp (original)
+++ cfe/trunk/lib/Sema/SemaOverload.cpp Thu Dec 18 17:43:31 2008
@@ -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

Modified: cfe/trunk/test/SemaObjCXX/overload.mm
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaObjCXX/overload.mm?rev=61229&r1=61228&r2=61229&view=diff

==============================================================================
--- cfe/trunk/test/SemaObjCXX/overload.mm (original)
+++ cfe/trunk/test/SemaObjCXX/overload.mm Thu Dec 18 17:43:31 2008
@@ -1,4 +1,16 @@
 // RUN: clang -fsyntax-only -verify %s
+ at interface Foo
+ at end
+
+ at implementation Foo
+
+void func(id);
+
++ zone {
+ func(self);
+ return self;
+}
+
 @protocol P0
 @end
 





More information about the cfe-commits mailing list