Skip to content

Commit 4c130dd

Browse files
committed
fix: Turn back TyLoweringContext.store to self after lowering parent defaults
1 parent 803fb51 commit 4c130dd

2 files changed

Lines changed: 19 additions & 1 deletion

File tree

crates/hir-ty/src/lower.rs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2411,10 +2411,11 @@ pub(crate) fn generic_defaults_with_diagnostics_query(
24112411
}
24122412
let resolver = def.resolver(db);
24132413

2414+
let store_for_self = generic_params.store();
24142415
let mut ctx = TyLoweringContext::new(
24152416
db,
24162417
&resolver,
2417-
generic_params.store(),
2418+
store_for_self,
24182419
def,
24192420
LifetimeElisionKind::AnonymousReportError,
24202421
)
@@ -2432,6 +2433,7 @@ pub(crate) fn generic_defaults_with_diagnostics_query(
24322433
})
24332434
.collect::<Vec<_>>();
24342435
ctx.diagnostics.clear(); // Don't include diagnostics from the parent.
2436+
ctx.store = store_for_self;
24352437
defaults.extend(generic_params.iter_self().map(|(_id, p)| {
24362438
let (result, has_default) = handle_generic_param(&mut ctx, idx, p);
24372439
has_any_default |= has_default;

crates/ide-diagnostics/src/handlers/missing_lifetime.rs

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -115,4 +115,20 @@ struct A<'a, T> {
115115
"#,
116116
);
117117
}
118+
119+
// FIXME: Ideally, should emit generic default forbidden as well
120+
#[test]
121+
fn regression_16280() {
122+
check_diagnostics(
123+
r#"
124+
trait Traitor<'a, const M: Traitor = Traitor> {
125+
fn crash<const Traitor: Traitor = Traitor, const M: Traitor = Traitor>(&self) -> Traitor {
126+
// ^^^^^^^ error: missing lifetime specifier
127+
// ^^^^^^^ error: missing lifetime specifier
128+
Traitor
129+
}
130+
}
131+
"#,
132+
);
133+
}
118134
}

0 commit comments

Comments
 (0)