[cfe-commits] r135001 - in /cfe/trunk: include/clang/AST/ASTContext.h lib/AST/ASTContext.cpp lib/Sema/SemaObjCProperty.cpp test/SemaObjCXX/property-type-mismatch.mm
Fariborz Jahanian
fjahanian at apple.com
Tue Jul 12 15:05:17 PDT 2011
Author: fjahanian
Date: Tue Jul 12 17:05:16 2011
New Revision: 135001
URL: http://llvm.org/viewvc/llvm-project?rev=135001&view=rev
Log:
objc++: Some level of covariance is allowed in ObjC properties.
Make it also available in ObjC++ propeties. // rdar://9740328
Added:
cfe/trunk/test/SemaObjCXX/property-type-mismatch.mm
Modified:
cfe/trunk/include/clang/AST/ASTContext.h
cfe/trunk/lib/AST/ASTContext.cpp
cfe/trunk/lib/Sema/SemaObjCProperty.cpp
Modified: cfe/trunk/include/clang/AST/ASTContext.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/AST/ASTContext.h?rev=135001&r1=135000&r2=135001&view=diff
==============================================================================
--- cfe/trunk/include/clang/AST/ASTContext.h (original)
+++ cfe/trunk/include/clang/AST/ASTContext.h Tue Jul 12 17:05:16 2011
@@ -1417,6 +1417,7 @@
bool typesAreCompatible(QualType T1, QualType T2,
bool CompareUnqualified = false); // C99 6.2.7p1
+ bool propertyTypesAreCompatible(QualType, QualType);
bool typesAreBlockPointerCompatible(QualType, QualType);
bool isObjCIdType(QualType T) const {
Modified: cfe/trunk/lib/AST/ASTContext.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/ASTContext.cpp?rev=135001&r1=135000&r2=135001&view=diff
==============================================================================
--- cfe/trunk/lib/AST/ASTContext.cpp (original)
+++ cfe/trunk/lib/AST/ASTContext.cpp Tue Jul 12 17:05:16 2011
@@ -5441,6 +5441,10 @@
return !mergeTypes(LHS, RHS, false, CompareUnqualified).isNull();
}
+bool ASTContext::propertyTypesAreCompatible(QualType LHS, QualType RHS) {
+ return !mergeTypes(LHS, RHS, false, false).isNull();
+}
+
bool ASTContext::typesAreBlockPointerCompatible(QualType LHS, QualType RHS) {
return !mergeTypes(LHS, RHS, true).isNull();
}
Modified: cfe/trunk/lib/Sema/SemaObjCProperty.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaObjCProperty.cpp?rev=135001&r1=135000&r2=135001&view=diff
==============================================================================
--- cfe/trunk/lib/Sema/SemaObjCProperty.cpp (original)
+++ cfe/trunk/lib/Sema/SemaObjCProperty.cpp Tue Jul 12 17:05:16 2011
@@ -909,7 +909,7 @@
QualType RHSType =
Context.getCanonicalType(Property->getType());
- if (!Context.typesAreCompatible(LHSType, RHSType)) {
+ if (!Context.propertyTypesAreCompatible(LHSType, RHSType)) {
// FIXME: Incorporate this test with typesAreCompatible.
if (LHSType->isObjCQualifiedIdType() && RHSType->isObjCQualifiedIdType())
if (Context.ObjCQualifiedIdTypesAreCompatible(LHSType, RHSType, false))
Added: cfe/trunk/test/SemaObjCXX/property-type-mismatch.mm
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaObjCXX/property-type-mismatch.mm?rev=135001&view=auto
==============================================================================
--- cfe/trunk/test/SemaObjCXX/property-type-mismatch.mm (added)
+++ cfe/trunk/test/SemaObjCXX/property-type-mismatch.mm Tue Jul 12 17:05:16 2011
@@ -0,0 +1,19 @@
+// RUN: %clang_cc1 -fsyntax-only -verify %s
+// rdar://9740328
+
+ at protocol P1;
+
+ at interface NSObject
+ at end
+
+ at interface A : NSObject
+ at property (assign) NSObject<P1> *prop;
+ at end
+
+ at protocol P2 <P1>
+ at end
+
+ at interface B : A
+ at property (assign) NSObject<P2> *prop;
+ at end
+
More information about the cfe-commits
mailing list