Skip to content

Commit ae92942

Browse files
committed
Fix def ID mapping for method defs
This prevents def IDs with the wrong crate ID from showing up when using UFCS. Closes #18501
1 parent 39f90ae commit ae92942

File tree

2 files changed

+14
-11
lines changed

2 files changed

+14
-11
lines changed

src/librustc/middle/astencode.rs

Lines changed: 5 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -441,19 +441,13 @@ impl tr for def::Def {
441441
fn tr(&self, dcx: &DecodeContext) -> def::Def {
442442
match *self {
443443
def::DefFn(did, is_ctor) => def::DefFn(did.tr(dcx), is_ctor),
444-
def::DefStaticMethod(did, wrapped_did2) => {
445-
def::DefStaticMethod(did.tr(dcx),
446-
match wrapped_did2 {
447-
def::FromTrait(did2) => {
448-
def::FromTrait(did2.tr(dcx))
449-
}
450-
def::FromImpl(did2) => {
451-
def::FromImpl(did2.tr(dcx))
452-
}
453-
})
444+
def::DefStaticMethod(did, p) => {
445+
def::DefStaticMethod(did.tr(dcx), p.map(|did2| did2.tr(dcx)))
454446
}
455447
def::DefMethod(did0, did1, p) => {
456-
def::DefMethod(did0.tr(dcx), did1.map(|did1| did1.tr(dcx)), p)
448+
def::DefMethod(did0.tr(dcx),
449+
did1.map(|did1| did1.tr(dcx)),
450+
p.map(|did2| did2.tr(dcx)))
457451
}
458452
def::DefSelfTy(nid) => { def::DefSelfTy(dcx.tr_id(nid)) }
459453
def::DefMod(did) => { def::DefMod(did.tr(dcx)) }

src/librustc/middle/def.rs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,15 @@ pub enum MethodProvenance {
5555
FromImpl(ast::DefId),
5656
}
5757

58+
impl MethodProvenance {
59+
pub fn map(self, f: |ast::DefId| -> ast::DefId) -> MethodProvenance {
60+
match self {
61+
FromTrait(did) => FromTrait(f(did)),
62+
FromImpl(did) => FromImpl(f(did))
63+
}
64+
}
65+
}
66+
5867
impl Def {
5968
pub fn def_id(&self) -> ast::DefId {
6069
match *self {

0 commit comments

Comments
 (0)