Revert "Merge branch 'master' of https://github.com/mono/mono"
[mono.git] / mcs / class / Mono.Debugger.Soft / Test / dtest-app.cs
index cc2ffbd03cc09e47ab30a5a002a8c982eb3b861d..194b436f080076b9f3b8ce01d632fa50445ec0b4 100644 (file)
@@ -49,8 +49,17 @@ public static class Tests4 {
        }
 }
 
+public class AAttribute : Attribute {
+       public int afield;
+}
+
+public class BAttribute : AAttribute {
+       public int bfield;
+}
+
 [DebuggerDisplay ("Tests", Name="FOO", Target=typeof (int))]
 [DebuggerTypeProxy (typeof (Tests))]
+[BAttribute (afield = 1, bfield = 2)]
 public class Tests2 {
        [DebuggerBrowsableAttribute (DebuggerBrowsableState.Collapsed)]
        public int field_j;
@@ -123,6 +132,13 @@ public struct GStruct<T> {
        }
 }
 
+public struct NestedStruct {
+       NestedInner nested1, nested2;
+}
+
+public struct NestedInner {
+}
+
 interface ITest
 {
        void Foo ();
@@ -157,7 +173,12 @@ class TestIfaces<T> : ITest<T>
        }
 }
 
-public class Tests : TestsBase
+public interface ITest2
+{
+       int invoke_iface ();
+}
+
+public class Tests : TestsBase, ITest2
 {
 #pragma warning disable 0414
        int field_i;
@@ -184,9 +205,11 @@ public class Tests : TestsBase
        public AStruct field_struct;
        public object field_boxed_struct;
        public GStruct<int> generic_field_struct;
+       public KeyValuePair<int, object> boxed_struct_field;
        [ThreadStatic]
        public static int tls_i;
        public static bool is_attached = Debugger.IsAttached;
+       public NestedStruct nested_struct;
 
 #pragma warning restore 0414
 
@@ -214,6 +237,12 @@ public class Tests : TestsBase
                }
        }
 
+       public static void wait_one ()
+       {
+               ManualResetEvent evt = new ManualResetEvent (false);
+               evt.WaitOne ();
+       }
+
        public static int Main (String[] args) {
                tls_i = 42;
 
@@ -224,10 +253,18 @@ public class Tests : TestsBase
                        unhandled_exception ();
                        return 0;
                }
+               if (args.Length >0 && args [0] == "unhandled-exception-endinvoke") {
+                       unhandled_exception_endinvoke ();
+                       return 0;
+               }
                if (args.Length >0 && args [0] == "unhandled-exception-user") {
                        unhandled_exception_user ();
                        return 0;
                }
+               if (args.Length >0 && args [0] == "wait-one") {
+                       wait_one ();
+                       return 0;
+               }
                breakpoints ();
                single_stepping ();
                arguments ();
@@ -247,6 +284,7 @@ public class Tests : TestsBase
                type_load ();
                regress ();
                gc_suspend ();
+               set_ip ();
                if (args.Length > 0 && args [0] == "domain-test")
                        /* This takes a lot of time, so execute it conditionally */
                        domains ();
@@ -256,6 +294,7 @@ public class Tests : TestsBase
                        frames_in_native ();
                if (args.Length > 0 && args [0] == "invoke-single-threaded")
                        new Tests ().invoke_single_threaded ();
+               new Tests ().evaluate_method ();
                return 3;
        }
 
@@ -320,7 +359,11 @@ public class Tests : TestsBase
                } catch {
                }
                ss7 ();
+               ss_nested ();
                ss_regress_654694 ();
+               ss_step_through ();
+               ss_recursive (1);
+               ss_fp_clobber ();
        }
 
        [MethodImplAttribute (MethodImplOptions.NoInlining)]
@@ -394,6 +437,72 @@ public class Tests : TestsBase
                throw new Exception ();
        }
 
