Fix recurisve issue with covariant interfaces and fix IID being wrong for built-in interfaces used as generics #1297
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
When an CCW is created for an object, we also add the vtables for covariant interfaces. If one of the generics of a covariant interface was to the type that the CCW is being created for, this can end up in a recursive loop. This can also happen with base types too. Looking at the behavior of .NET Core and .NET native, both of them seem to differ with respect to which covariant interfaces got created, but both don't create them for the recursive instances. Based on that, putting in a stack to keep track of the types we are recursively trying to get all the covariant interfaces for to avoid getting into a recursive loop.
As part of this, also found out that when we have a generic of a custom mapped interface like System.IDisposable, we are generating the wrong IID. Resolving that by using the helper type when available.
Fixes #1291