Fix a bug in type hierarchy marking in the trimmer (#86635)
authorVitek Karas <10670590+vitek-karas@users.noreply.github.com>
Wed, 24 May 2023 08:20:22 +0000 (01:20 -0700)
committerGitHub <noreply@github.com>
Wed, 24 May 2023 08:20:22 +0000 (01:20 -0700)
commit6594dfcc2dc929da1c4f092befdc7f0529521b41
treefb846b10015bc86cee4e394ed3d883ee0b1d22c0
parent551077576777ec9cd6267929cff1908d9f6de3e5
Fix a bug in type hierarchy marking in the trimmer (#86635)

If the base class has DAM annotation on it, but the only access is through a variabled typed as the derived class, the marking of everything on the base class happens during the processing of the derived class.

The bug was that it would only apply marking for the difference in effective annotations between derived and base, so if the annotation is on base, then both have effectively the same annotation and there would be no additional marking on base. So for example private methods would not be marked.

This also affected warnings on virtual methods - see tests for more details.
src/tools/illink/src/linker/Linker.Dataflow/DynamicallyAccessedMembersTypeHierarchy.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/Reflection/ObjectGetType.cs
src/tools/illink/test/Mono.Linker.Tests.Cases/Reflection/TypeHierarchyReflectionWarnings.cs