[jit] Increase the buffer size used by the dyncall data structures to 512, add a...
authorZoltan Varga <vargaz@gmail.com>
Fri, 4 Dec 2015 22:44:41 +0000 (17:44 -0500)
committerZoltan Varga <vargaz@gmail.com>
Fri, 4 Dec 2015 22:44:56 +0000 (17:44 -0500)
mono/mini/aot-tests.cs
mono/mini/mini-runtime.c

index 7b92c8fe1f1d396414672b82bd3c220d2d5e0e21..6092346ea4ccb21349b8d22bba00ef891fad4a79 100644 (file)
@@ -370,4 +370,35 @@ class Tests
                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;
+       }
 }
index 9a8dcd5535907dcdc1d194d74c6400ceed644bd4..e7db1b4318e9510d6a1cf88acf700515114defe8 100644 (file)
@@ -2339,7 +2339,7 @@ mono_jit_runtime_invoke (MonoMethod *method, void *obj, void **params, MonoObjec
                gpointer *args;
                static RuntimeInvokeDynamicFunction dyn_runtime_invoke;
                int i, pindex;
-               guint8 buf [256];
+               guint8 buf [512];
                guint8 retval [256];
                gpointer rgctx;