Mark .overrides from marked methods in a copy assembly (#82197)
authorJackson Schuster <36744439+jtschuster@users.noreply.github.com>
Thu, 16 Feb 2023 19:00:53 +0000 (11:00 -0800)
committerGitHub <noreply@github.com>
Thu, 16 Feb 2023 19:00:53 +0000 (11:00 -0800)
commitb171cda603c2622f453901204e4c6adfe9707761
tree1c6dbf94264f84fc9423191d9a6412d09ed1e404
parent4d0ddc1a84d97a0c94a9f03e3497828cb19597b3
Mark .overrides from marked methods in a copy assembly (#82197)

Fixes #81746

Static abstract interface methods that aren't used are expected to be removed, and any references to them in the metadata of the overriders are expected to be removed in SweepStep. However, overrides may come from a 'copy' assembly, so their metadata won't get swept at all. We would still remove the static abstract method, but would leave the reference to it in the overrider's metadata, creating invalid metadata.

This fixes the issue by making sure all methods referenced in the .overrides metadata of method X are marked if method X is in a copy assembly, where previously we would postpone marking the .overrides if the base was static abstract.
src/tools/illink/src/linker/Linker.Steps/MarkStep.cs
src/tools/illink/test/ILLink.RoslynAnalyzer.Tests/generated/ILLink.RoslynAnalyzer.Tests.Generator/ILLink.RoslynAnalyzer.Tests.TestCaseGenerator/Inheritance.Interfaces.StaticInterfaceMethodsTests.g.cs
src/tools/illink/test/Mono.Linker.Tests.Cases/Inheritance.Interfaces/StaticInterfaceMethods/OverrideInCopyAssembly.cs [new file with mode: 0644]