+       [MethodImplAttribute (MethodImplOptions.NoInlining)]
+       public static void ss_nested () {
+               ss_nested_1 (ss_nested_2 ());
+               ss_nested_1 (ss_nested_2 ());
+               ss_nested_3 ();
+       }
+
+       [MethodImplAttribute (MethodImplOptions.NoInlining)]
+       public static void ss_nested_1 (int i) {
+       }
+
+       [MethodImplAttribute (MethodImplOptions.NoInlining)]
+       public static int ss_nested_2 () {
+               return 0;
+       }
+
+       [MethodImplAttribute (MethodImplOptions.NoInlining)]
+       public static void ss_nested_3 () {
+       }
+
+       [MethodImplAttribute (MethodImplOptions.NoInlining)]
+       public static void ss_step_through () {
+               step_through_1 ();
+               StepThroughClass.step_through_2 ();
+               step_through_3 ();
+       }
+
+       [DebuggerStepThrough]
+       [MethodImplAttribute (MethodImplOptions.NoInlining)]
+       public static void step_through_1 () {
+       }
+
+       [DebuggerStepThrough]
+       class StepThroughClass {
+               [MethodImplAttribute (MethodImplOptions.NoInlining)]
+               public static void step_through_2 () {
+               }
+       }
+
+       [DebuggerStepThrough]
+       [MethodImplAttribute (MethodImplOptions.NoInlining)]
+       public static void step_through_3 () {
+       }
+
+       [MethodImplAttribute (MethodImplOptions.NoInlining)]
+       public static void ss_recursive (int n) {
+               if (n == 10)
+                       return;
+               ss_recursive (n + 1);
+       }
+
+       [MethodImplAttribute (MethodImplOptions.NoInlining)]
+       public static void ss_fp_clobber () {
+               double v = ss_fp_clobber_1 (5.0);
+               ss_fp_clobber_2 (v);
+       }
+
+       [MethodImplAttribute (MethodImplOptions.NoInlining)]
+       public static double ss_fp_clobber_1 (double d) {
+               return d + 2.0;
+       }
+
+       [MethodImplAttribute (MethodImplOptions.NoInlining)]
+       public static void ss_fp_clobber_2 (double d) {
+       }
+
        [MethodImplAttribute (MethodImplOptions.NoInlining)]
        public static bool is_even (int i) {
                return i % 2 == 0;
@@ -475,7 +584,7 @@ public class Tests : TestsBase
        }
 
        public static void vtypes () {
-               Tests t = new Tests () { field_struct = new AStruct () { i = 42, s = "S", k = 43 }, generic_field_struct = new GStruct<int> () { i = 42 }, field_boxed_struct = new AStruct () { i = 42 }};
+               Tests t = new Tests () { field_struct = new AStruct () { i = 42, s = "S", k = 43 }, generic_field_struct = new GStruct<int> () { i = 42 }, field_boxed_struct = new AStruct () { i = 42 }, boxed_struct_field = new KeyValuePair<int, object> (1, (long)42 ) };
                AStruct s = new AStruct { i = 44, s = "T", k = 45 };
                AStruct[] arr = new AStruct[] { 
                        new AStruct () { i = 1, s = "S1" },
@@ -506,24 +615,35 @@ public class Tests : TestsBase
        [MethodImplAttribute (MethodImplOptions.NoInlining)]
        public static void locals () {
                string s = null;
+               var astruct = new AStruct () { i = 42 };
                locals1 (null);
-               locals2<string> (null, 5, "ABC", ref s);
+               locals2<string> (null, 5, "ABC", ref s, ref astruct);
                locals3 ();
                locals6 ();
+               locals7<int> (22);
+       }
+
+       [MethodImplAttribute (MethodImplOptions.NoInlining)]
+       static void locals11 (double a, ref double b) {
        }
 
        [MethodImplAttribute (MethodImplOptions.NoInlining)]
        public static void locals1 (string[] args) {
                long foo = 42;
 
+               double ri = 1;
+               locals11 (b: ref ri, a: ri);
+
                for (int j = 0; j < 10; ++j) {
                        foo ++;
                }
        }
 
        [MethodImplAttribute (MethodImplOptions.NoInlining)]
+#if NET_4_5
        [StateMachine (typeof (int))]
-       public static void locals2<T> (string[] args, int arg, T t, ref string rs) {
+#endif
+       public static void locals2<T> (string[] args, int arg, T t, ref string rs, ref AStruct astruct) {
                long i = 42;
                string s = "AB";
 
@@ -532,10 +652,12 @@ public class Tests : TestsBase
                                i ++;
                        if (t != null)
                                i ++;
+                       astruct = new AStruct ();
                }
                rs = "A";
        }
 
+
        [MethodImplAttribute (MethodImplOptions.NoInlining)]
        public static void locals3 () {
                string s = "B";
@@ -618,6 +740,12 @@ public class Tests : TestsBase
        public static void locals6_6 (int arg) {
        }
 
+       [MethodImplAttribute (MethodImplOptions.NoInlining)]
+       public static void locals7<T> (T arg) {
+               T t = arg;
+               T t2 = t;
+       }
+
        [MethodImplAttribute (MethodImplOptions.NoInlining)]
        public static void line_numbers () {
                LineNumbers.ln1 ();
@@ -772,6 +900,10 @@ public class Tests : TestsBase
                throw new Exception ();
        }
 
+       public int invoke_iface () {
+               return 42;
+       }
+
        [MethodImplAttribute (MethodImplOptions.NoInlining)]
        public static void exceptions () {
                try {
@@ -790,6 +922,15 @@ public class Tests : TestsBase
                        throw new OverflowException ();
                } catch (Exception) {
                }
+               // no subclasses
+               try {
+                       throw new OverflowException ();
+               } catch (Exception) {
+               }
+               try {
+                       throw new Exception ();
+               } catch (Exception) {
+               }
 
                object o = null;
                try {
@@ -811,6 +952,27 @@ public class Tests : TestsBase
                Thread.Sleep (10000);
        }
 
+       [MethodImplAttribute (MethodImplOptions.NoInlining)]
+       public static void unhandled_exception_endinvoke_2 () {
+       }
+
+       [MethodImplAttribute (MethodImplOptions.NoInlining)]
+       public static void unhandled_exception_endinvoke () {
+                       Action action = new Action (() => 
+                       {
+                               throw new Exception ("thrown");
+                       });
+                       action.BeginInvoke ((ar) => {
+                               try {
+                                       action.EndInvoke (ar);
+                               } catch (Exception ex) {
+                                       //Console.WriteLine (ex);
+                               }
+                       }, null);
+               Thread.Sleep (1000);
+               unhandled_exception_endinvoke_2 ();
+       }
+
        [MethodImplAttribute (MethodImplOptions.NoInlining)]
        public static void unhandled_exception_user () {
 #if NET_4_5
@@ -1001,16 +1163,14 @@ public class Tests : TestsBase
        [MethodImplAttribute (MethodImplOptions.NoInlining)]
        public static void frames_in_native () {
                Thread.Sleep (500);
+               var evt = new ManualResetEvent (false);
+               
                object mon = new object ();
                ThreadPool.QueueUserWorkItem (delegate {
                                frames_in_native_2 ();
-                               lock (mon) {
-                                       Monitor.Pulse (mon);
-                               }
+                               evt.Set ();
                        });
-               lock (mon) {
-                       Monitor.Wait (mon);
-               }
+               evt.WaitOne ();
        }
 
        [MethodImplAttribute (MethodImplOptions.NoInlining)]
@@ -1112,6 +1272,39 @@ public class Tests : TestsBase
                set_gc_suspend_field ();
                gc_suspend_1 ();
        }
+
+       [MethodImplAttribute (MethodImplOptions.NoInlining)]
+       public static void generic_method<T> () where T : class {
+       }
+
+       [MethodImplAttribute (MethodImplOptions.NoInlining)]
+       public void evaluate_method_2 () {
+       }
+
+       [MethodImplAttribute (MethodImplOptions.NoInlining)]
+       public void evaluate_method () {
+               field_i = 42;
+               evaluate_method_2 ();
+       }
+
+       [MethodImplAttribute (MethodImplOptions.NoInlining)]
+       static void set_ip_1 () {
+       }
+
+       [MethodImplAttribute (MethodImplOptions.NoInlining)]
+       static void set_ip_2 () {
+       }
+
+       [MethodImplAttribute (MethodImplOptions.NoInlining)]
+       public static void set_ip () {
+               int i, j;
+
+               i = 1;
+               set_ip_1 ();
+               i = 5;
+               j = 5;
+               set_ip_2 ();
+       }
 }
 
 class TypeLoadClass {