Delay span bug when Self resolves to DefKind::{Mod,Trait}

This commit is contained in:
Michael Goulet 2024-04-15 21:00:49 -04:00
parent ccfcd950b3
commit 6288a721f5
3 changed files with 58 additions and 0 deletions

View File

@ -1879,6 +1879,17 @@ pub fn lower_path(
self.set_tainted_by_errors(e);
Ty::new_error(self.tcx(), e)
}
Res::Def(..) => {
assert_eq!(
path.segments.get(0).map(|seg| seg.ident.name),
Some(kw::SelfUpper),
"only expected incorrect resolution for `Self`"
);
Ty::new_error(
self.tcx(),
self.tcx().dcx().span_delayed_bug(span, "incorrect resolution for `Self`"),
)
}
_ => span_bug!(span, "unexpected resolution: {:?}", path.res),
}
}

View File

@ -0,0 +1,17 @@
fn module() {
fn test(&mut self) {
//~^ ERROR `self` parameter is only allowed in associated functions
}
mod Self {}
//~^ ERROR expected identifier, found keyword `Self`
}
fn trait_() {
fn test(&mut self) {
//~^ ERROR `self` parameter is only allowed in associated functions
}
trait Self {}
//~^ ERROR expected identifier, found keyword `Self`
}
fn main() {}

View File

@ -0,0 +1,30 @@
error: expected identifier, found keyword `Self`
--> $DIR/incorrect-self-res.rs:5:9
|
LL | mod Self {}
| ^^^^ expected identifier, found keyword
error: expected identifier, found keyword `Self`
--> $DIR/incorrect-self-res.rs:13:11
|
LL | trait Self {}
| ^^^^ expected identifier, found keyword
error: `self` parameter is only allowed in associated functions
--> $DIR/incorrect-self-res.rs:2:13
|
LL | fn test(&mut self) {
| ^^^^^^^^^ not semantically valid as function parameter
|
= note: associated functions are those in `impl` or `trait` definitions
error: `self` parameter is only allowed in associated functions
--> $DIR/incorrect-self-res.rs:10:13
|
LL | fn test(&mut self) {
| ^^^^^^^^^ not semantically valid as function parameter
|
= note: associated functions are those in `impl` or `trait` definitions
error: aborting due to 4 previous errors