Rollup merge of #102021 - lcnr:tyConst-fun, r=b-naber,BoxyUwU
some post-valtree cleanup r? project-const-generics cc ```@b-naber```
This commit is contained in:
commit
b149c48186
12 changed files with 58 additions and 122 deletions
|
@ -487,18 +487,16 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
|
|||
pub fn array_length_to_const(&self, length: &hir::ArrayLen) -> ty::Const<'tcx> {
|
||||
match length {
|
||||
&hir::ArrayLen::Infer(_, span) => self.ct_infer(self.tcx.types.usize, None, span),
|
||||
hir::ArrayLen::Body(anon_const) => self.to_const(anon_const),
|
||||
hir::ArrayLen::Body(anon_const) => {
|
||||
let const_def_id = self.tcx.hir().local_def_id(anon_const.hir_id);
|
||||
let span = self.tcx.hir().span(anon_const.hir_id);
|
||||
let c = ty::Const::from_anon_const(self.tcx, const_def_id);
|
||||
self.register_wf_obligation(c.into(), span, ObligationCauseCode::WellFormed(None));
|
||||
self.normalize_associated_types_in(span, c)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
pub fn to_const(&self, ast_c: &hir::AnonConst) -> ty::Const<'tcx> {
|
||||
let const_def_id = self.tcx.hir().local_def_id(ast_c.hir_id);
|
||||
let span = self.tcx.hir().span(ast_c.hir_id);
|
||||
let c = ty::Const::from_anon_const(self.tcx, const_def_id);
|
||||
self.register_wf_obligation(c.into(), span, ObligationCauseCode::WellFormed(None));
|
||||
self.normalize_associated_types_in(span, c)
|
||||
}
|
||||
|
||||
pub fn const_arg_to_const(
|
||||
&self,
|
||||
ast_c: &hir::AnonConst,
|
||||
|
|
|
@ -5,7 +5,6 @@ use rustc_data_structures::fx::FxHashSet;
|
|||
use rustc_errors::struct_span_err;
|
||||
use rustc_errors::{Diagnostic, ErrorGuaranteed};
|
||||
use rustc_hir as hir;
|
||||
use rustc_infer::infer::TyCtxtInferExt;
|
||||
use rustc_middle::ty::subst::GenericArgKind;
|
||||
use rustc_middle::ty::subst::InternalSubsts;
|
||||
use rustc_middle::ty::util::IgnoreRegions;
|
||||
|
@ -229,12 +228,8 @@ fn emit_orphan_check_error<'tcx>(
|
|||
"only traits defined in the current crate {msg}"
|
||||
);
|
||||
err.span_label(sp, "impl doesn't use only types from inside the current crate");
|
||||
for (ty, is_target_ty) in &tys {
|
||||
let mut ty = *ty;
|
||||
tcx.infer_ctxt().enter(|infcx| {
|
||||
// Remove the lifetimes unnecessary for this error.
|
||||
ty = infcx.freshen(ty);
|
||||
});
|
||||
for &(mut ty, is_target_ty) in &tys {
|
||||
ty = tcx.erase_regions(ty);
|
||||
ty = match ty.kind() {
|
||||
// Remove the type arguments from the output, as they are not relevant.
|
||||
// You can think of this as the reverse of `resolve_vars_if_possible`.
|
||||
|
@ -264,7 +259,7 @@ fn emit_orphan_check_error<'tcx>(
|
|||
};
|
||||
|
||||
let msg = format!("{} is not defined in the current crate{}", ty, postfix);
|
||||
if *is_target_ty {
|
||||
if is_target_ty {
|
||||
// Point at `D<A>` in `impl<A, B> for C<B> in D<A>`
|
||||
err.span_label(self_ty_span, &msg);
|
||||
} else {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue