aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFariborz Jahanian <fjahanian@apple.com>2008-12-09 22:43:22 +0000
committerFariborz Jahanian <fjahanian@apple.com>2008-12-09 22:43:22 +0000
commit91b51a92f2e9fc8025b6a9df88442840eb62823a (patch)
treea8af55f8dbacdd88d68e5ddc687eb3500185b44c
parent7d71b296c719cc055f9a599fbcb2bb5900e3f2b1 (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.h1
-rw-r--r--lib/AST/DeclObjC.cpp8
-rw-r--r--test/SemaObjC/property-redundant-decl-accessor.m18
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