Adds a regression test for 137823

This commit is contained in:
AprilNEA 2025-12-30 19:52:02 +08:00
parent 0850949213
commit 36f86f9e6a
No known key found for this signature in database
GPG key ID: 80384D1232DF8242
2 changed files with 53 additions and 0 deletions

View file

@ -0,0 +1,39 @@
//@ build-fail
// Regression test for issue #137823
// Tests that recursive monomorphization with associated types produces
// a proper "recursion limit" error instead of an ICE.
fn convert<S: Converter>() -> S::Out {
convert2::<ConvertWrap<S>>()
//~^ ERROR: reached the recursion limit while instantiating
}
fn convert2<S: Converter>() -> S::Out {
convert::<S>()
}
fn main() {
convert::<Ser>();
}
trait Converter {
type Out;
}
struct Ser;
impl Converter for Ser {
type Out = ();
}
struct ConvertWrap<S> {
_d: S,
}
impl<S> Converter for ConvertWrap<S>
where
S: Converter,
{
type Out = S::Out;
}

View file

@ -0,0 +1,14 @@
error: reached the recursion limit while instantiating `convert2::<ConvertWrap<ConvertWrap<ConvertWrap<ConvertWrap<ConvertWrap<ConvertWrap<ConvertWrap<ConvertWrap<ConvertWrap<ConvertWrap<ConvertWrap<ConvertWrap<ConvertWrap<ConvertWrap<ConvertWrap<ConvertWrap<ConvertWrap<ConvertWrap<ConvertWrap<ConvertWrap<ConvertWrap<ConvertWrap<ConvertWrap<ConvertWrap<ConvertWrap<ConvertWrap<ConvertWrap<ConvertWrap<ConvertWrap<ConvertWrap<ConvertWrap<ConvertWrap<ConvertWrap<ConvertWrap<ConvertWrap<ConvertWrap<ConvertWrap<ConvertWrap<ConvertWrap<ConvertWrap<ConvertWrap<ConvertWrap<ConvertWrap<ConvertWrap<ConvertWrap<ConvertWrap<ConvertWrap<ConvertWrap<ConvertWrap<ConvertWrap<ConvertWrap<ConvertWrap<ConvertWrap<ConvertWrap<ConvertWrap<ConvertWrap<ConvertWrap<ConvertWrap<ConvertWrap<ConvertWrap<ConvertWrap<ConvertWrap<ConvertWrap<ConvertWrap<ConvertWrap<ConvertWrap<ConvertWrap<ConvertWrap<ConvertWrap<ConvertWrap<ConvertWrap<ConvertWrap<ConvertWrap<ConvertWrap<ConvertWrap<ConvertWrap<ConvertWrap<ConvertWrap<ConvertWrap<ConvertWrap<ConvertWrap<ConvertWrap<ConvertWrap<ConvertWrap<ConvertWrap<ConvertWrap<ConvertWrap<ConvertWrap<ConvertWrap<ConvertWrap<ConvertWrap<ConvertWrap<ConvertWrap<ConvertWrap<ConvertWrap<ConvertWrap<ConvertWrap<ConvertWrap<ConvertWrap<ConvertWrap<ConvertWrap<ConvertWrap<ConvertWrap<ConvertWrap<ConvertWrap<ConvertWrap<ConvertWrap<ConvertWrap<ConvertWrap<ConvertWrap<ConvertWrap<ConvertWrap<ConvertWrap<ConvertWrap<ConvertWrap<ConvertWrap<ConvertWrap<ConvertWrap<ConvertWrap<ConvertWrap<ConvertWrap<ConvertWrap<ConvertWrap<ConvertWrap<ConvertWrap<ConvertWrap<ConvertWrap<ConvertWrap<ConvertWrap<Ser>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>`
--> $DIR/recursion-issue-137823.rs:8:5
|
LL | convert2::<ConvertWrap<S>>()
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
note: `convert2` defined here
--> $DIR/recursion-issue-137823.rs:12:1
|
LL | fn convert2<S: Converter>() -> S::Out {
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
error: aborting due to 1 previous error