mirror of
https://github.com/rust-lang/rust.git
synced 2025-02-26 05:44:26 +00:00
Fix a couple resolve bugs from binder refactor
This commit is contained in:
parent
5c897d430d
commit
3ae5fed04c
@ -2659,6 +2659,13 @@ impl<'a, 'tcx> LifetimeContext<'a, 'tcx> {
|
|||||||
Some(next) => next,
|
Some(next) => next,
|
||||||
None => break None,
|
None => break None,
|
||||||
};
|
};
|
||||||
|
// See issue #83753. If someone writes an associated type on a non-trait, just treat it as
|
||||||
|
// there being no supertrait HRTBs.
|
||||||
|
match tcx.def_kind(def_id) {
|
||||||
|
DefKind::Trait | DefKind::TraitAlias | DefKind::Impl => {}
|
||||||
|
_ => break None,
|
||||||
|
}
|
||||||
|
|
||||||
if trait_defines_associated_type_named(def_id) {
|
if trait_defines_associated_type_named(def_id) {
|
||||||
break Some(bound_vars.into_iter().collect());
|
break Some(bound_vars.into_iter().collect());
|
||||||
}
|
}
|
||||||
@ -2703,7 +2710,14 @@ impl<'a, 'tcx> LifetimeContext<'a, 'tcx> {
|
|||||||
| Scope::Supertrait { ref s, .. } => {
|
| Scope::Supertrait { ref s, .. } => {
|
||||||
scope = *s;
|
scope = *s;
|
||||||
}
|
}
|
||||||
Scope::Root => bug!("In fn_like_elision without appropriate scope above"),
|
Scope::Root => {
|
||||||
|
// See issue #83907. Just bail out from looking inside.
|
||||||
|
self.tcx.sess.delay_span_bug(
|
||||||
|
rustc_span::DUMMY_SP,
|
||||||
|
"In fn_like_elision without appropriate scope above",
|
||||||
|
);
|
||||||
|
return;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
// While not strictly necessary, we gather anon lifetimes *before* actually
|
// While not strictly necessary, we gather anon lifetimes *before* actually
|
||||||
|
@ -0,0 +1,8 @@
|
|||||||
|
// check-fail
|
||||||
|
|
||||||
|
struct Foo {}
|
||||||
|
impl Foo {
|
||||||
|
fn bar(foo: Foo<Target = usize>) {}
|
||||||
|
//~^ associated type bindings are not allowed here
|
||||||
|
}
|
||||||
|
fn main() {}
|
@ -0,0 +1,9 @@
|
|||||||
|
error[E0229]: associated type bindings are not allowed here
|
||||||
|
--> $DIR/issue-83753-invalid-associated-type-supertrait-hrtb.rs:5:21
|
||||||
|
|
|
||||||
|
LL | fn bar(foo: Foo<Target = usize>) {}
|
||||||
|
| ^^^^^^^^^^^^^^ associated type not allowed here
|
||||||
|
|
||||||
|
error: aborting due to previous error
|
||||||
|
|
||||||
|
For more information about this error, try `rustc --explain E0229`.
|
@ -0,0 +1,7 @@
|
|||||||
|
// check-fail
|
||||||
|
|
||||||
|
static STATIC_VAR_FIVE: &One();
|
||||||
|
//~^ cannot find type
|
||||||
|
//~| free static item without body
|
||||||
|
|
||||||
|
fn main() {}
|
@ -0,0 +1,17 @@
|
|||||||
|
error: free static item without body
|
||||||
|
--> $DIR/issue-83907-invalid-fn-like-path.rs:3:1
|
||||||
|
|
|
||||||
|
LL | static STATIC_VAR_FIVE: &One();
|
||||||
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-
|
||||||
|
| |
|
||||||
|
| help: provide a definition for the static: `= <expr>;`
|
||||||
|
|
||||||
|
error[E0412]: cannot find type `One` in this scope
|
||||||
|
--> $DIR/issue-83907-invalid-fn-like-path.rs:3:26
|
||||||
|
|
|
||||||
|
LL | static STATIC_VAR_FIVE: &One();
|
||||||
|
| ^^^ not found in this scope
|
||||||
|
|
||||||
|
error: aborting due to 2 previous errors
|
||||||
|
|
||||||
|
For more information about this error, try `rustc --explain E0412`.
|
Loading…
Reference in New Issue
Block a user