diff options
| author | Matthias Krüger <matthias.krueger@famsik.de> | 2022-12-16 14:02:18 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-12-16 14:02:18 +0100 |
| commit | cc04e97cfbc3946a5b4a28ba07f47438e34ea99a (patch) | |
| tree | 3f3f19ce139eb0320158f2b12540f0d3487dcc72 | |
| parent | 3b9aea967f69fd96fce7a2861d953fe10004ef5f (diff) | |
| parent | 605f77b7d0cb991f2f63c02ceb9dfea72091f398 (diff) | |
| download | rust-cc04e97cfbc3946a5b4a28ba07f47438e34ea99a.tar.gz rust-cc04e97cfbc3946a5b4a28ba07f47438e34ea99a.zip | |
Rollup merge of #105747 - chenyukang:yukang/fix-105732-auto-trait, r=compiler-errors
Fix ICE calling method on auto trait Fixes #105732 r? `@compiler-errors`
| -rw-r--r-- | compiler/rustc_hir_typeck/src/method/suggest.rs | 10 | ||||
| -rw-r--r-- | src/test/ui/methods/issues/issue-105732.rs | 13 | ||||
| -rw-r--r-- | src/test/ui/methods/issues/issue-105732.stderr | 28 |
3 files changed, 51 insertions, 0 deletions
diff --git a/compiler/rustc_hir_typeck/src/method/suggest.rs b/compiler/rustc_hir_typeck/src/method/suggest.rs index 63cec9216eb..d40a66715a2 100644 --- a/compiler/rustc_hir_typeck/src/method/suggest.rs +++ b/compiler/rustc_hir_typeck/src/method/suggest.rs @@ -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 => (), } diff --git a/src/test/ui/methods/issues/issue-105732.rs b/src/test/ui/methods/issues/issue-105732.rs new file mode 100644 index 00000000000..98b7a8d0d04 --- /dev/null +++ b/src/test/ui/methods/issues/issue-105732.rs @@ -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() {} diff --git a/src/test/ui/methods/issues/issue-105732.stderr b/src/test/ui/methods/issues/issue-105732.stderr new file mode 100644 index 00000000000..fb2bdf47de7 --- /dev/null +++ b/src/test/ui/methods/issues/issue-105732.stderr @@ -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`. |
