diff options
-rw-r--r-- | lib/Sema/SemaExprObjC.cpp | 4 | ||||
-rw-r--r-- | test/SemaObjC/property-dot-receiver.m | 21 |
2 files changed, 25 insertions, 0 deletions
diff --git a/lib/Sema/SemaExprObjC.cpp b/lib/Sema/SemaExprObjC.cpp index eeaa45163d..11fa9eb0b4 100644 --- a/lib/Sema/SemaExprObjC.cpp +++ b/lib/Sema/SemaExprObjC.cpp @@ -675,6 +675,10 @@ Sema::ObjCMessageKind Sema::getObjCMessageKind(Scope *S, return ObjCInstanceMessage; case LookupResult::Found: { + // If the identifier is a class or not, and there is a trailing dot, + // it's an instance message. + if (HasTrailingDot) + return ObjCInstanceMessage; // We found something. If it's a type, then we have a class // message. Otherwise, it's an instance message. NamedDecl *ND = Result.getFoundDecl(); diff --git a/test/SemaObjC/property-dot-receiver.m b/test/SemaObjC/property-dot-receiver.m new file mode 100644 index 0000000000..3498dcc029 --- /dev/null +++ b/test/SemaObjC/property-dot-receiver.m @@ -0,0 +1,21 @@ +// RUN: %clang_cc1 -fsyntax-only -verify %s +// rdar://8962253 + +@interface Singleton { +} ++ (Singleton*) instance; +@end + +@implementation Singleton + +- (void) someSelector { } + ++ (Singleton*) instance { return 0; } + ++ (void) compileError +{ + [Singleton.instance someSelector]; // clang issues error here +} + +@end + |