mirror of
https://github.com/rust-lang/rust.git
synced 2025-05-14 02:49:40 +00:00
Do not recurse into const generic args when resolving self lifetime elision.
This commit is contained in:
parent
89158e210c
commit
8972a23f48
@ -2075,6 +2075,10 @@ impl<'a: 'ast, 'b, 'ast, 'tcx> LateResolutionVisitor<'a, 'b, 'ast, 'tcx> {
|
|||||||
}
|
}
|
||||||
visit::walk_ty(self, ty)
|
visit::walk_ty(self, ty)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// A type may have an expression as a const generic argument.
|
||||||
|
// We do not want to recurse into those.
|
||||||
|
fn visit_expr(&mut self, _: &'a Expr) {}
|
||||||
}
|
}
|
||||||
|
|
||||||
let impl_self = self
|
let impl_self = self
|
||||||
|
13
tests/ui/self/elision/nested-item.rs
Normal file
13
tests/ui/self/elision/nested-item.rs
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
// Regression test for #110899.
|
||||||
|
// When looking for the elided lifetime for `wrap`,
|
||||||
|
// we must not consider the lifetimes in `bar` as candidates.
|
||||||
|
|
||||||
|
fn wrap(self: Wrap<{ fn bar(&self) {} }>) -> &() {
|
||||||
|
//~^ ERROR `self` parameter is only allowed in associated functions
|
||||||
|
//~| ERROR `self` parameter is only allowed in associated functions
|
||||||
|
//~| ERROR missing lifetime specifier
|
||||||
|
//~| ERROR cannot find type `Wrap` in this scope
|
||||||
|
&()
|
||||||
|
}
|
||||||
|
|
||||||
|
fn main() {}
|
38
tests/ui/self/elision/nested-item.stderr
Normal file
38
tests/ui/self/elision/nested-item.stderr
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
error: `self` parameter is only allowed in associated functions
|
||||||
|
--> $DIR/nested-item.rs:5:9
|
||||||
|
|
|
||||||
|
LL | fn wrap(self: Wrap<{ fn bar(&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/nested-item.rs:5:29
|
||||||
|
|
|
||||||
|
LL | fn wrap(self: Wrap<{ fn bar(&self) {} }>) -> &() {
|
||||||
|
| ^^^^^ not semantically valid as function parameter
|
||||||
|
|
|
||||||
|
= note: associated functions are those in `impl` or `trait` definitions
|
||||||
|
|
||||||
|
error[E0106]: missing lifetime specifier
|
||||||
|
--> $DIR/nested-item.rs:5:46
|
||||||
|
|
|
||||||
|
LL | fn wrap(self: Wrap<{ fn bar(&self) {} }>) -> &() {
|
||||||
|
| ^ expected named lifetime parameter
|
||||||
|
|
|
||||||
|
= help: this function's return type contains a borrowed value, but there is no value for it to be borrowed from
|
||||||
|
help: consider using the `'static` lifetime
|
||||||
|
|
|
||||||
|
LL | fn wrap(self: Wrap<{ fn bar(&self) {} }>) -> &'static () {
|
||||||
|
| +++++++
|
||||||
|
|
||||||
|
error[E0412]: cannot find type `Wrap` in this scope
|
||||||
|
--> $DIR/nested-item.rs:5:15
|
||||||
|
|
|
||||||
|
LL | fn wrap(self: Wrap<{ fn bar(&self) {} }>) -> &() {
|
||||||
|
| ^^^^ not found in this scope
|
||||||
|
|
||||||
|
error: aborting due to 4 previous errors
|
||||||
|
|
||||||
|
Some errors have detailed explanations: E0106, E0412.
|
||||||
|
For more information about an error, try `rustc --explain E0106`.
|
Loading…
Reference in New Issue
Block a user