Skip to content

Commit e0d862e

Browse files
committed
add test using only trait bounds
1 parent c44ecdf commit e0d862e

File tree

2 files changed

+48
-0
lines changed

2 files changed

+48
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
error[E0275]: overflow evaluating the requirement `u32: SendIndir<Foo<u32>>`
2+
--> $DIR/only-one-coinductive-step-needed-trait.rs:24:5
3+
|
4+
LL | is_send::<Foo<u32>>();
5+
| ^^^^^^^^^^^^^^^^^^^^^
6+
|
7+
note: required for `Foo<u32>` to implement `Send`
8+
--> $DIR/only-one-coinductive-step-needed-trait.rs:17:35
9+
|
10+
LL | unsafe impl<T: SendIndir<Foo<T>>> Send for Foo<T> {}
11+
| ----------------- ^^^^ ^^^^^^
12+
| |
13+
| unsatisfied trait bound introduced here
14+
note: required by a bound in `is_send`
15+
--> $DIR/only-one-coinductive-step-needed-trait.rs:22:15
16+
|
17+
LL | fn is_send<T: Send>() {}
18+
| ^^^^ required by this bound in `is_send`
19+
20+
error: aborting due to 1 previous error
21+
22+
For more information about this error, try `rustc --explain E0275`.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
//@ revisions: current next
2+
//@ ignore-compare-mode-next-solver (explicit revisions)
3+
//@[next] compile-flags: -Znext-solver
4+
//@[next] check-pass
5+
6+
// #136824 changed cycles to be coinductive if they have at least
7+
// one productive step, causing this test to pass with the new solver.
8+
//
9+
// The cycle in the test is the following:
10+
// - `Foo<T>: Send`, impl requires
11+
// - `T: SendIndir<Foo<T>>`, impl requires
12+
// - `Foo<T>: Send` cycle
13+
//
14+
// The old solver treats this cycle as inductive due to the `T: SendIndir` step.
15+
16+
struct Foo<T>(T);
17+
unsafe impl<T: SendIndir<Foo<T>>> Send for Foo<T> {}
18+
19+
trait SendIndir<T> {}
20+
impl<T, U: Send> SendIndir<U> for T {}
21+
22+
fn is_send<T: Send>() {}
23+
fn main() {
24+
is_send::<Foo<u32>>();
25+
//[current]~^ ERROR overflow evaluating the requirement `u32: SendIndir<Foo<u32>>`
26+
}

0 commit comments

Comments
 (0)