Skip to content

Commit 02eeaf9

Browse files
committed
Return fallback size and align when static layout is error.
1 parent db9f50e commit 02eeaf9

File tree

1 file changed

+11
-9
lines changed
  • compiler/rustc_middle/src/mir/interpret

1 file changed

+11
-9
lines changed

compiler/rustc_middle/src/mir/interpret/mod.rs

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -384,18 +384,20 @@ impl<'tcx> GlobalAlloc<'tcx> {
384384
.type_of(def_id)
385385
.no_bound_vars()
386386
.expect("statics should not have generic parameters");
387-
let layout = tcx.layout_of(typing_env.as_query_input(ty)).unwrap();
388-
assert!(layout.is_sized());
387+
let layout = tcx.layout_of(typing_env.as_query_input(ty));
388+
let (size, mut align) = if let Ok(layout) = layout {
389+
assert!(layout.is_sized());
390+
(layout.size, layout.align.abi)
391+
} else {
392+
(Size::ZERO, Align::ONE)
393+
};
389394

390395
// Take over-alignment from attributes into account.
391-
let align = match tcx.codegen_fn_attrs(def_id).alignment {
392-
Some(align_from_attribute) => {
393-
Ord::max(align_from_attribute, layout.align.abi)
394-
}
395-
None => layout.align.abi,
396-
};
396+
if let Some(align_from_attribute) = tcx.codegen_fn_attrs(def_id).alignment {
397+
align = Ord::max(align_from_attribute, align);
398+
}
397399

398-
(layout.size, align)
400+
(size, align)
399401
}
400402
}
401403
GlobalAlloc::Memory(alloc) => {

0 commit comments

Comments
 (0)