diff --git a/clang/lib/Sema/SemaExprObjC.cpp b/clang/lib/Sema/SemaExprObjC.cpp index eeaa45163d54..11fa9eb0b429 100644 --- a/clang/lib/Sema/SemaExprObjC.cpp +++ b/clang/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/clang/test/SemaObjC/property-dot-receiver.m b/clang/test/SemaObjC/property-dot-receiver.m new file mode 100644 index 000000000000..3498dcc02984 --- /dev/null +++ b/clang/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 +