From f1bdd4fae21e3053cedaa850691edd7a25a62dd2 Mon Sep 17 00:00:00 2001 From: Andrew Cann Date: Thu, 15 Sep 2016 01:11:11 +0800 Subject: [PATCH] Expand is_uninhabited for references --- src/libcore/fmt/mod.rs | 8 +++++--- src/librustc/ty/sty.rs | 7 +++---- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/src/libcore/fmt/mod.rs b/src/libcore/fmt/mod.rs index 2d75a8ec420b1..9fcccacdbe137 100644 --- a/src/libcore/fmt/mod.rs +++ b/src/libcore/fmt/mod.rs @@ -178,8 +178,9 @@ enum Void {} issue = "0")] #[doc(hidden)] pub struct ArgumentV1<'a> { - value: &'a Void, - formatter: fn(&Void, &mut Formatter) -> Result, + _ph: PhantomData<&'a ()>, + value: *const Void, + formatter: fn(*const Void, &mut Formatter) -> Result, } #[unstable(feature = "fmt_internals", reason = "internal to format_args!", @@ -203,6 +204,7 @@ impl<'a> ArgumentV1<'a> { f: fn(&T, &mut Formatter) -> Result) -> ArgumentV1<'b> { unsafe { ArgumentV1 { + _ph: PhantomData, formatter: mem::transmute(f), value: mem::transmute(x) } @@ -218,7 +220,7 @@ impl<'a> ArgumentV1<'a> { fn as_usize(&self) -> Option { if self.formatter as usize == ArgumentV1::show_usize as usize { - Some(unsafe { *(self.value as *const _ as *const usize) }) + Some(unsafe { *(self.value as *const usize) }) } else { None } diff --git a/src/librustc/ty/sty.rs b/src/librustc/ty/sty.rs index 53230eaf59dd3..39461dc4f74f5 100644 --- a/src/librustc/ty/sty.rs +++ b/src/librustc/ty/sty.rs @@ -946,11 +946,10 @@ impl<'a, 'gcx, 'tcx> TyS<'tcx> { }, TyNever => true, - TyTuple(ref tys) => tys.iter().any(|ty| ty.is_uninhabited(cx)), - TyArray(ty, len) => len > 0 && ty.is_uninhabited(cx), + TyTuple(ref tys) => tys.iter().any(|ty| ty.is_uninhabited_recurse(visited, cx)), + TyArray(ty, len) => len > 0 && ty.is_uninhabited_recurse(visited, cx), + TyRef(_, ref tm) => tm.ty.is_uninhabited_recurse(visited, cx), - // FIXME(canndrew): this line breaks core::fmt - //TyRef(_, ref tm) => tm.ty.is_uninhabited(cx), _ => false, } }