Rollup merge of #118302 - mu001999:dead_code/clean, r=cjgillot
Clean dead codes Clean dead codes detected by #118257
This commit is contained in:
commit
c67613bef9
@ -737,18 +737,6 @@ fn replace_bound_regions_with_nll_infer_vars<T>(
|
|||||||
) -> T
|
) -> T
|
||||||
where
|
where
|
||||||
T: TypeFoldable<TyCtxt<'tcx>>;
|
T: TypeFoldable<TyCtxt<'tcx>>;
|
||||||
|
|
||||||
fn instantiate_bound_regions_with_nll_infer_vars_in_recursive_scope(
|
|
||||||
&self,
|
|
||||||
mir_def_id: LocalDefId,
|
|
||||||
indices: &mut UniversalRegionIndices<'tcx>,
|
|
||||||
);
|
|
||||||
|
|
||||||
fn instantiate_bound_regions_with_nll_infer_vars_in_item(
|
|
||||||
&self,
|
|
||||||
mir_def_id: LocalDefId,
|
|
||||||
indices: &mut UniversalRegionIndices<'tcx>,
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'cx, 'tcx> InferCtxtExt<'tcx> for BorrowckInferCtxt<'cx, 'tcx> {
|
impl<'cx, 'tcx> InferCtxtExt<'tcx> for BorrowckInferCtxt<'cx, 'tcx> {
|
||||||
@ -799,54 +787,6 @@ fn replace_bound_regions_with_nll_infer_vars<T>(
|
|||||||
});
|
});
|
||||||
value
|
value
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Finds late-bound regions that do not appear in the parameter listing and adds them to the
|
|
||||||
/// indices vector. Typically, we identify late-bound regions as we process the inputs and
|
|
||||||
/// outputs of the closure/function. However, sometimes there are late-bound regions which do
|
|
||||||
/// not appear in the fn parameters but which are nonetheless in scope. The simplest case of
|
|
||||||
/// this are unused functions, like fn foo<'a>() { } (see e.g., #51351). Despite not being used,
|
|
||||||
/// users can still reference these regions (e.g., let x: &'a u32 = &22;), so we need to create
|
|
||||||
/// entries for them and store them in the indices map. This code iterates over the complete
|
|
||||||
/// set of late-bound regions and checks for any that we have not yet seen, adding them to the
|
|
||||||
/// inputs vector.
|
|
||||||
#[instrument(skip(self, indices))]
|
|
||||||
fn instantiate_bound_regions_with_nll_infer_vars_in_recursive_scope(
|
|
||||||
&self,
|
|
||||||
mir_def_id: LocalDefId,
|
|
||||||
indices: &mut UniversalRegionIndices<'tcx>,
|
|
||||||
) {
|
|
||||||
for_each_late_bound_region_in_recursive_scope(self.tcx, mir_def_id, |r| {
|
|
||||||
debug!(?r);
|
|
||||||
if !indices.indices.contains_key(&r) {
|
|
||||||
let region_vid = {
|
|
||||||
let name = r.get_name_or_anon();
|
|
||||||
self.next_nll_region_var(FR, || RegionCtxt::LateBound(name))
|
|
||||||
};
|
|
||||||
|
|
||||||
debug!(?region_vid);
|
|
||||||
indices.insert_late_bound_region(r, region_vid.as_var());
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
#[instrument(skip(self, indices))]
|
|
||||||
fn instantiate_bound_regions_with_nll_infer_vars_in_item(
|
|
||||||
&self,
|
|
||||||
mir_def_id: LocalDefId,
|
|
||||||
indices: &mut UniversalRegionIndices<'tcx>,
|
|
||||||
) {
|
|
||||||
for_each_late_bound_region_in_item(self.tcx, mir_def_id, |r| {
|
|
||||||
debug!(?r);
|
|
||||||
if !indices.indices.contains_key(&r) {
|
|
||||||
let region_vid = {
|
|
||||||
let name = r.get_name_or_anon();
|
|
||||||
self.next_nll_region_var(FR, || RegionCtxt::LateBound(name))
|
|
||||||
};
|
|
||||||
|
|
||||||
indices.insert_late_bound_region(r, region_vid.as_var());
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'tcx> UniversalRegionIndices<'tcx> {
|
impl<'tcx> UniversalRegionIndices<'tcx> {
|
||||||
|
@ -9,7 +9,7 @@
|
|||||||
use rustc_target::abi::HasDataLayout;
|
use rustc_target::abi::HasDataLayout;
|
||||||
use rustc_target::abi::{Abi, Align, FieldsShape};
|
use rustc_target::abi::{Abi, Align, FieldsShape};
|
||||||
use rustc_target::abi::{Int, Pointer, F32, F64};
|
use rustc_target::abi::{Int, Pointer, F32, F64};
|
||||||
use rustc_target::abi::{PointeeInfo, Scalar, Size, TyAbiInterface, Variants};
|
use rustc_target::abi::{Scalar, Size, Variants};
|
||||||
use smallvec::{smallvec, SmallVec};
|
use smallvec::{smallvec, SmallVec};
|
||||||
|
|
||||||
use std::fmt::Write;
|
use std::fmt::Write;
|
||||||
@ -184,7 +184,6 @@ fn scalar_pair_element_llvm_type<'a>(
|
|||||||
immediate: bool,
|
immediate: bool,
|
||||||
) -> &'a Type;
|
) -> &'a Type;
|
||||||
fn llvm_field_index<'a>(&self, cx: &CodegenCx<'a, 'tcx>, index: usize) -> u64;
|
fn llvm_field_index<'a>(&self, cx: &CodegenCx<'a, 'tcx>, index: usize) -> u64;
|
||||||
fn pointee_info_at<'a>(&self, cx: &CodegenCx<'a, 'tcx>, offset: Size) -> Option<PointeeInfo>;
|
|
||||||
fn scalar_copy_llvm_type<'a>(&self, cx: &CodegenCx<'a, 'tcx>) -> Option<&'a Type>;
|
fn scalar_copy_llvm_type<'a>(&self, cx: &CodegenCx<'a, 'tcx>) -> Option<&'a Type>;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -356,20 +355,6 @@ fn llvm_field_index<'a>(&self, cx: &CodegenCx<'a, 'tcx>, index: usize) -> u64 {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// FIXME(eddyb) this having the same name as `TyAndLayout::pointee_info_at`
|
|
||||||
// (the inherent method, which is lacking this caching logic) can result in
|
|
||||||
// the uncached version being called - not wrong, but potentially inefficient.
|
|
||||||
fn pointee_info_at<'a>(&self, cx: &CodegenCx<'a, 'tcx>, offset: Size) -> Option<PointeeInfo> {
|
|
||||||
if let Some(&pointee) = cx.pointee_infos.borrow().get(&(self.ty, offset)) {
|
|
||||||
return pointee;
|
|
||||||
}
|
|
||||||
|
|
||||||
let result = Ty::ty_and_layout_pointee_info_at(*self, cx, offset);
|
|
||||||
|
|
||||||
cx.pointee_infos.borrow_mut().insert((self.ty, offset), result);
|
|
||||||
result
|
|
||||||
}
|
|
||||||
|
|
||||||
fn scalar_copy_llvm_type<'a>(&self, cx: &CodegenCx<'a, 'tcx>) -> Option<&'a Type> {
|
fn scalar_copy_llvm_type<'a>(&self, cx: &CodegenCx<'a, 'tcx>) -> Option<&'a Type> {
|
||||||
debug_assert!(self.is_sized());
|
debug_assert!(self.is_sized());
|
||||||
|
|
||||||
|
@ -66,25 +66,18 @@
|
|||||||
|
|
||||||
pub(crate) trait HirNode {
|
pub(crate) trait HirNode {
|
||||||
fn hir_id(&self) -> hir::HirId;
|
fn hir_id(&self) -> hir::HirId;
|
||||||
fn span(&self) -> Span;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
impl HirNode for hir::Expr<'_> {
|
impl HirNode for hir::Expr<'_> {
|
||||||
fn hir_id(&self) -> hir::HirId {
|
fn hir_id(&self) -> hir::HirId {
|
||||||
self.hir_id
|
self.hir_id
|
||||||
}
|
}
|
||||||
fn span(&self) -> Span {
|
|
||||||
self.span
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
impl HirNode for hir::Pat<'_> {
|
impl HirNode for hir::Pat<'_> {
|
||||||
fn hir_id(&self) -> hir::HirId {
|
fn hir_id(&self) -> hir::HirId {
|
||||||
self.hir_id
|
self.hir_id
|
||||||
}
|
}
|
||||||
fn span(&self) -> Span {
|
|
||||||
self.span
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Clone)]
|
#[derive(Clone)]
|
||||||
|
@ -113,9 +113,6 @@ fn next_existential_region_var(
|
|||||||
fn forbid_inference_vars() -> bool;
|
fn forbid_inference_vars() -> bool;
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Copy, Clone)]
|
|
||||||
struct UniversallyQuantified(bool);
|
|
||||||
|
|
||||||
impl<'me, 'tcx, D> TypeRelating<'me, 'tcx, D>
|
impl<'me, 'tcx, D> TypeRelating<'me, 'tcx, D>
|
||||||
where
|
where
|
||||||
D: TypeRelatingDelegate<'tcx>,
|
D: TypeRelatingDelegate<'tcx>,
|
||||||
|
@ -18,17 +18,14 @@
|
|||||||
use rustc_hir::RangeEnd;
|
use rustc_hir::RangeEnd;
|
||||||
use rustc_index::Idx;
|
use rustc_index::Idx;
|
||||||
use rustc_middle::mir::interpret::{ErrorHandled, GlobalId, LitToConstError, LitToConstInput};
|
use rustc_middle::mir::interpret::{ErrorHandled, GlobalId, LitToConstError, LitToConstInput};
|
||||||
use rustc_middle::mir::{self, BorrowKind, Const, Mutability, UserTypeProjection};
|
use rustc_middle::mir::{self, BorrowKind, Const, Mutability};
|
||||||
use rustc_middle::thir::{
|
use rustc_middle::thir::{
|
||||||
Ascription, BindingMode, FieldPat, LocalVarId, Pat, PatKind, PatRange, PatRangeBoundary,
|
Ascription, BindingMode, FieldPat, LocalVarId, Pat, PatKind, PatRange, PatRangeBoundary,
|
||||||
};
|
};
|
||||||
use rustc_middle::ty::layout::IntegerExt;
|
use rustc_middle::ty::layout::IntegerExt;
|
||||||
use rustc_middle::ty::{
|
use rustc_middle::ty::{self, CanonicalUserTypeAnnotation, Ty, TyCtxt, TypeVisitableExt};
|
||||||
self, AdtDef, CanonicalUserTypeAnnotation, GenericArg, GenericArgsRef, Region, Ty, TyCtxt,
|
|
||||||
TypeVisitableExt, UserType,
|
|
||||||
};
|
|
||||||
use rustc_span::def_id::LocalDefId;
|
use rustc_span::def_id::LocalDefId;
|
||||||
use rustc_span::{ErrorGuaranteed, Span, Symbol};
|
use rustc_span::{ErrorGuaranteed, Span};
|
||||||
use rustc_target::abi::{FieldIdx, Integer};
|
use rustc_target::abi::{FieldIdx, Integer};
|
||||||
|
|
||||||
use std::cmp::Ordering;
|
use std::cmp::Ordering;
|
||||||
@ -701,146 +698,3 @@ fn typeck_results(&self) -> &ty::TypeckResults<'tcx> {
|
|||||||
self.typeck_results
|
self.typeck_results
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
trait PatternFoldable<'tcx>: Sized {
|
|
||||||
fn fold_with<F: PatternFolder<'tcx>>(&self, folder: &mut F) -> Self {
|
|
||||||
self.super_fold_with(folder)
|
|
||||||
}
|
|
||||||
|
|
||||||
fn super_fold_with<F: PatternFolder<'tcx>>(&self, folder: &mut F) -> Self;
|
|
||||||
}
|
|
||||||
|
|
||||||
trait PatternFolder<'tcx>: Sized {
|
|
||||||
fn fold_pattern(&mut self, pattern: &Pat<'tcx>) -> Pat<'tcx> {
|
|
||||||
pattern.super_fold_with(self)
|
|
||||||
}
|
|
||||||
|
|
||||||
fn fold_pattern_kind(&mut self, kind: &PatKind<'tcx>) -> PatKind<'tcx> {
|
|
||||||
kind.super_fold_with(self)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl<'tcx, T: PatternFoldable<'tcx>> PatternFoldable<'tcx> for Box<T> {
|
|
||||||
fn super_fold_with<F: PatternFolder<'tcx>>(&self, folder: &mut F) -> Self {
|
|
||||||
let content: T = (**self).fold_with(folder);
|
|
||||||
Box::new(content)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl<'tcx, T: PatternFoldable<'tcx>> PatternFoldable<'tcx> for Vec<T> {
|
|
||||||
fn super_fold_with<F: PatternFolder<'tcx>>(&self, folder: &mut F) -> Self {
|
|
||||||
self.iter().map(|t| t.fold_with(folder)).collect()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl<'tcx, T: PatternFoldable<'tcx>> PatternFoldable<'tcx> for Box<[T]> {
|
|
||||||
fn super_fold_with<F: PatternFolder<'tcx>>(&self, folder: &mut F) -> Self {
|
|
||||||
self.iter().map(|t| t.fold_with(folder)).collect()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl<'tcx, T: PatternFoldable<'tcx>> PatternFoldable<'tcx> for Option<T> {
|
|
||||||
fn super_fold_with<F: PatternFolder<'tcx>>(&self, folder: &mut F) -> Self {
|
|
||||||
self.as_ref().map(|t| t.fold_with(folder))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
macro_rules! ClonePatternFoldableImpls {
|
|
||||||
(<$lt_tcx:tt> $($ty:ty),+) => {
|
|
||||||
$(
|
|
||||||
impl<$lt_tcx> PatternFoldable<$lt_tcx> for $ty {
|
|
||||||
fn super_fold_with<F: PatternFolder<$lt_tcx>>(&self, _: &mut F) -> Self {
|
|
||||||
Clone::clone(self)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
)+
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
ClonePatternFoldableImpls! { <'tcx>
|
|
||||||
Span, FieldIdx, Mutability, Symbol, LocalVarId, usize,
|
|
||||||
Region<'tcx>, Ty<'tcx>, BindingMode, AdtDef<'tcx>,
|
|
||||||
GenericArgsRef<'tcx>, &'tcx GenericArg<'tcx>, UserType<'tcx>,
|
|
||||||
UserTypeProjection, CanonicalUserTypeAnnotation<'tcx>
|
|
||||||
}
|
|
||||||
|
|
||||||
impl<'tcx> PatternFoldable<'tcx> for FieldPat<'tcx> {
|
|
||||||
fn super_fold_with<F: PatternFolder<'tcx>>(&self, folder: &mut F) -> Self {
|
|
||||||
FieldPat { field: self.field.fold_with(folder), pattern: self.pattern.fold_with(folder) }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl<'tcx> PatternFoldable<'tcx> for Pat<'tcx> {
|
|
||||||
fn fold_with<F: PatternFolder<'tcx>>(&self, folder: &mut F) -> Self {
|
|
||||||
folder.fold_pattern(self)
|
|
||||||
}
|
|
||||||
|
|
||||||
fn super_fold_with<F: PatternFolder<'tcx>>(&self, folder: &mut F) -> Self {
|
|
||||||
Pat {
|
|
||||||
ty: self.ty.fold_with(folder),
|
|
||||||
span: self.span.fold_with(folder),
|
|
||||||
kind: self.kind.fold_with(folder),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl<'tcx> PatternFoldable<'tcx> for PatKind<'tcx> {
|
|
||||||
fn fold_with<F: PatternFolder<'tcx>>(&self, folder: &mut F) -> Self {
|
|
||||||
folder.fold_pattern_kind(self)
|
|
||||||
}
|
|
||||||
|
|
||||||
fn super_fold_with<F: PatternFolder<'tcx>>(&self, folder: &mut F) -> Self {
|
|
||||||
match *self {
|
|
||||||
PatKind::Wild => PatKind::Wild,
|
|
||||||
PatKind::Error(e) => PatKind::Error(e),
|
|
||||||
PatKind::AscribeUserType {
|
|
||||||
ref subpattern,
|
|
||||||
ascription: Ascription { ref annotation, variance },
|
|
||||||
} => PatKind::AscribeUserType {
|
|
||||||
subpattern: subpattern.fold_with(folder),
|
|
||||||
ascription: Ascription { annotation: annotation.fold_with(folder), variance },
|
|
||||||
},
|
|
||||||
PatKind::Binding { mutability, name, mode, var, ty, ref subpattern, is_primary } => {
|
|
||||||
PatKind::Binding {
|
|
||||||
mutability: mutability.fold_with(folder),
|
|
||||||
name: name.fold_with(folder),
|
|
||||||
mode: mode.fold_with(folder),
|
|
||||||
var: var.fold_with(folder),
|
|
||||||
ty: ty.fold_with(folder),
|
|
||||||
subpattern: subpattern.fold_with(folder),
|
|
||||||
is_primary,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
PatKind::Variant { adt_def, args, variant_index, ref subpatterns } => {
|
|
||||||
PatKind::Variant {
|
|
||||||
adt_def: adt_def.fold_with(folder),
|
|
||||||
args: args.fold_with(folder),
|
|
||||||
variant_index,
|
|
||||||
subpatterns: subpatterns.fold_with(folder),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
PatKind::Leaf { ref subpatterns } => {
|
|
||||||
PatKind::Leaf { subpatterns: subpatterns.fold_with(folder) }
|
|
||||||
}
|
|
||||||
PatKind::Deref { ref subpattern } => {
|
|
||||||
PatKind::Deref { subpattern: subpattern.fold_with(folder) }
|
|
||||||
}
|
|
||||||
PatKind::Constant { value } => PatKind::Constant { value },
|
|
||||||
PatKind::InlineConstant { def, subpattern: ref pattern } => {
|
|
||||||
PatKind::InlineConstant { def, subpattern: pattern.fold_with(folder) }
|
|
||||||
}
|
|
||||||
PatKind::Range(ref range) => PatKind::Range(range.clone()),
|
|
||||||
PatKind::Slice { ref prefix, ref slice, ref suffix } => PatKind::Slice {
|
|
||||||
prefix: prefix.fold_with(folder),
|
|
||||||
slice: slice.fold_with(folder),
|
|
||||||
suffix: suffix.fold_with(folder),
|
|
||||||
},
|
|
||||||
PatKind::Array { ref prefix, ref slice, ref suffix } => PatKind::Array {
|
|
||||||
prefix: prefix.fold_with(folder),
|
|
||||||
slice: slice.fold_with(folder),
|
|
||||||
suffix: suffix.fold_with(folder),
|
|
||||||
},
|
|
||||||
PatKind::Or { ref pats } => PatKind::Or { pats: pats.fold_with(folder) },
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
@ -37,8 +37,6 @@ pub(super) trait GoalKind<'tcx>:
|
|||||||
|
|
||||||
fn trait_ref(self, tcx: TyCtxt<'tcx>) -> ty::TraitRef<'tcx>;
|
fn trait_ref(self, tcx: TyCtxt<'tcx>) -> ty::TraitRef<'tcx>;
|
||||||
|
|
||||||
fn polarity(self) -> ty::ImplPolarity;
|
|
||||||
|
|
||||||
fn with_self_ty(self, tcx: TyCtxt<'tcx>, self_ty: Ty<'tcx>) -> Self;
|
fn with_self_ty(self, tcx: TyCtxt<'tcx>, self_ty: Ty<'tcx>) -> Self;
|
||||||
|
|
||||||
fn trait_def_id(self, tcx: TyCtxt<'tcx>) -> DefId;
|
fn trait_def_id(self, tcx: TyCtxt<'tcx>) -> DefId;
|
||||||
|
@ -64,8 +64,6 @@ enum GoalEvaluationKind {
|
|||||||
|
|
||||||
trait CanonicalResponseExt {
|
trait CanonicalResponseExt {
|
||||||
fn has_no_inference_or_external_constraints(&self) -> bool;
|
fn has_no_inference_or_external_constraints(&self) -> bool;
|
||||||
|
|
||||||
fn has_only_region_constraints(&self) -> bool;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'tcx> CanonicalResponseExt for Canonical<'tcx, Response<'tcx>> {
|
impl<'tcx> CanonicalResponseExt for Canonical<'tcx, Response<'tcx>> {
|
||||||
@ -74,11 +72,6 @@ fn has_no_inference_or_external_constraints(&self) -> bool {
|
|||||||
&& self.value.var_values.is_identity()
|
&& self.value.var_values.is_identity()
|
||||||
&& self.value.external_constraints.opaque_types.is_empty()
|
&& self.value.external_constraints.opaque_types.is_empty()
|
||||||
}
|
}
|
||||||
|
|
||||||
fn has_only_region_constraints(&self) -> bool {
|
|
||||||
self.value.var_values.is_identity_modulo_regions()
|
|
||||||
&& self.value.external_constraints.opaque_types.is_empty()
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'a, 'tcx> EvalCtxt<'a, 'tcx> {
|
impl<'a, 'tcx> EvalCtxt<'a, 'tcx> {
|
||||||
|
@ -101,10 +101,6 @@ fn trait_ref(self, tcx: TyCtxt<'tcx>) -> ty::TraitRef<'tcx> {
|
|||||||
self.projection_ty.trait_ref(tcx)
|
self.projection_ty.trait_ref(tcx)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn polarity(self) -> ty::ImplPolarity {
|
|
||||||
ty::ImplPolarity::Positive
|
|
||||||
}
|
|
||||||
|
|
||||||
fn with_self_ty(self, tcx: TyCtxt<'tcx>, self_ty: Ty<'tcx>) -> Self {
|
fn with_self_ty(self, tcx: TyCtxt<'tcx>, self_ty: Ty<'tcx>) -> Self {
|
||||||
self.with_self_ty(tcx, self_ty)
|
self.with_self_ty(tcx, self_ty)
|
||||||
}
|
}
|
||||||
|
@ -24,10 +24,6 @@ fn trait_ref(self, _: TyCtxt<'tcx>) -> ty::TraitRef<'tcx> {
|
|||||||
self.trait_ref
|
self.trait_ref
|
||||||
}
|
}
|
||||||
|
|
||||||
fn polarity(self) -> ty::ImplPolarity {
|
|
||||||
self.polarity
|
|
||||||
}
|
|
||||||
|
|
||||||
fn with_self_ty(self, tcx: TyCtxt<'tcx>, self_ty: Ty<'tcx>) -> Self {
|
fn with_self_ty(self, tcx: TyCtxt<'tcx>, self_ty: Ty<'tcx>) -> Self {
|
||||||
self.with_self_ty(tcx, self_ty)
|
self.with_self_ty(tcx, self_ty)
|
||||||
}
|
}
|
||||||
|
@ -12,14 +12,6 @@
|
|||||||
#[unstable(feature = "error_generic_member_access", issue = "99301")]
|
#[unstable(feature = "error_generic_member_access", issue = "99301")]
|
||||||
pub use core::error::{request_ref, request_value, Request};
|
pub use core::error::{request_ref, request_value, Request};
|
||||||
|
|
||||||
mod private {
|
|
||||||
// This is a hack to prevent `type_id` from being overridden by `Error`
|
|
||||||
// implementations, since that can enable unsound downcasting.
|
|
||||||
#[unstable(feature = "error_type_id", issue = "60784")]
|
|
||||||
#[derive(Debug)]
|
|
||||||
pub struct Internal;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// An error reporter that prints an error and its sources.
|
/// An error reporter that prints an error and its sources.
|
||||||
///
|
///
|
||||||
/// Report also exposes configuration options for formatting the error sources, either entirely on a
|
/// Report also exposes configuration options for formatting the error sources, either entirely on a
|
||||||
|
Loading…
Reference in New Issue
Block a user