[interp] generics/vt fix regarding elem size for ldelem.vt
authorBernhard Urban <bernhard.urban@xamarin.com>
Wed, 17 May 2017 11:40:58 +0000 (13:40 +0200)
committerBernhard Urban <bernhard.urban@xamarin.com>
Wed, 17 May 2017 15:36:43 +0000 (17:36 +0200)
mono/mini/interp/interp.c

index 87d1781d6abb280338506f8b3a357d9550c88a49..cd652abc91a0986e3f2c2c0d171bf471422120e3 100644 (file)
@@ -399,9 +399,16 @@ stackval_from_data (MonoType *type, stackval *result, char *data, gboolean pinvo
                } else
                        mono_value_copy (result->data.vt, data, type->data.klass);
                return;
-       case MONO_TYPE_GENERICINST:
+       case MONO_TYPE_GENERICINST: {
+               MonoClass *container_class = type->data.generic_class->container_class;
+
+               if (container_class->valuetype && !container_class->enumtype) {
+                       mono_value_copy (result->data.vt, data, mono_class_from_mono_type (type));
+                       return;
+               }
                stackval_from_data (&type->data.generic_class->container_class->byval_arg, result, data, pinvoke);
                return;
+       }
        default:
                g_warning ("got type 0x%02x", type->type);
                g_assert_not_reached ();