Skip to content

Commit

Permalink
Rollup merge of #83944 - jackh726:binder-refactor-fix2, r=lcnr
Browse files Browse the repository at this point in the history
Fix a couple resolve bugs from binder refactor

Fixes #83753
Fixes #83907
  • Loading branch information
Dylan-DPC committed Apr 16, 2021
2 parents a5c68d7 + 3ae5fed commit 8853aae
Show file tree
Hide file tree
Showing 5 changed files with 56 additions and 1 deletion.
16 changes: 15 additions & 1 deletion compiler/rustc_resolve/src/late/lifetimes.rs
Expand Up @@ -2719,6 +2719,13 @@ impl<'a, 'tcx> LifetimeContext<'a, 'tcx> {
Some(next) => next,
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) {
break Some(bound_vars.into_iter().collect());
}
Expand Down Expand Up @@ -2764,7 +2771,14 @@ impl<'a, 'tcx> LifetimeContext<'a, 'tcx> {
| Scope::TraitRefBoundary { ref 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
Expand Down
@@ -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`.
7 changes: 7 additions & 0 deletions src/test/ui/lifetimes/issue-83907-invalid-fn-like-path.rs
@@ -0,0 +1,7 @@
// check-fail

static STATIC_VAR_FIVE: &One();
//~^ cannot find type
//~| free static item without body

fn main() {}
17 changes: 17 additions & 0 deletions src/test/ui/lifetimes/issue-83907-invalid-fn-like-path.stderr
@@ -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`.

0 comments on commit 8853aae

Please sign in to comment.