From edf6c9c223d465b730e3f1baa45316053e74618b Mon Sep 17 00:00:00 2001 From: Vadim Petrochenkov Date: Thu, 16 Nov 2023 19:08:30 +0300 Subject: [PATCH] Add an experimental feature gate for function delegation In accordance with the [process](https://github.com/rust-lang/lang-team/blob/master/src/how_to/experiment.md). Detailed description of the feature can be found in the RFC repo - https://github.com/rust-lang/rfcs/pull/3530. --- compiler/rustc_feature/src/unstable.rs | 2 ++ compiler/rustc_span/src/symbol.rs | 1 + .../ui/feature-gates/feature-gate-fn_delegation.rs | 3 +++ .../feature-gates/feature-gate-fn_delegation.stderr | 13 +++++++++++++ 4 files changed, 19 insertions(+) create mode 100644 tests/ui/feature-gates/feature-gate-fn_delegation.rs create mode 100644 tests/ui/feature-gates/feature-gate-fn_delegation.stderr diff --git a/compiler/rustc_feature/src/unstable.rs b/compiler/rustc_feature/src/unstable.rs index 35726ba52bc..e34661d5fc6 100644 --- a/compiler/rustc_feature/src/unstable.rs +++ b/compiler/rustc_feature/src/unstable.rs @@ -456,6 +456,8 @@ pub fn internal(&self, feature: Symbol) -> bool { (unstable, ffi_returns_twice, "1.34.0", Some(58314), None), /// Allows using `#[repr(align(...))]` on function items (unstable, fn_align, "1.53.0", Some(82232), None), + /// Support delegating implementation of functions to other already implemented functions. + (incomplete, fn_delegation, "CURRENT_RUSTC_VERSION", Some(118212), None), /// Allows defining gen blocks and `gen fn`. (unstable, gen_blocks, "1.75.0", Some(117078), None), /// Infer generic args for both consts and types. diff --git a/compiler/rustc_span/src/symbol.rs b/compiler/rustc_span/src/symbol.rs index ea80bc82bd1..40b03874242 100644 --- a/compiler/rustc_span/src/symbol.rs +++ b/compiler/rustc_span/src/symbol.rs @@ -787,6 +787,7 @@ fmt, fmul_fast, fn_align, + fn_delegation, fn_must_use, fn_mut, fn_once, diff --git a/tests/ui/feature-gates/feature-gate-fn_delegation.rs b/tests/ui/feature-gates/feature-gate-fn_delegation.rs new file mode 100644 index 00000000000..6ac36712090 --- /dev/null +++ b/tests/ui/feature-gates/feature-gate-fn_delegation.rs @@ -0,0 +1,3 @@ +todo!(); //~ ERROR + +fn main() {} diff --git a/tests/ui/feature-gates/feature-gate-fn_delegation.stderr b/tests/ui/feature-gates/feature-gate-fn_delegation.stderr new file mode 100644 index 00000000000..1f55c1f250a --- /dev/null +++ b/tests/ui/feature-gates/feature-gate-fn_delegation.stderr @@ -0,0 +1,13 @@ +error: expected one of `!` or `::`, found `(` + --> $DIR/feature-gate-fn_delegation.rs:1:1 + | +LL | todo!(); + | ^^^^^^^ + | | + | expected one of `!` or `::` + | in this macro invocation + | + = note: this error originates in the macro `todo` (in Nightly builds, run with -Z macro-backtrace for more info) + +error: aborting due to previous error +