diff options
author | Adeel Mujahid <3840695+am11@users.noreply.github.com> | 2020-11-03 23:28:21 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-11-03 23:28:21 +0300 |
commit | e6a7763e4e32e51efcfe219eaeed8e4ae1cc3972 (patch) | |
tree | f64d0887ccac60643ed91561b09e0d1efb93a9c0 /src/tests/ilverify | |
parent | f3f8b2253b2fdac06fc2d79022f204b28c755197 (diff) |
Check catch and throw non-Exception derived types (#43969)
Verifies:
* `X` is derived from `Exception` in `throw X`.
* `throw null` is valid.
* `X` is derived from `Exception` in `catch(X)`.
Contributes to #37390
Diffstat (limited to 'src/tests/ilverify')
-rw-r--r-- | src/tests/ilverify/ILMethodTester.cs | 9 | ||||
-rw-r--r-- | src/tests/ilverify/ILTests/ExceptionRegionTests.il | 33 | ||||
-rw-r--r-- | src/tests/ilverify/ILTests/ThisStateTests.il | 2 | ||||
-rw-r--r-- | src/tests/ilverify/ILTypeVerificationTester.cs | 6 |
4 files changed, 45 insertions, 5 deletions
diff --git a/src/tests/ilverify/ILMethodTester.cs b/src/tests/ilverify/ILMethodTester.cs index b7891d63a42..cb5a3163c3c 100644 --- a/src/tests/ilverify/ILMethodTester.cs +++ b/src/tests/ilverify/ILMethodTester.cs @@ -28,7 +28,7 @@ namespace ILVerification.Tests void TestMethodsWithInvalidIL(InvalidILTestCase invalidIL) { IEnumerable<VerificationResult> results = null; - + try { results = Verify(invalidIL); @@ -58,7 +58,12 @@ namespace ILVerification.Tests EcmaModule module = TestDataLoader.GetModuleForTestAssembly(testCase.ModuleName); var methodHandle = (MethodDefinitionHandle) MetadataTokens.EntityHandle(testCase.MetadataToken); var method = (EcmaMethod)module.GetMethod(methodHandle); - var verifier = new Verifier((ILVerifyTypeSystemContext)method.Context, new VerifierOptions() { IncludeMetadataTokensInErrorMessages = true }); + var verifier = new Verifier((ILVerifyTypeSystemContext)method.Context, new VerifierOptions + { + IncludeMetadataTokensInErrorMessages = true, + SanityChecks = true + }); + return verifier.Verify(module.PEReader, methodHandle); } } diff --git a/src/tests/ilverify/ILTests/ExceptionRegionTests.il b/src/tests/ilverify/ILTests/ExceptionRegionTests.il index 7e066eeebf1..874c4202a0e 100644 --- a/src/tests/ilverify/ILTests/ExceptionRegionTests.il +++ b/src/tests/ilverify/ILTests/ExceptionRegionTests.il @@ -12,6 +12,15 @@ .class public sequential ansi sealed beforefieldinit ExceptionRegionTests extends [System.Runtime]System.Object { + .method public hidebysig specialname rtspecialname instance void .ctor () cil managed + { + .maxstack 1 + + IL_0000: ldarg.0 + IL_0001: call instance void [System.Runtime]System.Object::.ctor() + IL_0006: ret + } + .method public instance void ExceptionRegion.NestedTryFinally_Valid() cil managed { .try @@ -732,5 +741,27 @@ MethodEnd: ret } -} + .method public hidebysig instance void Catch.NonExceptionDerivedType_Invalid_ThrowOrCatchOnlyExceptionType() cil managed + { + .maxstack 1 + + .try {} + catch ExceptionRegionTests + { + leave.s MethodEnd + } + + MethodEnd: + ret + } + + .method public hidebysig instance void Throw.NonExceptionDerivedType_Invalid_ThrowOrCatchOnlyExceptionType() cil managed + { + .maxstack 1 + + newobj instance void ExceptionRegionTests::.ctor() + throw + ret + } +} diff --git a/src/tests/ilverify/ILTests/ThisStateTests.il b/src/tests/ilverify/ILTests/ThisStateTests.il index 7b738936d26..47b96b5b3c4 100644 --- a/src/tests/ilverify/ILTests/ThisStateTests.il +++ b/src/tests/ilverify/ILTests/ThisStateTests.il @@ -83,7 +83,7 @@ .class public auto ansi beforefieldinit ThisStateTestsType extends [System.Runtime]System.Object { - .method public hidebysig instance void 'special.ThrowThisUninit..ctor_Invalid_UninitStack'() cil managed { ret } + .method public hidebysig instance void 'special.ThrowThisUninit..ctor_Invalid_UninitStack.ThrowOrCatchOnlyExceptionType'() cil managed { ret } .method public hidebysig specialname rtspecialname instance void .ctor() cil managed { ldarg.0 diff --git a/src/tests/ilverify/ILTypeVerificationTester.cs b/src/tests/ilverify/ILTypeVerificationTester.cs index 3f9959e1d98..902e612ff76 100644 --- a/src/tests/ilverify/ILTypeVerificationTester.cs +++ b/src/tests/ilverify/ILTypeVerificationTester.cs @@ -58,7 +58,11 @@ namespace ILVerification.Tests EcmaModule module = TestDataLoader.GetModuleForTestAssembly(testCase.ModuleName); var typeHandle = (TypeDefinitionHandle)MetadataTokens.EntityHandle(testCase.MetadataToken); var type = (EcmaType)module.GetType(typeHandle); - var verifier = new Verifier((ILVerifyTypeSystemContext)type.Context, new VerifierOptions() { IncludeMetadataTokensInErrorMessages = true }); + var verifier = new Verifier((ILVerifyTypeSystemContext)type.Context, new VerifierOptions + { + IncludeMetadataTokensInErrorMessages = true, + SanityChecks = true + }); return verifier.Verify(module.PEReader, typeHandle); } |