summaryrefslogtreecommitdiff
path: root/test/SemaObjCXX/arc-templates.mm
diff options
context:
space:
mode:
authorDouglas Gregor <dgregor@apple.com>2013-11-08 02:04:24 +0000
committerDouglas Gregor <dgregor@apple.com>2013-11-08 02:04:24 +0000
commit3940e3b9c7cc89284117112e07ad1c925dcd0ab4 (patch)
tree1a839cc4fe9e59e230bbf276bdee7322fad09c96 /test/SemaObjCXX/arc-templates.mm
parent80aecf578fa0b24e1f4280820a1b6f1bf34862e0 (diff)
downloadclang-3940e3b9c7cc89284117112e07ad1c925dcd0ab4.tar.gz
clang-3940e3b9c7cc89284117112e07ad1c925dcd0ab4.tar.bz2
clang-3940e3b9c7cc89284117112e07ad1c925dcd0ab4.tar.xz
Objective-C++ ARC: Improve the conversion to a const __unsafe_unretained reference.
Under ARC++, a reference to a const Objective-C pointer is implicitly treated as __unsafe_unretained, and can be initialized with (e.g.) a __strong lvalue. Make sure this behavior does not break template argument deduction and (related) that partial ordering still prefers a 'T* const&' template over a 'T const&' template when this case kicks in. Fixes <rdar://problem/14467941>. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@194239 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/SemaObjCXX/arc-templates.mm')
-rw-r--r--test/SemaObjCXX/arc-templates.mm10
1 files changed, 10 insertions, 0 deletions
diff --git a/test/SemaObjCXX/arc-templates.mm b/test/SemaObjCXX/arc-templates.mm
index ef68b94e72..b3519b9573 100644
--- a/test/SemaObjCXX/arc-templates.mm
+++ b/test/SemaObjCXX/arc-templates.mm
@@ -292,3 +292,13 @@ namespace rdar12367446 {
A<id()> value;
}
}
+
+namespace rdar14467941 {
+ template<typename T> int &takePtr(const T &);
+ template<typename T> float &takePtr(T * const &);
+
+ void testTakePtr(A *a) {
+ float &fr1 = takePtr(a);
+ float &fr2 = takePtr<A>(a);
+ }
+}