diff options
author | Anders Carlsson <andersca@mac.com> | 2014-02-28 19:07:22 +0000 |
---|---|---|
committer | Anders Carlsson <andersca@mac.com> | 2014-02-28 19:07:22 +0000 |
commit | b7947f06d2e1303cb72a83aed6dc85e4691ce849 (patch) | |
tree | 305f267e78b1a38a8f4136cf7c0c410af7632a05 /test/CodeCompletion | |
parent | 044b71a30fa873952931341159c3773f23937868 (diff) |
When completing Objective-C instance method invocations, perform a contextual conversion to an Objective-C pointer type of the target expression if needed. This fixes code completion of method invocations where the target is a smart pointer that has an explicit conversion operator to an Objective-C type.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@202529 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/CodeCompletion')
-rw-r--r-- | test/CodeCompletion/objc-message.mm | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/test/CodeCompletion/objc-message.mm b/test/CodeCompletion/objc-message.mm new file mode 100644 index 0000000000..352a18e0da --- /dev/null +++ b/test/CodeCompletion/objc-message.mm @@ -0,0 +1,46 @@ +// Note: the run lines follow their respective tests, since line/column +// matter in this test. + +@protocol FooTestProtocol ++ protocolClassMethod; +- protocolInstanceMethod; +@end +@interface Foo <FooTestProtocol> { + void *isa; +} ++ (int)classMethod1:a withKeyword:b; ++ (void)classMethod2; ++ new; +- instanceMethod1; +@end + +@interface Foo (FooTestCategory) ++ categoryClassMethod; +- categoryInstanceMethod; +@end + +template<typename T> struct RetainPtr { + template <typename U> struct RemovePointer { typedef U Type; }; + template <typename U> struct RemovePointer<U*> { typedef U Type; }; + + typedef typename RemovePointer<T>::Type* PtrType; + + explicit operator PtrType() const; +}; + +void func(const RetainPtr<Foo>& ptr) +{ + [ptr instanceMethod1]; +} + +void func(const RetainPtr<id <FooTestProtocol>>& ptr) +{ + [ptr instanceMethod1]; +} + +// RUN: %clang_cc1 -fsyntax-only -std=c++11 -code-completion-at=%s:33:7 %s -o - | FileCheck -check-prefix=CHECK-CC1 %s +// CHECK-CC1: categoryInstanceMethod : [#id#]categoryInstanceMethod +// CHECK-CC1: instanceMethod1 : [#id#]instanceMethod1 +// CHECK-CC1: protocolInstanceMethod : [#id#]protocolInstanceMethod +// RUN: %clang_cc1 -fsyntax-only -std=c++11 -code-completion-at=%s:38:7 %s -o - | FileCheck -check-prefix=CHECK-CC2 %s +// CHECK-CC2: protocolInstanceMethod : [#id#]protocolInstanceMethod |