mirror of
https://github.com/rust-lang/rust.git
synced 2026-06-01 14:10:03 +03:00
Merge pull request #350 from RalfJung/inhabited
get rid of ad-hoc inhabitedness test
This commit is contained in:
@@ -1818,7 +1818,7 @@ fn try_read_value(&self, ptr: Pointer, ty: Ty<'tcx>) -> EvalResult<'tcx, Option<
|
||||
let val = match val {
|
||||
PrimVal::Bytes(0) => false,
|
||||
PrimVal::Bytes(1) => true,
|
||||
// TODO: This seems a little overeager, should reading at bool type already be UB?
|
||||
// TODO: This seems a little overeager, should reading at bool type already be insta-UB?
|
||||
_ => return err!(InvalidBool),
|
||||
};
|
||||
PrimVal::from_bool(val)
|
||||
@@ -2237,10 +2237,6 @@ fn size(self) -> Size {
|
||||
}
|
||||
}
|
||||
|
||||
pub fn is_inhabited<'a, 'tcx: 'a>(tcx: TyCtxt<'a, 'tcx, 'tcx>, ty: Ty<'tcx>) -> bool {
|
||||
ty.uninhabited_from(&mut HashMap::default(), tcx).is_empty()
|
||||
}
|
||||
|
||||
/// FIXME: expose trans::monomorphize::resolve_closure
|
||||
pub fn resolve_closure<'a, 'tcx>(
|
||||
tcx: TyCtxt<'a, 'tcx, 'tcx>,
|
||||
|
||||
@@ -251,9 +251,6 @@ fn eval_fn_call(
|
||||
_ => return err!(Unreachable),
|
||||
};
|
||||
let ty = sig.output();
|
||||
if !eval_context::is_inhabited(self.tcx, ty) {
|
||||
return err!(Unreachable);
|
||||
}
|
||||
let layout = self.type_layout(ty)?;
|
||||
M::call_intrinsic(self, instance, args, ret, ty, layout, target)?;
|
||||
self.dump_local(ret);
|
||||
|
||||
@@ -1,3 +1,6 @@
|
||||
// This should fail even without validation
|
||||
// compile-flags: -Zmir-emit-validate=0
|
||||
|
||||
#![feature(never_type)]
|
||||
#![allow(unreachable_code)]
|
||||
|
||||
|
||||
@@ -1,3 +1,6 @@
|
||||
// This should fail even without validation
|
||||
// compile-flags: -Zmir-emit-validate=0
|
||||
|
||||
#![feature(never_type)]
|
||||
#![allow(unreachable_code)]
|
||||
#![allow(unused_variables)]
|
||||
|
||||
@@ -1,3 +1,6 @@
|
||||
// This should fail even without validation
|
||||
// compile-flags: -Zmir-emit-validate=0
|
||||
|
||||
#![feature(never_type)]
|
||||
#![allow(unreachable_code)]
|
||||
#![allow(unused_variables)]
|
||||
@@ -5,12 +8,12 @@
|
||||
enum Void {}
|
||||
|
||||
fn f(v: Void) -> ! {
|
||||
match v {}
|
||||
match v {} //~ ERROR entered unreachable code
|
||||
}
|
||||
|
||||
fn main() {
|
||||
let v: Void = unsafe {
|
||||
std::mem::transmute::<(), Void>(()) //~ ERROR entered unreachable code
|
||||
std::mem::transmute::<(), Void>(())
|
||||
};
|
||||
f(v);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user