2010-02-10 Geoff Norton <gnorton@novell.com>
[mono.git] / mono / mini / exceptions.cs
index b7b5b05aab4601092643d139b7fe1c4aa593e615..cf7dc613c0461c90f077bdb19ef223bc06f4bb57 100644 (file)
@@ -2476,5 +2476,97 @@ class Tests {
 
                return 0;
        }
+
+       public static int test_0_inline_throw () {
+               try {
+                       inline_throw1 (5);
+                       return 1;
+               } catch {
+                       return 0;
+               }
+       }
+
+       // for llvm, the end bblock is unreachable
+       public static int inline_throw1 (int i) {
+               if (i == 0)
+                       throw new Exception ();
+               else
+                       return inline_throw2 (i);
+       }
+
+       public static int inline_throw2 (int i) {
+               throw new Exception ();
+       }
+
+       // bug #539550
+       public static int test_0_lmf_filter () {
+               try {
+                       // The invoke calls a runtime-invoke wrapper which has a filter clause
+                       typeof (Tests).GetMethod ("lmf_filter").Invoke (null, new object [] { });
+               } catch (TargetInvocationException) {
+               }
+               return 0;
+       }
+
+    public static void lmf_filter () {
+        try {
+            Connect ();
+        }
+        catch {
+            throw new NotImplementedException ();
+        }
+    }
+
+    public static void Connect () {
+        Stop ();
+        throw new Exception();
+    }
+
+    public static void Stop () {
+        try {
+            lock (null) {}
+        }
+        catch {
+        }
+    }
+
+       private static void do_raise () {
+               throw new System.Exception ();
+       }
+
+       private static int int_func (int i) {
+               return i;
+       }
+
+       // #559876
+       public static int test_8_local_deadce_causes () {
+      int myb = 4;
+  
+      try {
+        myb = int_func (8);
+        do_raise();
+        myb = int_func (2);
+      } catch (System.Exception) {
+                 return myb;
+         }
+         return 0;
+       }
+
+       public static int test_0_except_opt_two_clauses () {
+               int size;
+               size = -1;
+               uint ui = (uint)size;
+               try {
+                       checked {
+                               uint v = ui * (uint)4;
+                       }
+               } catch (OverflowException e) {
+                       return 0;
+               } catch (Exception) {
+                       return 1;
+               }
+
+               return 2;
+       }
 }