VariantSizeDifferences: bail on SizeOverflow

This commit is contained in:
Mazdak Farrokhzad 2020-03-10 10:10:10 +01:00
parent 5da2e53f47
commit 81099c27dd
3 changed files with 20 additions and 4 deletions

View File

@ -998,10 +998,8 @@ impl<'a, 'tcx> LateLintPass<'a, 'tcx> for VariantSizeDifferences {
let ty = cx.tcx.erase_regions(&t); let ty = cx.tcx.erase_regions(&t);
let layout = match cx.layout_of(ty) { let layout = match cx.layout_of(ty) {
Ok(layout) => layout, Ok(layout) => layout,
Err(ty::layout::LayoutError::Unknown(_)) => return, Err(ty::layout::LayoutError::Unknown(_))
Err(err @ ty::layout::LayoutError::SizeOverflow(_)) => { | Err(ty::layout::LayoutError::SizeOverflow(_)) => return,
bug!("failed to get layout for `{}`: {}", t, err);
}
}; };
let (variants, tag) = match layout.variants { let (variants, tag) = match layout.variants {
layout::Variants::Multiple { layout::Variants::Multiple {

View File

@ -0,0 +1,10 @@
// build-fail
// only-x86_64
fn main() {
Bug::V([0; !0]); //~ ERROR is too big for the current
}
enum Bug {
V([u8; !0]),
}

View File

@ -0,0 +1,8 @@
error: the type `[u8; 18446744073709551615]` is too big for the current architecture
--> $DIR/issue-69485-var-size-diffs-too-large.rs:5:12
|
LL | Bug::V([0; !0]);
| ^^^^^^^
error: aborting due to previous error