[PATCH] D66831: [ObjC] Fix type checking for qualified id block parameters.
    ChatWyn via Phabricator via cfe-commits 
    cfe-commits at lists.llvm.org
       
    Thu Mar 26 23:57:27 PDT 2020
    
    
  
chatwyn added a comment.
Hi:
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,Q>
  @end
  
  void a() {
      void (^genericBlockWithParam)(id <P>);
      void (^blockWithParam)(I *);
      blockWithParam = genericBlockWithParam;
      genericBlockWithParam = blockWithParam;
  }
when I use clang 9, it will be  below error
  incompatible block pointer types assigning to 'void (^__strong)(I *__strong)' from 'void (^__strong)(__strong id<P>)'
      blockWithParam = genericBlockWithParam;
                     ^ ~~~~~~~~~~~~~~~~~~~~~
but in clang 10, the error is that
  incompatible block pointer types assigning to 'void (^__strong)(__strong id<P>)' from 'void (^__strong)(I *__strong)'
  genericBlockWithParam = blockWithParam;
                     ^ ~~~~~~~~~~~~~~~~~~~~~
I think clang 9 is reasonable.
Repository:
  rL LLVM
CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D66831/new/
https://reviews.llvm.org/D66831
    
    
More information about the cfe-commits
mailing list