From f2b9686134d7e75d4b57d0d0f6cf81d63d638627 Mon Sep 17 00:00:00 2001 From: varkor Date: Fri, 23 Feb 2018 22:15:07 +0000 Subject: [PATCH] Bad tags are unreachable --- src/librustc/ty/subst.rs | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/src/librustc/ty/subst.rs b/src/librustc/ty/subst.rs index 3eb859679da..cf6a1e354d3 100644 --- a/src/librustc/ty/subst.rs +++ b/src/librustc/ty/subst.rs @@ -18,6 +18,7 @@ use serialize::{self, Encodable, Encoder, Decodable, Decoder}; use syntax_pos::{Span, DUMMY_SP}; use rustc_data_structures::accumulate_vec::AccumulateVec; +use core::intrinsics; use core::nonzero::NonZero; use std::fmt; use std::iter; @@ -84,14 +85,12 @@ impl<'tcx> Kind<'tcx> { #[inline] pub fn unpack(self) -> UnpackedKind<'tcx> { let ptr = self.ptr.get(); - match ptr & TAG_MASK { - REGION_TAG => unsafe { - UnpackedKind::Lifetime(&*((ptr & !TAG_MASK) as *const _)) - }, - TYPE_TAG => unsafe { - UnpackedKind::Type(&*((ptr & !TAG_MASK) as *const _)) - }, - _ => bug!("packed kind has invalid tag") + unsafe { + match ptr & TAG_MASK { + REGION_TAG => UnpackedKind::Lifetime(&*((ptr & !TAG_MASK) as *const _)), + TYPE_TAG => UnpackedKind::Type(&*((ptr & !TAG_MASK) as *const _)), + _ => intrinsics::unreachable() + } } } }