forked from OSchip/llvm-project
Partial fix for <rdar://problem/6645157> [clang on Xcode; regression]: error: instance variable 'someField' is private.
A recent regression caused by http://llvm.org/viewvc/llvm-project?rev=65912&view=rev. This commit isn't fully baked. Nevertheless, it should cause Xcode to compile again. Will speak with Fariborz offline. llvm-svn: 66045
This commit is contained in:
parent
2b19a65864
commit
d1b64be776
|
@ -1666,6 +1666,12 @@ static IdentifierInfo *constructSetterName(IdentifierTable &Idents,
|
|||
return &Idents.get(&SelectorName[0], &SelectorName[SelectorName.size()]);
|
||||
}
|
||||
|
||||
ObjCImplementationDecl *getCurImplementationDecl(DeclContext *DC) {
|
||||
while (DC && !isa<ObjCImplementationDecl>(DC))
|
||||
DC = DC->getParent();
|
||||
return dyn_cast_or_null<ObjCImplementationDecl>(DC);
|
||||
}
|
||||
|
||||
Action::OwningExprResult
|
||||
Sema::ActOnMemberReferenceExpr(Scope *S, ExprArg Base, SourceLocation OpLoc,
|
||||
tok::TokenKind OpKind, SourceLocation MemberLoc,
|
||||
|
@ -1797,9 +1803,17 @@ Sema::ActOnMemberReferenceExpr(Scope *S, ExprArg Base, SourceLocation OpLoc,
|
|||
ObjCInterfaceDecl *ClassOfMethodDecl = 0;
|
||||
if (ObjCMethodDecl *MD = getCurMethodDecl())
|
||||
ClassOfMethodDecl = MD->getClassInterface();
|
||||
if (IV->getAccessControl() == ObjCIvarDecl::Private) {
|
||||
else if (FunctionDecl *FD = getCurFunctionDecl()) {
|
||||
// FIXME: This isn't working yet. Will discuss with Fariborz.
|
||||
// FIXME: Should be ObjCImplDecl, so categories can work.
|
||||
// Need to fiddle with castToDeclContext/castFromDeclContext.
|
||||
ObjCImplementationDecl *ImpDecl = getCurImplementationDecl(FD);
|
||||
if (ImpDecl)
|
||||
ClassOfMethodDecl = ImpDecl->getClassInterface();
|
||||
}
|
||||
if (IV->getAccessControl() == ObjCIvarDecl::Private) {
|
||||
if (ClassDeclared != IFTy->getDecl() ||
|
||||
ClassOfMethodDecl != ClassDeclared)
|
||||
(ClassOfMethodDecl && (ClassOfMethodDecl != ClassDeclared)))
|
||||
Diag(MemberLoc, diag::error_private_ivar_access) << IV->getDeclName();
|
||||
}
|
||||
// @protected
|
||||
|
|
|
@ -73,8 +73,50 @@ int main (void)
|
|||
{
|
||||
MySuperClass *s = 0;
|
||||
int access;
|
||||
access = s->private; // expected-error {{instance variable 'private' is private}}
|
||||
access = s->private; // FIXME: {{instance variable 'private' is private}}
|
||||
access = s->protected; // expected-error {{instance variable 'protected' is protected}}
|
||||
return 0;
|
||||
}
|
||||
|
||||
typedef signed char BOOL;
|
||||
typedef unsigned int NSUInteger;
|
||||
typedef struct _NSZone NSZone;
|
||||
@class NSInvocation, NSMethodSignature, NSCoder, NSString, NSEnumerator;
|
||||
@protocol NSObject - (BOOL)isEqual:(id)object;
|
||||
@end
|
||||
@protocol NSCoding - (void)encodeWithCoder:(NSCoder *)aCoder;
|
||||
@end
|
||||
@interface NSObject <NSObject> {}
|
||||
@end
|
||||
extern id NSAllocateObject(Class aClass, NSUInteger extraBytes, NSZone *zone);
|
||||
@interface NSResponder : NSObject <NSCoding> {}
|
||||
@end
|
||||
@protocol NSAnimatablePropertyContainer
|
||||
- (id)animator;
|
||||
@end
|
||||
extern NSString *NSAnimationTriggerOrderIn ;
|
||||
@interface NSView : NSResponder <NSAnimatablePropertyContainer> {
|
||||
struct __VFlags2 {
|
||||
}
|
||||
_vFlags2;
|
||||
}
|
||||
@end
|
||||
@class NSFontDescriptor, NSAffineTransform, NSGraphicsContext;
|
||||
@interface NSScrollView : NSView {}
|
||||
@end
|
||||
|
||||
@class CasperMixerView;
|
||||
@interface CasperDiffScrollView : NSScrollView {
|
||||
@private
|
||||
CasperMixerView *_comparatorView;
|
||||
NSView *someField;
|
||||
}
|
||||
@end
|
||||
|
||||
@implementation CasperDiffScrollView
|
||||
+ (void)initialize {}
|
||||
static void _CasperDiffScrollViewInstallMixerView(CasperDiffScrollView *scrollView) {
|
||||
if (scrollView->someField != ((void *)0)) {
|
||||
}
|
||||
}
|
||||
@end
|
||||
|
|
Loading…
Reference in New Issue