Skip to content

Commit 45185aa

Browse files
Add failing UI test
1 parent b010dd8 commit 45185aa

File tree

2 files changed

+92
-0
lines changed

2 files changed

+92
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
//~ ERROR
2+
#![crate_type = "lib"]
3+
4+
pub trait Identity {
5+
type Identity: ?Sized;
6+
}
7+
8+
impl<T: ?Sized> Identity for T {
9+
type Identity = Self;
10+
}
11+
12+
pub struct I8<const F: i8>;
13+
14+
impl <I8<{i8::MIN}> as Identity>::Identity {
15+
pub fn foo(&self) {}
16+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
error[E0391]: cycle detected when finding all inherent impls defined in crate
2+
|
3+
= note: ...which requires normalizing `<I8<{i8::MIN}> as Identity>::Identity`...
4+
note: ...which requires evaluating type-level constant...
5+
--> $DIR/impl-on-weird-projection.rs:14:10
6+
|
7+
LL | impl <I8<{i8::MIN}> as Identity>::Identity {
8+
| ^^^^^^^^^
9+
note: ...which requires const-evaluating + checking `<impl at $DIR/impl-on-weird-projection.rs:14:1: 14:43>::{constant#0}`...
10+
--> $DIR/impl-on-weird-projection.rs:14:10
11+
|
12+
LL | impl <I8<{i8::MIN}> as Identity>::Identity {
13+
| ^^^^^^^^^
14+
note: ...which requires const-evaluating + checking `<impl at $DIR/impl-on-weird-projection.rs:14:1: 14:43>::{constant#0}`...
15+
--> $DIR/impl-on-weird-projection.rs:14:10
16+
|
17+
LL | impl <I8<{i8::MIN}> as Identity>::Identity {
18+
| ^^^^^^^^^
19+
note: ...which requires caching MIR for CTFE of the const argument `<impl at $DIR/impl-on-weird-projection.rs:14:1: 14:43>::{constant#0}`...
20+
--> $DIR/impl-on-weird-projection.rs:14:10
21+
|
22+
LL | impl <I8<{i8::MIN}> as Identity>::Identity {
23+
| ^^^^^^^^^
24+
note: ...which requires elaborating drops for `<impl at $DIR/impl-on-weird-projection.rs:14:1: 14:43>::{constant#0}`...
25+
--> $DIR/impl-on-weird-projection.rs:14:10
26+
|
27+
LL | impl <I8<{i8::MIN}> as Identity>::Identity {
28+
| ^^^^^^^^^
29+
note: ...which requires borrow-checking the const argument`<impl at $DIR/impl-on-weird-projection.rs:14:1: 14:43>::{constant#0}`...
30+
--> $DIR/impl-on-weird-projection.rs:14:10
31+
|
32+
LL | impl <I8<{i8::MIN}> as Identity>::Identity {
33+
| ^^^^^^^^^
34+
note: ...which requires processing MIR for the const argument `<impl at $DIR/impl-on-weird-projection.rs:14:1: 14:43>::{constant#0}`...
35+
--> $DIR/impl-on-weird-projection.rs:14:10
36+
|
37+
LL | impl <I8<{i8::MIN}> as Identity>::Identity {
38+
| ^^^^^^^^^
39+
note: ...which requires const checking the const argument `<impl at $DIR/impl-on-weird-projection.rs:14:1: 14:43>::{constant#0}`...
40+
--> $DIR/impl-on-weird-projection.rs:14:10
41+
|
42+
LL | impl <I8<{i8::MIN}> as Identity>::Identity {
43+
| ^^^^^^^^^
44+
note: ...which requires preparing the const argument `<impl at $DIR/impl-on-weird-projection.rs:14:1: 14:43>::{constant#0}` for borrow checking...
45+
--> $DIR/impl-on-weird-projection.rs:14:10
46+
|
47+
LL | impl <I8<{i8::MIN}> as Identity>::Identity {
48+
| ^^^^^^^^^
49+
note: ...which requires unsafety-checking the const argument `<impl at $DIR/impl-on-weird-projection.rs:14:1: 14:43>::{constant#0}`...
50+
--> $DIR/impl-on-weird-projection.rs:14:10
51+
|
52+
LL | impl <I8<{i8::MIN}> as Identity>::Identity {
53+
| ^^^^^^^^^
54+
note: ...which requires building MIR for `<impl at $DIR/impl-on-weird-projection.rs:14:1: 14:43>::{constant#0}`...
55+
--> $DIR/impl-on-weird-projection.rs:14:10
56+
|
57+
LL | impl <I8<{i8::MIN}> as Identity>::Identity {
58+
| ^^^^^^^^^
59+
note: ...which requires building THIR for `<impl at $DIR/impl-on-weird-projection.rs:14:1: 14:43>::{constant#0}`...
60+
--> $DIR/impl-on-weird-projection.rs:14:10
61+
|
62+
LL | impl <I8<{i8::MIN}> as Identity>::Identity {
63+
| ^^^^^^^^^
64+
note: ...which requires type-checking the const argument `<impl at $DIR/impl-on-weird-projection.rs:14:1: 14:43>::{constant#0}`...
65+
--> $DIR/impl-on-weird-projection.rs:14:10
66+
|
67+
LL | impl <I8<{i8::MIN}> as Identity>::Identity {
68+
| ^^^^^^^^^
69+
= note: ...which requires collecting all inherent impls for `IntSimplifiedType(I8)`...
70+
= note: ...which requires collecting all impls for a type in a crate...
71+
= note: ...which again requires finding all inherent impls defined in crate, completing the cycle
72+
= note: cycle used when running analysis passes on this crate
73+
74+
error: aborting due to previous error
75+
76+
For more information about this error, try `rustc --explain E0391`.

0 commit comments

Comments
 (0)