Auto merge of #82153 - jonas-schievink:rollup-ls5r943, r=jonas-schievink
Rollup of 19 pull requests Successful merges: - #81503 (Suggest to create a new `const` item if the `fn` in the array is a `const fn`) - #81897 (Add match pattern diagnostics regression test) - #81975 (Seal the CommandExt, OsStrExt and OsStringExt traits) - #82009 (const_generics: Dont evaluate array length const when handling errors) - #82060 (Fix typos in BTreeSet::{first, last} docs) - #82061 (CTFE validation: catch ReadPointerAsBytes and better error) - #82063 (Fixed minor typo in catch_unwind docs) - #82067 (const_generics: Fix incorrect ty::ParamEnv::empty() usage) - #82077 (Edit `rustc_arena::DropArena` docs) - #82096 (Fix a typo) - #82106 (Remove unnecessary `Option` in `default_doc`) - #82107 (expand: Some cleanup) - #82118 (Add missing env!-decl variant) - #82119 (Fix typo in link to CreateSymbolicLinkW documentation.) - #82120 (Stabilize Arguments::as_str) - #82129 (Remove redundant bool_to_option feature gate) - #82133 (Update link for extern prelude.) - #82141 (32-bit ARM: Emit `lr` instead of `r14` when specified as an `asm!` output register.) - #82147 (⬆️ rust-analyzer) Failed merges: r? `@ghost` `@rustbot` modify labels: rollup
This commit is contained in:
@@ -31,6 +31,7 @@ impl<'tcx> TyCtxt<'tcx> {
|
||||
/// constant `bar::<T>()` requires a substitution for `T`, if the substitution for `T` is still
|
||||
/// too generic for the constant to be evaluated then `Err(ErrorHandled::TooGeneric)` is
|
||||
/// returned.
|
||||
#[instrument(level = "debug", skip(self))]
|
||||
pub fn const_eval_resolve(
|
||||
self,
|
||||
param_env: ty::ParamEnv<'tcx>,
|
||||
|
||||
@@ -228,7 +228,10 @@ pub enum ObligationCauseCode<'tcx> {
|
||||
/// Inline asm operand type must be `Sized`.
|
||||
InlineAsmSized,
|
||||
/// `[T, ..n]` implies that `T` must be `Copy`.
|
||||
RepeatVec,
|
||||
/// If the function in the array repeat expression is a `const fn`,
|
||||
/// display a help message suggesting to move the function call to a
|
||||
/// new `const` item while saying that `T` doesn't implement `Copy`.
|
||||
RepeatVec(bool),
|
||||
|
||||
/// Types of fields (other than the last, except for packed structs) in a struct must be sized.
|
||||
FieldSized {
|
||||
|
||||
@@ -228,12 +228,17 @@ impl<'tcx> ty::TyS<'tcx> {
|
||||
ty::Adt(def, _) => format!("{} `{}`", def.descr(), tcx.def_path_str(def.did)).into(),
|
||||
ty::Foreign(def_id) => format!("extern type `{}`", tcx.def_path_str(def_id)).into(),
|
||||
ty::Array(t, n) => {
|
||||
let n = tcx.lift(n).unwrap();
|
||||
match n.try_eval_usize(tcx, ty::ParamEnv::empty()) {
|
||||
_ if t.is_simple_ty() => format!("array `{}`", self).into(),
|
||||
Some(n) => format!("array of {} element{}", n, pluralize!(n)).into(),
|
||||
None => "array".into(),
|
||||
if t.is_simple_ty() {
|
||||
return format!("array `{}`", self).into();
|
||||
}
|
||||
|
||||
let n = tcx.lift(n).unwrap();
|
||||
if let ty::ConstKind::Value(v) = n.val {
|
||||
if let Some(n) = v.try_to_machine_usize(tcx) {
|
||||
return format!("array of {} element{}", n, pluralize!(n)).into();
|
||||
}
|
||||
}
|
||||
"array".into()
|
||||
}
|
||||
ty::Slice(ty) if ty.is_simple_ty() => format!("slice `{}`", self).into(),
|
||||
ty::Slice(_) => "slice".into(),
|
||||
|
||||
@@ -347,6 +347,7 @@ impl<'tcx> Instance<'tcx> {
|
||||
}
|
||||
|
||||
// This should be kept up to date with `resolve`.
|
||||
#[instrument(level = "debug", skip(tcx))]
|
||||
pub fn resolve_opt_const_arg(
|
||||
tcx: TyCtxt<'tcx>,
|
||||
param_env: ty::ParamEnv<'tcx>,
|
||||
|
||||
Reference in New Issue
Block a user