]> granicus.if.org Git - clang/commitdiff
For the purposes of overload resolution, consider a conversion from an
authorDouglas Gregor <dgregor@apple.com>
Fri, 15 Apr 2011 20:45:44 +0000 (20:45 +0000)
committerDouglas Gregor <dgregor@apple.com>
Fri, 15 Apr 2011 20:45:44 +0000 (20:45 +0000)
Objective-C pointer to void* as a "conversion to void*". This allows
us to prefer an Objective-C object pointer conversion to a superclass
object pointer over an Objective-C object pointer conversion to
cv-void*. Fixes PR9735.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@129603 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Sema/SemaOverload.cpp
test/SemaObjCXX/overload.mm

index 57338f255ce4064deba63b370f7d2fb6c07884fd..9caf6736017a600549f076f5471d07162cc40f87 100644 (file)
@@ -240,7 +240,7 @@ isPointerConversionToVoidPointer(ASTContext& Context) const {
   if (First == ICK_Array_To_Pointer)
     FromType = Context.getArrayDecayedType(FromType);
 
-  if (Second == ICK_Pointer_Conversion && FromType->isPointerType())
+  if (Second == ICK_Pointer_Conversion && FromType->isAnyPointerType())
     if (const PointerType* ToPtrType = ToType->getAs<PointerType>())
       return ToPtrType->getPointeeType()->isVoidType();
 
index a40248e6cd2a81b9c5ae0ad494b0d14f7430e6d0..09cd3ec45cd1225fdca88bbc2ec04b7634f0c277 100644 (file)
@@ -149,3 +149,13 @@ namespace rdar8734046 {
     f2(a);
   }
 }
+
+namespace PR9735 {
+  int &f3(const A*);
+  float &f3(const void*);
+
+  void test_f(B* b, const B* bc) {
+    int &ir1 = f3(b);
+    int &ir2 = f3(bc);
+  }
+}