mirror of https://github.com/rust-lang/rust.git
add test for issue 114907
This commit is contained in:
parent
a725436c29
commit
f3a1bae88c
|
@ -0,0 +1,40 @@
|
|||
// This is a non-regression test for issue #114907 where an ICE happened because of missing
|
||||
// `UniverseInfo`s accessed during diagnostics.
|
||||
//
|
||||
// A couple notes:
|
||||
// - the `FnOnce` bounds need an arg that is a reference
|
||||
// - a custom `Drop` is needed somewhere in the type that `accept` returns, to create universes
|
||||
// during liveness and dropck outlives computation
|
||||
|
||||
// check-fail
|
||||
|
||||
trait Role {
|
||||
type Inner;
|
||||
}
|
||||
|
||||
struct HandshakeCallback<C>(C);
|
||||
impl<C: FnOnce(&())> Role for HandshakeCallback<C> {
|
||||
type Inner = ();
|
||||
}
|
||||
|
||||
struct Handshake<R: Role> {
|
||||
_inner: Option<R::Inner>,
|
||||
}
|
||||
impl<R: Role> Drop for Handshake<R> {
|
||||
fn drop(&mut self) {}
|
||||
}
|
||||
|
||||
fn accept<C: FnOnce(&())>(_: C) -> Handshake<HandshakeCallback<C>> {
|
||||
todo!()
|
||||
}
|
||||
|
||||
fn main() {
|
||||
let callback = |_| {};
|
||||
accept(callback);
|
||||
//~^ ERROR mismatched types
|
||||
//~| ERROR mismatched types
|
||||
//~| ERROR implementation of `FnOnce` is not general enough
|
||||
//~| ERROR implementation of `FnOnce` is not general enough
|
||||
//~| ERROR higher-ranked subtype error
|
||||
//~| ERROR higher-ranked subtype error
|
||||
}
|
|
@ -0,0 +1,79 @@
|
|||
error[E0308]: mismatched types
|
||||
--> $DIR/missing-universe-cause-issue-114907.rs:33:5
|
||||
|
|
||||
LL | accept(callback);
|
||||
| ^^^^^^^^^^^^^^^^ one type is more general than the other
|
||||
|
|
||||
= note: expected trait `for<'a> FnOnce<(&'a (),)>`
|
||||
found trait `FnOnce<(&(),)>`
|
||||
note: this closure does not fulfill the lifetime requirements
|
||||
--> $DIR/missing-universe-cause-issue-114907.rs:32:20
|
||||
|
|
||||
LL | let callback = |_| {};
|
||||
| ^^^
|
||||
note: the lifetime requirement is introduced here
|
||||
--> $DIR/missing-universe-cause-issue-114907.rs:27:14
|
||||
|
|
||||
LL | fn accept<C: FnOnce(&())>(_: C) -> Handshake<HandshakeCallback<C>> {
|
||||
| ^^^^^^^^^^^
|
||||
help: consider specifying the type of the closure parameters
|
||||
|
|
||||
LL | let callback = |_: &_| {};
|
||||
| ~~~~~~~
|
||||
|
||||
error: implementation of `FnOnce` is not general enough
|
||||
--> $DIR/missing-universe-cause-issue-114907.rs:33:5
|
||||
|
|
||||
LL | accept(callback);
|
||||
| ^^^^^^^^^^^^^^^^ implementation of `FnOnce` is not general enough
|
||||
|
|
||||
= note: closure with signature `fn(&'2 ())` must implement `FnOnce<(&'1 (),)>`, for any lifetime `'1`...
|
||||
= note: ...but it actually implements `FnOnce<(&'2 (),)>`, for some specific lifetime `'2`
|
||||
|
||||
error: implementation of `FnOnce` is not general enough
|
||||
--> $DIR/missing-universe-cause-issue-114907.rs:33:5
|
||||
|
|
||||
LL | accept(callback);
|
||||
| ^^^^^^^^^^^^^^^^ implementation of `FnOnce` is not general enough
|
||||
|
|
||||
= note: closure with signature `fn(&'2 ())` must implement `FnOnce<(&'1 (),)>`, for any lifetime `'1`...
|
||||
= note: ...but it actually implements `FnOnce<(&'2 (),)>`, for some specific lifetime `'2`
|
||||
|
||||
error[E0308]: mismatched types
|
||||
--> $DIR/missing-universe-cause-issue-114907.rs:33:5
|
||||
|
|
||||
LL | accept(callback);
|
||||
| ^^^^^^^^^^^^^^^^ one type is more general than the other
|
||||
|
|
||||
= note: expected trait `for<'a> FnOnce<(&'a (),)>`
|
||||
found trait `FnOnce<(&(),)>`
|
||||
note: this closure does not fulfill the lifetime requirements
|
||||
--> $DIR/missing-universe-cause-issue-114907.rs:32:20
|
||||
|
|
||||
LL | let callback = |_| {};
|
||||
| ^^^
|
||||
note: the lifetime requirement is introduced here
|
||||
--> $DIR/missing-universe-cause-issue-114907.rs:20:21
|
||||
|
|
||||
LL | struct Handshake<R: Role> {
|
||||
| ^^^^
|
||||
help: consider specifying the type of the closure parameters
|
||||
|
|
||||
LL | let callback = |_: &_| {};
|
||||
| ~~~~~~~
|
||||
|
||||
error: higher-ranked subtype error
|
||||
--> $DIR/missing-universe-cause-issue-114907.rs:33:21
|
||||
|
|
||||
LL | accept(callback);
|
||||
| ^
|
||||
|
||||
error: higher-ranked subtype error
|
||||
--> $DIR/missing-universe-cause-issue-114907.rs:33:21
|
||||
|
|
||||
LL | accept(callback);
|
||||
| ^
|
||||
|
||||
error: aborting due to 6 previous errors
|
||||
|
||||
For more information about this error, try `rustc --explain E0308`.
|
Loading…
Reference in New Issue