case MONO_TYPE_VALUETYPE:
klass = sig->params [i]->data.klass;
- if (klass->blittable || klass->enumtype)
+ if (((klass->flags & TYPE_ATTRIBUTE_LAYOUT_MASK) == TYPE_ATTRIBUTE_EXPLICIT_LAYOUT) ||
+ klass->blittable || klass->enumtype)
break;
tmp_locals [i] = mono_mb_add_local (mb, &klass->byval_arg);
case MONO_TYPE_VALUETYPE: {
int tmp;
klass = sig->ret->data.klass;
- if (klass->blittable || klass->enumtype)
+ if (((klass->flags & TYPE_ATTRIBUTE_LAYOUT_MASK) == TYPE_ATTRIBUTE_EXPLICIT_LAYOUT) ||
+ klass->blittable || klass->enumtype)
break;
/* load pointer to returned value type */
switch (t->type) {
case MONO_TYPE_VALUETYPE:
klass = t->data.klass;
- if (klass->blittable || klass->enumtype)
+
+ if (((klass->flags & TYPE_ATTRIBUTE_LAYOUT_MASK) == TYPE_ATTRIBUTE_EXPLICIT_LAYOUT) ||
+ klass->blittable || klass->enumtype)
break;
tmp_locals [i] = mono_mb_add_local (mb, &mono_defaults.int_class->byval_arg);
continue;
klass = t->data.klass;
- if (klass->blittable || klass->enumtype)
+ if (((klass->flags & TYPE_ATTRIBUTE_LAYOUT_MASK) == TYPE_ATTRIBUTE_EXPLICIT_LAYOUT) ||
+ klass->blittable || klass->enumtype)
break;
/* dst = argument */
goto handle_enum;
}
- if (klass->blittable)
+ if (((klass->flags & TYPE_ATTRIBUTE_LAYOUT_MASK) == TYPE_ATTRIBUTE_EXPLICIT_LAYOUT) ||
+ klass->blittable)
break;
tmp = mono_mb_add_local (mb, sig->ret);
mb = mono_mb_new (klass, stoptr->name, MONO_WRAPPER_UNKNOWN);
- if (klass->blittable) {
+ if (((klass->flags & TYPE_ATTRIBUTE_LAYOUT_MASK) == TYPE_ATTRIBUTE_EXPLICIT_LAYOUT) || klass->blittable) {
mono_mb_emit_byte (mb, CEE_LDARG_1);
mono_mb_emit_byte (mb, CEE_LDARG_0);
mono_mb_emit_icon (mb, sizeof (MonoObject));
mb = mono_mb_new (klass, ptostr->name, MONO_WRAPPER_UNKNOWN);
- if (klass->blittable) {
+ if (((klass->flags & TYPE_ATTRIBUTE_LAYOUT_MASK) == TYPE_ATTRIBUTE_EXPLICIT_LAYOUT) || klass->blittable) {
mono_mb_emit_byte (mb, CEE_LDARG_1);
mono_mb_emit_icon (mb, sizeof (MonoObject));
mono_mb_emit_byte (mb, CEE_ADD);