diff options
Diffstat (limited to 'mcs/ilasm/tests/test-seh-e.il')
-rw-r--r-- | mcs/ilasm/tests/test-seh-e.il | 100 |
1 files changed, 100 insertions, 0 deletions
diff --git a/mcs/ilasm/tests/test-seh-e.il b/mcs/ilasm/tests/test-seh-e.il new file mode 100644 index 00000000000..24d623361b6 --- /dev/null +++ b/mcs/ilasm/tests/test-seh-e.il @@ -0,0 +1,100 @@ +// +// Test multiple catch blocks +// +// Author(s): +// Jackson Harper (Jackson@LatitudeGeo.com) +// +// (C) 2003 Jackson Harper, All rights reserved +// + +.assembly extern mscorlib { } +.assembly extern System { } +.assembly 'test-seh-b' { } + + +.class public T { + + .field private static int32 exc_not_thrown + .field private static int32 catch_1 + .field private static int32 catch_2 + .field private static int32 catch_3 + + .method public static specialname void .cctor () + { + ldc.i4.0 + stsfld int32 T::exc_not_thrown + + ldc.i4.0 + stsfld int32 T::catch_1 + + ldc.i4.0 + stsfld int32 T::catch_2 + + ldc.i4.0 + stsfld int32 T::catch_3 + + ret + } + + .method public static int32 Main () + { + .entrypoint + + // + // Only the second catch block should be executed + // + + .try { + ldc.i4.0 + ldc.i4.0 + div + + ldc.i4.1 + stsfld int32 T::exc_not_thrown + + leave outer + } catch [mscorlib]System.InvalidCastException { + ldc.i4.1 + stsfld int32 T::catch_1 + leave outer + } catch [mscorlib]System.DivideByZeroException { + ldc.i4.1 + stsfld int32 T::catch_2 + leave outer + } catch [mscorlib]System.Exception { + ldc.i4.1 + stsfld int32 T::catch_3 + leave outer + } + + + outer: + ldsfld int32 T::exc_not_thrown + brtrue fail + + ldsfld int32 T::catch_1 + brtrue fail + + ldsfld int32 T::catch_2 + brfalse fail + + ldsfld int32 T::catch_3 + brtrue fail + + pass: + ldstr "PASS" + call void [mscorlib]System.Console::WriteLine (string) + ldc.i4.0 + ret + + fail: + ldstr "FAIL" + call void [mscorlib]System.Console::WriteLine (string) + ldc.i4.1 + ret + + } + +} + + |