From e28b1de68afc8cc92a73e15d9b3c81ffc3ccfb64 Mon Sep 17 00:00:00 2001 From: Jan Kotas Date: Thu, 20 Jan 2022 16:11:27 -0800 Subject: [PATCH 1/3] ILVerify: Handle readonly references in ldfld Fixes #63953 --- .../tools/ILVerification/ILImporter.Verify.cs | 2 +- src/tests/ilverify/ILTests/ValueTypeTests.il | 13 +++++++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/src/coreclr/tools/ILVerification/ILImporter.Verify.cs b/src/coreclr/tools/ILVerification/ILImporter.Verify.cs index d1b3d10ed5a3fe..258a005ffdd09f 100644 --- a/src/coreclr/tools/ILVerification/ILImporter.Verify.cs +++ b/src/coreclr/tools/ILVerification/ILImporter.Verify.cs @@ -2060,7 +2060,7 @@ void ImportLoadField(int token, bool isStatic) actualThis = StackValue.CreateByRef(actualThis.Type); var declaredThis = owningType.IsValueType ? - StackValue.CreateByRef(owningType) : StackValue.CreateObjRef(owningType); + StackValue.CreateByRef(owningType, readOnly : true) : StackValue.CreateObjRef(owningType); CheckIsAssignable(actualThis, declaredThis); diff --git a/src/tests/ilverify/ILTests/ValueTypeTests.il b/src/tests/ilverify/ILTests/ValueTypeTests.il index a52cb765224640..7624dc53634ac1 100644 --- a/src/tests/ilverify/ILTests/ValueTypeTests.il +++ b/src/tests/ilverify/ILTests/ValueTypeTests.il @@ -26,3 +26,16 @@ } } +.class public sequential ansi sealed beforefieldinit ValueTypeFieldTests + extends [System.Runtime]System.ValueType +{ + .field public int32 InstanceField + + .method public static int32 CallMethod_Valid(object o) cil managed + { + ldarg.0 + unbox ValueTypeFieldTests + ldfld int32 ValueTypeFieldTests::InstanceField + ret + } +} From 639b4dcbda0cc163e73bcb936520b132799e2359 Mon Sep 17 00:00:00 2001 From: Jan Kotas Date: Thu, 20 Jan 2022 16:16:28 -0800 Subject: [PATCH 2/3] Fix test name --- src/tests/ilverify/ILTests/ValueTypeTests.il | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/tests/ilverify/ILTests/ValueTypeTests.il b/src/tests/ilverify/ILTests/ValueTypeTests.il index 7624dc53634ac1..3c13045344e902 100644 --- a/src/tests/ilverify/ILTests/ValueTypeTests.il +++ b/src/tests/ilverify/ILTests/ValueTypeTests.il @@ -31,7 +31,7 @@ { .field public int32 InstanceField - .method public static int32 CallMethod_Valid(object o) cil managed + .method public static int32 ValueType.UnboxLdfld(object o) cil managed { ldarg.0 unbox ValueTypeFieldTests From 9a408e01060a0fab9cb0a3adb6a21da59f48439f Mon Sep 17 00:00:00 2001 From: Jan Kotas Date: Thu, 20 Jan 2022 19:02:25 -0800 Subject: [PATCH 3/3] Update src/tests/ilverify/ILTests/ValueTypeTests.il MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Michal Strehovský --- src/tests/ilverify/ILTests/ValueTypeTests.il | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/tests/ilverify/ILTests/ValueTypeTests.il b/src/tests/ilverify/ILTests/ValueTypeTests.il index 3c13045344e902..8eb3aac002de8d 100644 --- a/src/tests/ilverify/ILTests/ValueTypeTests.il +++ b/src/tests/ilverify/ILTests/ValueTypeTests.il @@ -31,7 +31,7 @@ { .field public int32 InstanceField - .method public static int32 ValueType.UnboxLdfld(object o) cil managed + .method public static int32 ValueType.UnboxLdfld_Valid(object o) cil managed { ldarg.0 unbox ValueTypeFieldTests