summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--clang/include/clang/Sema/Scope.h12
-rw-r--r--clang/lib/Sema/SemaDeclObjC.cpp2
-rw-r--r--clang/test/SemaObjC/unsued-backing-ivar-warning.m17
3 files changed, 30 insertions, 1 deletions
diff --git a/clang/include/clang/Sema/Scope.h b/clang/include/clang/Sema/Scope.h
index 249a4c74311..238e0d28184 100644
--- a/clang/include/clang/Sema/Scope.h
+++ b/clang/include/clang/Sema/Scope.h
@@ -273,6 +273,18 @@ public:
return false;
}
+ /// isInObjcMethodOuterScope - Return true if this scope is an
+ /// Objective-C method outer most body.
+ bool isInObjcMethodOuterScope() const {
+ if (const Scope *S = this) {
+ // If this scope is an objc method scope, then we succeed.
+ if (S->getFlags() & ObjCMethodScope)
+ return true;
+ }
+ return false;
+ }
+
+
/// isTemplateParamScope - Return true if this scope is a C++
/// template parameter scope.
bool isTemplateParamScope() const {
diff --git a/clang/lib/Sema/SemaDeclObjC.cpp b/clang/lib/Sema/SemaDeclObjC.cpp
index babfafe656d..a2d5fc00ac3 100644
--- a/clang/lib/Sema/SemaDeclObjC.cpp
+++ b/clang/lib/Sema/SemaDeclObjC.cpp
@@ -3498,7 +3498,7 @@ Sema::GetIvarBackingPropertyAccessor(const ObjCMethodDecl *Method,
}
void Sema::DiagnoseUnusedBackingIvarInAccessor(Scope *S) {
- if (S->hasUnrecoverableErrorOccurred() || !S->isInObjcMethodScope())
+ if (S->hasUnrecoverableErrorOccurred() || !S->isInObjcMethodOuterScope())
return;
const ObjCMethodDecl *CurMethod = getCurMethodDecl();
diff --git a/clang/test/SemaObjC/unsued-backing-ivar-warning.m b/clang/test/SemaObjC/unsued-backing-ivar-warning.m
index c07dea71a7e..df3ede75afa 100644
--- a/clang/test/SemaObjC/unsued-backing-ivar-warning.m
+++ b/clang/test/SemaObjC/unsued-backing-ivar-warning.m
@@ -74,3 +74,20 @@ typedef char BOOL;
return 0;
}
@end
+
+// rdar://15630719
+@interface CDBModifyRecordsOperation : NSObject
+@property (nonatomic, assign) BOOL atomic;
+@end
+
+@class NSString;
+
+@implementation CDBModifyRecordsOperation
+- (void)setAtomic:(BOOL)atomic {
+ if (atomic == __objc_yes) {
+ NSString *recordZoneID = 0;
+ }
+ _atomic = atomic;
+}
+@end
+
OpenPOWER on IntegriCloud