Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Conversation

@mrvoorhe
Copy link
Contributor

@mrvoorhe mrvoorhe commented May 2, 2025

When importing a TypeSpecification, an element type or generic argument could be a TypeDefinition within the current module. When this happens, a new TypeReference does not need to be created. This can lead to a TypeReference being added to the typeref table for a type that is already in the assembly. This seems to hold together, although I don't think it's ideal. And really my goal is to avoid failing this logic in the ILLink test framework https://github.com/dotnet/runtime/blob/cec44d6dff9de95421f199f65bbc80b8296da1c0/src/tools/illink/test/Mono.Linker.Tests/TestCasesRunner/ResultChecker.cs#L56

This fix superceeds #138. I've left that fix in since that API is exposed publically and others could be depending on it.

While I was adjusting this logic, I thought I would apply the same logic to a TypeReference where the scope is the current modules assembly. This case is a bit contrived as it shouldn't happen, but if it did, it would result in the same circular reference problem as #138

@mrvoorhe
Copy link
Contributor Author

@jbevain I don't think the linux CI failure is related to my changes.

@samuraiGH
Copy link
Contributor

@jbevain I don't think the linux CI failure is related to my changes.

This is related to actions/runner-images#11101

I fixed it in #972

@samuraiGH
Copy link
Contributor

Now you can just sync your branch

When importing a TypeSpecification, an element type or generic argument could be a TypeDefinition within the current module.
When this happens, a new TypeReference does not need to be created.  This can lead to a TypeReference being added to the typeref table for
a type that is already in the assembly.  This seems to hold together, although I don't think it's ideal.  And really my goal is to avoid failing this logic in the ILLink test framework https://github.com/dotnet/runtime/blob/cec44d6dff9de95421f199f65bbc80b8296da1c0/src/tools/illink/test/Mono.Linker.Tests/TestCasesRunner/ResultChecker.cs#L56

This fix superceeds jbevain#138.  I've left that fix in since that API is exposed publically and others could be depending on it.

While I was adjusting this logic, I thought I would apply the same logic to a TypeReference where the scope is the current modules assembly.
This case is a bit contrived as it shouldn't happen, but if it did, it would result in the same circular reference problem as jbevain#138
@mrvoorhe mrvoorhe force-pushed the avoid-unnecessary-import branch from e1f3f5a to a3c2663 Compare September 12, 2025 12:58
@mrvoorhe
Copy link
Contributor Author

@jbevain What do you think about these changes?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants