4 * Application program used by the debugger tests.
7 using System.Runtime.CompilerServices;
8 using System.Reflection;
9 using System.Reflection.Emit;
10 using System.Diagnostics;
11 using System.Threading;
12 using System.Threading.Tasks;
13 using System.Collections.Generic;
15 using System.Net.Sockets;
16 using MonoTests.Helpers;
18 public class TestsBase
20 #pragma warning disable 0414
21 #pragma warning disable 0169
22 public int base_field_i;
23 public string base_field_s;
24 static int base_static_i = 57;
25 static string base_static_s = "C";
26 #pragma warning restore 0414
27 #pragma warning restore 0169
29 public virtual string virtual_method () {
39 public sealed class Tests3 {
40 public static void M1 () {
54 public static class Tests4 {
59 public class AAttribute : Attribute {
63 public class BAttribute : AAttribute {
67 [DebuggerDisplay ("Tests", Name="FOO", Target=typeof (int))]
68 [DebuggerTypeProxy (typeof (Tests))]
69 [BAttribute (afield = 1, bfield = 2)]
71 [DebuggerBrowsableAttribute (DebuggerBrowsableState.Collapsed)]
73 public static int static_field_j;
75 [DebuggerBrowsableAttribute (DebuggerBrowsableState.Collapsed)]
76 public int AProperty {
82 public void invoke () {
86 public struct AStruct : ITest2 {
101 public AStruct (int arg) {
109 [MethodImplAttribute (MethodImplOptions.NoInlining)]
110 public int foo (int val) {
114 [MethodImplAttribute (MethodImplOptions.NoInlining)]
115 public static int static_foo (int val) {
119 [MethodImplAttribute (MethodImplOptions.NoInlining)]
120 public int invoke_return_int () {
124 [MethodImplAttribute (MethodImplOptions.NoInlining)]
125 public static int invoke_static () {
129 [MethodImplAttribute (MethodImplOptions.NoInlining)]
130 public IntPtr invoke_return_intptr () {
134 [MethodImplAttribute (MethodImplOptions.NoInlining)]
135 public void invoke_mutate () {
139 public int invoke_iface () {
143 public override string ToString () {
144 return i.ToString ();
148 public class GClass<T> {
150 public static T static_field;
152 [MethodImplAttribute (MethodImplOptions.NoInlining)]
156 [MethodImplAttribute (MethodImplOptions.NoInlining)]
157 public void bp<T2> () {
161 public struct GStruct<T> {
166 [MethodImplAttribute (MethodImplOptions.NoInlining)]
167 public int invoke_return_int () {
172 public struct NestedStruct {
173 NestedInner nested1, nested2;
176 public struct NestedInner {
179 public interface IRecStruct {
183 struct RecStruct : IRecStruct {
186 public void foo (object o) {
203 class TestIfaces : ITest
211 TestIfaces<int> Baz () {
216 class TestIfaces<T> : ITest<T>
218 void ITest<T>.Foo () {
221 void ITest<T>.Bar () {
225 public interface ITest2
230 public class Tests : TestsBase, ITest2
232 #pragma warning disable 0414
236 bool field_bool1, field_bool2;
249 static int static_i = 55;
250 static string static_s = "A";
251 public const int literal_i = 56;
252 public const string literal_s = "B";
254 public AStruct field_struct;
255 public object field_boxed_struct;
256 public GStruct<int> generic_field_struct;
257 public KeyValuePair<int, object> boxed_struct_field;
259 public static int tls_i;
260 public static bool is_attached = Debugger.IsAttached;
261 public NestedStruct nested_struct;
263 #pragma warning restore 0414
265 public class NestedClass {
268 public int IntProperty {
277 public int ReadOnlyProperty {
283 public int this [int index] {
289 public static void wait_one ()
291 ManualResetEvent evt = new ManualResetEvent (false);
295 public static int Main (String[] args) {
298 if (args.Length > 0 && args [0] == "suspend-test")
299 /* This contains an infinite loop, so execute it conditionally */
301 if (args.Length >0 && args [0] == "unhandled-exception") {
302 unhandled_exception ();
305 if (args.Length >0 && args [0] == "unhandled-exception-endinvoke") {
306 unhandled_exception_endinvoke ();
309 if (args.Length >0 && args [0] == "unhandled-exception-user") {
310 unhandled_exception_user ();
313 if (args.Length >0 && args [0] == "wait-one") {
317 if (args.Length >0 && args [0] == "threadpool-io") {
343 if (args.Length > 0 && args [0] == "domain-test")
344 /* This takes a lot of time, so execute it conditionally */
346 if (args.Length > 0 && args [0] == "ref-emit-test")
348 if (args.Length > 0 && args [0] == "frames-in-native")
350 if (args.Length > 0 && args [0] == "invoke-single-threaded")
351 new Tests ().invoke_single_threaded ();
352 if (args.Length > 0 && args [0] == "invoke-abort")
353 new Tests ().invoke_abort ();
354 new Tests ().evaluate_method ();
358 public static void local_reflect () {
359 //Breakpoint line below, and reflect someField via ObjectMirror;
360 LocalReflectClass.RunMe ();
363 public static void breakpoints () {
364 /* Call these early so it is JITted by the time a breakpoint is placed on it */
376 bp6<string> (new GClass <int> ());
381 [MethodImplAttribute (MethodImplOptions.NoInlining)]
382 public static void bp1 () {
385 [MethodImplAttribute (MethodImplOptions.NoInlining)]
386 public static void bp2 () {
389 [MethodImplAttribute (MethodImplOptions.NoInlining)]
390 public static void bp3 () {
393 [MethodImplAttribute (MethodImplOptions.NoInlining)]
394 public static void bp4 () {
397 [MethodImplAttribute (MethodImplOptions.NoInlining)]
398 public static void bp5 () {
401 [MethodImplAttribute (MethodImplOptions.NoInlining)]
402 public static void bp6<T> (GClass<int> gc) {
406 [MethodImplAttribute (MethodImplOptions.NoInlining)]
407 public static void bp7<T> () {
410 [MethodImplAttribute (MethodImplOptions.NoInlining)]
411 public static void single_stepping () {
418 ss5 (new int [] { 1, 2, 3 }, new Func<int, bool> (is_even));
425 ss_regress_654694 ();
431 ss_recursive_chaotic ();
435 [MethodImplAttribute (MethodImplOptions.NoInlining)]
436 public static void ss1 () {
439 [MethodImplAttribute (MethodImplOptions.NoInlining)]
440 public static void ss2 () {
443 [MethodImplAttribute (MethodImplOptions.NoInlining)]
444 public static int ss3 () {
447 for (int i = 0; i < 10; ++i)
453 [MethodImplAttribute (MethodImplOptions.NoInlining)]
454 public static void ss3_2 () {
458 [MethodImplAttribute (MethodImplOptions.NoInlining)]
459 public static void ss3_2_2 () {
462 [MethodImplAttribute (MethodImplOptions.NoInlining)]
463 public static int ss4 () {
469 [MethodImplAttribute (MethodImplOptions.NoInlining)]
470 public static void ss5 (int[] arr, Func<int, bool> selector) {
471 // Call into linq which calls back into this assembly
472 arr.Count (selector);
475 [MethodImplAttribute (MethodImplOptions.NoInlining)]
476 public static void ss6 (bool b) {
479 throw new Exception ();
483 [MethodImplAttribute (MethodImplOptions.NoInlining)]
484 public static void ss6_2 () {
487 [MethodImplAttribute (MethodImplOptions.NoInlining)]
488 public static void ss7 () {
497 [MethodImplAttribute (MethodImplOptions.NoInlining)]
498 public static void ss7_2 () {
501 [MethodImplAttribute (MethodImplOptions.NoInlining)]
502 public static void ss7_3 () {
503 throw new Exception ();
506 [MethodImplAttribute (MethodImplOptions.NoInlining)]
507 public static void ss_nested () {
508 ss_nested_1 (ss_nested_2 ());
509 ss_nested_1 (ss_nested_2 ());
513 [MethodImplAttribute (MethodImplOptions.NoInlining)]
514 public static void ss_nested_1 (int i) {
517 [MethodImplAttribute (MethodImplOptions.NoInlining)]
518 public static int ss_nested_2 () {
522 [MethodImplAttribute (MethodImplOptions.NoInlining)]
523 public static void ss_nested_3 () {
526 [MethodImplAttribute (MethodImplOptions.NoInlining)]
527 public static void ss_step_through () {
529 StepThroughClass.step_through_2 ();
533 [DebuggerStepThrough]
534 [MethodImplAttribute (MethodImplOptions.NoInlining)]
535 public static void step_through_1 () {
538 [DebuggerStepThrough]
539 class StepThroughClass {
540 [MethodImplAttribute (MethodImplOptions.NoInlining)]
541 public static void step_through_2 () {
545 [DebuggerStepThrough]
546 [MethodImplAttribute (MethodImplOptions.NoInlining)]
547 public static void step_through_3 () {
550 [MethodImplAttribute (MethodImplOptions.NoInlining)]
551 public static void ss_non_user_code () {
553 StepNonUserCodeClass.non_user_code_2 ();
557 [DebuggerNonUserCode]
558 [MethodImplAttribute (MethodImplOptions.NoInlining)]
559 public static void non_user_code_1 () {
562 [DebuggerNonUserCode]
563 class StepNonUserCodeClass {
564 [MethodImplAttribute (MethodImplOptions.NoInlining)]
565 public static void non_user_code_2 () {
569 [DebuggerNonUserCode]
570 [MethodImplAttribute (MethodImplOptions.NoInlining)]
571 public static void non_user_code_3 () {
574 [MethodImplAttribute (MethodImplOptions.NoInlining)]
575 public static void ss_recursive (int n) {
578 ss_recursive (n + 1);
581 // Breakpoint will be placed here
582 [MethodImplAttribute (MethodImplOptions.NoInlining)]
583 public static void ss_recursive2_trap ()
587 public static void ss_recursive2_at (string s)
589 // Console.WriteLine (s);
592 // This method is used both for a step over and step out test.
593 [MethodImplAttribute (MethodImplOptions.NoInlining)]
594 public static void ss_recursive2 (int x)
596 ss_recursive2_at ( "ss_recursive2 in " + x);
599 ss_recursive2_at ("ss_recursive2 descend " + x);
600 ss_recursive2_trap ();
601 ss_recursive2 (next);
603 ss_recursive2_at ("ss_recursive2 out " + x);
606 // Breakpoint will be placed here
607 [MethodImplAttribute (MethodImplOptions.NoInlining)]
608 public static void ss_recursive_chaotic_trap ()
612 [MethodImplAttribute (MethodImplOptions.NoInlining)]
613 public static void ss_recursive_chaotic_at (bool exiting, string at, int n)
615 // string indent = "";
616 // for (int count = 5 - n; count > 0; count--)
618 // Console.WriteLine (indent + (exiting ? "<--" : "-->") + " " + at + " " + n);
621 [MethodImplAttribute (MethodImplOptions.NoInlining)]
622 public static void ss_recursive_chaotic_fizz (int n)
624 ss_recursive_chaotic_at (false, "fizz", n);
627 ss_recursive_chaotic_buzz (next);
628 ss_recursive_chaotic_fizzbuzz (next);
630 ss_recursive_chaotic_trap ();
632 ss_recursive_chaotic_at (true, "fizz", n);
635 [MethodImplAttribute (MethodImplOptions.NoInlining)]
636 public static void ss_recursive_chaotic_buzz (int n)
638 ss_recursive_chaotic_at (false, "buzz", n);
641 ss_recursive_chaotic_fizz (next);
642 ss_recursive_chaotic_fizzbuzz (next);
644 ss_recursive_chaotic_at (true, "buzz", n);
647 [MethodImplAttribute (MethodImplOptions.NoInlining)]
648 public static void ss_recursive_chaotic_fizzbuzz (int n)
650 ss_recursive_chaotic_at (false, "fizzbuzz", n);
653 ss_recursive_chaotic_fizz (next);
654 ss_recursive_chaotic_buzz (next);
655 ss_recursive_chaotic_fizzbuzz (next);
657 ss_recursive_chaotic_at (true, "fizzbuzz", n);
660 // Call a complex tree of recursive calls that has tripped up "step out" in the past.
661 [MethodImplAttribute (MethodImplOptions.NoInlining)]
662 public static void ss_recursive_chaotic ()
664 ss_recursive_chaotic_fizz (5);
667 [MethodImplAttribute (MethodImplOptions.NoInlining)]
668 public static void ss_fp_clobber () {
669 double v = ss_fp_clobber_1 (5.0);
673 [MethodImplAttribute (MethodImplOptions.NoInlining)]
674 public static double ss_fp_clobber_1 (double d) {
678 [MethodImplAttribute (MethodImplOptions.NoInlining)]
679 public static void ss_fp_clobber_2 (double d) {
682 [MethodImplAttribute (MethodImplOptions.NoInlining)]
683 public static bool is_even (int i) {
689 Console.WriteLine ("HIT!");
695 [MethodImplAttribute (MethodImplOptions.NoInlining)]
696 public static void arguments () {
697 arg1 (SByte.MaxValue - 5, Byte.MaxValue - 5, true, Int16.MaxValue - 5, UInt16.MaxValue - 5, 'F', Int32.MaxValue - 5, UInt32.MaxValue - 5, Int64.MaxValue - 5, UInt64.MaxValue - 5, 1.2345f, 6.78910, new IntPtr (Int32.MaxValue - 5), new UIntPtr (UInt32.MaxValue - 5));
699 arg2 ("FOO", null, "BLA", ref i, new GClass <int> { field = 42 }, new object (), '\0'.ToString () + "A");
700 Tests t = new Tests () { field_i = 42, field_s = "S" };
704 [MethodImplAttribute (MethodImplOptions.NoInlining)]
705 public static int arg1 (sbyte sb, byte b, bool bl, short s, ushort us, char c, int i, uint ui, long l, ulong ul, float f, double d, IntPtr ip, UIntPtr uip) {
706 return (int)(sb + b + (bl ? 0 : 1) + s + us + (int)c + i + ui + l + (long)ul + f + d + (int)ip + (int)uip);
709 [MethodImplAttribute (MethodImplOptions.NoInlining)]
710 public static string arg2 (string s, string s3, object o, ref int i, GClass <int> gc, object o2, string s4) {
711 return s + (s3 != null ? "" : "") + o + i + gc.field + o2;
714 [MethodImplAttribute (MethodImplOptions.NoInlining)]
715 public object arg3 (string s) {
716 return s + s + s + s + this;
719 [MethodImplAttribute (MethodImplOptions.NoInlining)]
720 public static void objects () {
721 Tests t = new Tests () { field_i = 42, field_bool1 = true, field_bool2 = false, field_char = 'A', field_byte = 129, field_sbyte = -33, field_short = Int16.MaxValue - 5, field_ushort = UInt16.MaxValue - 5, field_long = Int64.MaxValue - 5, field_ulong = UInt64.MaxValue - 5, field_float = 3.14f, field_double = 3.14f, field_s = "S", base_field_i = 43, base_field_s = "T", field_enum = AnEnum.B, field_class = null, field_intptr = new IntPtr (Int32.MaxValue - 5), field_nullable = null };
722 t.o1 (new Tests2 () { field_j = 43 }, new GClass <int> { field = 42 }, new GClass <string> { field = "FOO" });
723 o2 (new string [] { "BAR", "BAZ" }, new int[] { 42, 43 }, new int [,] { { 1, 2 }, { 3, 4 }}, (int[,])Array.CreateInstance (typeof (int), new int [] { 2, 2}, new int [] { 1, 3}), new int[] { 0 });
726 [MethodImplAttribute (MethodImplOptions.NoInlining)]
727 public object o1 (Tests2 t, GClass <int> gc1, GClass <string> gc2) {
728 if (t == null || gc1 == null || gc2 == null)
734 [MethodImplAttribute (MethodImplOptions.NoInlining)]
735 public static string o2 (string[] s2, int[] s3, int[,] s4, int[,] s5, IList<int> s6) {
736 return s2 [0] + s3 [0] + s4 [0, 0] + s6 [0];
739 [MethodImplAttribute (MethodImplOptions.NoInlining)]
740 public static void objrefs () {
741 Tests t = new Tests () {};
749 [MethodImplAttribute (MethodImplOptions.NoInlining)]
750 public static void set_child (Tests t) {
751 t.child = new Tests ();
754 [MethodImplAttribute (MethodImplOptions.NoInlining)]
755 public void objrefs1 () {
758 [MethodImplAttribute (MethodImplOptions.NoInlining)]
759 public static void objrefs2 () {
762 public static void vtypes () {
763 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 ) };
764 AStruct s = new AStruct { i = 44, s = "T", k = 45 };
765 AStruct[] arr = new AStruct[] {
766 new AStruct () { i = 1, s = "S1" },
767 new AStruct () { i = 2, s = "S2" } };
768 TypedReference typedref = __makeref (s);
769 t.vtypes1 (s, arr, typedref);
775 [MethodImplAttribute (MethodImplOptions.NoInlining)]
776 public object vtypes1 (AStruct s, AStruct[] arr, TypedReference typedref) {
783 [MethodImplAttribute (MethodImplOptions.NoInlining)]
784 public static void vtypes2 (AStruct s) {
788 [MethodImplAttribute (MethodImplOptions.NoInlining)]
789 public static void vtypes3 (AStruct s) {
790 AStruct.static_foo (5);
793 [MethodImplAttribute (MethodImplOptions.NoInlining)]
794 public static void vtypes4_2 (IRecStruct o) {
797 [MethodImplAttribute (MethodImplOptions.NoInlining)]
798 public static void vtypes4 () {
799 IRecStruct s = new RecStruct ();
804 [MethodImplAttribute (MethodImplOptions.NoInlining)]
805 public static void locals () {
807 var astruct = new AStruct () { i = 42 };
809 locals2<string> (null, 5, "ABC", ref s, ref astruct);
815 [MethodImplAttribute (MethodImplOptions.NoInlining)]
816 static void locals11 (double a, ref double b) {
819 [MethodImplAttribute (MethodImplOptions.NoInlining)]
820 public static void locals1 (string[] args) {
824 locals11 (b: ref ri, a: ri);
826 for (int j = 0; j < 10; ++j) {
831 [MethodImplAttribute (MethodImplOptions.NoInlining)]
833 [StateMachine (typeof (int))]
835 public static void locals2<T> (string[] args, int arg, T t, ref string rs, ref AStruct astruct) {
839 for (int j = 0; j < 10; ++j) {
844 astruct = new AStruct ();
847 List<int> alist = new List<int> () { 12 };
851 [MethodImplAttribute (MethodImplOptions.NoInlining)]
852 public static void locals3 () {
872 [MethodImplAttribute (MethodImplOptions.NoInlining)]
873 public static void locals4 () {
876 [MethodImplAttribute (MethodImplOptions.NoInlining)]
877 public static void locals5 () {
880 [MethodImplAttribute (MethodImplOptions.NoInlining)]
881 public static void locals6 () {
884 for (i = 0; i < 10; ++i)
887 for (i = 0; i < 10; ++i)
897 [MethodImplAttribute (MethodImplOptions.NoInlining)]
898 public static void locals6_1 () {
901 [MethodImplAttribute (MethodImplOptions.NoInlining)]
902 public static void locals6_2 (int arg) {
905 [MethodImplAttribute (MethodImplOptions.NoInlining)]
906 public static void locals6_3 () {
907 // Clobber all registers
908 int sum = 0, i, j, k, l, m;
909 for (i = 0; i < 100; ++i)
911 for (j = 0; j < 100; ++j)
913 for (k = 0; k < 100; ++k)
915 for (l = 0; l < 100; ++l)
917 for (m = 0; m < 100; ++m)
921 [MethodImplAttribute (MethodImplOptions.NoInlining)]
922 public static void locals6_4 (int arg) {
925 [MethodImplAttribute (MethodImplOptions.NoInlining)]
926 public static void locals6_5 () {
929 [MethodImplAttribute (MethodImplOptions.NoInlining)]
930 public static void locals6_6 (int arg) {
933 [MethodImplAttribute (MethodImplOptions.NoInlining)]
934 public static void locals7<T> (T arg) {
939 [MethodImplAttribute (MethodImplOptions.NoInlining)]
940 public static void line_numbers () {
944 [MethodImplAttribute (MethodImplOptions.NoInlining)]
945 public static void suspend () {
953 struct TypedRefTest {
957 [MethodImplAttribute (MethodImplOptions.NoInlining)]
958 public static void type_info () {
959 Tests t = new Tests () { field_i = 42, field_s = "S", base_field_i = 43, base_field_s = "T", field_enum = AnEnum.B };
960 t.ti1 (new Tests2 () { field_j = 43 }, new GClass <int> { field = 42 }, new GClass <string> { field = "FOO" });
963 AStruct s = new AStruct () { i = 42, s = "S", k = 43 };
964 TypedRefTest reftest = new TypedRefTest () { MaxValue = 12 };
965 TypedReference typedref = __makeref (reftest);
966 ti2 (new string [] { "BAR", "BAZ" }, new int[] { 42, 43 }, new int [,] { { 1, 2 }, { 3, 4 }}, ref val, (int*)IntPtr.Zero, 5, s, new Tests (), new Tests2 (), new GClass <int> (), AnEnum.B, typedref);
970 [MethodImplAttribute (MethodImplOptions.NoInlining)]
971 public object ti1 (Tests2 t, GClass <int> gc1, GClass <string> gc2) {
972 if (t == null || gc1 == null || gc2 == null)
978 [MethodImplAttribute (MethodImplOptions.NoInlining)]
979 public static unsafe string ti2 (string[] s2, int[] s3, int[,] s4, ref int ri, int* ptr, int i, AStruct s, Tests t, Tests2 t2, GClass<int> g, AnEnum ae, TypedReference typedref) {
980 return s2 [0] + s3 [0] + s4 [0, 0];
983 [MethodImplAttribute (MethodImplOptions.NoInlining)]
984 public static void assembly_load () {
988 [MethodImplAttribute (MethodImplOptions.NoInlining)]
989 public static void assembly_load_2 () {
990 // This will load System.dll while holding the loader lock
994 [MethodImplAttribute (MethodImplOptions.NoInlining)]
995 public static void invoke () {
996 new Tests ().invoke1 (new Tests2 (), new AStruct () { i = 42, j = (IntPtr)43 }, new GStruct<int> { j = 42 });
997 new Tests ().invoke_ex ();
1000 [MethodImplAttribute (MethodImplOptions.NoInlining)]
1001 public void invoke1 (Tests2 t, AStruct s, GStruct<int> g) {
1005 [MethodImplAttribute (MethodImplOptions.NoInlining)]
1006 public void invoke2 () {
1009 [MethodImplAttribute (MethodImplOptions.NoInlining)]
1010 public void invoke_ex () {
1014 [MethodImplAttribute (MethodImplOptions.NoInlining)]
1015 public void invoke_ex_inner () {
1017 throw new Exception ();
1024 [MethodImplAttribute (MethodImplOptions.NoInlining)]
1025 public void invoke_single_threaded () {
1026 // Spawn a thread incrementing a counter
1027 bool finished = false;
1029 new Thread (delegate () {
1036 invoke_single_threaded_2 ();
1041 [MethodImplAttribute (MethodImplOptions.NoInlining)]
1042 public void invoke_single_threaded_2 () {
1045 [MethodImplAttribute (MethodImplOptions.NoInlining)]
1046 public void invoke_abort () {
1049 [MethodImplAttribute (MethodImplOptions.NoInlining)]
1050 public void invoke_abort_2 () {
1051 Thread.Sleep (1000000);
1054 public void invoke_return_void () {
1057 public string invoke_return_ref () {
1061 public object invoke_return_null () {
1065 public int invoke_return_primitive () {
1069 public int? invoke_return_nullable () {
1073 public int? invoke_return_nullable_null () {
1077 public void invoke_type_load () {
1084 public long invoke_pass_primitive (byte ub, sbyte sb, short ss, ushort us, int i, uint ui, long l, ulong ul, char c, bool b, float f, double d) {
1085 return ub + sb + ss + us + i + ui + l + (long)ul + (int)c + (b ? 1 : 0) + (int)f + (int)d;
1088 public int invoke_pass_primitive2 (bool b) {
1092 public string invoke_pass_ref (string s) {
1096 public static string invoke_static_pass_ref (string s) {
1100 public static void invoke_static_return_void () {
1103 public static void invoke_throws () {
1104 throw new Exception ();
1107 public int invoke_iface () {
1111 public void invoke_out (out int foo, out int[] arr) {
1116 [MethodImplAttribute (MethodImplOptions.NoInlining)]
1117 public static void exceptions () {
1119 throw new OverflowException ();
1120 } catch (Exception) {
1123 throw new OverflowException ();
1124 } catch (Exception) {
1127 throw new ArgumentException ();
1128 } catch (Exception) {
1131 throw new OverflowException ();
1132 } catch (Exception) {
1136 throw new OverflowException ();
1137 } catch (Exception) {
1140 throw new Exception ();
1141 } catch (Exception) {
1147 } catch (Exception) {
1152 } catch (Exception) {
1156 [MethodImplAttribute (MethodImplOptions.NoInlining)]
1157 public static void unhandled_exception () {
1158 ThreadPool.QueueUserWorkItem (delegate {
1159 throw new InvalidOperationException ();
1161 Thread.Sleep (10000);
1164 [MethodImplAttribute (MethodImplOptions.NoInlining)]
1165 public static void unhandled_exception_endinvoke_2 () {
1168 [MethodImplAttribute (MethodImplOptions.NoInlining)]
1169 public static void unhandled_exception_endinvoke () {
1170 Action action = new Action (() =>
1172 throw new Exception ("thrown");
1174 action.BeginInvoke ((ar) => {
1176 action.EndInvoke (ar);
1177 } catch (Exception ex) {
1178 //Console.WriteLine (ex);
1181 Thread.Sleep (1000);
1182 unhandled_exception_endinvoke_2 ();
1185 [MethodImplAttribute (MethodImplOptions.NoInlining)]
1186 public static void unhandled_exception_user () {
1188 System.Threading.Tasks.Task.Factory.StartNew (() => {
1191 Thread.Sleep (10000);
1195 [MethodImplAttribute (MethodImplOptions.NoInlining)]
1196 public static void Throw () {
1197 throw new Exception ();
1200 internal static Delegate create_filter_delegate (Delegate dlg, MethodInfo filter_method)
1203 throw new ArgumentNullException ();
1204 if (dlg.Target != null)
1205 throw new ArgumentException ();
1206 if (dlg.Method == null)
1207 throw new ArgumentException ();
1209 var ret_type = dlg.Method.ReturnType;
1210 var param_types = dlg.Method.GetParameters ().Select (x => x.ParameterType).ToArray ();
1212 var dynamic = new DynamicMethod (Guid.NewGuid ().ToString (), ret_type, param_types, typeof (object), true);
1213 var ig = dynamic.GetILGenerator ();
1215 LocalBuilder retval = null;
1216 if (ret_type != typeof (void))
1217 retval = ig.DeclareLocal (ret_type);
1219 var label = ig.BeginExceptionBlock ();
1221 for (int i = 0; i < param_types.Length; i++)
1222 ig.Emit (OpCodes.Ldarg, i);
1223 ig.Emit (OpCodes.Call, dlg.Method);
1226 ig.Emit (OpCodes.Stloc, retval);
1228 ig.Emit (OpCodes.Leave, label);
1230 ig.BeginExceptFilterBlock ();
1232 ig.Emit (OpCodes.Call, filter_method);
1234 ig.BeginCatchBlock (null);
1236 ig.Emit (OpCodes.Pop);
1238 ig.EndExceptionBlock ();
1241 ig.Emit (OpCodes.Ldloc, retval);
1243 ig.Emit (OpCodes.Ret);
1245 return dynamic.CreateDelegate (dlg.GetType ());
1248 [MethodImplAttribute (MethodImplOptions.NoInlining)]
1249 static void exception_filter_method () {
1250 throw new InvalidOperationException ();
1253 [MethodImplAttribute (MethodImplOptions.NoInlining)]
1254 static int exception_filter_filter (Exception exc) {
1258 [MethodImplAttribute (MethodImplOptions.NoInlining)]
1259 public static void exception_filter () {
1260 var method = typeof (Tests).GetMethod (
1261 "exception_filter_method", BindingFlags.NonPublic | BindingFlags.Static);
1262 var filter_method = typeof (Tests).GetMethod (
1263 "exception_filter_filter", BindingFlags.NonPublic | BindingFlags.Static);
1265 var dlg = Delegate.CreateDelegate (typeof (Action), method);
1267 var wrapper = (Action) create_filter_delegate (dlg, filter_method);
1272 [MethodImplAttribute (MethodImplOptions.NoInlining)]
1273 public static bool return_true () {
1277 [MethodImplAttribute (MethodImplOptions.NoInlining)]
1278 public static void exceptions2 () {
1280 throw new Exception ();
1281 Console.WriteLine ();
1284 [MethodImplAttribute (MethodImplOptions.NoInlining)]
1285 public static void threads () {
1286 Thread t = new Thread (delegate () {});
1292 [MethodImplAttribute (MethodImplOptions.NoInlining)]
1293 public static void domains () {
1294 AppDomain domain = AppDomain.CreateDomain ("domain");
1296 CrossDomain o = (CrossDomain)domain.CreateInstanceAndUnwrap (
1297 typeof (CrossDomain).Assembly.FullName, "CrossDomain");
1299 domains_print_across (o);
1301 domains_2 (o, new CrossDomain ());
1309 AppDomain.Unload (domain);
1313 typeof (Tests).GetMethod ("called_from_invoke").Invoke (null, null);
1316 [MethodImplAttribute (MethodImplOptions.NoInlining)]
1317 public static void called_from_invoke () {
1320 [MethodImplAttribute (MethodImplOptions.NoInlining)]
1321 public static void domains_2 (object o, object o2) {
1324 [MethodImplAttribute (MethodImplOptions.NoInlining)]
1325 public static void domains_print_across (object o) {
1328 [MethodImplAttribute (MethodImplOptions.NoInlining)]
1329 public static void domains_3 () {
1332 [MethodImplAttribute (MethodImplOptions.NoInlining)]
1333 public static void invoke_in_domain () {
1336 [MethodImplAttribute (MethodImplOptions.NoInlining)]
1337 public static void invoke_in_domain_2 () {
1340 [MethodImplAttribute (MethodImplOptions.NoInlining)]
1341 public static void dynamic_methods () {
1342 var m = new DynamicMethod ("dyn_method", typeof (void), new Type [] { typeof (int) }, typeof (object).Module);
1343 var ig = m.GetILGenerator ();
1345 ig.Emit (OpCodes.Ldstr, "FOO");
1346 ig.Emit (OpCodes.Call, typeof (Tests).GetMethod ("dyn_call"));
1347 ig.Emit (OpCodes.Ret);
1349 var del = (Action<int>)m.CreateDelegate (typeof (Action<int>));
1354 public static void dyn_call (string s) {
1357 [MethodImplAttribute (MethodImplOptions.NoInlining)]
1358 public static void ref_emit () {
1359 AssemblyName assemblyName = new AssemblyName ();
1360 assemblyName.Name = "foo";
1362 AssemblyBuilder assembly =
1363 Thread.GetDomain ().DefineDynamicAssembly (
1364 assemblyName, AssemblyBuilderAccess.RunAndSave);
1366 ModuleBuilder module = assembly.DefineDynamicModule ("foo.dll");
1368 TypeBuilder tb = module.DefineType ("foo", TypeAttributes.Public, typeof (object));
1369 MethodBuilder mb = tb.DefineMethod ("ref_emit_method", MethodAttributes.Public|MethodAttributes.Static, CallingConventions.Standard, typeof (void), new Type [] { });
1370 ILGenerator ig = mb.GetILGenerator ();
1371 ig.Emit (OpCodes.Ldstr, "FOO");
1372 ig.Emit (OpCodes.Call, typeof (Tests).GetMethod ("ref_emit_call"));
1373 ig.Emit (OpCodes.Ret);
1375 Type t = tb.CreateType ();
1377 t.GetMethod ("ref_emit_method").Invoke (null, null);
1380 [MethodImplAttribute (MethodImplOptions.NoInlining)]
1381 public static void ref_emit_call (string s) {
1384 [MethodImplAttribute (MethodImplOptions.NoInlining)]
1385 public static void frames_in_native () {
1387 var evt = new ManualResetEvent (false);
1389 object mon = new object ();
1390 ThreadPool.QueueUserWorkItem (delegate {
1391 frames_in_native_2 ();
1397 [MethodImplAttribute (MethodImplOptions.NoInlining)]
1398 static void frames_in_native_2 () {
1399 frames_in_native_3 ();
1402 [MethodImplAttribute (MethodImplOptions.NoInlining)]
1403 static void frames_in_native_3 () {
1406 [MethodImplAttribute (MethodImplOptions.NoInlining)]
1407 public static void string_call (string s) {
1410 [MethodImplAttribute (MethodImplOptions.NoInlining)]
1411 public static void ss_regress_654694 () {
1418 [MethodImplAttribute (MethodImplOptions.NoInlining)]
1419 public static void user () {
1422 Debugger.Log (5, Debugger.IsLogging () ? "A" : "", "B");
1425 [MethodImplAttribute (MethodImplOptions.NoInlining)]
1426 public static void type_load () {
1430 [MethodImplAttribute (MethodImplOptions.NoInlining)]
1431 static void type_load_2 () {
1432 var c1 = new Dictionary<int, int> ();
1434 var c = new TypeLoadClass ();
1436 var c2 = new TypeLoadClass2 ();
1440 [MethodImplAttribute (MethodImplOptions.NoInlining)]
1441 public static void regress () {
1442 regress_2755 (DateTime.Now);
1445 [MethodImplAttribute (MethodImplOptions.NoInlining)]
1446 public static unsafe void regress_2755 (DateTime d) {
1447 int* buffer = stackalloc int [128];
1452 for (int i = 0; i < 128; ++i)
1455 regress_2755_3 (sum);
1458 [MethodImplAttribute (MethodImplOptions.NoInlining)]
1459 public static void regress_2755_2 () {
1462 [MethodImplAttribute (MethodImplOptions.NoInlining)]
1463 public static void regress_2755_3 (int sum) {
1466 static object gc_suspend_field;
1468 [MethodImplAttribute (MethodImplOptions.NoInlining)]
1469 static unsafe void set_gc_suspend_field () {
1470 set_gc_suspend_field_2 ();
1472 int* buffer = stackalloc int [4096];
1475 [MethodImplAttribute (MethodImplOptions.NoInlining)]
1476 static void set_gc_suspend_field_2 () {
1477 gc_suspend_field = new object ();
1480 [MethodImplAttribute (MethodImplOptions.NoInlining)]
1481 static void gc_suspend_1 () {
1484 [MethodImplAttribute (MethodImplOptions.NoInlining)]
1485 public static void gc_suspend_invoke () {
1486 gc_suspend_field = null;
1488 GC.WaitForPendingFinalizers ();
1491 [MethodImplAttribute (MethodImplOptions.NoInlining)]
1492 public static void gc_suspend () {
1493 set_gc_suspend_field ();
1497 [MethodImplAttribute (MethodImplOptions.NoInlining)]
1498 public static void generic_method<T> () where T : class {
1501 [MethodImplAttribute (MethodImplOptions.NoInlining)]
1502 public void evaluate_method_2 () {
1505 [MethodImplAttribute (MethodImplOptions.NoInlining)]
1506 public void evaluate_method () {
1508 evaluate_method_2 ();
1511 [MethodImplAttribute (MethodImplOptions.NoInlining)]
1512 static void set_ip_1 () {
1515 [MethodImplAttribute (MethodImplOptions.NoInlining)]
1516 static void set_ip_2 () {
1519 [MethodImplAttribute (MethodImplOptions.NoInlining)]
1520 public static void set_ip () {
1531 [MethodImplAttribute (MethodImplOptions.NoInlining)]
1532 public static void step_filters () {
1533 ClassWithCctor.cctor_filter ();
1536 class ClassWithCctor {
1537 [MethodImplAttribute (MethodImplOptions.NoInlining)]
1538 static ClassWithCctor () {
1543 [MethodImplAttribute (MethodImplOptions.NoInlining)]
1544 public static void cctor_filter () {
1548 public override string virtual_method () {
1552 [MethodImplAttribute (MethodImplOptions.NoInlining)]
1553 public static void threadpool_bp () { }
1555 [MethodImplAttribute (MethodImplOptions.NoInlining)]
1556 public static void threadpool_io () {
1557 // Start a threadpool task that blocks on I/O.
1558 // Regression test for #42625
1559 const int nbytes = 16;
1560 var bsOut = new byte[nbytes];
1561 for (int i = 0; i < nbytes; i++) {
1564 var endPoint = NetworkHelpers.LocalEphemeralEndPoint ();
1565 var l = new TcpListener (endPoint);
1567 Task<byte[]> t = Task.Run (async () => {
1568 var c = new TcpClient ();
1569 await c.ConnectAsync (endPoint.Address, endPoint.Port);
1570 var streamIn = c.GetStream ();
1571 var bs = new byte[nbytes];
1573 int nremain = nbytes;
1574 while (nread < nbytes) {
1575 int r = await streamIn.ReadAsync (bs, nread, nremain);
1582 var s = l.AcceptTcpClient ();
1584 // write bytes in two groups so that the task blocks on the ReadAsync
1585 var streamOut = s.GetStream ();
1586 var nbytesFirst = nbytes / 2;
1587 var nbytesRest = nbytes - nbytesFirst;
1588 streamOut.Write (bsOut, 0, nbytesFirst);
1590 streamOut.Write (bsOut, nbytesFirst, nbytesRest);
1592 var bsIn = t.Result;
1596 class TypeLoadClass {
1599 class TypeLoadClass2 {
1602 public class SentinelClass : MarshalByRefObject {
1605 public class CrossDomain : MarshalByRefObject
1607 SentinelClass printMe = new SentinelClass ();
1609 public void invoke () {
1610 Tests.invoke_in_domain ();
1613 public void invoke_2 () {
1614 Tests.invoke_in_domain_2 ();
1617 public int invoke_3 () {
1624 public ProcessStartInfo info;
1627 // Class used for line number info testing, don't change its layout
1628 public class LineNumbers
1630 [MethodImplAttribute (MethodImplOptions.NoInlining)]
1631 public static void ln1 () {
1637 [MethodImplAttribute (MethodImplOptions.NoInlining)]
1638 public static void ln2 () {
1641 [MethodImplAttribute (MethodImplOptions.NoInlining)]
1642 public static void ln3 () {
1643 #pragma warning disable 0219
1645 #pragma warning restore 0219
1650 class LocalReflectClass
1652 public static void RunMe ()
1654 var reflectMe = new someClass ();
1655 reflectMe.someMethod ();
1658 class someClass : ContextBoundObject
1660 public object someField;
1662 public void someMethod ()