guint32 layout = class->flags & TYPE_ATTRIBUTE_LAYOUT_MASK;
guint32 pass, passes, real_size;
gboolean gc_aware_layout = FALSE;
+ gboolean has_static_fields = FALSE;
MonoClassField *field;
/*
break;
}
+ has_static_fields = TRUE;
+
size = mono_type_size (field->type, &align);
field->offset = class->sizes.class_size;
/*align is always non-zero here*/
field->offset &= ~(align - 1);
class->sizes.class_size = field->offset + size;
}
+
+ if (has_static_fields && class->sizes.class_size == 0)
+ /* Simplify code which depends on class_size != 0 if the class has static fields */
+ class->sizes.class_size = 8;
}
static MonoMethod*
[MethodImplAttribute (MethodImplOptions.NoInlining)]
static void t_14217_inner (BugStruct bug) {
}
+
+ [StructLayout(LayoutKind.Sequential)]
+ public struct EmptyStruct {
+ }
+
+ class EmptyClass {
+ public static EmptyStruct s;
+ }
+
+ // #20349
+ static int test_0_empty_struct_as_static () {
+ var s = EmptyClass.s;
+ return 0;
+ }
}
#if MOBILE