Add test
This commit is contained in:
parent
b2fea557f3
commit
870ed4bfa2
@ -1,5 +0,0 @@
|
|||||||
//@ known-bug: #123461
|
|
||||||
|
|
||||||
fn main() {
|
|
||||||
let _: [_; unsafe { std::mem::transmute(|o_b: Option<_>| {}) }];
|
|
||||||
}
|
|
11
tests/ui/transmute/ambiguity-in-closure-arg.rs
Normal file
11
tests/ui/transmute/ambiguity-in-closure-arg.rs
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
// Minimized test for <https://github.com/rust-lang/rust/issues/123461>.
|
||||||
|
|
||||||
|
struct Unconstrained<T>(T);
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
unsafe { std::mem::transmute::<_, ()>(|o_b: Unconstrained<_>| {}) };
|
||||||
|
//~^ ERROR type annotations needed
|
||||||
|
// We unfortunately don't check `Wf(Unconstrained<_>)`, so we won't
|
||||||
|
// hit an ambiguity error before checking the transmute. That means
|
||||||
|
// we still may have inference variables in our transmute src.
|
||||||
|
}
|
9
tests/ui/transmute/ambiguity-in-closure-arg.stderr
Normal file
9
tests/ui/transmute/ambiguity-in-closure-arg.stderr
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
error[E0282]: type annotations needed
|
||||||
|
--> $DIR/ambiguity-in-closure-arg.rs:6:44
|
||||||
|
|
|
||||||
|
LL | unsafe { std::mem::transmute::<_, ()>(|o_b: Unconstrained<_>| {}) };
|
||||||
|
| ^^^^^^^^^^^^^^^^^^^^^ cannot infer type
|
||||||
|
|
||||||
|
error: aborting due to 1 previous error
|
||||||
|
|
||||||
|
For more information about this error, try `rustc --explain E0282`.
|
11
tests/ui/wf/closure-wf.rs
Normal file
11
tests/ui/wf/closure-wf.rs
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
trait Bound {}
|
||||||
|
struct NeedsBound<T: Bound>(T);
|
||||||
|
|
||||||
|
// Checks that we enforce that closure args are WF.
|
||||||
|
|
||||||
|
fn constrain_inner<T, F: for<'a> FnOnce(&'a (), NeedsBound<T>)>(_: T, _: F) {}
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
constrain_inner(1u32, |&(), _| ());
|
||||||
|
//~^ ERROR the trait bound `u32: Bound` is not satisfied
|
||||||
|
}
|
20
tests/ui/wf/closure-wf.stderr
Normal file
20
tests/ui/wf/closure-wf.stderr
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
error[E0277]: the trait bound `u32: Bound` is not satisfied
|
||||||
|
--> $DIR/closure-wf.rs:9:33
|
||||||
|
|
|
||||||
|
LL | constrain_inner(1u32, |&(), _| ());
|
||||||
|
| ^ the trait `Bound` is not implemented for `u32`
|
||||||
|
|
|
||||||
|
help: this trait has no implementations, consider adding one
|
||||||
|
--> $DIR/closure-wf.rs:1:1
|
||||||
|
|
|
||||||
|
LL | trait Bound {}
|
||||||
|
| ^^^^^^^^^^^
|
||||||
|
note: required by a bound in `NeedsBound`
|
||||||
|
--> $DIR/closure-wf.rs:2:22
|
||||||
|
|
|
||||||
|
LL | struct NeedsBound<T: Bound>(T);
|
||||||
|
| ^^^^^ required by this bound in `NeedsBound`
|
||||||
|
|
||||||
|
error: aborting due to 1 previous error
|
||||||
|
|
||||||
|
For more information about this error, try `rustc --explain E0277`.
|
Loading…
Reference in New Issue
Block a user