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