tests: add overflow test

This test case is a reduction from the `hwc` crate on GitHub, following a
crater run. It passes with the next solver but fails on the current
solver due to a known limitation of the current solver. It starts fails
on the current solver with the `sized_hierarchy` changes because `?Sized`
is now a proper bound.
This commit is contained in:
David Wood 2025-05-13 06:44:21 +00:00
parent 8f19fd0841
commit 5d17987d71
No known key found for this signature in database
2 changed files with 66 additions and 0 deletions

View file

@ -0,0 +1,45 @@
error[E0275]: overflow evaluating the requirement `Element: MetaSized`
--> $DIR/overflow.rs:16:16
|
LL | struct Element(<Box<Box<Element>> as ParseTokens>::Output);
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
note: required for `Box<Element>` to implement `ParseTokens`
--> $DIR/overflow.rs:12:31
|
LL | impl<T: ParseTokens + ?Sized> ParseTokens for Box<T> {
| - ^^^^^^^^^^^ ^^^^^^
| |
| unsatisfied trait bound introduced here
= note: 1 redundant requirement hidden
= note: required for `Box<Box<Element>>` to implement `ParseTokens`
error[E0275]: overflow evaluating the requirement `Box<Element>: ParseTokens`
--> $DIR/overflow.rs:18:22
|
LL | impl ParseTokens for Element {
| ^^^^^^^
|
note: required for `Box<Box<Element>>` to implement `ParseTokens`
--> $DIR/overflow.rs:12:31
|
LL | impl<T: ParseTokens + ?Sized> ParseTokens for Box<T> {
| ----------- ^^^^^^^^^^^ ^^^^^^
| |
| unsatisfied trait bound introduced here
note: required because it appears within the type `Element`
--> $DIR/overflow.rs:16:8
|
LL | struct Element(<Box<Box<Element>> as ParseTokens>::Output);
| ^^^^^^^
note: required by a bound in `ParseTokens`
--> $DIR/overflow.rs:9:1
|
LL | / trait ParseTokens {
LL | | type Output;
LL | | }
| |_^ required by this bound in `ParseTokens`
error: aborting due to 2 previous errors
For more information about this error, try `rustc --explain E0275`.

View file

@ -0,0 +1,21 @@
//@ compile-flags: --crate-type=lib
//@ revisions: current next
//@ ignore-compare-mode-next-solver (explicit revisions)
//@[next] check-pass
//@[next] compile-flags: -Znext-solver
use std::marker::PhantomData;
trait ParseTokens {
type Output;
}
impl<T: ParseTokens + ?Sized> ParseTokens for Box<T> {
type Output = ();
}
struct Element(<Box<Box<Element>> as ParseTokens>::Output);
//[current]~^ ERROR overflow evaluating
impl ParseTokens for Element {
//[current]~^ ERROR overflow evaluating
type Output = ();
}