[ObjC++] Conversions from specialized to non-specialized Objective-C generic
authorAlex Lorenz <arphaman@gmail.com>
Thu, 6 Apr 2017 13:06:34 +0000 (13:06 +0000)
committerAlex Lorenz <arphaman@gmail.com>
Thu, 6 Apr 2017 13:06:34 +0000 (13:06 +0000)
commita9832134597af6f5104806385445cdeb1f9901ed
tree60ceb090e1872161585d251c3aa1599bcdb5cb2a
parent45c936ef86d270ab85dad52dbfaf6dca319f71b0
[ObjC++] Conversions from specialized to non-specialized Objective-C generic
object types should be preferred over conversions to other object pointers

This change ensures that Clang will select the correct overload for the
following code sample:

  void overload(Base *b);
  void overload(Derived *d);
  void test(Base<Base *> b) {
    overload(b); // Select overload(Base *), not overload(Derived *)
  }

rdar://20124827

Differential Revision: https://reviews.llvm.org/D31597

llvm-svn: 299648
clang/lib/Sema/SemaOverload.cpp
clang/test/SemaObjCXX/overload.mm