* marshal.c (mono_marshal_load_type_info): Fill out info->min_align.
(mono_class_native_size): Use klass->marshal_info->min_align instead of
klass->min_align, since klass->min_align contains the managed alignment,
while the native alignment can be different, like for longs on x86.
Fixes #469135.
* class-internals.h (MonoMarshalType): Add a min_align field.
svn path=/trunk/mono/; revision=124559
+2009-01-26 Zoltan Varga <vargaz@gmail.com>
+
+ * marshal.c (mono_marshal_load_type_info): Fill out info->min_align.
+ (mono_class_native_size): Use klass->marshal_info->min_align instead of
+ klass->min_align, since klass->min_align contains the managed alignment,
+ while the native alignment can be different, like for longs on x86.
+ Fixes #469135.
+
+ * class-internals.h (MonoMarshalType): Add a min_align field.
+
2009-01-26 Rodrigo Kumpera <rkumpera@novell.com>
* assembly.c (mono_assembly_try_decode_skip_verification): Add a hack to check
} MonoMarshalField;
typedef struct {
- guint32 native_size;
+ guint32 native_size, min_align;
guint32 num_fields;
MonoMethod *ptr_to_str;
MonoMethod *str_to_ptr;
info->native_size &= ~(min_align - 1);
}
+ info->min_align = min_align;
+
/* Update the class's blittable info, if the layouts don't match */
if (info->native_size != mono_class_value_size (klass, NULL))
klass->blittable = FALSE;
}
if (align)
- *align = klass->min_align;
+ *align = klass->marshal_info->min_align;
return klass->marshal_info->native_size;
}