break;
}
- mono_mb_emit_ldarg (mb, argnum);
+ if (t->byref ) {
+ mono_mb_emit_ldarg (mb, argnum);
- /* Create the managed array */
- mono_mb_emit_ldarg (mb, param_num);
- if (m->sig->params [param_num]->byref)
- // FIXME: Support other types
- mono_mb_emit_byte (mb, CEE_LDIND_I4);
- mono_mb_emit_byte (mb, CEE_CONV_OVF_I);
- mono_mb_emit_op (mb, CEE_NEWARR, klass->element_class);
- /* Store into argument */
- mono_mb_emit_byte (mb, CEE_STIND_I);
+ /* Create the managed array */
+ mono_mb_emit_ldarg (mb, param_num);
+ if (m->sig->params [param_num]->byref)
+ // FIXME: Support other types
+ mono_mb_emit_byte (mb, CEE_LDIND_I4);
+ mono_mb_emit_byte (mb, CEE_CONV_OVF_I);
+ mono_mb_emit_op (mb, CEE_NEWARR, klass->element_class);
+ /* Store into argument */
+ mono_mb_emit_byte (mb, CEE_STIND_I);
+ }
}
if (need_convert || need_free) {
[DllImport ("libtest", EntryPoint="mono_test_marshal_out_byref_array_out_size_param")]
public static extern int mono_test_marshal_out_byref_array_out_size_param ([Out] [MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 1)] out int [] a1, out int n);
+ [DllImport ("libtest", EntryPoint="mono_test_marshal_out_lparray_out_size_param")]
+ public static extern int mono_test_marshal_out_lparray_out_size_param ([Out] [MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 1)] int [] a1, out int n);
+
[DllImport ("libtest", EntryPoint="mono_test_marshal_inout_nonblittable_array", CharSet = CharSet.Unicode)]
public static extern int mono_test_marshal_inout_nonblittable_array ([In, Out] char [] a1);
return 0;
}
+ public static int test_0_marshal_out_lparray_out_size_param () {
+ int [] a1 = null;
+ int len;
+
+ a1 = new int [10];
+ int res = mono_test_marshal_out_lparray_out_size_param (a1, out len);
+ // Check that a1 was not overwritten
+ a1.GetHashCode ();
+ if (len != 4)
+ return 1;
+ for (int i = 0; i < len; i++)
+ if (a1 [i] != i)
+ return 2;
+ return 0;
+ }
+
public static int test_0_marshal_inout_nonblittable_array () {
char [] a1 = new char [10];
for (int i = 0; i < 10; i++)