]> granicus.if.org Git - clang/commitdiff
Be slightly more permissive when checking for type-erased blocks.
authorBob Wilson <bob.wilson@apple.com>
Fri, 2 Oct 2015 01:05:29 +0000 (01:05 +0000)
committerBob Wilson <bob.wilson@apple.com>
Fri, 2 Oct 2015 01:05:29 +0000 (01:05 +0000)
This is a patch from Doug that was inadvertently omitted from r241543.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@249116 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Sema/SemaExprObjC.cpp
test/CodeGenObjC/parameterized_classes.m

index 88337b8ff3b26bad1dc5ca4f72fd9f60643ca41f..b663566ff7017360b969bd317dab1adbd8f024bf 100644 (file)
@@ -1657,7 +1657,8 @@ bool Sema::CheckMessageArgumentTypes(QualType ReceiverType,
       // Objective-C pointer type, we may need to extend the lifetime
       // of the block object.
       if (typeArgs && Args[i]->isRValue() && paramType->isBlockPointerType() &&
-          origParamType->isBlockCompatibleObjCPointerType(Context)) {
+          Args[i]->getType()->isBlockPointerType() &&
+          origParamType->isObjCObjectPointerType()) {
         ExprResult arg = Args[i];
         maybeExtendBlockObject(arg);
         Args[i] = arg.get();
index 1d8e9a259934b5b0e88bfa4b92c2299826082d6c..b75cf2e3ad2d20a022c5ca3c46429edbe9392032 100644 (file)
@@ -24,6 +24,8 @@ __attribute__((objc_root_class))
 - (void)addObject:(T)object;
 - (void)sortWithFunction:(int (*)(T, T))function;
 - (void)getObjects:(T __strong *)objects length:(unsigned*)length;
+- (T)objectAtIndexedSubscript:(unsigned)index;
+- (void)setObject:(T)object atIndexedSubscript:(unsigned)index;
 @end
 
 NSString *getFirstObjectProp(NSMutableArray<NSString *> *array) {
@@ -58,6 +60,11 @@ void printMe(NSString *name) { }
 
 // CHECK-LABEL: define void @blockTest
 void blockTest(NSMutableArray<void (^)(void)> *array, NSString *name) {
+  // CHECK-NOT: ret void
   // CHECK: call i8* @objc_retainBlock
   [array addObject: ^ { printMe(name); }];
+  // CHECK-NOT: ret void
+  array[0] = ^ { printMe(name); };
+  // CHECK: call i8* @objc_retainBlock
+  // CHECK: ret void
 }