[cfe-commits] r149625 - /cfe/trunk/lib/Sema/SemaObjCProperty.cpp

jahanian fjahanian at apple.com
Thu Feb 2 14:29:02 PST 2012


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
>> cfe-commits at cs.uiuc.edu
>> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
> 




More information about the cfe-commits mailing list