mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-26 00:34:06 +00:00
Don't eagerly convert principal to string
This commit is contained in:
parent
b5c8c329a7
commit
eebd31c187
@ -78,7 +78,7 @@ impl<'tcx> LateLintPass<'tcx> for DerefIntoDynSupertrait {
|
|||||||
});
|
});
|
||||||
cx.emit_spanned_lint(DEREF_INTO_DYN_SUPERTRAIT, cx.tcx.def_span(item.owner_id.def_id), SupertraitAsDerefTarget {
|
cx.emit_spanned_lint(DEREF_INTO_DYN_SUPERTRAIT, cx.tcx.def_span(item.owner_id.def_id), SupertraitAsDerefTarget {
|
||||||
t,
|
t,
|
||||||
target_principal: target_principal.to_string(),
|
target_principal,
|
||||||
label,
|
label,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -8,7 +8,7 @@ use rustc_errors::{
|
|||||||
};
|
};
|
||||||
use rustc_hir::def_id::DefId;
|
use rustc_hir::def_id::DefId;
|
||||||
use rustc_macros::{LintDiagnostic, Subdiagnostic};
|
use rustc_macros::{LintDiagnostic, Subdiagnostic};
|
||||||
use rustc_middle::ty::{Predicate, Ty, TyCtxt};
|
use rustc_middle::ty::{PolyExistentialTraitRef, Predicate, Ty, TyCtxt};
|
||||||
use rustc_session::parse::ParseSess;
|
use rustc_session::parse::ParseSess;
|
||||||
use rustc_span::{edition::Edition, sym, symbol::Ident, Span, Symbol};
|
use rustc_span::{edition::Edition, sym, symbol::Ident, Span, Symbol};
|
||||||
|
|
||||||
@ -556,8 +556,7 @@ pub struct BuiltinUnexpectedCliConfigValue {
|
|||||||
#[diag(lint_supertrait_as_deref_target)]
|
#[diag(lint_supertrait_as_deref_target)]
|
||||||
pub struct SupertraitAsDerefTarget<'a> {
|
pub struct SupertraitAsDerefTarget<'a> {
|
||||||
pub t: Ty<'a>,
|
pub t: Ty<'a>,
|
||||||
pub target_principal: String,
|
pub target_principal: PolyExistentialTraitRef<'a>,
|
||||||
// pub target_principal: Binder<'a, ExistentialTraitRef<'b>>,
|
|
||||||
#[subdiagnostic]
|
#[subdiagnostic]
|
||||||
pub label: Option<SupertraitAsDerefTargetLabel>,
|
pub label: Option<SupertraitAsDerefTargetLabel>,
|
||||||
}
|
}
|
||||||
|
@ -933,6 +933,12 @@ impl<'tcx> PolyExistentialTraitRef<'tcx> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl rustc_errors::IntoDiagnosticArg for PolyExistentialTraitRef<'_> {
|
||||||
|
fn into_diagnostic_arg(self) -> rustc_errors::DiagnosticArgValue<'static> {
|
||||||
|
self.to_string().into_diagnostic_arg()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#[derive(Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Hash, Debug, TyEncodable, TyDecodable)]
|
#[derive(Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Hash, Debug, TyEncodable, TyDecodable)]
|
||||||
#[derive(HashStable)]
|
#[derive(HashStable)]
|
||||||
pub enum BoundVariableKind {
|
pub enum BoundVariableKind {
|
||||||
|
15
tests/ui/lint/issue-108155.rs
Normal file
15
tests/ui/lint/issue-108155.rs
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
// check-pass
|
||||||
|
// check that `deref_into_dyn_supertrait` doesn't cause ICE by eagerly converting
|
||||||
|
// a cancelled lint
|
||||||
|
|
||||||
|
#![allow(deref_into_dyn_supertrait)]
|
||||||
|
|
||||||
|
trait Trait {}
|
||||||
|
impl std::ops::Deref for dyn Trait + Send + Sync {
|
||||||
|
type Target = dyn Trait;
|
||||||
|
fn deref(&self) -> &Self::Target {
|
||||||
|
self
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn main() {}
|
Loading…
Reference in New Issue
Block a user