From 2efede77493df5912800fc358f28277642f56bc9 Mon Sep 17 00:00:00 2001 From: Oli Scherer Date: Thu, 3 Mar 2022 12:02:12 +0000 Subject: [PATCH 1/3] Mark scalar layout unions so that backends that do not support partially initialized scalars can special case them. --- src/common.rs | 2 +- src/discriminant.rs | 2 +- src/value_and_place.rs | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/common.rs b/src/common.rs index 89fd0bfa8bbf..ffa629ca16c8 100644 --- a/src/common.rs +++ b/src/common.rs @@ -21,7 +21,7 @@ pub(crate) fn pointer_ty(tcx: TyCtxt<'_>) -> types::Type { } pub(crate) fn scalar_to_clif_type(tcx: TyCtxt<'_>, scalar: Scalar) -> Type { - match scalar.value { + match scalar.primitive() { Primitive::Int(int, _sign) => match int { Integer::I8 => types::I8, Integer::I16 => types::I16, diff --git a/src/discriminant.rs b/src/discriminant.rs index 6b2893fdaeb2..357cb4a6d246 100644 --- a/src/discriminant.rs +++ b/src/discriminant.rs @@ -105,7 +105,7 @@ pub(crate) fn codegen_get_discriminant<'tcx>( // Decode the discriminant (specifically if it's niche-encoded). match *tag_encoding { TagEncoding::Direct => { - let signed = match tag_scalar.value { + let signed = match tag_scalar.primitive() { Int(_, signed) => signed, _ => false, }; diff --git a/src/value_and_place.rs b/src/value_and_place.rs index afe8797a0300..8f80b02ae0d4 100644 --- a/src/value_and_place.rs +++ b/src/value_and_place.rs @@ -50,7 +50,7 @@ fn codegen_field<'tcx>( } fn scalar_pair_calculate_b_offset(tcx: TyCtxt<'_>, a_scalar: Scalar, b_scalar: Scalar) -> Offset32 { - let b_offset = a_scalar.value.size(&tcx).align_to(b_scalar.value.align(&tcx).abi); + let b_offset = a_scalar.size(&tcx).align_to(b_scalar.align(&tcx).abi); Offset32::new(b_offset.bytes().try_into().unwrap()) } From f2d2ec3e93532feb28a2d5e86632c38d8d75f9a5 Mon Sep 17 00:00:00 2001 From: klensy Date: Tue, 5 Apr 2022 15:52:53 +0300 Subject: [PATCH 2/3] check_doc_keyword: don't alloc string for emptiness check check_doc_alias_value: get argument as Symbol to prevent needless string convertions check_doc_attrs: don't alloc vec, iterate over slice. Vec introduced in #83149, but no perf run posted on merge replace as_str() check with symbol check get_single_str_from_tts: don't prealloc string trivial string to str replace LifetimeScopeForPath::NonElided use Vec instead of Vec AssertModuleSource use BTreeSet instead of BTreeSet CrateInfo.crate_name replace FxHashMap with FxHashMap --- src/driver/jit.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/driver/jit.rs b/src/driver/jit.rs index 6c22296db716..7f15bc75fda2 100644 --- a/src/driver/jit.rs +++ b/src/driver/jit.rs @@ -288,8 +288,8 @@ fn load_imported_symbols_for_jit( match data[cnum.as_usize() - 1] { Linkage::NotLinked | Linkage::IncludedFromDylib => {} Linkage::Static => { - let name = &crate_info.crate_name[&cnum]; - let mut err = sess.struct_err(&format!("Can't load static lib {}", name.as_str())); + let name = crate_info.crate_name[&cnum]; + let mut err = sess.struct_err(&format!("Can't load static lib {}", name)); err.note("rustc_codegen_cranelift can only load dylibs in JIT mode."); err.emit(); } From a923e9211a6adf4c78dd5f095a514455039e5fb4 Mon Sep 17 00:00:00 2001 From: Jakob Degen Date: Tue, 5 Apr 2022 17:14:59 -0400 Subject: [PATCH 3/3] Add new `Deinit` statement kind --- src/base.rs | 1 + src/constant.rs | 1 + 2 files changed, 2 insertions(+) diff --git a/src/base.rs b/src/base.rs index a9ff710c91ed..8c45993a8b76 100644 --- a/src/base.rs +++ b/src/base.rs @@ -772,6 +772,7 @@ fn codegen_stmt<'tcx>( } StatementKind::StorageLive(_) | StatementKind::StorageDead(_) + | StatementKind::Deinit(_) | StatementKind::Nop | StatementKind::FakeRead(..) | StatementKind::Retag { .. } diff --git a/src/constant.rs b/src/constant.rs index 4657791345b8..57074f00210f 100644 --- a/src/constant.rs +++ b/src/constant.rs @@ -518,6 +518,7 @@ pub(crate) fn mir_operand_get_const_val<'tcx>( StatementKind::Assign(_) | StatementKind::FakeRead(_) | StatementKind::SetDiscriminant { .. } + | StatementKind::Deinit(_) | StatementKind::StorageLive(_) | StatementKind::StorageDead(_) | StatementKind::Retag(_, _)