Auto merge of #89576 - tom7980:issue-89275-fix, r=estebank
Prevent error reporting from outputting a recursion error if it finds an ambiguous trait impl during suggestions Closes #89275 This fixes the compiler reporting a recursion error during another already in progress error by trying to make a conversion method suggestion and encounters ambiguous trait implementations that can convert a the original type into a type that can then be recursively converted into itself via another method in the trait. Updated OverflowError struct to be an enum so I could differentiate between passes - it's no longer a ZST but I don't think that should be a problem as they only generate when there's an error in compiling code anyway
This commit is contained in:
commit
e0aaffd8a4
10 changed files with 82 additions and 18 deletions
29
src/test/ui/typeck/issue-89275.rs
Normal file
29
src/test/ui/typeck/issue-89275.rs
Normal file
|
|
@ -0,0 +1,29 @@
|
|||
#![recursion_limit = "5"] // To reduce noise
|
||||
|
||||
//expect mutability error when ambiguous traits are in scope
|
||||
//and not an overflow error on the span in the main function.
|
||||
|
||||
struct Ratio<T>(T);
|
||||
|
||||
pub trait Pow {
|
||||
fn pow(self) -> Self;
|
||||
}
|
||||
|
||||
impl<'a, T> Pow for &'a Ratio<T>
|
||||
where
|
||||
&'a T: Pow,
|
||||
{
|
||||
fn pow(self) -> Self {
|
||||
self
|
||||
}
|
||||
}
|
||||
|
||||
fn downcast<'a, W: ?Sized>() -> &'a W {
|
||||
todo!()
|
||||
}
|
||||
|
||||
struct Other;
|
||||
|
||||
fn main() {
|
||||
let other: &mut Other = downcast();//~ERROR 28:29: 28:39: mismatched types [E0308]
|
||||
}
|
||||
14
src/test/ui/typeck/issue-89275.stderr
Normal file
14
src/test/ui/typeck/issue-89275.stderr
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
error[E0308]: mismatched types
|
||||
--> $DIR/issue-89275.rs:28:29
|
||||
|
|
||||
LL | let other: &mut Other = downcast();
|
||||
| ---------- ^^^^^^^^^^ types differ in mutability
|
||||
| |
|
||||
| expected due to this
|
||||
|
|
||||
= note: expected mutable reference `&mut Other`
|
||||
found reference `&_`
|
||||
|
||||
error: aborting due to previous error
|
||||
|
||||
For more information about this error, try `rustc --explain E0308`.
|
||||
Loading…
Add table
Add a link
Reference in a new issue