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 ();
436 [MethodImplAttribute (MethodImplOptions.NoInlining)]
437 public static void ss1 () {
440 [MethodImplAttribute (MethodImplOptions.NoInlining)]
441 public static void ss2 () {
444 [MethodImplAttribute (MethodImplOptions.NoInlining)]
445 public static int ss3 () {
448 for (int i = 0; i < 10; ++i)
454 [MethodImplAttribute (MethodImplOptions.NoInlining)]
455 public static void ss3_2 () {
459 [MethodImplAttribute (MethodImplOptions.NoInlining)]
460 public static void ss3_2_2 () {
463 [MethodImplAttribute (MethodImplOptions.NoInlining)]
464 public static int ss4 () {
470 [MethodImplAttribute (MethodImplOptions.NoInlining)]
471 public static void ss5 (int[] arr, Func<int, bool> selector) {
472 // Call into linq which calls back into this assembly
473 arr.Count (selector);
476 [MethodImplAttribute (MethodImplOptions.NoInlining)]
477 public static void ss6 (bool b) {
480 throw new Exception ();
484 [MethodImplAttribute (MethodImplOptions.NoInlining)]
485 public static void ss6_2 () {
488 [MethodImplAttribute (MethodImplOptions.NoInlining)]
489 public static void ss7 () {
498 [MethodImplAttribute (MethodImplOptions.NoInlining)]
499 public static void ss7_2 () {
502 [MethodImplAttribute (MethodImplOptions.NoInlining)]
503 public static void ss7_3 () {
504 throw new Exception ();
507 [MethodImplAttribute (MethodImplOptions.NoInlining)]
508 public static void ss_nested () {
509 ss_nested_1 (ss_nested_2 ());
510 ss_nested_1 (ss_nested_2 ());
514 [MethodImplAttribute (MethodImplOptions.NoInlining)]
515 public static void ss_nested_1 (int i) {
518 [MethodImplAttribute (MethodImplOptions.NoInlining)]
519 public static int ss_nested_2 () {
523 [MethodImplAttribute (MethodImplOptions.NoInlining)]
524 public static void ss_nested_3 () {
527 [MethodImplAttribute (MethodImplOptions.NoInlining)]
528 public static void ss_step_through () {
530 StepThroughClass.step_through_2 ();
534 [DebuggerStepThrough]
535 [MethodImplAttribute (MethodImplOptions.NoInlining)]
536 public static void step_through_1 () {
539 [DebuggerStepThrough]
540 class StepThroughClass {
541 [MethodImplAttribute (MethodImplOptions.NoInlining)]
542 public static void step_through_2 () {
546 [DebuggerStepThrough]
547 [MethodImplAttribute (MethodImplOptions.NoInlining)]
548 public static void step_through_3 () {
551 [MethodImplAttribute (MethodImplOptions.NoInlining)]
552 public static void ss_non_user_code () {
554 StepNonUserCodeClass.non_user_code_2 ();
558 [DebuggerNonUserCode]
559 [MethodImplAttribute (MethodImplOptions.NoInlining)]
560 public static void non_user_code_1 () {
563 [DebuggerNonUserCode]
564 class StepNonUserCodeClass {
565 [MethodImplAttribute (MethodImplOptions.NoInlining)]
566 public static void non_user_code_2 () {
570 [DebuggerNonUserCode]
571 [MethodImplAttribute (MethodImplOptions.NoInlining)]
572 public static void non_user_code_3 () {
575 [MethodImplAttribute (MethodImplOptions.NoInlining)]
576 public static void ss_recursive (int n) {
579 ss_recursive (n + 1);
582 // Breakpoint will be placed here
583 [MethodImplAttribute (MethodImplOptions.NoInlining)]
584 public static void ss_recursive2_trap ()
588 public static void ss_recursive2_at (string s)
590 // Console.WriteLine (s);
593 // This method is used both for a step over and step out test.
594 [MethodImplAttribute (MethodImplOptions.NoInlining)]
595 public static void ss_recursive2 (int x)
597 ss_recursive2_at ( "ss_recursive2 in " + x);
600 ss_recursive2_at ("ss_recursive2 descend " + x);
601 ss_recursive2_trap ();
602 ss_recursive2 (next);
604 ss_recursive2_at ("ss_recursive2 out " + x);
607 // Breakpoint will be placed here
608 [MethodImplAttribute (MethodImplOptions.NoInlining)]
609 public static void ss_recursive_chaotic_trap ()
613 [MethodImplAttribute (MethodImplOptions.NoInlining)]
614 public static void ss_recursive_chaotic_at (bool exiting, string at, int n)
616 // string indent = "";
617 // for (int count = 5 - n; count > 0; count--)
619 // Console.WriteLine (indent + (exiting ? "<--" : "-->") + " " + at + " " + n);
622 [MethodImplAttribute (MethodImplOptions.NoInlining)]
623 public static void ss_recursive_chaotic_fizz (int n)
625 ss_recursive_chaotic_at (false, "fizz", n);
628 ss_recursive_chaotic_buzz (next);
629 ss_recursive_chaotic_fizzbuzz (next);
631 ss_recursive_chaotic_trap ();
633 ss_recursive_chaotic_at (true, "fizz", n);
636 [MethodImplAttribute (MethodImplOptions.NoInlining)]
637 public static void ss_recursive_chaotic_buzz (int n)
639 ss_recursive_chaotic_at (false, "buzz", n);
642 ss_recursive_chaotic_fizz (next);
643 ss_recursive_chaotic_fizzbuzz (next);
645 ss_recursive_chaotic_at (true, "buzz", n);
648 [MethodImplAttribute (MethodImplOptions.NoInlining)]
649 public static void ss_recursive_chaotic_fizzbuzz (int n)
651 ss_recursive_chaotic_at (false, "fizzbuzz", n);
654 ss_recursive_chaotic_fizz (next);
655 ss_recursive_chaotic_buzz (next);
656 ss_recursive_chaotic_fizzbuzz (next);
658 ss_recursive_chaotic_at (true, "fizzbuzz", n);
661 // Call a complex tree of recursive calls that has tripped up "step out" in the past.
662 [MethodImplAttribute (MethodImplOptions.NoInlining)]
663 public static void ss_recursive_chaotic ()
665 ss_recursive_chaotic_fizz (5);
668 [MethodImplAttribute (MethodImplOptions.NoInlining)]
669 public static void ss_fp_clobber () {
670 double v = ss_fp_clobber_1 (5.0);
674 [MethodImplAttribute (MethodImplOptions.NoInlining)]
675 public static double ss_fp_clobber_1 (double d) {
679 [MethodImplAttribute (MethodImplOptions.NoInlining)]
680 public static void ss_fp_clobber_2 (double d) {
683 [MethodImplAttribute (MethodImplOptions.NoInlining)]
684 public static void ss_no_frames () {
685 Action a = ss_no_frames_2;
686 var ar = a.BeginInvoke (null, null);
687 ar.AsyncWaitHandle.WaitOne ();
688 // Avoid waiting every time this runs
694 [MethodImplAttribute (MethodImplOptions.NoInlining)]
695 public static void ss_no_frames_2 () {
698 [MethodImplAttribute (MethodImplOptions.NoInlining)]
699 public static void ss_no_frames_3 () {
702 [MethodImplAttribute (MethodImplOptions.NoInlining)]
703 public static bool is_even (int i) {
709 Console.WriteLine ("HIT!");
715 [MethodImplAttribute (MethodImplOptions.NoInlining)]
716 public static void arguments () {
717 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));
719 arg2 ("FOO", null, "BLA", ref i, new GClass <int> { field = 42 }, new object (), '\0'.ToString () + "A");
720 Tests t = new Tests () { field_i = 42, field_s = "S" };
724 [MethodImplAttribute (MethodImplOptions.NoInlining)]
725 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) {
726 return (int)(sb + b + (bl ? 0 : 1) + s + us + (int)c + i + ui + l + (long)ul + f + d + (int)ip + (int)uip);
729 [MethodImplAttribute (MethodImplOptions.NoInlining)]
730 public static string arg2 (string s, string s3, object o, ref int i, GClass <int> gc, object o2, string s4) {
731 return s + (s3 != null ? "" : "") + o + i + gc.field + o2;
734 [MethodImplAttribute (MethodImplOptions.NoInlining)]
735 public object arg3 (string s) {
736 return s + s + s + s + this;
739 [MethodImplAttribute (MethodImplOptions.NoInlining)]
740 public static void objects () {
741 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 };
742 t.o1 (new Tests2 () { field_j = 43 }, new GClass <int> { field = 42 }, new GClass <string> { field = "FOO" });
743 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 });
746 [MethodImplAttribute (MethodImplOptions.NoInlining)]
747 public object o1 (Tests2 t, GClass <int> gc1, GClass <string> gc2) {
748 if (t == null || gc1 == null || gc2 == null)
754 [MethodImplAttribute (MethodImplOptions.NoInlining)]
755 public static string o2 (string[] s2, int[] s3, int[,] s4, int[,] s5, IList<int> s6) {
756 return s2 [0] + s3 [0] + s4 [0, 0] + s6 [0];
759 [MethodImplAttribute (MethodImplOptions.NoInlining)]
760 public static void objrefs () {
761 Tests t = new Tests () {};
769 [MethodImplAttribute (MethodImplOptions.NoInlining)]
770 public static void set_child (Tests t) {
771 t.child = new Tests ();
774 [MethodImplAttribute (MethodImplOptions.NoInlining)]
775 public void objrefs1 () {
778 [MethodImplAttribute (MethodImplOptions.NoInlining)]
779 public static void objrefs2 () {
782 public static void vtypes () {
783 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 ) };
784 AStruct s = new AStruct { i = 44, s = "T", k = 45 };
785 AStruct[] arr = new AStruct[] {
786 new AStruct () { i = 1, s = "S1" },
787 new AStruct () { i = 2, s = "S2" } };
788 TypedReference typedref = __makeref (s);
789 t.vtypes1 (s, arr, typedref);
795 [MethodImplAttribute (MethodImplOptions.NoInlining)]
796 public object vtypes1 (AStruct s, AStruct[] arr, TypedReference typedref) {
803 [MethodImplAttribute (MethodImplOptions.NoInlining)]
804 public static void vtypes2 (AStruct s) {
808 [MethodImplAttribute (MethodImplOptions.NoInlining)]
809 public static void vtypes3 (AStruct s) {
810 AStruct.static_foo (5);
813 [MethodImplAttribute (MethodImplOptions.NoInlining)]
814 public static void vtypes4_2 (IRecStruct o) {
817 [MethodImplAttribute (MethodImplOptions.NoInlining)]
818 public static void vtypes4 () {
819 IRecStruct s = new RecStruct ();
824 [MethodImplAttribute (MethodImplOptions.NoInlining)]
825 public static void locals () {
827 var astruct = new AStruct () { i = 42 };
829 locals2<string> (null, 5, "ABC", ref s, ref astruct);
835 [MethodImplAttribute (MethodImplOptions.NoInlining)]
836 static void locals11 (double a, ref double b) {
839 [MethodImplAttribute (MethodImplOptions.NoInlining)]
840 public static void locals1 (string[] args) {
844 locals11 (b: ref ri, a: ri);
846 for (int j = 0; j < 10; ++j) {
851 [MethodImplAttribute (MethodImplOptions.NoInlining)]
852 [StateMachine (typeof (int))]
853 public static void locals2<T> (string[] args, int arg, T t, ref string rs, ref AStruct astruct) {
857 for (int j = 0; j < 10; ++j) {
862 astruct = new AStruct ();
865 List<int> alist = new List<int> () { 12 };
869 [MethodImplAttribute (MethodImplOptions.NoInlining)]
870 public static void locals3 () {
890 [MethodImplAttribute (MethodImplOptions.NoInlining)]
891 public static void locals4 () {
894 [MethodImplAttribute (MethodImplOptions.NoInlining)]
895 public static void locals5 () {
898 [MethodImplAttribute (MethodImplOptions.NoInlining)]
899 public static void locals6 () {
902 for (i = 0; i < 10; ++i)
905 for (i = 0; i < 10; ++i)
915 [MethodImplAttribute (MethodImplOptions.NoInlining)]
916 public static void locals6_1 () {
919 [MethodImplAttribute (MethodImplOptions.NoInlining)]
920 public static void locals6_2 (int arg) {
923 [MethodImplAttribute (MethodImplOptions.NoInlining)]
924 public static void locals6_3 () {
925 // Clobber all registers
926 int sum = 0, i, j, k, l, m;
927 for (i = 0; i < 100; ++i)
929 for (j = 0; j < 100; ++j)
931 for (k = 0; k < 100; ++k)
933 for (l = 0; l < 100; ++l)
935 for (m = 0; m < 100; ++m)
939 [MethodImplAttribute (MethodImplOptions.NoInlining)]
940 public static void locals6_4 (int arg) {
943 [MethodImplAttribute (MethodImplOptions.NoInlining)]
944 public static void locals6_5 () {
947 [MethodImplAttribute (MethodImplOptions.NoInlining)]
948 public static void locals6_6 (int arg) {
951 [MethodImplAttribute (MethodImplOptions.NoInlining)]
952 public static void locals7<T> (T arg) {
957 [MethodImplAttribute (MethodImplOptions.NoInlining)]
958 public static void line_numbers () {
962 [MethodImplAttribute (MethodImplOptions.NoInlining)]
963 public static void suspend () {
971 struct TypedRefTest {
975 [MethodImplAttribute (MethodImplOptions.NoInlining)]
976 public static void type_info () {
977 Tests t = new Tests () { field_i = 42, field_s = "S", base_field_i = 43, base_field_s = "T", field_enum = AnEnum.B };
978 t.ti1 (new Tests2 () { field_j = 43 }, new GClass <int> { field = 42 }, new GClass <string> { field = "FOO" });
981 AStruct s = new AStruct () { i = 42, s = "S", k = 43 };
982 TypedRefTest reftest = new TypedRefTest () { MaxValue = 12 };
983 TypedReference typedref = __makeref (reftest);
984 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);
988 [MethodImplAttribute (MethodImplOptions.NoInlining)]
989 public object ti1 (Tests2 t, GClass <int> gc1, GClass <string> gc2) {
990 if (t == null || gc1 == null || gc2 == null)
996 [MethodImplAttribute (MethodImplOptions.NoInlining)]
997 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) {
998 return s2 [0] + s3 [0] + s4 [0, 0];
1001 [MethodImplAttribute (MethodImplOptions.NoInlining)]
1002 public static void assembly_load () {
1006 [MethodImplAttribute (MethodImplOptions.NoInlining)]
1007 public static void assembly_load_2 () {
1008 // This will load System.dll while holding the loader lock
1012 [MethodImplAttribute (MethodImplOptions.NoInlining)]
1013 public static void invoke () {
1014 new Tests ().invoke1 (new Tests2 (), new AStruct () { i = 42, j = (IntPtr)43 }, new GStruct<int> { j = 42 });
1015 new Tests ().invoke_ex ();
1018 [MethodImplAttribute (MethodImplOptions.NoInlining)]
1019 public void invoke1 (Tests2 t, AStruct s, GStruct<int> g) {
1023 [MethodImplAttribute (MethodImplOptions.NoInlining)]
1024 public void invoke2 () {
1027 [MethodImplAttribute (MethodImplOptions.NoInlining)]
1028 public void invoke_ex () {
1032 [MethodImplAttribute (MethodImplOptions.NoInlining)]
1033 public void invoke_ex_inner () {
1035 throw new Exception ();
1042 [MethodImplAttribute (MethodImplOptions.NoInlining)]
1043 public void invoke_single_threaded () {
1044 // Spawn a thread incrementing a counter
1045 bool finished = false;
1047 new Thread (delegate () {
1054 invoke_single_threaded_2 ();
1059 [MethodImplAttribute (MethodImplOptions.NoInlining)]
1060 public void invoke_single_threaded_2 () {
1063 [MethodImplAttribute (MethodImplOptions.NoInlining)]
1064 public void invoke_abort () {
1067 [MethodImplAttribute (MethodImplOptions.NoInlining)]
1068 public void invoke_abort_2 () {
1069 Thread.Sleep (1000000);
1072 public void invoke_return_void () {
1075 public string invoke_return_ref () {
1079 public object invoke_return_null () {
1083 public int invoke_return_primitive () {
1087 public int? invoke_return_nullable () {
1091 public int? invoke_return_nullable_null () {
1095 public void invoke_type_load () {
1102 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) {
1103 return ub + sb + ss + us + i + ui + l + (long)ul + (int)c + (b ? 1 : 0) + (int)f + (int)d;
1106 public int invoke_pass_primitive2 (bool b) {
1110 public string invoke_pass_ref (string s) {
1114 public static string invoke_static_pass_ref (string s) {
1118 public static void invoke_static_return_void () {
1121 public static void invoke_throws () {
1122 throw new Exception ();
1125 public int invoke_iface () {
1129 public void invoke_out (out int foo, out int[] arr) {
1134 [MethodImplAttribute (MethodImplOptions.NoInlining)]
1135 public static void exceptions () {
1137 throw new OverflowException ();
1138 } catch (Exception) {
1141 throw new OverflowException ();
1142 } catch (Exception) {
1145 throw new ArgumentException ();
1146 } catch (Exception) {
1149 throw new OverflowException ();
1150 } catch (Exception) {
1154 throw new OverflowException ();
1155 } catch (Exception) {
1158 throw new Exception ();
1159 } catch (Exception) {
1165 } catch (Exception) {
1170 } catch (Exception) {
1174 [MethodImplAttribute (MethodImplOptions.NoInlining)]
1175 public static void unhandled_exception () {
1176 ThreadPool.QueueUserWorkItem (delegate {
1177 throw new InvalidOperationException ();
1179 Thread.Sleep (10000);
1182 [MethodImplAttribute (MethodImplOptions.NoInlining)]
1183 public static void unhandled_exception_endinvoke_2 () {
1186 [MethodImplAttribute (MethodImplOptions.NoInlining)]
1187 public static void unhandled_exception_endinvoke () {
1188 Action action = new Action (() =>
1190 throw new Exception ("thrown");
1192 action.BeginInvoke ((ar) => {
1194 action.EndInvoke (ar);
1195 } catch (Exception ex) {
1196 //Console.WriteLine (ex);
1199 Thread.Sleep (1000);
1200 unhandled_exception_endinvoke_2 ();
1203 [MethodImplAttribute (MethodImplOptions.NoInlining)]
1204 public static void unhandled_exception_user () {
1205 System.Threading.Tasks.Task.Factory.StartNew (() => {
1208 Thread.Sleep (10000);
1211 [MethodImplAttribute (MethodImplOptions.NoInlining)]
1212 public static void Throw () {
1213 throw new Exception ();
1216 internal static Delegate create_filter_delegate (Delegate dlg, MethodInfo filter_method)
1219 throw new ArgumentNullException ();
1220 if (dlg.Target != null)
1221 throw new ArgumentException ();
1222 if (dlg.Method == null)
1223 throw new ArgumentException ();
1225 var ret_type = dlg.Method.ReturnType;
1226 var param_types = dlg.Method.GetParameters ().Select (x => x.ParameterType).ToArray ();
1228 var dynamic = new DynamicMethod (Guid.NewGuid ().ToString (), ret_type, param_types, typeof (object), true);
1229 var ig = dynamic.GetILGenerator ();
1231 LocalBuilder retval = null;
1232 if (ret_type != typeof (void))
1233 retval = ig.DeclareLocal (ret_type);
1235 var label = ig.BeginExceptionBlock ();
1237 for (int i = 0; i < param_types.Length; i++)
1238 ig.Emit (OpCodes.Ldarg, i);
1239 ig.Emit (OpCodes.Call, dlg.Method);
1242 ig.Emit (OpCodes.Stloc, retval);
1244 ig.Emit (OpCodes.Leave, label);
1246 ig.BeginExceptFilterBlock ();
1248 ig.Emit (OpCodes.Call, filter_method);
1250 ig.BeginCatchBlock (null);
1252 ig.Emit (OpCodes.Pop);
1254 ig.EndExceptionBlock ();
1257 ig.Emit (OpCodes.Ldloc, retval);
1259 ig.Emit (OpCodes.Ret);
1261 return dynamic.CreateDelegate (dlg.GetType ());
1264 [MethodImplAttribute (MethodImplOptions.NoInlining)]
1265 static void exception_filter_method () {
1266 throw new InvalidOperationException ();
1269 [MethodImplAttribute (MethodImplOptions.NoInlining)]
1270 static int exception_filter_filter (Exception exc) {
1274 [MethodImplAttribute (MethodImplOptions.NoInlining)]
1275 public static void exception_filter () {
1276 var method = typeof (Tests).GetMethod (
1277 "exception_filter_method", BindingFlags.NonPublic | BindingFlags.Static);
1278 var filter_method = typeof (Tests).GetMethod (
1279 "exception_filter_filter", BindingFlags.NonPublic | BindingFlags.Static);
1281 var dlg = Delegate.CreateDelegate (typeof (Action), method);
1283 var wrapper = (Action) create_filter_delegate (dlg, filter_method);
1288 [MethodImplAttribute (MethodImplOptions.NoInlining)]
1289 public static bool return_true () {
1293 [MethodImplAttribute (MethodImplOptions.NoInlining)]
1294 public static void exceptions2 () {
1296 throw new Exception ();
1297 Console.WriteLine ();
1300 [MethodImplAttribute (MethodImplOptions.NoInlining)]
1301 public static void threads () {
1302 Thread t = new Thread (delegate () {});
1308 [MethodImplAttribute (MethodImplOptions.NoInlining)]
1309 public static void domains () {
1310 AppDomain domain = AppDomain.CreateDomain ("domain");
1312 CrossDomain o = (CrossDomain)domain.CreateInstanceAndUnwrap (
1313 typeof (CrossDomain).Assembly.FullName, "CrossDomain");
1315 domains_print_across (o);
1317 domains_2 (o, new CrossDomain ());
1327 AppDomain.Unload (domain);
1331 typeof (Tests).GetMethod ("called_from_invoke").Invoke (null, null);
1334 [MethodImplAttribute (MethodImplOptions.NoInlining)]
1335 public static void called_from_invoke () {
1338 [MethodImplAttribute (MethodImplOptions.NoInlining)]
1339 public static void domains_2 (object o, object o2) {
1342 [MethodImplAttribute (MethodImplOptions.NoInlining)]
1343 public static void domains_print_across (object o) {
1346 [MethodImplAttribute (MethodImplOptions.NoInlining)]
1347 public static void domains_3 () {
1350 [MethodImplAttribute (MethodImplOptions.NoInlining)]
1351 public static void invoke_in_domain () {
1354 [MethodImplAttribute (MethodImplOptions.NoInlining)]
1355 public static void invoke_in_domain_2 () {
1358 [MethodImplAttribute (MethodImplOptions.NoInlining)]
1359 public static void assembly_load_in_domain () {
1360 Assembly.Load ("System.Transactions");
1363 [MethodImplAttribute (MethodImplOptions.NoInlining)]
1364 public static void dynamic_methods () {
1365 var m = new DynamicMethod ("dyn_method", typeof (void), new Type [] { typeof (int) }, typeof (object).Module);
1366 var ig = m.GetILGenerator ();
1368 ig.Emit (OpCodes.Ldstr, "FOO");
1369 ig.Emit (OpCodes.Call, typeof (Tests).GetMethod ("dyn_call"));
1370 ig.Emit (OpCodes.Ret);
1372 var del = (Action<int>)m.CreateDelegate (typeof (Action<int>));
1377 public static void dyn_call (string s) {
1380 [MethodImplAttribute (MethodImplOptions.NoInlining)]
1381 public static void ref_emit () {
1382 AssemblyName assemblyName = new AssemblyName ();
1383 assemblyName.Name = "foo";
1385 AssemblyBuilder assembly =
1386 Thread.GetDomain ().DefineDynamicAssembly (
1387 assemblyName, AssemblyBuilderAccess.RunAndSave);
1389 ModuleBuilder module = assembly.DefineDynamicModule ("foo.dll");
1391 TypeBuilder tb = module.DefineType ("foo", TypeAttributes.Public, typeof (object));
1392 MethodBuilder mb = tb.DefineMethod ("ref_emit_method", MethodAttributes.Public|MethodAttributes.Static, CallingConventions.Standard, typeof (void), new Type [] { });
1393 ILGenerator ig = mb.GetILGenerator ();
1394 ig.Emit (OpCodes.Ldstr, "FOO");
1395 ig.Emit (OpCodes.Call, typeof (Tests).GetMethod ("ref_emit_call"));
1396 ig.Emit (OpCodes.Ret);
1398 Type t = tb.CreateType ();
1400 t.GetMethod ("ref_emit_method").Invoke (null, null);
1403 [MethodImplAttribute (MethodImplOptions.NoInlining)]
1404 public static void ref_emit_call (string s) {
1407 [MethodImplAttribute (MethodImplOptions.NoInlining)]
1408 public static void frames_in_native () {
1410 var evt = new ManualResetEvent (false);
1412 object mon = new object ();
1413 ThreadPool.QueueUserWorkItem (delegate {
1414 frames_in_native_2 ();
1420 [MethodImplAttribute (MethodImplOptions.NoInlining)]
1421 static void frames_in_native_2 () {
1422 frames_in_native_3 ();
1425 [MethodImplAttribute (MethodImplOptions.NoInlining)]
1426 static void frames_in_native_3 () {
1429 [MethodImplAttribute (MethodImplOptions.NoInlining)]
1430 public static void string_call (string s) {
1433 [MethodImplAttribute (MethodImplOptions.NoInlining)]
1434 public static void ss_regress_654694 () {
1441 [MethodImplAttribute (MethodImplOptions.NoInlining)]
1442 public static void user () {
1445 Debugger.Log (5, Debugger.IsLogging () ? "A" : "", "B");
1448 [MethodImplAttribute (MethodImplOptions.NoInlining)]
1449 public static void type_load () {
1453 [MethodImplAttribute (MethodImplOptions.NoInlining)]
1454 static void type_load_2 () {
1455 var c1 = new Dictionary<int, int> ();
1457 var c = new TypeLoadClass ();
1459 var c2 = new TypeLoadClass2 ();
1463 [MethodImplAttribute (MethodImplOptions.NoInlining)]
1464 public static void regress () {
1465 regress_2755 (DateTime.Now);
1468 [MethodImplAttribute (MethodImplOptions.NoInlining)]
1469 public static unsafe void regress_2755 (DateTime d) {
1470 int* buffer = stackalloc int [128];
1475 for (int i = 0; i < 128; ++i)
1478 regress_2755_3 (sum);
1481 [MethodImplAttribute (MethodImplOptions.NoInlining)]
1482 public static void regress_2755_2 () {
1485 [MethodImplAttribute (MethodImplOptions.NoInlining)]
1486 public static void regress_2755_3 (int sum) {
1489 static object gc_suspend_field;
1491 [MethodImplAttribute (MethodImplOptions.NoInlining)]
1492 static unsafe void set_gc_suspend_field () {
1493 set_gc_suspend_field_2 ();
1495 int* buffer = stackalloc int [4096];
1498 [MethodImplAttribute (MethodImplOptions.NoInlining)]
1499 static void set_gc_suspend_field_2 () {
1500 gc_suspend_field = new object ();
1503 [MethodImplAttribute (MethodImplOptions.NoInlining)]
1504 static void gc_suspend_1 () {
1507 [MethodImplAttribute (MethodImplOptions.NoInlining)]
1508 public static void gc_suspend_invoke () {
1509 gc_suspend_field = null;
1511 GC.WaitForPendingFinalizers ();
1514 [MethodImplAttribute (MethodImplOptions.NoInlining)]
1515 public static void gc_suspend () {
1516 set_gc_suspend_field ();
1520 [MethodImplAttribute (MethodImplOptions.NoInlining)]
1521 public static void generic_method<T> () where T : class {
1524 [MethodImplAttribute (MethodImplOptions.NoInlining)]
1525 public void evaluate_method_2 () {
1528 [MethodImplAttribute (MethodImplOptions.NoInlining)]
1529 public void evaluate_method () {
1531 evaluate_method_2 ();
1534 [MethodImplAttribute (MethodImplOptions.NoInlining)]
1535 static void set_ip_1 () {
1538 [MethodImplAttribute (MethodImplOptions.NoInlining)]
1539 static void set_ip_2 () {
1542 [MethodImplAttribute (MethodImplOptions.NoInlining)]
1543 public static void set_ip () {
1554 [MethodImplAttribute (MethodImplOptions.NoInlining)]
1555 public static void step_filters () {
1556 ClassWithCctor.cctor_filter ();
1559 class ClassWithCctor {
1560 [MethodImplAttribute (MethodImplOptions.NoInlining)]
1561 static ClassWithCctor () {
1566 [MethodImplAttribute (MethodImplOptions.NoInlining)]
1567 public static void cctor_filter () {
1571 public override string virtual_method () {
1575 [MethodImplAttribute (MethodImplOptions.NoInlining)]
1576 public static void threadpool_bp () { }
1578 [MethodImplAttribute (MethodImplOptions.NoInlining)]
1579 public static void threadpool_io () {
1580 // Start a threadpool task that blocks on I/O.
1581 // Regression test for #42625
1582 const int nbytes = 16;
1583 var bsOut = new byte[nbytes];
1584 for (int i = 0; i < nbytes; i++) {
1587 var endPoint = NetworkHelpers.LocalEphemeralEndPoint ();
1588 var l = new TcpListener (endPoint);
1590 Task<byte[]> t = Task.Run (async () => {
1591 var c = new TcpClient ();
1592 await c.ConnectAsync (endPoint.Address, endPoint.Port);
1593 var streamIn = c.GetStream ();
1594 var bs = new byte[nbytes];
1596 int nremain = nbytes;
1597 while (nread < nbytes) {
1598 int r = await streamIn.ReadAsync (bs, nread, nremain);
1605 var s = l.AcceptTcpClient ();
1607 // write bytes in two groups so that the task blocks on the ReadAsync
1608 var streamOut = s.GetStream ();
1609 var nbytesFirst = nbytes / 2;
1610 var nbytesRest = nbytes - nbytesFirst;
1611 streamOut.Write (bsOut, 0, nbytesFirst);
1613 streamOut.Write (bsOut, nbytesFirst, nbytesRest);
1615 var bsIn = t.Result;
1619 public class SentinelClass : MarshalByRefObject {
1622 public class CrossDomain : MarshalByRefObject
1624 SentinelClass printMe = new SentinelClass ();
1626 public void invoke () {
1627 Tests.invoke_in_domain ();
1630 public void invoke_2 () {
1631 Tests.invoke_in_domain_2 ();
1634 public int invoke_3 () {
1638 public void assembly_load () {
1639 Tests.assembly_load_in_domain ();
1645 public ProcessStartInfo info;
1648 class LocalReflectClass
1650 public static void RunMe ()
1652 var reflectMe = new someClass ();
1653 var temp = reflectMe; // Breakpoint location
1654 reflectMe.someMethod ();
1657 class someClass : ContextBoundObject
1659 public object someField;
1661 public void someMethod ()
1667 // Class used for line number info testing, don't change its layout
1668 public class LineNumbers
1670 [MethodImplAttribute (MethodImplOptions.NoInlining)]
1671 public static void ln1 () {
1677 [MethodImplAttribute (MethodImplOptions.NoInlining)]
1678 public static void ln2 () {
1681 [MethodImplAttribute (MethodImplOptions.NoInlining)]
1682 public static void ln3 () {
1683 #pragma warning disable 0219
1685 #pragma warning restore 0219