[PATCH] D66831: [ObjC] Fix type checking for qualified id block parameters.
Volodymyr Sapsai via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Tue Aug 27 17:27:56 PDT 2019
This revision was automatically updated to reflect the committed changes.
Closed by commit rL370130: [ObjC] Fix type checking for qualified id block parameters. (authored by vsapsai, committed by ).
Herald added a project: LLVM.
Herald added a subscriber: llvm-commits.
Changed prior to commit:
https://reviews.llvm.org/D66831?vs=217500&id=217538#toc
Repository:
rL LLVM
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D66831/new/
https://reviews.llvm.org/D66831
Files:
cfe/trunk/lib/AST/ASTContext.cpp
cfe/trunk/test/SemaObjC/block-type-safety.m
Index: cfe/trunk/lib/AST/ASTContext.cpp
===================================================================
--- cfe/trunk/lib/AST/ASTContext.cpp
+++ cfe/trunk/lib/AST/ASTContext.cpp
@@ -8191,9 +8191,9 @@
}
if (LHSOPT->isObjCQualifiedIdType() || RHSOPT->isObjCQualifiedIdType())
- return finish(ObjCQualifiedIdTypesAreCompatible(QualType(LHSOPT,0),
- QualType(RHSOPT,0),
- false));
+ return finish(ObjCQualifiedIdTypesAreCompatible(
+ QualType(BlockReturnType ? LHSOPT : RHSOPT, 0),
+ QualType(BlockReturnType ? RHSOPT : LHSOPT, 0), false));
const ObjCInterfaceType* LHS = LHSOPT->getInterfaceType();
const ObjCInterfaceType* RHS = RHSOPT->getInterfaceType();
Index: cfe/trunk/test/SemaObjC/block-type-safety.m
===================================================================
--- cfe/trunk/test/SemaObjC/block-type-safety.m
+++ cfe/trunk/test/SemaObjC/block-type-safety.m
@@ -133,9 +133,20 @@
@end
int test5() {
+ // Returned value is used outside of a block, so error on changing
+ // a return type to a more general than expected.
NSAllArray *(^block)(id);
id <Foo> (^genericBlock)(id);
genericBlock = block;
+ block = genericBlock; // expected-error {{incompatible block pointer types assigning to 'NSAllArray *(^)(id)' from 'id<Foo> (^)(id)'}}
+
+ // A parameter is used inside a block, so error on changing a parameter type
+ // to a more specific than an argument type it will be called with.
+ // rdar://problem/52788423
+ void (^blockWithParam)(NSAllArray *);
+ void (^genericBlockWithParam)(id<Foo>);
+ genericBlockWithParam = blockWithParam; // expected-error {{incompatible block pointer types assigning to 'void (^)(id<Foo>)' from 'void (^)(NSAllArray *)'}}
+ blockWithParam = genericBlockWithParam;
return 0;
}
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D66831.217538.patch
Type: text/x-patch
Size: 1921 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20190828/03e31f48/attachment.bin>
More information about the llvm-commits
mailing list