about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorMazdak Farrokhzad <twingoow@gmail.com>2020-03-17 03:05:14 +0100
committerGitHub <noreply@github.com>2020-03-17 03:05:14 +0100
commit1b0c73bafff841c5d51f0b5cd12d4463c19ac888 (patch)
tree840f7d98ce4802c41462cb1fe8156106000b7d20 /src
parent9fc5c2d00d9834549846a4d6528219f0b1667c9c (diff)
parent81099c27ddc856238d7b1b15c20d487130ef3057 (diff)
downloadrust-1b0c73bafff841c5d51f0b5cd12d4463c19ac888.tar.gz
rust-1b0c73bafff841c5d51f0b5cd12d4463c19ac888.zip
Rollup merge of #69881 - Centril:fix-69485, r=oli-obk
VariantSizeDifferences: bail on SizeOverflow

Fixes #69485.

r? @oli-obk
Diffstat (limited to 'src')
-rw-r--r--src/librustc_lint/types.rs6
-rw-r--r--src/test/ui/lint/issue-69485-var-size-diffs-too-large.rs10
-rw-r--r--src/test/ui/lint/issue-69485-var-size-diffs-too-large.stderr8
3 files changed, 20 insertions, 4 deletions
diff --git a/src/librustc_lint/types.rs b/src/librustc_lint/types.rs
index b5c0296e297..4949c93d45e 100644
--- a/src/librustc_lint/types.rs
+++ b/src/librustc_lint/types.rs
@@ -1032,10 +1032,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
+