diff options
| author | bors <bors@rust-lang.org> | 2022-11-06 17:48:33 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2022-11-06 17:48:33 +0000 |
| commit | 7eef946fc0e0eff40e588eab77b09b287accbec3 (patch) | |
| tree | 3c9fa64a5180e9c7e8ac7950c96ff3e32b169b94 /src/test/ui/error-codes | |
| parent | 1e1e5b8d98750a162335f64ec3c792ce80c9866c (diff) | |
| parent | ff8f84ccf6b208e41713da911333f20676472a48 (diff) | |
| download | rust-7eef946fc0e0eff40e588eab77b09b287accbec3.tar.gz rust-7eef946fc0e0eff40e588eab77b09b287accbec3.zip | |
Auto merge of #99943 - compiler-errors:tuple-trait, r=jackh726
Implement `std::marker::Tuple`, use it in `extern "rust-call"` and `Fn`-family traits Implements rust-lang/compiler-team#537 I made a few opinionated decisions in this implementation, specifically: 1. Enforcing `extern "rust-call"` on fn items during wfcheck, 2. Enforcing this for all functions (not just ones that have bodies), 3. Gating this `Tuple` marker trait behind its own feature, instead of grouping it into (e.g.) `unboxed_closures`. Still needing to be done: 1. Enforce that `extern "rust-call"` `fn`-ptrs are well-formed only if they have 1/2 args and the second one implements `Tuple`. (Doing this would fix ICE in #66696.) 2. Deny all explicit/user `impl`s of the `Tuple` trait, kinda like `Sized`. 3. Fixing `Tuple` trait built-in impl for chalk, so that chalkification tests are un-broken. Open questions: 1. Does this need t-lang or t-libs signoff? Fixes #99820
Diffstat (limited to 'src/test/ui/error-codes')
| -rw-r--r-- | src/test/ui/error-codes/E0059.stderr | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/src/test/ui/error-codes/E0059.stderr b/src/test/ui/error-codes/E0059.stderr index a1b8aeaedbb..f331d014226 100644 --- a/src/test/ui/error-codes/E0059.stderr +++ b/src/test/ui/error-codes/E0059.stderr @@ -1,8 +1,14 @@ -error[E0059]: cannot use call notation; the first type parameter for the function trait is neither a tuple nor unit - --> $DIR/E0059.rs:3:41 +error[E0059]: type parameter to bare `Fn` trait must be a tuple + --> $DIR/E0059.rs:3:11 | LL | fn foo<F: Fn<i32>>(f: F) -> F::Output { f(3) } - | ^^^^ + | ^^^^^^^ the trait `Tuple` is not implemented for `i32` + | +note: required by a bound in `Fn` + --> $SRC_DIR/core/src/ops/function.rs:LL:COL + | +LL | pub trait Fn<Args: Tuple>: FnMut<Args> { + | ^^^^^ required by this bound in `Fn` error: aborting due to previous error |
