diff options
author | Fariborz Jahanian <fjahanian@apple.com> | 2008-04-21 23:57:08 +0000 |
---|---|---|
committer | Fariborz Jahanian <fjahanian@apple.com> | 2008-04-21 23:57:08 +0000 |
commit | a591a12ea56c46c61da554e284561e6bfe7270fb (patch) | |
tree | 2d65046e58b10b4efcec25bff174feef74b7467a | |
parent | efa92f1dfcbc8c369bb710f7041b5c1b261810f4 (diff) | |
download | bcm5719-llvm-a591a12ea56c46c61da554e284561e6bfe7270fb.tar.gz bcm5719-llvm-a591a12ea56c46c61da554e284561e6bfe7270fb.zip |
Allow property in base class to be implemented in a
derived class.
llvm-svn: 50074
-rw-r--r-- | clang/lib/AST/DeclObjC.cpp | 4 | ||||
-rw-r--r-- | clang/test/Sema/objc-property-2.m | 63 |
2 files changed, 67 insertions, 0 deletions
diff --git a/clang/lib/AST/DeclObjC.cpp b/clang/lib/AST/DeclObjC.cpp index 04e9993101e..d3592e1416a 100644 --- a/clang/lib/AST/DeclObjC.cpp +++ b/clang/lib/AST/DeclObjC.cpp @@ -148,6 +148,8 @@ ObjCPropertyDecl * if (property->getIdentifier() == PropertyId) return property; } + if (getSuperClass()) + return getSuperClass()->FindPropertyDeclaration(PropertyId); return 0; } @@ -175,6 +177,8 @@ ObjCIvarDecl * if (Ivar->getIdentifier() == IvarId) return Ivar; } + if (getSuperClass()) + return getSuperClass()->FindIvarDeclaration(IvarId); return 0; } diff --git a/clang/test/Sema/objc-property-2.m b/clang/test/Sema/objc-property-2.m new file mode 100644 index 00000000000..4472a8f6955 --- /dev/null +++ b/clang/test/Sema/objc-property-2.m @@ -0,0 +1,63 @@ +// RUN: clang -fsyntax-only -verify %s + +@interface Tester +@property char PropertyAtomic_char; +@property short PropertyAtomic_short; +@property int PropertyAtomic_int; +@property long PropertyAtomic_long; +@property long long PropertyAtomic_longlong; +@property float PropertyAtomic_float; +@property double PropertyAtomic_double; +@property(assign) id PropertyAtomic_id; +@property(retain) id PropertyAtomicRetained_id; +@property(copy) id PropertyAtomicRetainedCopied_id; +@property(retain) id PropertyAtomicRetainedGCOnly_id; +@property(copy) id PropertyAtomicRetainedCopiedGCOnly_id; +@end + +@implementation Tester +@dynamic PropertyAtomic_char; +@dynamic PropertyAtomic_short; +@dynamic PropertyAtomic_int; +@dynamic PropertyAtomic_long; +@dynamic PropertyAtomic_longlong; +@dynamic PropertyAtomic_float; +@dynamic PropertyAtomic_double; +@dynamic PropertyAtomic_id; +@dynamic PropertyAtomicRetained_id; +@dynamic PropertyAtomicRetainedCopied_id; +@dynamic PropertyAtomicRetainedGCOnly_id; +@dynamic PropertyAtomicRetainedCopiedGCOnly_id; +@end + +@interface SubClass : Tester +{ + char PropertyAtomic_char; + short PropertyAtomic_short; + int PropertyAtomic_int; + long PropertyAtomic_long; + long long PropertyAtomic_longlong; + float PropertyAtomic_float; + double PropertyAtomic_double; + id PropertyAtomic_id; + id PropertyAtomicRetained_id; + id PropertyAtomicRetainedCopied_id; + id PropertyAtomicRetainedGCOnly_id; + id PropertyAtomicRetainedCopiedGCOnly_id; +} +@end + +@implementation SubClass +@synthesize PropertyAtomic_char; +@synthesize PropertyAtomic_short; +@synthesize PropertyAtomic_int; +@synthesize PropertyAtomic_long; +@synthesize PropertyAtomic_longlong; +@synthesize PropertyAtomic_float; +@synthesize PropertyAtomic_double; +@synthesize PropertyAtomic_id; +@synthesize PropertyAtomicRetained_id; +@synthesize PropertyAtomicRetainedCopied_id; +@synthesize PropertyAtomicRetainedGCOnly_id; +@synthesize PropertyAtomicRetainedCopiedGCOnly_id; +@end |