From 1f7386bd86cb00a419927b8f996a9cca2d9415d0 Mon Sep 17 00:00:00 2001 From: Bernhard Urban Date: Wed, 26 Apr 2017 00:13:38 +0200 Subject: [PATCH] [interp] resolve right class for valuetype --- mono/mini/interp/interp.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/mono/mini/interp/interp.c b/mono/mini/interp/interp.c index 20dea8e09e0..c9f5c59d45c 100644 --- a/mono/mini/interp/interp.c +++ b/mono/mini/interp/interp.c @@ -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 (); -- 2.25.1