Skip to content

Commit

Permalink
Add test
Browse files Browse the repository at this point in the history
  • Loading branch information
compiler-errors committed Apr 25, 2024
1 parent b2fea55 commit 870ed4b
Show file tree
Hide file tree
Showing 5 changed files with 51 additions and 5 deletions.
5 changes: 0 additions & 5 deletions tests/crashes/123461.rs

This file was deleted.

11 changes: 11 additions & 0 deletions tests/ui/transmute/ambiguity-in-closure-arg.rs
Original file line number Diff line number Diff line change
@@ -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 changes: 9 additions & 0 deletions tests/ui/transmute/ambiguity-in-closure-arg.stderr
Original file line number Diff line number Diff line change
@@ -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 changes: 11 additions & 0 deletions tests/ui/wf/closure-wf.rs
Original file line number Diff line number Diff line change
@@ -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 changes: 20 additions & 0 deletions tests/ui/wf/closure-wf.stderr
Original file line number Diff line number Diff line change
@@ -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`.

0 comments on commit 870ed4b

Please sign in to comment.