jyknight added a comment.

Hi, it seems that this change is incompatible with the `[NSItemProvider 
loadItemForTypeIdentifier:options:completionHandler:]` method's expected (but 
extremely weird and unusual!) usage.

Per 
https://developer.apple.com/documentation/foundation/nsitemprovider/1403900-loaditemfortypeidentifier?language=objc
 it takes an argument of type `NSItemProviderCompletionHandler` aka `void 
(^)(id<NSSecureCoding> item, NSError *error);`. However, 
`loadItemForTypeIdentifier:options:completionHandler` expects users to provide 
blocks of other types, e.g. `^(NSURL *url, NSError *error) { ... }` and 
introspects at runtime the resulting block object to determine the declared 
signature, and then provides the expected type.

This is, of course, an extremely weird API (who'd ever expect a function to do 
runtime introspection of the callback's function signature and change the types 
passed to the function accordingly?). But, the expected usage previously 
type-checked, because of the bug fixed in this change (`NSURL*` is a subtype of 
`id<NSSecureCoding>`, so it was accepted before), and now throws an error.

Should this change be reverted? Or have an exemption added for that one weird 
API? Or maybe that API needs to be modified to say it takes an argument of type 
"id" instead of NSItemProviderCompletionHandler?


Repository:
  rL LLVM

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D66831/new/

https://reviews.llvm.org/D66831



_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to