[PATCH] D44580: Sema: allow comparison between blocks & block-compatible objc types

Dustin L. Howett via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Sun Mar 18 15:08:33 PDT 2018


DHowett-MSFT planned changes to this revision.
DHowett-MSFT marked an inline comment as done.
DHowett-MSFT added inline comments.


================
Comment at: lib/Sema/SemaExpr.cpp:7749
+    // id (or strictly compatible object type) -> T^
+    if (getLangOpts().ObjC1 && RHSType->isBlockCompatibleObjCPointerType(Context)) {
       Kind = CK_AnyPointerToBlockPointerCast;
----------------
theraven wrote:
> Do we want to allow implicit casts for all object types to block types for assignment, or only for null pointers?  We definitely want to allow `nil` to be assigned to a block type, but I would lean slightly to requiring an implicit cast.
> 
> Ideally, I think we'd allow this but warn, because casting from an arbitrary ObjC type to a block incorrectly can cause exciting security vulnerabilities if it's done incorrectly and we should encourage people to check these casts (`nil` is always safe though - as long as somewhere else checks the nullability attributes).
I don't actually have a compelling use case for widening assignability here. I'm dropping this part of the patch.

I do think it should be valid, perhaps with a warning. It feels incorrect for there to be valid comparison cases that are not valid assignment cases (here), but that position doesn't hold up under scrutiny.


Repository:
  rC Clang

https://reviews.llvm.org/D44580





More information about the cfe-commits mailing list