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`
This commit is contained in:
commit
cc04e97cfb
@ -689,6 +689,16 @@ pub fn report_method_error(
|
||||
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 => (),
|
||||
}
|
||||
|
13
src/test/ui/methods/issues/issue-105732.rs
Normal file
13
src/test/ui/methods/issues/issue-105732.rs
Normal file
@ -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
src/test/ui/methods/issues/issue-105732.stderr
Normal file
28
src/test/ui/methods/issues/issue-105732.stderr
Normal file
@ -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`.
|
Loading…
Reference in New Issue
Block a user