HomePhabricator

[ObjC generics] Fix not inheriting type bounds in categories/extensions.

Description

[ObjC generics] Fix not inheriting type bounds in categories/extensions.

When a category/extension doesn't repeat a type bound, corresponding
type parameter is substituted with id when used as a type argument. As
a result, in the added test case it was causing errors like

type argument 'T' (aka 'id') does not satisfy the bound ('id<NSCopying>') of type parameter 'T'

We are already checking that type parameters should be consistent
everywhere (see checkTypeParamListConsistency) and update
ObjCTypeParamDecl to have correct underlying type. And when we use the
type parameter as a method return type or a method parameter type, it is
substituted to the bounded type. But when we use the type parameter as a
type argument, we check ObjCTypeParamType that ignores the updated
underlying type and remains id.

Fix by desugaring ObjCTypeParamType to the underlying type, the same
way we are doing with TypedefType.

rdar://problem/54329242

Reviewers: erik.pilkington, ahatanak

Reviewed By: erik.pilkington

Subscribers: jkorous, dexonsmith, ributzka, cfe-commits

Differential Revision: https://reviews.llvm.org/D66696

Details

Committed
vsapsaiWed, Oct 9, 12:29 PM
Reviewer
erik.pilkington
Differential Revision
D66696: [ObjC generics] Fix not inheriting type bounds in categories/extensions.
Branches
Unknown
Tags
Unknown