Rustup to rustc 1.46.0-nightly (2d8bd9b74 2020-06-19)

This commit is contained in:
bjorn3 2020-06-20 11:10:27 +02:00
parent 3086e44733
commit 266ca933f4
3 changed files with 28 additions and 28 deletions

View File

@ -1 +1 @@
nightly-2020-06-16 nightly-2020-06-20

View File

@ -340,11 +340,11 @@ fn codegen_fn_content(fx: &mut FunctionCx<'_, '_, impl Backend>) {
bug!("shouldn't exist at trans {:?}", bb_data.terminator()); bug!("shouldn't exist at trans {:?}", bb_data.terminator());
} }
TerminatorKind::Drop { TerminatorKind::Drop {
location, place,
target, target,
unwind: _, unwind: _,
} => { } => {
let drop_place = trans_place(fx, *location); let drop_place = trans_place(fx, *place);
crate::abi::codegen_drop(fx, bb_data.terminator().source_info.span, drop_place); crate::abi::codegen_drop(fx, bb_data.terminator().source_info.span, drop_place);
let target_block = fx.get_block(*target); let target_block = fx.get_block(*target);

View File

@ -1,6 +1,6 @@
//! Adapted from https://github.com/rust-lang/rust/blob/d760df5aea483aae041c9a241e7acacf48f75035/src/librustc_codegen_ssa/mir/place.rs //! Adapted from https://github.com/rust-lang/rust/blob/d760df5aea483aae041c9a241e7acacf48f75035/src/librustc_codegen_ssa/mir/place.rs
use rustc_target::abi::{DiscriminantKind, Int, Variants}; use rustc_target::abi::{TagEncoding, Int, Variants};
use crate::prelude::*; use crate::prelude::*;
@ -18,12 +18,12 @@ pub(crate) fn codegen_set_discriminant<'tcx>(
assert_eq!(index, variant_index); assert_eq!(index, variant_index);
} }
Variants::Multiple { Variants::Multiple {
discr: _, tag: _,
discr_index, tag_field,
discr_kind: DiscriminantKind::Tag, tag_encoding: TagEncoding::Direct,
variants: _, variants: _,
} => { } => {
let ptr = place.place_field(fx, mir::Field::new(discr_index)); let ptr = place.place_field(fx, mir::Field::new(tag_field));
let to = layout let to = layout
.ty .ty
.discriminant_for_variant(fx.tcx, variant_index) .discriminant_for_variant(fx.tcx, variant_index)
@ -33,10 +33,10 @@ pub(crate) fn codegen_set_discriminant<'tcx>(
ptr.write_cvalue(fx, discr); ptr.write_cvalue(fx, discr);
} }
Variants::Multiple { Variants::Multiple {
discr: _, tag: _,
discr_index, tag_field,
discr_kind: tag_encoding:
DiscriminantKind::Niche { TagEncoding::Niche {
dataful_variant, dataful_variant,
ref niche_variants, ref niche_variants,
niche_start, niche_start,
@ -44,7 +44,7 @@ pub(crate) fn codegen_set_discriminant<'tcx>(
variants: _, variants: _,
} => { } => {
if variant_index != dataful_variant { if variant_index != dataful_variant {
let niche = place.place_field(fx, mir::Field::new(discr_index)); let niche = place.place_field(fx, mir::Field::new(tag_field));
let niche_value = variant_index.as_u32() - niche_variants.start().as_u32(); let niche_value = variant_index.as_u32() - niche_variants.start().as_u32();
let niche_value = u128::from(niche_value).wrapping_add(niche_start); let niche_value = u128::from(niche_value).wrapping_add(niche_start);
let niche_llval = CValue::const_val(fx, niche.layout(), niche_value); let niche_llval = CValue::const_val(fx, niche.layout(), niche_value);
@ -69,7 +69,7 @@ pub(crate) fn codegen_get_discriminant<'tcx>(
); );
} }
let (discr_scalar, discr_index, discr_kind) = match &layout.variants { let (tag_scalar, tag_field, tag_encoding) = match &layout.variants {
Variants::Single { index } => { Variants::Single { index } => {
let discr_val = layout let discr_val = layout
.ty .ty
@ -78,30 +78,30 @@ pub(crate) fn codegen_get_discriminant<'tcx>(
return CValue::const_val(fx, dest_layout, discr_val); return CValue::const_val(fx, dest_layout, discr_val);
} }
Variants::Multiple { Variants::Multiple {
discr, tag,
discr_index, tag_field,
discr_kind, tag_encoding,
variants: _, variants: _,
} => (discr, *discr_index, discr_kind), } => (tag, *tag_field, tag_encoding),
}; };
let cast_to = fx.clif_type(dest_layout.ty).unwrap(); let cast_to = fx.clif_type(dest_layout.ty).unwrap();
// Read the tag/niche-encoded discriminant from memory. // Read the tag/niche-encoded discriminant from memory.
let encoded_discr = value.value_field(fx, mir::Field::new(discr_index)); let tag = value.value_field(fx, mir::Field::new(tag_field));
let encoded_discr = encoded_discr.load_scalar(fx); let tag = tag.load_scalar(fx);
// Decode the discriminant (specifically if it's niche-encoded). // Decode the discriminant (specifically if it's niche-encoded).
match *discr_kind { match *tag_encoding {
DiscriminantKind::Tag => { TagEncoding::Direct => {
let signed = match discr_scalar.value { let signed = match tag_scalar.value {
Int(_, signed) => signed, Int(_, signed) => signed,
_ => false, _ => false,
}; };
let val = clif_intcast(fx, encoded_discr, cast_to, signed); let val = clif_intcast(fx, tag, cast_to, signed);
return CValue::by_val(val, dest_layout); CValue::by_val(val, dest_layout)
} }
DiscriminantKind::Niche { TagEncoding::Niche {
dataful_variant, dataful_variant,
ref niche_variants, ref niche_variants,
niche_start, niche_start,
@ -119,12 +119,12 @@ pub(crate) fn codegen_get_discriminant<'tcx>(
// that might not fit in the same type, on top of needing an extra // that might not fit in the same type, on top of needing an extra
// comparison (see also the comment on `let niche_discr`). // comparison (see also the comment on `let niche_discr`).
let relative_discr = if niche_start == 0 { let relative_discr = if niche_start == 0 {
encoded_discr tag
} else { } else {
// FIXME handle niche_start > i64::MAX // FIXME handle niche_start > i64::MAX
fx.bcx fx.bcx
.ins() .ins()
.iadd_imm(encoded_discr, -i64::try_from(niche_start).unwrap()) .iadd_imm(tag, -i64::try_from(niche_start).unwrap())
}; };
let relative_max = niche_variants.end().as_u32() - niche_variants.start().as_u32(); let relative_max = niche_variants.end().as_u32() - niche_variants.start().as_u32();
let is_niche = { let is_niche = {