[interp] resolve right class for valuetype
authorBernhard Urban <bernhard.urban@xamarin.com>
Tue, 25 Apr 2017 22:13:38 +0000 (00:13 +0200)
committerBernhard Urban <bernhard.urban@xamarin.com>
Fri, 28 Apr 2017 18:52:06 +0000 (20:52 +0200)
mono/mini/interp/interp.c

index 20dea8e09e08fa41c1b2206fba406fd20181de13..c9f5c59d45c2cec441c449dce72a636c309dd681 100644 (file)
@@ -529,9 +529,16 @@ stackval_to_data (MonoType *type, stackval *val, char *data, gboolean pinvoke)
                } else
                        mono_value_copy (data, val->data.vt, 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 (data, val->data.vt, mono_class_from_mono_type (type));
+                       return;
+               }
                stackval_to_data (&type->data.generic_class->container_class->byval_arg, val, data, pinvoke);
                return;
+       }
        default:
                g_warning ("got type %x", type->type);
                g_assert_not_reached ();