diff options
author | Fariborz Jahanian <fjahanian@apple.com> | 2011-09-15 20:40:18 +0000 |
---|---|---|
committer | Fariborz Jahanian <fjahanian@apple.com> | 2011-09-15 20:40:18 +0000 |
commit | 412a49641c9365662b34331d36bf072bc3a228ea (patch) | |
tree | 55f26b3af2ddc60bbe345f6bfd30dae4b1173d5b | |
parent | 4ebd45f4279d84416568ada6adf56044bdf391b7 (diff) |
reverse patch in r139818 to focus on 'self'
instead of 'Class'.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@139834 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | lib/Sema/SemaExpr.cpp | 31 | ||||
-rw-r--r-- | test/SemaObjC/class-type-conversion.m | 46 |
2 files changed, 1 insertions, 76 deletions
diff --git a/lib/Sema/SemaExpr.cpp b/lib/Sema/SemaExpr.cpp index 35b38b101a..16b55f1aee 100644 --- a/lib/Sema/SemaExpr.cpp +++ b/lib/Sema/SemaExpr.cpp @@ -5227,35 +5227,6 @@ checkBlockPointerTypesForAssignment(Sema &S, QualType LHSType, return ConvTy; } -static Sema::AssignConvertType -checkObjCPointerTypesForAssignment(Sema &S, QualType LHSType, - QualType RHSType); -/// checkClassTypes - Routine checks for conversion of "Class" type. -// Conversion from type Class to any root class type in a class method -// is allowed. -static Sema::AssignConvertType -checkClassTypes(Sema &S, QualType LHSType) { - // Conversion from type Class to any root class type is allowed. - DeclContext *DC = S.CurContext; - while (isa<BlockDecl>(DC)) - DC = DC->getParent(); - ObjCMethodDecl *MD = dyn_cast_or_null<ObjCMethodDecl>(DC); - if (MD && MD->isClassMethod()) { - ObjCInterfaceDecl *Root = 0; - if (ObjCInterfaceDecl * IDecl = MD->getClassInterface()) - do - Root = IDecl; - while ((IDecl = IDecl->getSuperClass())); - if (Root){ - QualType RHSType = - S.Context.getObjCObjectPointerType( - S.Context.getObjCInterfaceType(Root)); - return checkObjCPointerTypesForAssignment(S, LHSType, RHSType); - } - } - return Sema::IncompatiblePointer; -} - /// checkObjCPointerTypesForAssignment - Compares two objective-c pointer types /// for assignment compatibility. static Sema::AssignConvertType @@ -5274,7 +5245,7 @@ checkObjCPointerTypesForAssignment(Sema &S, QualType LHSType, if (RHSType->isObjCBuiltinType()) { if (RHSType->isObjCClassType() && !LHSType->isObjCBuiltinType() && !LHSType->isObjCQualifiedClassType()) - return checkClassTypes(S, LHSType); + return Sema::IncompatiblePointer; return Sema::Compatible; } QualType lhptee = LHSType->getAs<ObjCObjectPointerType>()->getPointeeType(); diff --git a/test/SemaObjC/class-type-conversion.m b/test/SemaObjC/class-type-conversion.m deleted file mode 100644 index a009ebe8c4..0000000000 --- a/test/SemaObjC/class-type-conversion.m +++ /dev/null @@ -1,46 +0,0 @@ -// RUN: %clang_cc1 -fsyntax-only -verify %s -// rdar://10109725 - -@interface NSObject { - Class isa; -} -- (id)addObserver:(NSObject *)observer; // expected-note 2 {{passing argument to parameter 'observer' here}} -@end - -@interface MyClass : NSObject { -} -@end - -@implementation NSObject -+ (void)initialize -{ - NSObject *obj = 0; - [obj addObserver:self]; - [obj addObserver:(Class)0]; -} - -- init -{ - NSObject *obj = 0; - [obj addObserver:self]; - return [obj addObserver:(Class)0]; // expected-warning {{incompatible pointer types sending 'Class' to parameter of type 'NSObject *'}} -} -- (id)addObserver:(NSObject *)observer { return 0; } -@end - -@implementation MyClass - -+ (void)initialize -{ - NSObject *obj = 0; - [obj addObserver:self]; - [obj addObserver:(Class)0]; -} - -- init -{ - NSObject *obj = 0; - [obj addObserver:self]; - return [obj addObserver:(Class)0]; // expected-warning {{incompatible pointer types sending 'Class' to parameter of type 'NSObject *'}} -} -@end |