diff options
author | Fariborz Jahanian <fjahanian@apple.com> | 2008-12-09 22:43:22 +0000 |
---|---|---|
committer | Fariborz Jahanian <fjahanian@apple.com> | 2008-12-09 22:43:22 +0000 |
commit | 91b51a92f2e9fc8025b6a9df88442840eb62823a (patch) | |
tree | a8af55f8dbacdd88d68e5ddc687eb3500185b44c | |
parent | 7d71b296c719cc055f9a599fbcb2bb5900e3f2b1 (diff) |
Prevent bogus warning on unimplemented setter/getter when user
has added declaration of these methods in its @interface.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@60803 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | include/clang/AST/DeclObjC.h | 1 | ||||
-rw-r--r-- | lib/AST/DeclObjC.cpp | 8 | ||||
-rw-r--r-- | test/SemaObjC/property-redundant-decl-accessor.m | 18 |
3 files changed, 27 insertions, 0 deletions
diff --git a/include/clang/AST/DeclObjC.h b/include/clang/AST/DeclObjC.h index ba415f90df..81f8f61120 100644 --- a/include/clang/AST/DeclObjC.h +++ b/include/clang/AST/DeclObjC.h @@ -225,6 +225,7 @@ public: bool isVariadic() const { return IsVariadic; } bool isSynthesized() const { return IsSynthesized; } + void setIsSynthesized() { IsSynthesized = true; } // Related to protocols declared in @protocol void setDeclImplementation(ImplementationControl ic) { diff --git a/lib/AST/DeclObjC.cpp b/lib/AST/DeclObjC.cpp index 1b098b5f89..84f0d98bf2 100644 --- a/lib/AST/DeclObjC.cpp +++ b/lib/AST/DeclObjC.cpp @@ -456,6 +456,10 @@ addPropertyMethods(Decl *D, insMethods.push_back(GetterDecl); InsMap[property->getGetterName()] = GetterDecl; } + else + // A user declared getter will be synthesize when @synthesize of + // the property with the same name is seen in the @implementation + GetterDecl->setIsSynthesized(); property->setGetterMethodDecl(GetterDecl); // Skip setter if property is read-only. @@ -487,6 +491,10 @@ addPropertyMethods(Decl *D, 0, 0); SetterDecl->setMethodParams(&Argument, 1); } + else + // A user declared setter will be synthesize when @synthesize of + // the property with the same name is seen in the @implementation + SetterDecl->setIsSynthesized(); property->setSetterMethodDecl(SetterDecl); } diff --git a/test/SemaObjC/property-redundant-decl-accessor.m b/test/SemaObjC/property-redundant-decl-accessor.m new file mode 100644 index 0000000000..8817787ddb --- /dev/null +++ b/test/SemaObjC/property-redundant-decl-accessor.m @@ -0,0 +1,18 @@ +// RUN: clang -fsyntax-only -Werror -verify %s + +@interface MyClass { + const char *_myName; +} + +@property const char *myName; + +- (const char *)myName; +- (void)setMyName:(const char *)name; + +@end + +@implementation MyClass + +@synthesize myName = _myName; + +@end |