r200254 - ObjectiveC. Fixes a bug in recognition of an ivar
Fariborz Jahanian
fjahanian at apple.com
Mon Jan 27 14:27:43 PST 2014
Author: fjahanian
Date: Mon Jan 27 16:27:43 2014
New Revision: 200254
URL: http://llvm.org/viewvc/llvm-project?rev=200254&view=rev
Log:
ObjectiveC. Fixes a bug in recognition of an ivar
backing a property resulting in bogus warning.
// rdar://15890251
Modified:
cfe/trunk/lib/Sema/SemaDeclObjC.cpp
cfe/trunk/test/SemaObjC/unused-backing-ivar-warning.m
Modified: cfe/trunk/lib/Sema/SemaDeclObjC.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaDeclObjC.cpp?rev=200254&r1=200253&r2=200254&view=diff
==============================================================================
--- cfe/trunk/lib/Sema/SemaDeclObjC.cpp (original)
+++ cfe/trunk/lib/Sema/SemaDeclObjC.cpp Mon Jan 27 16:27:43 2014
@@ -3449,8 +3449,14 @@ Sema::GetIvarBackingPropertyAccessor(con
if (!Method || !Method->isPropertyAccessor())
return 0;
if ((PDecl = Method->findPropertyDecl()))
- return PDecl->getPropertyIvarDecl();
-
+ if (ObjCIvarDecl *IV = PDecl->getPropertyIvarDecl()) {
+ // property backing ivar must belong to property's class
+ // or be a private ivar in class's implementation.
+ // FIXME. fix the const-ness issue.
+ IV = const_cast<ObjCInterfaceDecl *>(IDecl)->lookupInstanceVariable(
+ IV->getIdentifier());
+ return IV;
+ }
return 0;
}
@@ -3509,13 +3515,6 @@ void Sema::DiagnoseUnusedBackingIvarInAc
const ObjCIvarDecl *IV = GetIvarBackingPropertyAccessor(CurMethod, PDecl);
if (!IV)
continue;
- // Property declared as @dynamic must be ignored.
- if (ObjCPropertyImplDecl *PropertyImpDecl =
- Context.getObjCPropertyImplDeclForPropertyDecl(PDecl, ImplD))
- if (PropertyImpDecl->getPropertyImplementation() ==
- ObjCPropertyImplDecl::Dynamic)
- continue;
-
UnusedBackingIvarChecker Checker(*this, CurMethod, IV);
Checker.TraverseStmt(CurMethod->getBody());
Modified: cfe/trunk/test/SemaObjC/unused-backing-ivar-warning.m
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaObjC/unused-backing-ivar-warning.m?rev=200254&r1=200253&r2=200254&view=diff
==============================================================================
--- cfe/trunk/test/SemaObjC/unused-backing-ivar-warning.m (original)
+++ cfe/trunk/test/SemaObjC/unused-backing-ivar-warning.m Mon Jan 27 16:27:43 2014
@@ -170,3 +170,28 @@ typedef char BOOL;
return 0;
}
@end
+
+// rdar://15890251
+ at class NSURL;
+
+ at protocol MCCIDURLProtocolDataProvider
+ at required
+ at property(strong, atomic, readonly) NSURL *cidURL;
+ at end
+
+ at interface UnrelatedClass : NSObject <MCCIDURLProtocolDataProvider>
+ at end
+
+ at implementation UnrelatedClass
+ at synthesize cidURL = _cidURL;
+ at end
+
+ at interface MUIWebAttachmentController : NSObject <MCCIDURLProtocolDataProvider>
+ at end
+
+
+ at implementation MUIWebAttachmentController
+- (NSURL *)cidURL {
+ return 0;
+}
+ at end
More information about the cfe-commits
mailing list