Fix alignment on all indirect. Fixed incorrect preferred alignment. Added mingw regression tests.

This commit is contained in:
Christoffer Lerno
2021-07-16 13:05:56 +02:00
parent 11842e5dfa
commit 45a3c8ae50
16 changed files with 814 additions and 44 deletions

View File

@@ -984,7 +984,7 @@ static void type_create(const char *name, Type *location, TypeKind kind, unsigne
.builtin.bytesize = (bitsize + 7) / 8,
.builtin.bitsize = bitsize,
.builtin.abi_alignment = align,
.builtin.pref_alignment = pref_align,
.builtin.pref_alignment = pref_align ?: align,
.name = name,
.canonical = location,
};
@@ -1138,13 +1138,13 @@ type_create(#name_, &(shortname_), type_, bits_, target->align_ ## aligned_, tar
#undef DEF_TYPE
type_create("typeinfo", &t.typeinfo, TYPE_TYPEINFO, 0, 0, 0);
type_create("typeid", &t.typeid, TYPE_TYPEID, target->width_pointer, target->align_pref_pointer, target->align_pointer);
type_create("void*", &t.voidstar, TYPE_POINTER, target->width_pointer, target->align_pref_pointer, target->align_pointer);
type_create("typeid", &t.typeid, TYPE_TYPEID, target->width_pointer, target->align_pointer, target->align_pref_pointer);
type_create("void*", &t.voidstar, TYPE_POINTER, target->width_pointer, target->align_pointer, target->align_pref_pointer);
create_type_cache(type_void);
type_void->type_cache[0] = &t.voidstar;
t.voidstar.pointer = type_void;
type_create("virtual*", &t.virtual, TYPE_VIRTUAL_ANY, target->width_pointer * 2, target->align_pref_pointer, target->align_pointer);
type_create("virtual_generic", &t.virtual_generic, TYPE_VIRTUAL, target->width_pointer * 2, target->align_pref_pointer, target->align_pointer);
type_create("virtual*", &t.virtual, TYPE_VIRTUAL_ANY, target->width_pointer * 2, target->align_pointer, target->align_pref_pointer);
type_create("virtual_generic", &t.virtual_generic, TYPE_VIRTUAL, target->width_pointer * 2, target->align_pointer, target->align_pref_pointer);
type_create("compint", &t.ixx, TYPE_IXX, 0, 0, 0);
type_create("compfloat", &t.fxx, TYPE_FXX, 0, 0, 0);