From 6b980462c6f5273b5b38d0e83c6da09c41d865e3 Mon Sep 17 00:00:00 2001 From: Ralf Jung Date: Fri, 26 Oct 2018 10:35:09 +0200 Subject: [PATCH] validity: assert that unions are non-empty --- src/librustc_mir/interpret/validity.rs | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/librustc_mir/interpret/validity.rs b/src/librustc_mir/interpret/validity.rs index ac1ba0edc3b3b..25e2ff6edb763 100644 --- a/src/librustc_mir/interpret/validity.rs +++ b/src/librustc_mir/interpret/validity.rs @@ -463,7 +463,11 @@ impl<'a, 'mir, 'tcx, M: Machine<'a, 'mir, 'tcx>> EvalContext<'a, 'mir, 'tcx, M> // Validate all fields of compound data structures let path_len = path.len(); // Remember the length, in case we need to truncate match dest.layout.fields { - layout::FieldPlacement::Union(..) => { + layout::FieldPlacement::Union(fields) => { + // Empty unions are not accepted by rustc. That's great, it means we can + // use that as an unambiguous signal for detecting primitives. Make sure + // we did not miss any primitive. + debug_assert!(fields > 0); // We can't check unions, their bits are allowed to be anything. // The fields don't need to correspond to any bit pattern of the union's fields. // See https://github.com/rust-lang/rust/issues/32836#issuecomment-406875389