зеркало из https://github.com/microsoft/clang-1.git
Fix <rdar://problem/6257675> error: member reference base type ('NSUserDefaults *') is not a structure or union.
Teach Sema::ActOnMemberReferenceExpr() to look through local category implementations associated with the class. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@57995 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Родитель
8b7650ed5a
Коммит
7692ed6109
|
@ -977,6 +977,13 @@ ActOnMemberReferenceExpr(ExprTy *Base, SourceLocation OpLoc,
|
|||
ObjCImplementations[ClassDecl->getIdentifier()])
|
||||
Getter = ImpDecl->getInstanceMethod(Sel);
|
||||
|
||||
// Look through local category implementations associated with the class.
|
||||
if (!Getter) {
|
||||
for (unsigned i = 0; i < ObjCCategoryImpls.size() && !Getter; i++) {
|
||||
if (ObjCCategoryImpls[i]->getClassInterface() == IFace)
|
||||
Getter = ObjCCategoryImpls[i]->getInstanceMethod(Sel);
|
||||
}
|
||||
}
|
||||
if (Getter) {
|
||||
// If we found a getter then this may be a valid dot-reference, we
|
||||
// need to also look for the matching setter.
|
||||
|
|
|
@ -0,0 +1,32 @@
|
|||
// RUN: clang -fsyntax-only -verify %s
|
||||
|
||||
@interface NSSound
|
||||
@end
|
||||
@interface NSFont
|
||||
@end
|
||||
|
||||
@interface NSSound (Adds)
|
||||
@end
|
||||
|
||||
@implementation NSSound (Adds)
|
||||
- foo {
|
||||
return self;
|
||||
}
|
||||
- (void)setFoo:obj {
|
||||
}
|
||||
@end
|
||||
|
||||
@implementation NSFont (Adds)
|
||||
|
||||
- xx {
|
||||
NSSound *x;
|
||||
id o;
|
||||
|
||||
o = [x foo];
|
||||
o = x.foo;
|
||||
[x setFoo:o];
|
||||
x.foo = o;
|
||||
}
|
||||
|
||||
@end
|
||||
|
Загрузка…
Ссылка в новой задаче