Rustup to rustc 1.32.0-nightly (9fefb6766
2018-11-13)
This commit is contained in:
parent
72c34be975
commit
0fa5c0f4fa
14
src/base.rs
14
src/base.rs
@ -373,7 +373,7 @@ fn trans_stmt<'a, 'tcx: 'a>(
|
|||||||
if *variant_index != dataful_variant {
|
if *variant_index != dataful_variant {
|
||||||
let niche = place.place_field(fx, mir::Field::new(0));
|
let niche = place.place_field(fx, mir::Field::new(0));
|
||||||
//let niche_llty = niche.layout.immediate_llvm_type(bx.cx);
|
//let niche_llty = niche.layout.immediate_llvm_type(bx.cx);
|
||||||
let niche_value = ((variant_index - *niche_variants.start()) as u128)
|
let niche_value = ((variant_index.as_u32() - niche_variants.start().as_u32()) as u128)
|
||||||
.wrapping_add(niche_start);
|
.wrapping_add(niche_start);
|
||||||
// FIXME(eddyb) Check the actual primitive type here.
|
// FIXME(eddyb) Check the actual primitive type here.
|
||||||
let niche_llval = if niche_value == 0 {
|
let niche_llval = if niche_value == 0 {
|
||||||
@ -683,7 +683,7 @@ pub fn trans_get_discriminant<'a, 'tcx: 'a>(
|
|||||||
}
|
}
|
||||||
match layout.variants {
|
match layout.variants {
|
||||||
layout::Variants::Single { index } => {
|
layout::Variants::Single { index } => {
|
||||||
let discr_val = layout.ty.ty_adt_def().map_or(index as u128, |def| {
|
let discr_val = layout.ty.ty_adt_def().map_or(index.as_u32() as u128, |def| {
|
||||||
def.discriminant_for_variant(fx.tcx, index).val
|
def.discriminant_for_variant(fx.tcx, index).val
|
||||||
});
|
});
|
||||||
return CValue::const_val(fx, dest_layout.ty, discr_val as u64 as i64);
|
return CValue::const_val(fx, dest_layout.ty, discr_val as u64 as i64);
|
||||||
@ -720,29 +720,29 @@ pub fn trans_get_discriminant<'a, 'tcx: 'a>(
|
|||||||
let if_true = fx
|
let if_true = fx
|
||||||
.bcx
|
.bcx
|
||||||
.ins()
|
.ins()
|
||||||
.iconst(dest_clif_ty, *niche_variants.start() as u64 as i64);
|
.iconst(dest_clif_ty, niche_variants.start().as_u32() as i64);
|
||||||
let if_false = fx
|
let if_false = fx
|
||||||
.bcx
|
.bcx
|
||||||
.ins()
|
.ins()
|
||||||
.iconst(dest_clif_ty, dataful_variant as u64 as i64);
|
.iconst(dest_clif_ty, dataful_variant.as_u32() as i64);
|
||||||
let val = fx.bcx.ins().select(b, if_true, if_false);
|
let val = fx.bcx.ins().select(b, if_true, if_false);
|
||||||
return CValue::ByVal(val, dest_layout);
|
return CValue::ByVal(val, dest_layout);
|
||||||
} else {
|
} else {
|
||||||
// Rebase from niche values to discriminant values.
|
// Rebase from niche values to discriminant values.
|
||||||
let delta = niche_start.wrapping_sub(*niche_variants.start() as u128);
|
let delta = niche_start.wrapping_sub(niche_variants.start().as_u32() as u128);
|
||||||
let delta = fx.bcx.ins().iconst(niche_llty, delta as u64 as i64);
|
let delta = fx.bcx.ins().iconst(niche_llty, delta as u64 as i64);
|
||||||
let lldiscr = fx.bcx.ins().isub(lldiscr, delta);
|
let lldiscr = fx.bcx.ins().isub(lldiscr, delta);
|
||||||
let b = fx.bcx.ins().icmp_imm(
|
let b = fx.bcx.ins().icmp_imm(
|
||||||
IntCC::UnsignedLessThanOrEqual,
|
IntCC::UnsignedLessThanOrEqual,
|
||||||
lldiscr,
|
lldiscr,
|
||||||
*niche_variants.end() as u64 as i64,
|
niche_variants.end().as_u32() as i64,
|
||||||
);
|
);
|
||||||
let if_true =
|
let if_true =
|
||||||
clif_intcast(fx, lldiscr, fx.clif_type(dest_layout.ty).unwrap(), false);
|
clif_intcast(fx, lldiscr, fx.clif_type(dest_layout.ty).unwrap(), false);
|
||||||
let if_false = fx
|
let if_false = fx
|
||||||
.bcx
|
.bcx
|
||||||
.ins()
|
.ins()
|
||||||
.iconst(dest_clif_ty, dataful_variant as u64 as i64);
|
.iconst(dest_clif_ty, dataful_variant.as_u32() as i64);
|
||||||
let val = fx.bcx.ins().select(b, if_true, if_false);
|
let val = fx.bcx.ins().select(b, if_true, if_false);
|
||||||
return CValue::ByVal(val, dest_layout);
|
return CValue::ByVal(val, dest_layout);
|
||||||
}
|
}
|
||||||
|
@ -561,7 +561,7 @@ impl<'a, 'tcx: 'a> CPlace<'tcx> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn downcast_variant(self, fx: &FunctionCx<'a, 'tcx, impl Backend>, variant: usize) -> Self {
|
pub fn downcast_variant(self, fx: &FunctionCx<'a, 'tcx, impl Backend>, variant: VariantIdx) -> Self {
|
||||||
let layout = self.layout().for_variant(fx, variant);
|
let layout = self.layout().for_variant(fx, variant);
|
||||||
self.unchecked_cast_to(layout)
|
self.unchecked_cast_to(layout)
|
||||||
}
|
}
|
||||||
|
@ -96,7 +96,7 @@ mod prelude {
|
|||||||
config::{CrateType, Lto},
|
config::{CrateType, Lto},
|
||||||
Session,
|
Session,
|
||||||
};
|
};
|
||||||
pub use rustc::ty::layout::{self, Abi, LayoutOf, Scalar, Size, TyLayout};
|
pub use rustc::ty::layout::{self, Abi, LayoutOf, Scalar, Size, TyLayout, VariantIdx};
|
||||||
pub use rustc::ty::{
|
pub use rustc::ty::{
|
||||||
self, subst::Substs, FnSig, Instance, InstanceDef, ParamEnv, PolyFnSig, Ty, TyCtxt,
|
self, subst::Substs, FnSig, Instance, InstanceDef, ParamEnv, PolyFnSig, Ty, TyCtxt,
|
||||||
TypeAndMut, TypeFoldable,
|
TypeAndMut, TypeFoldable,
|
||||||
|
Loading…
Reference in New Issue
Block a user