Do not issue bogus error on __weak/__strong ivar access.

llvm-svn: 65583
This commit is contained in:
Fariborz Jahanian 2009-02-26 23:05:51 +00:00
parent d42c29f9a2
commit 7285cf57a3
2 changed files with 76 additions and 3 deletions

View File

@ -476,20 +476,20 @@ const ObjCInterfaceType *Type::getAsObjCInterfaceType() const {
// There is no sugar for ObjCInterfaceType's, just return the canonical
// type pointer if it is the right class. There is no typedef information to
// return and these cannot be Address-space qualified.
return dyn_cast<ObjCInterfaceType>(CanonicalType);
return dyn_cast<ObjCInterfaceType>(CanonicalType.getUnqualifiedType());
}
const ObjCQualifiedInterfaceType *
Type::getAsObjCQualifiedInterfaceType() const {
// There is no sugar for ObjCQualifiedInterfaceType's, just return the
// canonical type pointer if it is the right class.
return dyn_cast<ObjCQualifiedInterfaceType>(CanonicalType);
return dyn_cast<ObjCQualifiedInterfaceType>(CanonicalType.getUnqualifiedType());
}
const ObjCQualifiedIdType *Type::getAsObjCQualifiedIdType() const {
// There is no sugar for ObjCQualifiedIdType's, just return the canonical
// type pointer if it is the right class.
return dyn_cast<ObjCQualifiedIdType>(CanonicalType);
return dyn_cast<ObjCQualifiedIdType>(CanonicalType.getUnqualifiedType());
}
const TemplateTypeParmType *Type::getAsTemplateTypeParmType() const {

View File

@ -0,0 +1,73 @@
// RUN: clang -fsyntax-only -verify %s
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 NSCopying - (id)copyWithZone:(NSZone *)zone;
@end
@protocol NSMutableCopying - (id)mutableCopyWithZone:(NSZone *)zone;
@end
@protocol NSCoding - (void)encodeWithCoder:(NSCoder *)aCoder;
@end
@interface NSObject <NSObject> {}
@end
extern id NSAllocateObject(Class aClass, NSUInteger extraBytes, NSZone *zone);
typedef struct {
id *itemsPtr;
unsigned long *mutationsPtr;
} NSFastEnumerationState;
@protocol NSFastEnumeration
- (NSUInteger)countByEnumeratingWithState:(NSFastEnumerationState *)state objects:(id *)stackbuf count:(NSUInteger)len;
@end
@class NSString;
@interface NSArray : NSObject <NSCopying, NSMutableCopying, NSCoding, NSFastEnumeration> - (NSUInteger)count;
@end
@interface NSMutableArray : NSArray - (void)addObject:(id)anObject;
@end
extern NSString * const NSUndoManagerCheckpointNotification;
@interface NSValueTransformer : NSObject {} @end
@class FooModel;
@interface FooObject : NSObject <NSCopying> {}
@end
@interface FooNode : FooObject {}
- (NSArray *) children;
@end
typedef enum { Foo_HUH_NONE } FooHUHCode;
@interface FooPlaypenEntry : FooNode {
NSMutableArray *_interestingChildren;
FooHUHCode _HUH;
__attribute__((objc_gc(weak))) FooPlaypenEntry *_mostInterestingChild;
id _author;
}
@property(copy) NSString *author;
- (BOOL) isInteresting;
@end NSString *FooHUHCodeToString(FooHUHCode HUH) {
}
@interface FooHUHCodeToStringTransformer: NSValueTransformer {
}
@end @implementation FooPlaypenEntry @synthesize author = _author;
- (BOOL) isInteresting { return 1; }
- (NSArray *) interestingChildren {
if (!_interestingChildren) {
for (FooPlaypenEntry *child in [self children]) {
if ([child isInteresting]) {
if (!_mostInterestingChild)
_mostInterestingChild = child;
else if (child->_HUH > _mostInterestingChild->_HUH)
_mostInterestingChild = child;
}
}
}
}
- (FooHUHCode) HUH {
if (_HUH == Foo_HUH_NONE) {
if (_mostInterestingChild)
return [_mostInterestingChild HUH];
}
}
@end