r255066 - Objective-C properties: fix bogus use of "isa<>" on a QualType.
Douglas Gregor via cfe-commits
cfe-commits at lists.llvm.org
Tue Dec 8 14:45:17 PST 2015
Author: dgregor
Date: Tue Dec 8 16:45:17 2015
New Revision: 255066
URL: http://llvm.org/viewvc/llvm-project?rev=255066&view=rev
Log:
Objective-C properties: fix bogus use of "isa<>" on a QualType.
The code used "isa" to check the type and then "getAs" to look through
sugar; we need to look through the sugar when checking, too, otherwise
any kind of sugar (nullability qualifiers in the example; or a
typedef) will thwart this semantic check. Fixes rdar://problem/23804250.
Modified:
cfe/trunk/lib/Sema/SemaObjCProperty.cpp
cfe/trunk/test/SemaObjCXX/property-type-mismatch.mm
Modified: cfe/trunk/lib/Sema/SemaObjCProperty.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaObjCProperty.cpp?rev=255066&r1=255065&r2=255066&view=diff
==============================================================================
--- cfe/trunk/lib/Sema/SemaObjCProperty.cpp (original)
+++ cfe/trunk/lib/Sema/SemaObjCProperty.cpp Tue Dec 8 16:45:17 2015
@@ -1372,12 +1372,11 @@ bool Sema::DiagnosePropertyAccessorMisma
QualType PropertyIvarType = property->getType().getNonReferenceType();
bool compat = Context.hasSameType(PropertyIvarType, GetterType);
if (!compat) {
- if (isa<ObjCObjectPointerType>(PropertyIvarType) &&
- isa<ObjCObjectPointerType>(GetterType))
- compat =
- Context.canAssignObjCInterfaces(
- GetterType->getAs<ObjCObjectPointerType>(),
- PropertyIvarType->getAs<ObjCObjectPointerType>());
+ const ObjCObjectPointerType *propertyObjCPtr = nullptr;
+ const ObjCObjectPointerType *getterObjCPtr = nullptr;
+ if ((propertyObjCPtr = PropertyIvarType->getAs<ObjCObjectPointerType>()) &&
+ (getterObjCPtr = GetterType->getAs<ObjCObjectPointerType>()))
+ compat = Context.canAssignObjCInterfaces(getterObjCPtr, propertyObjCPtr);
else if (CheckAssignmentConstraints(Loc, GetterType, PropertyIvarType)
!= Compatible) {
Diag(Loc, diag::error_property_accessor_type)
Modified: cfe/trunk/test/SemaObjCXX/property-type-mismatch.mm
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaObjCXX/property-type-mismatch.mm?rev=255066&r1=255065&r2=255066&view=diff
==============================================================================
--- cfe/trunk/test/SemaObjCXX/property-type-mismatch.mm (original)
+++ cfe/trunk/test/SemaObjCXX/property-type-mismatch.mm Tue Dec 8 16:45:17 2015
@@ -18,3 +18,13 @@
@property (assign) NSObject<P2> *prop;
@end
+ at interface C<T> : NSObject
+ at end
+
+ at interface D
+ at property (nonatomic,readonly,nonnull) C<D *> *property;
+ at end
+
+ at interface D ()
+ at property (nonatomic, setter=_setProperty:) C *property; // okay
+ at end
More information about the cfe-commits
mailing list