Drop zero-sized record fields

This commit is contained in:
Richard Feldman 2020-06-25 01:25:50 -04:00
parent 46c43da1de
commit ec953e9a15

View file

@ -312,15 +312,19 @@ fn layout_from_flat_type<'a>(
for (_, field_var) in btree { for (_, field_var) in btree {
let field_content = subs.get_without_compacting(field_var).content; let field_content = subs.get_without_compacting(field_var).content;
let field_layout = match Layout::new(arena, field_content, subs, pointer_size) {
Ok(layout) => layout, match Layout::new(arena, field_content, subs, pointer_size) {
Ok(layout) => {
// Drop any zero-sized fields like {}
if layout.stack_size(pointer_size) != 0 {
layouts.push(layout);
}
}
Err(_) => { Err(_) => {
// Invalid field! // Invalid field!
panic!("TODO gracefully handle record with invalid field.var"); panic!("TODO gracefully handle record with invalid field.var");
} }
}; }
layouts.push(field_layout);
} }
Ok(Layout::Struct(layouts.into_bump_slice())) Ok(Layout::Struct(layouts.into_bump_slice()))