Awesome. Thanks for the clarification! On Feb 2, 2012, at 2:29 PM, jahanian wrote:
> > On Feb 2, 2012, at 2:20 PM, Ted Kremenek wrote: > >> Thanks Fariborz. After reading your comment, is this patch enough? This is >> safe *only* when the original property is declared readonly. If the >> original property is declared readwrite, then this isn't safe. In other >> words, readonly overridden by readwrite is ok, readwrite overridden by >> readwrite (with a different type) is NOT ok. Does this patch guard for this >> case? > > Yes, or conversion would not have been safe. > > Only 'readonly' to 'readwrite' is allowed for a property in continuation > class. Anything else results in an error. Note that this was the only > original intention of redeclaring a property in continuation class. > > Test case. > > @interface NSArray @end > @interface NSMutableArray : NSArray @end > > @interface GKTurnBasedMatchMakerKVO > @property(nonatomic,readwrite,retain) NSArray* outline; > @end > > @interface GKTurnBasedMatchMakerKVO () > @property(nonatomic,readwrite,retain) NSMutableArray* outline; > @end > > % $CLANG -c test.m > test.m:9:1: error: illegal redeclaration of 'readwrite' property in > continuation class 'GKTurnBasedMatchMakerKVO' (perhaps you intended this to > be a 'readwrite' redeclaration of a 'readonly' public > property?) > @property(nonatomic,readwrite,retain) NSMutableArray* outline; > ^ > test.m:5:48: note: property declared here > @property(nonatomic,readwrite,retain) NSArray* outline; > ^ > 1 error generated. > > > - fariborz > > >> >> On Feb 2, 2012, at 11:34 AM, Fariborz Jahanian wrote: >> >>> Author: fjahanian >>> Date: Thu Feb 2 13:34:05 2012 >>> New Revision: 149625 >>> >>> URL: http://llvm.org/viewvc/llvm-project?rev=149625&view=rev >>> Log: >>> objc: comment the code which allows narroing of property object >>> type in continuation class. >>> >>> Modified: >>> cfe/trunk/lib/Sema/SemaObjCProperty.cpp >>> >>> Modified: cfe/trunk/lib/Sema/SemaObjCProperty.cpp >>> URL: >>> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaObjCProperty.cpp?rev=149625&r1=149624&r2=149625&view=diff >>> ============================================================================== >>> --- cfe/trunk/lib/Sema/SemaObjCProperty.cpp (original) >>> +++ cfe/trunk/lib/Sema/SemaObjCProperty.cpp Thu Feb 2 13:34:05 2012 >>> @@ -279,6 +279,9 @@ >>> if (!Context.hasSameType(PIDecl->getType(), PDecl->getType())) { >>> bool IncompatibleObjC = false; >>> QualType ConvertedType; >>> + // Relax the strict type matching for property type in continuation >>> class. >>> + // Allow property object type of continuation class to be different as >>> long >>> + // as it narrows the object type in its primary class property. >>> if (!isa<ObjCObjectPointerType>(PIDecl->getType()) || >>> !isa<ObjCObjectPointerType>(PDecl->getType()) || >>> (!isObjCPointerConversion(PDecl->getType(), PIDecl->getType(), >>> >>> >>> _______________________________________________ >>> cfe-commits mailing list >>> [email protected] >>> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits >> > _______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
