X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mono%2Fmini%2Fexceptions.cs;h=1e3ded9587a7d63ff7bdf25ad5024fc446fe7cb4;hb=caa9ed689f20ab27f43ed988848fca7f7834b6b0;hp=4e11a7d4157c07e17bcc9151b92114dae72c3c1d;hpb=8b671a8c31368e2046aa9546c46f01b99c5c8008;p=mono.git diff --git a/mono/mini/exceptions.cs b/mono/mini/exceptions.cs index 4e11a7d4157..1e3ded9587a 100644 --- a/mono/mini/exceptions.cs +++ b/mono/mini/exceptions.cs @@ -981,7 +981,6 @@ class Tests return 0; } - [Category ("!INTERPRETER")] public static int test_0_int_cast () { int a; long l; @@ -1428,6 +1427,7 @@ class Tests return 0; } + [Category ("!WASM")] // reported as https://github.com/kripken/emscripten/issues/5603 public static int test_0_simple_double_casts () { double d = 0xffffffff; @@ -1463,8 +1463,6 @@ class Tests return 0; } - [Category ("!INTERPRETER")] - [Category ("NaClDisable")] public static int test_0_div_zero () { int d = 1; int q = 0; @@ -1635,8 +1633,6 @@ class Tests return 0; } - [Category ("!INTERPRETER")] - [Category ("NaClDisable")] public static int test_0_long_div_zero () { long d = 1; long q = 0; @@ -1803,7 +1799,6 @@ class Tests return 0; } - [Category ("!INTERPRETER")] public static int test_3_checked_cast_un () { ulong i = 0x8000000034000000; long j; @@ -1819,7 +1814,6 @@ class Tests return 3; } - [Category ("!INTERPRETER")] public static int test_4_checked_cast () { long i; ulong j; @@ -1847,7 +1841,6 @@ class Tests 7, 0, 7, 1, 7, 2, 7, 3, 7, 4, 7, 5, 7, 6, 7, 7, 7, 8, }; - [Category ("!INTERPRETER")] public static int test_0_multi_dim_array_access () { int [,] a = System.Array.CreateInstance (typeof (int), new int [] {3,6}, new int [] {2,2 }) as int[,]; @@ -1884,7 +1877,6 @@ class Tests o = "buddy"; } - [Category ("!INTERPRETER")] public static int test_2_array_mismatch () { string[] a = { "hello", "world" }; object[] b = a; @@ -2237,7 +2229,6 @@ class Tests } } - [Category ("!INTERPRETER")] public static int test_0_exception_in_cctor () { try { Broken.DoSomething (); @@ -2326,7 +2317,6 @@ class Tests Console.WriteLine (); } - [Category ("!INTERPRETER")] [Category ("!BITCODE")] public static int test_0_rethrow_stacktrace () { // Check that rethrowing an exception preserves the original stack trace @@ -2389,7 +2379,6 @@ class Tests } } - [Category ("!INTERPRETER")] public static int test_0_array_size () { bool failed; @@ -2716,7 +2705,6 @@ class Tests public static Foo* pFoo; } - [Category ("!INTERPRETER")] /* MS.NET doesn't seem to throw in this case */ public unsafe static int test_0_ldflda_null_pointer () { int* pi = &Foo.pFoo->i; @@ -2856,6 +2844,95 @@ class Tests } return 0; } + + public class MyException : Exception { + public int marker = 0; + public string res = ""; + + public MyException (String res) { + this.res = res; + } + + public bool FilterWithoutState () { + return this.marker == 0x666; + } + + public bool FilterWithState () { + bool ret = this.marker == 0x566; + this.marker += 0x100; + return ret; + } + + public bool FilterWithStringState () { + bool ret = this.marker == 0x777; + this.res = "fromFilter_" + this.res; + return ret; + } + } + + [Category ("!BITCODE")] + public static int test_1_basic_filter_catch () { + try { + MyException e = new MyException (""); + e.marker = 0x1337; + throw e; + } catch (MyException ex) when (ex.marker == 0x1337) { + return 1; + } + return 0; + } + + [Category ("!BITCODE")] + public static int test_1234_complicated_filter_catch () { + string res = "init"; + try { + MyException e = new MyException (res); + e.marker = 0x566; + try { + try { + throw e; + } catch (MyException ex) when (ex.FilterWithoutState ()) { + res = "WRONG_" + res; + } finally { + e.marker = 0x777; + res = "innerFinally_" + res; + } + } catch (MyException ex) when (ex.FilterWithState ()) { + res = "2ndcatch_" + res; + } + // "2ndcatch_innerFinally_init" + // Console.WriteLine ("res1: " + res); + e.res = res; + throw e; + } catch (MyException ex) when (ex.FilterWithStringState ()) { + res = "fwos_" + ex.res; + } finally { + res = "outerFinally_" + res; + } + // Console.WriteLine ("res2: " + res); + return "outerFinally_fwos_fromFilter_2ndcatch_innerFinally_init" == res ? 1234 : 0; + } + + public struct FooStruct + { + public long Part1 { get; } + public long Part2 { get; } + + public byte Part3 { get; } + } + + [MethodImpl( MethodImplOptions.NoInlining )] + private static bool ExceptionFilter( byte x, FooStruct item ) => true; + + [Category ("!BITCODE")] + public static int test_0_filter_caller_area () { + try { + throw new Exception(); + } + catch (Exception) when (ExceptionFilter (default(byte), default (FooStruct))) { + } + return 0; + } } #if !__MOBILE__