diff options
author | Steve Naroff <snaroff@apple.com> | 2009-03-11 15:15:01 +0000 |
---|---|---|
committer | Steve Naroff <snaroff@apple.com> | 2009-03-11 15:15:01 +0000 |
commit | aa82be2b5b8215a6df5f058556791df2a3f55570 (patch) | |
tree | c807f2ce6bf74f62b6ee8e3f65ed079782455ce3 /clang | |
parent | 1d984fe2bda503366e6c9eaa29a5af0af4124c0d (diff) | |
download | bcm5719-llvm-aa82be2b5b8215a6df5f058556791df2a3f55570.tar.gz bcm5719-llvm-aa82be2b5b8215a6df5f058556791df2a3f55570.zip |
Fix <rdar://problem/6655054> clang issues bogus error on property usage in a dot-syntax.
llvm-svn: 66659
Diffstat (limited to 'clang')
-rw-r--r-- | clang/lib/Sema/SemaExpr.cpp | 16 | ||||
-rw-r--r-- | clang/test/SemaObjC/property-9-impl-method.m | 30 |
2 files changed, 36 insertions, 10 deletions
diff --git a/clang/lib/Sema/SemaExpr.cpp b/clang/lib/Sema/SemaExpr.cpp index 9534f7354f3..9a86d65f9a0 100644 --- a/clang/lib/Sema/SemaExpr.cpp +++ b/clang/lib/Sema/SemaExpr.cpp @@ -1866,11 +1866,9 @@ Sema::ActOnMemberReferenceExpr(Scope *S, ExprArg Base, SourceLocation OpLoc, // If this reference is in an @implementation, check for 'private' methods. if (!Getter) - if (ObjCMethodDecl *CurMeth = getCurMethodDecl()) - if (ObjCInterfaceDecl *ClassDecl = CurMeth->getClassInterface()) - if (ObjCImplementationDecl *ImpDecl = - ObjCImplementations[ClassDecl->getIdentifier()]) - Getter = ImpDecl->getInstanceMethod(Sel); + if (ObjCImplementationDecl *ImpDecl = + ObjCImplementations[IFace->getIdentifier()]) + Getter = ImpDecl->getInstanceMethod(Sel); // Look through local category implementations associated with the class. if (!Getter) { @@ -1893,11 +1891,9 @@ Sema::ActOnMemberReferenceExpr(Scope *S, ExprArg Base, SourceLocation OpLoc, if (!Setter) { // If this reference is in an @implementation, also check for 'private' // methods. - if (ObjCMethodDecl *CurMeth = getCurMethodDecl()) - if (ObjCInterfaceDecl *ClassDecl = CurMeth->getClassInterface()) - if (ObjCImplementationDecl *ImpDecl = - ObjCImplementations[ClassDecl->getIdentifier()]) - Setter = ImpDecl->getInstanceMethod(SetterSel); + if (ObjCImplementationDecl *ImpDecl = + ObjCImplementations[IFace->getIdentifier()]) + Setter = ImpDecl->getInstanceMethod(SetterSel); } // Look through local category implementations associated with the class. if (!Setter) { diff --git a/clang/test/SemaObjC/property-9-impl-method.m b/clang/test/SemaObjC/property-9-impl-method.m index e9e81bd55f5..e684c5ecae3 100644 --- a/clang/test/SemaObjC/property-9-impl-method.m +++ b/clang/test/SemaObjC/property-9-impl-method.m @@ -62,3 +62,33 @@ NSSize minimumSize; } @end +@class NSImage; + +@interface XCImageArchiveEntry : NSObject +{ + NSImage *_cachedImage; +} + +@end + +@implementation XCImageArchiveEntry + +- (NSImage *)image +{ + return _cachedImage; +} + +@end + +@interface XCImageArchive : NSObject +@end + +@implementation XCImageArchive + +- (NSImage *)imageNamed:(NSString *)name +{ + XCImageArchiveEntry * entry; + return entry ? entry.image : ((void *)0); +} + +@end |