Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/dotnet/runtime.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAdeel Mujahid <3840695+am11@users.noreply.github.com>2020-11-03 23:28:21 +0300
committerGitHub <noreply@github.com>2020-11-03 23:28:21 +0300
commite6a7763e4e32e51efcfe219eaeed8e4ae1cc3972 (patch)
treef64d0887ccac60643ed91561b09e0d1efb93a9c0 /src/tests/ilverify
parentf3f8b2253b2fdac06fc2d79022f204b28c755197 (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.cs9
-rw-r--r--src/tests/ilverify/ILTests/ExceptionRegionTests.il33
-rw-r--r--src/tests/ilverify/ILTests/ThisStateTests.il2
-rw-r--r--src/tests/ilverify/ILTypeVerificationTester.cs6
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);
}