arphaman added a comment.

In D67983#1863981 <https://reviews.llvm.org/D67983#1863981>, @jyknight wrote:

> In D67983#1863019 <https://reviews.llvm.org/D67983#1863019>, @arphaman wrote:
>
> > @jyknight @rjmccall I'm not sure this change is 100% fine. For example, the 
> > following code no longer compiles with ARC:
> >
> >   @protocol Delegate
> >   @end
> >  
> >   @interface X <Delegate>
> >  
> >   @end
> >  
> >   @interface Y
> >   @property id<Delegate> d;
> >   @end
> >  
> >   @implementation X
> >  
> >   + (void)foo:(Y *)y with:(X*)x {
> >    y.d = self; // error: assigning to 'id<Delegate>' from incompatible type 
> > 'const Class'
> >    y.d = x;     // fine
> >   }
> >  
> >   @end
> >
>
>
> Your error looks correct to me -- "self" in a classmethod is not an instance, 
> but the class itself. And while instances of X implement "Delegate", the 
> Class does not.


Got it, thanks! We might need to add a flag to allow the old behavior 
temporarily to accommodate our codebase while it's being updated.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D67983



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

Reply via email to