Skip to content

Commit

Permalink
Rollup merge of #108162 - clubby789:issue-108155, r=Nilstrieb
Browse files Browse the repository at this point in the history
Don't eagerly convert principal to string

Fixes #108155

~~I haven't yet been able to reproduce the ICE in a minimal example unfortunately.~~ Added a test
  • Loading branch information
matthiaskrgr committed Feb 18, 2023
2 parents d9c9040 eebd31c commit 7f9d9de
Show file tree
Hide file tree
Showing 4 changed files with 24 additions and 4 deletions.
2 changes: 1 addition & 1 deletion compiler/rustc_lint/src/deref_into_dyn_supertrait.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
t,
target_principal: target_principal.to_string(),
target_principal,
label,
});
}
Expand Down
5 changes: 2 additions & 3 deletions compiler/rustc_lint/src/lints.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 8,7 @@ use rustc_errors::{
};
use rustc_hir::def_id::DefId;
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_span::{edition::Edition, sym, symbol::Ident, Span, Symbol};

Expand Down Expand Up @@ -556,8 556,7 @@ pub struct BuiltinUnexpectedCliConfigValue {
#[diag(lint_supertrait_as_deref_target)]
pub struct SupertraitAsDerefTarget<'a> {
pub t: Ty<'a>,
pub target_principal: String,
// pub target_principal: Binder<'a, ExistentialTraitRef<'b>>,
pub target_principal: PolyExistentialTraitRef<'a>,
#[subdiagnostic]
pub label: Option<SupertraitAsDerefTargetLabel>,
}
Expand Down
6 changes: 6 additions & 0 deletions compiler/rustc_middle/src/ty/sty.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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(HashStable)]
pub enum BoundVariableKind {
Expand Down
15 changes: 15 additions & 0 deletions tests/ui/lint/issue-108155.rs
Original file line number Diff line number Diff line change
@@ -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() {}

0 comments on commit 7f9d9de

Please sign in to comment.