From: Steve Naroff Date: Wed, 22 Oct 2008 19:16:27 +0000 (+0000) Subject: Fix error: member reference base type ('NSUserDefaults ... X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=7692ed61098c216ca7d3ce9be744311e8eee90e4;p=clang Fix 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 --- diff --git a/lib/Sema/SemaExpr.cpp b/lib/Sema/SemaExpr.cpp index 9292017d67..5619eca4f0 100644 --- a/lib/Sema/SemaExpr.cpp +++ b/lib/Sema/SemaExpr.cpp @@ -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. diff --git a/test/SemaObjC/property-11.m b/test/SemaObjC/property-11.m new file mode 100644 index 0000000000..8038328002 --- /dev/null +++ b/test/SemaObjC/property-11.m @@ -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 +