Merge pull request #2218 from mono/assignProjectConfigurtionFix
[mono.git] / mono / mini / aot-tests.cs
index 79ed12a7e18064a497af6d9f75fa1ecb2291f978..6092346ea4ccb21349b8d22bba00ef891fad4a79 100644 (file)
@@ -363,10 +363,42 @@ class Tests
                values.Select (x => x).ToArray ();
        }
 
+       [Category ("GSHAREDVT")]
        public static int test_0_delegate_invoke_wrappers_gsharedvt () {
                var enums = new LongEnum [] { LongEnum.A };
                SetArrayValue_ (enums);
                return 0;
        }
 
+       struct LargeStruct {
+               public int a, b, c, d;
+       }
+
+       [MethodImplAttribute (MethodImplOptions.NoInlining)]
+       public static bool GetHasValue<T>(T? value) where T : struct
+       {
+               return value.HasValue;
+       }
+
+       [Category ("DYNCALL")]
+       public static int test_0_large_nullable_invoke () {
+               var s = new LargeStruct () { a = 1, b = 2, c = 3, d = 4 };
+
+               GetHasValue<LargeStruct> (s);
+
+#if __MOBILE__
+               var m = typeof(AotTests).GetMethod("GetHasValue", BindingFlags.Static | BindingFlags.Public);
+#else
+               var m = typeof(Tests).GetMethod("GetHasValue", BindingFlags.Static | BindingFlags.Public);
+#endif
+
+               Type type = typeof (LargeStruct?).GetGenericArguments () [0];
+               bool b1 = (bool)m.MakeGenericMethod (new Type[] {type}).Invoke (null, new object[] { s });
+               if (!b1)
+                       return 1;
+               bool b2 = (bool)m.MakeGenericMethod (new Type[] {type}).Invoke (null, new object[] { null });
+               if (b2)
+                       return 2;
+               return 0;
+       }
 }