diff options
| author | Mazdak Farrokhzad <twingoow@gmail.com> | 2020-03-10 10:10:10 +0100 |
|---|---|---|
| committer | Mazdak Farrokhzad <twingoow@gmail.com> | 2020-03-15 18:54:36 +0100 |
| commit | 81099c27ddc856238d7b1b15c20d487130ef3057 (patch) | |
| tree | 01ffa576a38e6440d336dc08554949abb937f586 /src | |
| parent | 5da2e53f471f5eea60f534845b90c97ecabb71cb (diff) | |
| download | rust-81099c27ddc856238d7b1b15c20d487130ef3057.tar.gz rust-81099c27ddc856238d7b1b15c20d487130ef3057.zip | |
VariantSizeDifferences: bail on SizeOverflow
Diffstat (limited to 'src')
| -rw-r--r-- | src/librustc_lint/types.rs | 6 | ||||
| -rw-r--r-- | src/test/ui/lint/issue-69485-var-size-diffs-too-large.rs | 10 | ||||
| -rw-r--r-- | src/test/ui/lint/issue-69485-var-size-diffs-too-large.stderr | 8 |
3 files changed, 20 insertions, 4 deletions
diff --git a/src/librustc_lint/types.rs b/src/librustc_lint/types.rs index 86d93612e99..2896682ea82 100644 --- a/src/librustc_lint/types.rs +++ b/src/librustc_lint/types.rs @@ -998,10 +998,8 @@ impl<'a, 'tcx> LateLintPass<'a, 'tcx> for VariantSizeDifferences { let ty = cx.tcx.erase_regions(&t); let layout = match cx.layout_of(ty) { Ok(layout) => layout, - Err(ty::layout::LayoutError::Unknown(_)) => return, - Err(err @ ty::layout::LayoutError::SizeOverflow(_)) => { - bug!("failed to get layout for `{}`: {}", t, err); - } + Err(ty::layout::LayoutError::Unknown(_)) + | Err(ty::layout::LayoutError::SizeOverflow(_)) => return, }; let (variants, tag) = match layout.variants { layout::Variants::Multiple { diff --git a/src/test/ui/lint/issue-69485-var-size-diffs-too-large.rs b/src/test/ui/lint/issue-69485-var-size-diffs-too-large.rs new file mode 100644 index 00000000000..49d489d9168 --- /dev/null +++ b/src/test/ui/lint/issue-69485-var-size-diffs-too-large.rs @@ -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]), +} diff --git a/src/test/ui/lint/issue-69485-var-size-diffs-too-large.stderr b/src/test/ui/lint/issue-69485-var-size-diffs-too-large.stderr new file mode 100644 index 00000000000..d31ce9cfe0c --- /dev/null +++ b/src/test/ui/lint/issue-69485-var-size-diffs-too-large.stderr @@ -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 + |
