Fix type loader not recognizing overridden method (#56337)
authorDavid Wrighton <davidwr@microsoft.com>
Tue, 27 Jul 2021 23:41:19 +0000 (16:41 -0700)
committerGitHub <noreply@github.com>
Tue, 27 Jul 2021 23:41:19 +0000 (16:41 -0700)
commit3ce1168233140e01890568b605ce9b2d7767a50e
tree0c1a15f8b9d81b2c2fba72a28e821d80bad49121
parent598c2dae8843a523e2f73271b268aaab58360a2e
Fix type loader not recognizing overridden method (#56337)

* Fix type loader not recognizing overridden method
- Result of a bad change when removing support for full stub dispatch in .NET 4.0 timeframe (circa 2008)
- Caused issue when the following set of conditions were all true
  - The type implements an interface
  - The interface has more virtual methods on it than the number of virtual methods on the base type of the type.
  - The base type implements the interface partially (and the partial implementation has a slot number greater than the number of virtual methods on the base type + its base types)
  - The type does not re-implement the interface methods implemented by the base type.
- The comment referred to situations where stub dispatch was used to resolve non-virtual calls which is a very long time removed feature and is not applicable to today's codebase.
- Not reachable with versions of C# that shipped before the default interfaces feature, but with that feature became easily reachable. Has been a bug since .NET 4 for handwritten IL.

Fixes #44533
src/coreclr/vm/methodtable.cpp
src/coreclr/vm/methodtable.h
src/tests/Loader/classloader/DefaultInterfaceMethods/regressions/github44533.cs [new file with mode: 0644]
src/tests/Loader/classloader/DefaultInterfaceMethods/regressions/github44533.csproj [new file with mode: 0644]