Skip to content

Commit

Permalink
Rollup merge of rust-lang#105747 - chenyukang:yukang/fix-105732-auto-…
Browse files Browse the repository at this point in the history
…trait, r=compiler-errors

Fix ICE calling method on auto trait

Fixes rust-lang#105732
r? `@compiler-errors`
  • Loading branch information
matthiaskrgr authored Dec 16, 2022
2 parents 3b9aea9 + 605f77b commit cc04e97
Show file tree
Hide file tree
Showing 3 changed files with 51 additions and 0 deletions.
10 changes: 10 additions & 0 deletions compiler/rustc_hir_typeck/src/method/suggest.rs
Original file line number Diff line number Diff line change
Expand Up @@ -689,6 +689,16 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
let entry = spanned_predicates.entry(spans);
entry.or_insert_with(|| (path, tr_self_ty, Vec::new())).2.push(p);
}
Some(Node::Item(hir::Item {
kind: hir::ItemKind::Trait(rustc_ast::ast::IsAuto::Yes, ..),
span: item_span,
..
})) => {
tcx.sess.delay_span_bug(
*item_span,
"auto trait is invoked with no method error, but no error reported?",
);
}
Some(_) => unreachable!(),
None => (),
}
Expand Down
13 changes: 13 additions & 0 deletions src/test/ui/methods/issues/issue-105732.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
#![feature(auto_traits)]

auto trait Foo {
fn g(&self); //~ ERROR auto traits cannot have associated items
}

trait Bar {
fn f(&self) {
self.g(); //~ ERROR the method `g` exists for reference `&Self`, but its trait bounds were not satisfied
}
}

fn main() {}
28 changes: 28 additions & 0 deletions src/test/ui/methods/issues/issue-105732.stderr
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
error[E0380]: auto traits cannot have associated items
--> $DIR/issue-105732.rs:4:8
|
LL | auto trait Foo {
| --- auto trait cannot have associated items
LL | fn g(&self);
| ---^-------- help: remove these associated items

error[E0599]: the method `g` exists for reference `&Self`, but its trait bounds were not satisfied
--> $DIR/issue-105732.rs:9:14
|
LL | self.g();
| ^
|
= note: the following trait bounds were not satisfied:
`Self: Foo`
which is required by `&Self: Foo`
`&Self: Foo`
= help: items from traits can only be used if the type parameter is bounded by the trait
help: the following trait defines an item `g`, perhaps you need to add a supertrait for it:
|
LL | trait Bar: Foo {
| +++++

error: aborting due to 2 previous errors

Some errors have detailed explanations: E0380, E0599.
For more information about an error, try `rustc --explain E0380`.

0 comments on commit cc04e97

Please sign in to comment.