smeenai added a comment. Sorry for the late feedback here – we're in the process of testing with Clang 10 and noticed a behavior change caused by this commit.
Consider the following piece of code: @protocol P @end @protocol Q @end @interface I <P> @end @interface J : I <Q> @end void f(void (^)(id<P>)); void g() { f(^(J *j){}); } Clang 9 would accept it, whereas Clang 10 complains about incompatible block pointer types. If I change the declaration of `J` to instead be: @interface J : I Both Clang 9 and Clang 10 accept it. I'm not very familiar with Objective-C semantics. Does saying `@interface J : I <Q>` mean we're overriding the conformance being specified by `@interface I <P>`? In that case, the Clang 10 error makes sense to me. In practice though, classes like `UIImage` are declared as inheriting from `NSObject<NSSecureCoding>`, so passing a `UIImage *` to a block with a parameter of type `id<NSObject>` gives an error with Clang 10. 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