Add regression test for a specialization-related ICE (#39448)
This commit is contained in:
parent
f058741a67
commit
ee948d9981
2 changed files with 62 additions and 0 deletions
50
src/test/ui/specialization/issue-39448.rs
Normal file
50
src/test/ui/specialization/issue-39448.rs
Normal file
|
@ -0,0 +1,50 @@
|
|||
#![feature(specialization)]
|
||||
|
||||
// Regression test for a specialization-related ICE (#39448).
|
||||
|
||||
trait A: Sized {
|
||||
fn foo(self, _: Self) -> Self {
|
||||
self
|
||||
}
|
||||
}
|
||||
|
||||
impl A for u8 {}
|
||||
impl A for u16 {}
|
||||
|
||||
impl FromA<u8> for u16 {
|
||||
fn from(x: u8) -> u16 {
|
||||
x as u16
|
||||
}
|
||||
}
|
||||
|
||||
trait FromA<T> {
|
||||
fn from(T) -> Self;
|
||||
}
|
||||
|
||||
impl<T: A, U: A + FromA<T>> FromA<T> for U {
|
||||
default fn from(x: T) -> Self {
|
||||
ToA::to(x)
|
||||
}
|
||||
}
|
||||
|
||||
trait ToA<T> {
|
||||
fn to(self) -> T;
|
||||
}
|
||||
|
||||
impl<T, U> ToA<U> for T
|
||||
where
|
||||
U: FromA<T>,
|
||||
{
|
||||
fn to(self) -> U {
|
||||
U::from(self)
|
||||
}
|
||||
}
|
||||
|
||||
#[allow(dead_code)]
|
||||
fn foo<T: A, U: A>(x: T, y: U) -> U {
|
||||
x.foo(y.to()).to() //~ ERROR overflow evaluating the requirement
|
||||
}
|
||||
|
||||
fn main() {
|
||||
let z = foo(8u8, 1u16);
|
||||
}
|
12
src/test/ui/specialization/issue-39448.stderr
Normal file
12
src/test/ui/specialization/issue-39448.stderr
Normal file
|
@ -0,0 +1,12 @@
|
|||
error[E0275]: overflow evaluating the requirement `T: FromA<U>`
|
||||
--> $DIR/issue-39448.rs:45:13
|
||||
|
|
||||
LL | x.foo(y.to()).to() //~ ERROR overflow evaluating the requirement
|
||||
| ^^
|
||||
|
|
||||
= note: required because of the requirements on the impl of `FromA<U>` for `T`
|
||||
= note: required because of the requirements on the impl of `ToA<T>` for `U`
|
||||
|
||||
error: aborting due to previous error
|
||||
|
||||
For more information about this error, try `rustc --explain E0275`.
|
Loading…
Add table
Reference in a new issue