From 4d1abf9894a7e7db46e1229a93a6ce8291b4315c Mon Sep 17 00:00:00 2001 From: bbartels Date: Sat, 26 Dec 2020 00:04:24 +0000 Subject: [PATCH 1/2] Fix ILVerify Default Method Verification (#43967) --- .../tools/ILVerification/TypeVerifier.cs | 2 +- .../ILTests/InterfaceImplementation.il | 27 +++++++++++++++++++ 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/src/coreclr/tools/ILVerification/TypeVerifier.cs b/src/coreclr/tools/ILVerification/TypeVerifier.cs index 2005ae08d60d03..9c760c8dd733fb 100644 --- a/src/coreclr/tools/ILVerification/TypeVerifier.cs +++ b/src/coreclr/tools/ILVerification/TypeVerifier.cs @@ -94,7 +94,7 @@ public void VerifyInterfaces() // Look for missing method implementation foreach (MethodDesc method in implementedInterface.InterfaceType.GetAllMethods()) { - if (method.Signature.IsStatic) + if (!method.IsAbstract) { continue; } diff --git a/src/tests/ilverify/ILTests/InterfaceImplementation.il b/src/tests/ilverify/ILTests/InterfaceImplementation.il index 5264e54bbbe2eb..3a6c4d7d2f51a4 100644 --- a/src/tests/ilverify/ILTests/InterfaceImplementation.il +++ b/src/tests/ilverify/ILTests/InterfaceImplementation.il @@ -448,3 +448,30 @@ { } } + +.class public auto ansi beforefieldinit ChildClassDoesNotImplementDefaultInterfaceMethod_ValidType_Valid + extends [System.Runtime]System.Object + implements [InterfaceDefinition]IDefaultImplInterface +{ + .method public hidebysig specialname rtspecialname + instance void .ctor () cil managed + { + .maxstack 8 + + IL_0000: ldarg.0 + IL_0001: call instance void [System.Runtime]System.Object::.ctor() + IL_0006: nop + IL_0007: ret + } +} + +.class interface public auto ansi abstract IDefaultImplInterface +{ + .method public hidebysig newslot virtual + instance void DefaultImplementation () cil managed + { + .maxstack 8 + + IL_0000: ret + } +} \ No newline at end of file From 93c6299eec38aff9f8f87174ced39afd6c37591b Mon Sep 17 00:00:00 2001 From: bbartels Date: Sat, 26 Dec 2020 00:46:36 +0000 Subject: [PATCH 2/2] Fixed test --- .../ILTests/InterfaceImplementation.il | 26 ++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/src/tests/ilverify/ILTests/InterfaceImplementation.il b/src/tests/ilverify/ILTests/InterfaceImplementation.il index 3a6c4d7d2f51a4..29f5c49b50399e 100644 --- a/src/tests/ilverify/ILTests/InterfaceImplementation.il +++ b/src/tests/ilverify/ILTests/InterfaceImplementation.il @@ -451,7 +451,7 @@ .class public auto ansi beforefieldinit ChildClassDoesNotImplementDefaultInterfaceMethod_ValidType_Valid extends [System.Runtime]System.Object - implements [InterfaceDefinition]IDefaultImplInterface + implements IDefaultImplInterface { .method public hidebysig specialname rtspecialname instance void .ctor () cil managed @@ -465,6 +465,30 @@ } } +.class public auto ansi beforefieldinit ChildClassDoesImplementDefaultInterfaceMethod_ValidType_Valid + extends [System.Runtime]System.Object + implements IDefaultImplInterface +{ + .method public final hidebysig newslot virtual + instance void DefaultImplementation () cil managed + { + .maxstack 8 + + IL_0000: ret + } + + .method public hidebysig specialname rtspecialname + instance void .ctor () cil managed + { + .maxstack 8 + + IL_0000: ldarg.0 + IL_0001: call instance void [System.Runtime]System.Object::.ctor() + IL_0006: nop + IL_0007: ret + } +} + .class interface public auto ansi abstract IDefaultImplInterface { .method public hidebysig newslot virtual