[llvm-branch-commits] [cfe-tag] r100501 - in /cfe/tags/Apple/clang/clang/tools/clang: lib/AST/ASTContext.cpp test/SemaObjC/block-type-safety.m

Ted Kremenek kremenek at apple.com
Mon Apr 5 17:08:11 PDT 2010


Author: kremenek
Date: Mon Apr  5 19:08:11 2010
New Revision: 100501

URL: http://llvm.org/viewvc/llvm-project?rev=100501&view=rev
Log:
Merge in r100129 (<rdar://problem/7814131>).

Modified:
    cfe/tags/Apple/clang/clang/tools/clang/lib/AST/ASTContext.cpp
    cfe/tags/Apple/clang/clang/tools/clang/test/SemaObjC/block-type-safety.m

Modified: cfe/tags/Apple/clang/clang/tools/clang/lib/AST/ASTContext.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/tags/Apple/clang/clang/tools/clang/lib/AST/ASTContext.cpp?rev=100501&r1=100500&r2=100501&view=diff
==============================================================================
--- cfe/tags/Apple/clang/clang/tools/clang/lib/AST/ASTContext.cpp (original)
+++ cfe/tags/Apple/clang/clang/tools/clang/lib/AST/ASTContext.cpp Mon Apr  5 19:08:11 2010
@@ -4116,14 +4116,15 @@
 bool ASTContext::canAssignObjCInterfacesInBlockPointer(
                                          const ObjCObjectPointerType *LHSOPT,
                                          const ObjCObjectPointerType *RHSOPT) {
-  if (RHSOPT->isObjCBuiltinType())
+  if (RHSOPT->isObjCBuiltinType() ||
+      LHSOPT->isObjCIdType() || LHSOPT->isObjCQualifiedIdType())
     return true;
   
   if (LHSOPT->isObjCBuiltinType()) {
     return RHSOPT->isObjCBuiltinType() || RHSOPT->isObjCQualifiedIdType();
   }
   
-  if (LHSOPT->isObjCQualifiedIdType() || RHSOPT->isObjCQualifiedIdType())
+  if (RHSOPT->isObjCQualifiedIdType())
     return ObjCQualifiedIdTypesAreCompatible(QualType(LHSOPT,0),
                                              QualType(RHSOPT,0),
                                              false);

Modified: cfe/tags/Apple/clang/clang/tools/clang/test/SemaObjC/block-type-safety.m
URL: http://llvm.org/viewvc/llvm-project/cfe/tags/Apple/clang/clang/tools/clang/test/SemaObjC/block-type-safety.m?rev=100501&r1=100500&r2=100501&view=diff
==============================================================================
--- cfe/tags/Apple/clang/clang/tools/clang/test/SemaObjC/block-type-safety.m (original)
+++ cfe/tags/Apple/clang/clang/tools/clang/test/SemaObjC/block-type-safety.m Mon Apr  5 19:08:11 2010
@@ -34,11 +34,11 @@
 
     r0(^Super* () { return 0; });  // OK
     r0(^Sub* () { return 0; });    // OK, variable of type Super* gets return value of type Sub*
-    r0(^id () { return 0; });  // expected-error {{incompatible block pointer types passing 'id (^)(void)', expected 'Super *(^)()'}}
+    r0(^id () { return 0; });
 
     r1(^Super* () { return 0; });  // expected-error {{incompatible block pointer types passing 'Super *(^)(void)', expected 'Sub *(^)()'}}
     r1(^Sub* () { return 0; });    // OK
-    r1(^id () { return 0; });      // expected-error {{incompatible block pointer types passing 'id (^)(void)', expected 'Sub *(^)()'}}
+    r1(^id () { return 0; }); 
      
     r2(^id<NSObject>() { return 0; });
 }
@@ -60,7 +60,7 @@
 void test2(void) 
 { 
   f0(^(id a) { }); // OK
-  f1(^(A* a) { }); // expected-error {{incompatible block pointer types passing 'void (^)(A *)', expected 'void (^)(id)'}}
+  f1(^(A* a) { });
    f1(^(id<NSObject> a) { });	// OK
 }
 
@@ -80,7 +80,7 @@
 
 // programmer wants to write this:
    -printMyThings1 {
-       [myThings enumerateObjectsWithBlock: ^(MyThing *obj) { // expected-error {{incompatible block pointer types sending 'void (^)(MyThing *)', expected 'void (^)(id)'}}
+       [myThings enumerateObjectsWithBlock: ^(MyThing *obj) {
            [obj printThing];
        }];
    }





More information about the llvm-branch-commits mailing list