arphaman added a comment.
In https://reviews.llvm.org/D36790#843450, @arphaman wrote:
> @rjmccall Do you think that the rules for the return types in overridden
> methods that return `instancetype` should be strengthened first? For example,
> if we have the following code:
>
> @interface Unrelated
> - (void)method:(int)x;
> @end
>
> @interface CallsSelfSuper: NSObject
> + (void) target;
> - (void) method:(CallsSelfSuper *)x;
> @end
>
> @implementation CallsSelfSuper
> + (void) target {
> [[self alloc] method: 12]; // Can't assume 'method' is CallsSelfSuper's
> 'method' declaration unless we guarantee that OverrideAlloc's alloc actually
> returns `instancetype` and not id.
> }
> @end
>
> @interface OverrideAlloc: CallsSelfSuper
> @end
>
> @implementation OverrideAlloc
> + (id) alloc {
> return [NSString alloc];
> }
> @end
>
>
> We can't really make any assumptions about what `[self alloc]` will return.
> But in my opinion we could assume that `[self alloc]` will return a
> `CallsSelfSuper *` if we could ensure that methods that override methods that
> return `instancetype` will compile only if they return `instancetype` type as
> well.
I've looked at this again and it seems that Clang already has warnings in cases
like this, so `instancetype` is already treated as somewhat of an inherited
requirement. I now think it should be add the behavior in this patch without
imposing additional restrictions.
Repository:
rL LLVM
https://reviews.llvm.org/D36790
_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits