From ec74d3533a9b88505d56d0ae00a78acf2e702c92 Mon Sep 17 00:00:00 2001 From: Oliver Schneider Date: Fri, 5 Oct 2018 10:17:16 +0200 Subject: [PATCH 1/3] Stabilize `min_const_fn` --- src/liballoc/lib.rs | 2 +- src/liballoc/tests/lib.rs | 2 +- src/librustc/lib.rs | 2 +- src/librustc/ty/constness.rs | 2 +- src/librustc_target/lib.rs | 2 +- src/libstd/lib.rs | 2 +- src/libsyntax/attr/builtin.rs | 3 +- src/libsyntax/feature_gate.rs | 9 +-- .../item-collection/unreferenced-const-fn.rs | 1 - src/test/codegen/link-dead-code.rs | 1 - src/test/compile-fail/issue-43733-2.rs | 1 - src/test/mir-opt/lower_128bit_debug_test.rs | 2 - src/test/mir-opt/lower_128bit_test.rs | 2 - src/test/run-fail/issue-29798.rs | 1 - src/test/run-pass-fulldeps/newtype_index.rs | 2 +- .../run-pass/consts/auxiliary/const_fn_lib.rs | 1 - .../run-pass/consts/const-fn-const-eval.rs | 1 - src/test/run-pass/consts/const-fn-method.rs | 1 - src/test/run-pass/consts/const-fn-nested.rs | 2 - .../run-pass/consts/const-meth-pattern.rs | 2 - .../run-pass/consts/const-pattern-variant.rs | 1 - .../run-pass/consts/const-size_of-align_of.rs | 1 - src/test/run-pass/consts/const-unsafe-fn.rs | 2 - .../run-pass/consts/consts-in-patterns.rs | 1 - src/test/run-pass/ctfe/ice-48279.rs | 2 - .../run-pass/ctfe/match-const-fn-structs.rs | 2 - src/test/run-pass/ctfe/return-in-const-fn.rs | 1 - .../run-pass/issues/auxiliary/issue-36954.rs | 1 - src/test/run-pass/issues/issue-29927.rs | 1 - src/test/run-pass/issues/issue-33537.rs | 1 - src/test/run-pass/issues/issue-37991.rs | 1 - src/test/run-pass/issues/issue29927-1.rs | 1 - src/test/rustdoc/auxiliary/issue-27362.rs | 2 - src/test/rustdoc/const-fn.rs | 1 - src/test/rustdoc/const.rs | 2 - ...-static-initializer-issue-38520.ast.stderr | 4 +- ...-static-initializer-issue-38520.mir.stderr | 4 +- .../move-in-static-initializer-issue-38520.rs | 2 - src/test/ui/consts/auxiliary/const_fn_lib.rs | 1 - src/test/ui/consts/const-eval/issue-43197.rs | 2 - .../ui/consts/const-eval/issue-43197.stderr | 12 ++-- src/test/ui/consts/const-eval/issue-47971.rs | 2 - .../const-pattern-not-const-evaluable.rs | 2 - .../ui/consts/min_const_fn/cmp_fn_pointers.rs | 5 ++ .../min_const_fn/cmp_fn_pointers.stderr | 8 +++ .../min_const_fn/min_const_fn.nll.stderr | 72 +++++++++---------- .../ui/consts/min_const_fn/min_const_fn.rs | 2 - .../consts/min_const_fn/min_const_fn.stderr | 70 +++++++++--------- .../min_const_fn/min_const_fn_dyn.nll.stderr | 6 +- .../consts/min_const_fn/min_const_fn_dyn.rs | 2 - .../min_const_fn/min_const_fn_dyn.stderr | 4 +- .../min_const_fn/min_const_fn_fn_ptr.rs | 2 - .../min_const_fn/min_const_fn_fn_ptr.stderr | 4 +- .../min_const_fn/min_const_fn_libstd.rs | 2 +- .../min_const_fn/min_const_fn_unsafe.rs | 2 - .../min_const_fn/min_const_fn_unsafe.stderr | 14 ++-- .../consts/min_const_fn/promotion.nll.stderr | 12 ++-- src/test/ui/consts/min_const_fn/promotion.rs | 2 - .../ui/consts/min_const_fn/promotion.stderr | 12 ++-- .../ui/feature-gates/feature-gate-const_fn.rs | 4 +- .../feature-gate-const_fn.stderr | 10 +-- .../feature-gate-min_const_fn.rs | 7 +- .../feature-gate-min_const_fn.stderr | 28 +------- .../infinite/infinite-recursion-const-fn.rs | 1 - .../infinite-recursion-const-fn.stderr | 2 +- src/test/ui/issues/issue-28822.rs | 1 - src/test/ui/unsafe/unsafe-const-fn.rs | 2 - src/test/ui/unsafe/unsafe-const-fn.stderr | 2 +- 68 files changed, 143 insertions(+), 223 deletions(-) create mode 100644 src/test/ui/consts/min_const_fn/cmp_fn_pointers.rs create mode 100644 src/test/ui/consts/min_const_fn/cmp_fn_pointers.stderr diff --git a/src/liballoc/lib.rs b/src/liballoc/lib.rs index 5f9ceb8599cf5..78d1958b8fb37 100644 --- a/src/liballoc/lib.rs +++ b/src/liballoc/lib.rs @@ -86,7 +86,7 @@ #![feature(box_syntax)] #![feature(cfg_target_has_atomic)] #![feature(coerce_unsized)] -#![feature(min_const_fn)] +#![cfg_attr(stage0, feature(min_const_fn))] #![feature(core_intrinsics)] #![feature(custom_attribute)] #![feature(dropck_eyepatch)] diff --git a/src/liballoc/tests/lib.rs b/src/liballoc/tests/lib.rs index b9ba319a943ca..c771c41dc3ed3 100644 --- a/src/liballoc/tests/lib.rs +++ b/src/liballoc/tests/lib.rs @@ -11,7 +11,7 @@ #![feature(allocator_api)] #![feature(alloc_system)] #![feature(box_syntax)] -#![feature(min_const_fn)] +#![cfg_attr(stage0, feature(min_const_fn))] #![feature(drain_filter)] #![feature(exact_size_is_empty)] #![feature(pattern)] diff --git a/src/librustc/lib.rs b/src/librustc/lib.rs index 0ac9d41575630..5519330a37427 100644 --- a/src/librustc/lib.rs +++ b/src/librustc/lib.rs @@ -42,7 +42,7 @@ #![feature(box_patterns)] #![feature(box_syntax)] -#![feature(min_const_fn)] +#![cfg_attr(stage0, feature(min_const_fn))] #![feature(core_intrinsics)] #![feature(drain_filter)] #![cfg_attr(windows, feature(libc))] diff --git a/src/librustc/ty/constness.rs b/src/librustc/ty/constness.rs index 64e677fbe1261..47aea7a5f0796 100644 --- a/src/librustc/ty/constness.rs +++ b/src/librustc/ty/constness.rs @@ -65,7 +65,7 @@ impl<'a, 'tcx> TyCtxt<'a, 'tcx, 'tcx> { _ => true, } } else { - // users enabling the `const_fn` can do what they want + // users enabling the `const_fn` feature gate can do what they want !self.sess.features_untracked().const_fn } } diff --git a/src/librustc_target/lib.rs b/src/librustc_target/lib.rs index 93d61b80847ec..10ba27e38f47c 100644 --- a/src/librustc_target/lib.rs +++ b/src/librustc_target/lib.rs @@ -22,7 +22,7 @@ html_root_url = "https://doc.rust-lang.org/nightly/")] #![feature(box_syntax)] -#![feature(min_const_fn)] +#![cfg_attr(stage0, feature(min_const_fn))] #![feature(nll)] #![feature(slice_patterns)] diff --git a/src/libstd/lib.rs b/src/libstd/lib.rs index c58bd364cedab..a4db879680566 100644 --- a/src/libstd/lib.rs +++ b/src/libstd/lib.rs @@ -250,7 +250,7 @@ #![feature(cfg_target_vendor)] #![feature(char_error_internals)] #![feature(compiler_builtins_lib)] -#![feature(min_const_fn)] +#![cfg_attr(stage0, feature(min_const_fn))] #![feature(const_int_ops)] #![feature(const_ip)] #![feature(const_raw_ptr_deref)] diff --git a/src/libsyntax/attr/builtin.rs b/src/libsyntax/attr/builtin.rs index f1cec422420ed..1cc2e62a9c600 100644 --- a/src/libsyntax/attr/builtin.rs +++ b/src/libsyntax/attr/builtin.rs @@ -107,8 +107,7 @@ pub struct Stability { pub level: StabilityLevel, pub feature: Symbol, pub rustc_depr: Option, - /// `None` means the function is stable but needs to be allowed by the - /// `min_const_fn` feature + /// `None` means the function is stable but needs to be a stable const fn, too /// `Some` contains the feature gate required to be able to use the function /// as const fn pub const_stability: Option, diff --git a/src/libsyntax/feature_gate.rs b/src/libsyntax/feature_gate.rs index adbe2f9d4393f..e854e3d67606f 100644 --- a/src/libsyntax/feature_gate.rs +++ b/src/libsyntax/feature_gate.rs @@ -1806,9 +1806,6 @@ impl<'a> Visitor<'a> for PostExpansionVisitor<'a> { if header.asyncness.is_async() { gate_feature_post!(&self, async_await, span, "async fn is unstable"); } - if header.constness.node == ast::Constness::Const { - gate_feature_post!(&self, min_const_fn, span, "const fn is unstable"); - } // stability of const fn methods are covered in // visit_trait_item and visit_impl_item below; this is // because default methods don't pass through this @@ -1863,11 +1860,7 @@ impl<'a> Visitor<'a> for PostExpansionVisitor<'a> { } match ii.node { - ast::ImplItemKind::Method(ref sig, _) => { - if sig.header.constness.node == ast::Constness::Const { - gate_feature_post!(&self, min_const_fn, ii.span, "const fn is unstable"); - } - } + ast::ImplItemKind::Method(..) => {} ast::ImplItemKind::Existential(..) => { gate_feature_post!( &self, diff --git a/src/test/codegen-units/item-collection/unreferenced-const-fn.rs b/src/test/codegen-units/item-collection/unreferenced-const-fn.rs index 1462417643600..c4a49fd4ec4d6 100644 --- a/src/test/codegen-units/item-collection/unreferenced-const-fn.rs +++ b/src/test/codegen-units/item-collection/unreferenced-const-fn.rs @@ -13,7 +13,6 @@ // NB: We do not expect *any* monomorphization to be generated here. -#![feature(min_const_fn)] #![deny(dead_code)] #![crate_type = "rlib"] diff --git a/src/test/codegen/link-dead-code.rs b/src/test/codegen/link-dead-code.rs index 3ea20aa921e1b..4492ad5208354 100644 --- a/src/test/codegen/link-dead-code.rs +++ b/src/test/codegen/link-dead-code.rs @@ -10,7 +10,6 @@ // compile-flags:-Clink-dead-code -#![feature(min_const_fn)] #![crate_type = "rlib"] // This test makes sure that, when -Clink-dead-code is specified, we generate diff --git a/src/test/compile-fail/issue-43733-2.rs b/src/test/compile-fail/issue-43733-2.rs index fea81f0cc8fa4..86ae3e2113cef 100644 --- a/src/test/compile-fail/issue-43733-2.rs +++ b/src/test/compile-fail/issue-43733-2.rs @@ -8,7 +8,6 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -#![feature(min_const_fn)] #![feature(cfg_target_thread_local, thread_local_internals)] // On platforms *without* `#[thread_local]`, use diff --git a/src/test/mir-opt/lower_128bit_debug_test.rs b/src/test/mir-opt/lower_128bit_debug_test.rs index 1bf740fdec619..a51498797e48f 100644 --- a/src/test/mir-opt/lower_128bit_debug_test.rs +++ b/src/test/mir-opt/lower_128bit_debug_test.rs @@ -15,8 +15,6 @@ // compile-flags: -Z lower_128bit_ops=yes -C debug_assertions=yes -#![feature(min_const_fn)] - static TEST_SIGNED: i128 = const_signed(-222); static TEST_UNSIGNED: u128 = const_unsigned(200); diff --git a/src/test/mir-opt/lower_128bit_test.rs b/src/test/mir-opt/lower_128bit_test.rs index 235df8a6785d4..f64981525b810 100644 --- a/src/test/mir-opt/lower_128bit_test.rs +++ b/src/test/mir-opt/lower_128bit_test.rs @@ -12,8 +12,6 @@ // compile-flags: -Z lower_128bit_ops=yes -C debug_assertions=no -O -#![feature(min_const_fn)] - static TEST_SIGNED: i128 = const_signed(-222); static TEST_UNSIGNED: u128 = const_unsigned(200); diff --git a/src/test/run-fail/issue-29798.rs b/src/test/run-fail/issue-29798.rs index 30efe3b9ab2c4..16b71f676e1fb 100644 --- a/src/test/run-fail/issue-29798.rs +++ b/src/test/run-fail/issue-29798.rs @@ -10,7 +10,6 @@ // error-pattern:index out of bounds: the len is 5 but the index is 5 -#![feature(min_const_fn)] const fn test(x: usize) -> i32 { [42;5][x] } diff --git a/src/test/run-pass-fulldeps/newtype_index.rs b/src/test/run-pass-fulldeps/newtype_index.rs index 08e2c35e0722c..3cd622a33b173 100644 --- a/src/test/run-pass-fulldeps/newtype_index.rs +++ b/src/test/run-pass-fulldeps/newtype_index.rs @@ -1,4 +1,4 @@ -#![feature(min_const_fn, rustc_attrs, rustc_private, step_trait)] +#![feature(rustc_attrs, rustc_private, step_trait)] #[macro_use] extern crate rustc_data_structures; extern crate rustc_serialize; diff --git a/src/test/run-pass/consts/auxiliary/const_fn_lib.rs b/src/test/run-pass/consts/auxiliary/const_fn_lib.rs index 6985a6527c874..c6ac35bfb10bc 100644 --- a/src/test/run-pass/consts/auxiliary/const_fn_lib.rs +++ b/src/test/run-pass/consts/auxiliary/const_fn_lib.rs @@ -11,6 +11,5 @@ // Crate that exports a const fn. Used for testing cross-crate. #![crate_type="rlib"] -#![feature(min_const_fn)] pub const fn foo() -> usize { 22 } diff --git a/src/test/run-pass/consts/const-fn-const-eval.rs b/src/test/run-pass/consts/const-fn-const-eval.rs index 78276f17e57da..5e05865aa1be1 100644 --- a/src/test/run-pass/consts/const-fn-const-eval.rs +++ b/src/test/run-pass/consts/const-fn-const-eval.rs @@ -10,7 +10,6 @@ // run-pass #![allow(dead_code)] -#![feature(min_const_fn)] const fn add(x: usize, y: usize) -> usize { x + y diff --git a/src/test/run-pass/consts/const-fn-method.rs b/src/test/run-pass/consts/const-fn-method.rs index 3ecb4fffba14a..cd136774a02c3 100644 --- a/src/test/run-pass/consts/const-fn-method.rs +++ b/src/test/run-pass/consts/const-fn-method.rs @@ -9,7 +9,6 @@ // except according to those terms. // run-pass -#![feature(min_const_fn)] struct Foo { value: u32 } diff --git a/src/test/run-pass/consts/const-fn-nested.rs b/src/test/run-pass/consts/const-fn-nested.rs index 41198a901c29b..8944642d2d638 100644 --- a/src/test/run-pass/consts/const-fn-nested.rs +++ b/src/test/run-pass/consts/const-fn-nested.rs @@ -11,8 +11,6 @@ // run-pass // Test a call whose argument is the result of another call. -#![feature(min_const_fn)] - const fn sub(x: u32, y: u32) -> u32 { x - y } diff --git a/src/test/run-pass/consts/const-meth-pattern.rs b/src/test/run-pass/consts/const-meth-pattern.rs index 1762c17e943c3..21e011cb17616 100644 --- a/src/test/run-pass/consts/const-meth-pattern.rs +++ b/src/test/run-pass/consts/const-meth-pattern.rs @@ -10,8 +10,6 @@ // run-pass -#![feature(min_const_fn)] - struct A; impl A { diff --git a/src/test/run-pass/consts/const-pattern-variant.rs b/src/test/run-pass/consts/const-pattern-variant.rs index b0e91e616a08c..095cdc09e060b 100644 --- a/src/test/run-pass/consts/const-pattern-variant.rs +++ b/src/test/run-pass/consts/const-pattern-variant.rs @@ -10,7 +10,6 @@ // run-pass #![allow(unreachable_patterns)] -#![feature(min_const_fn)] #[derive(PartialEq, Eq)] enum Cake { diff --git a/src/test/run-pass/consts/const-size_of-align_of.rs b/src/test/run-pass/consts/const-size_of-align_of.rs index 6732e4f14c880..d69e5ed930b91 100644 --- a/src/test/run-pass/consts/const-size_of-align_of.rs +++ b/src/test/run-pass/consts/const-size_of-align_of.rs @@ -10,7 +10,6 @@ // run-pass #![allow(dead_code)] -#![feature(min_const_fn)] use std::mem; diff --git a/src/test/run-pass/consts/const-unsafe-fn.rs b/src/test/run-pass/consts/const-unsafe-fn.rs index cb60b2fdf0769..8a2f862b5a001 100644 --- a/src/test/run-pass/consts/const-unsafe-fn.rs +++ b/src/test/run-pass/consts/const-unsafe-fn.rs @@ -12,8 +12,6 @@ #![allow(dead_code)] // A quick test of 'unsafe const fn' functionality -#![feature(min_const_fn)] - const unsafe fn dummy(v: u32) -> u32 { !v } diff --git a/src/test/run-pass/consts/consts-in-patterns.rs b/src/test/run-pass/consts/consts-in-patterns.rs index b96ad2f40a57e..e2f7faa5955dc 100644 --- a/src/test/run-pass/consts/consts-in-patterns.rs +++ b/src/test/run-pass/consts/consts-in-patterns.rs @@ -9,7 +9,6 @@ // except according to those terms. // run-pass -#![feature(min_const_fn)] const FOO: isize = 10; const BAR: isize = 3; diff --git a/src/test/run-pass/ctfe/ice-48279.rs b/src/test/run-pass/ctfe/ice-48279.rs index 40fdcda355fad..74a8ba64965ff 100644 --- a/src/test/run-pass/ctfe/ice-48279.rs +++ b/src/test/run-pass/ctfe/ice-48279.rs @@ -14,8 +14,6 @@ // https://github.com/rust-lang/rust/issues/48279 -#![feature(min_const_fn)] - #[derive(PartialEq, Eq)] pub struct NonZeroU32 { value: u32 diff --git a/src/test/run-pass/ctfe/match-const-fn-structs.rs b/src/test/run-pass/ctfe/match-const-fn-structs.rs index 1c6d72d530f07..e41ff906fd217 100644 --- a/src/test/run-pass/ctfe/match-const-fn-structs.rs +++ b/src/test/run-pass/ctfe/match-const-fn-structs.rs @@ -13,8 +13,6 @@ // https://github.com/rust-lang/rust/issues/46114 -#![feature(min_const_fn)] - #[derive(Eq, PartialEq)] struct A { value: u32 } diff --git a/src/test/run-pass/ctfe/return-in-const-fn.rs b/src/test/run-pass/ctfe/return-in-const-fn.rs index e002001952379..933ec58861486 100644 --- a/src/test/run-pass/ctfe/return-in-const-fn.rs +++ b/src/test/run-pass/ctfe/return-in-const-fn.rs @@ -12,7 +12,6 @@ // https://github.com/rust-lang/rust/issues/43754 -#![feature(min_const_fn)] const fn foo(x: usize) -> usize { return x; } diff --git a/src/test/run-pass/issues/auxiliary/issue-36954.rs b/src/test/run-pass/issues/auxiliary/issue-36954.rs index 5351a40916b7d..e5eafa5a5d154 100644 --- a/src/test/run-pass/issues/auxiliary/issue-36954.rs +++ b/src/test/run-pass/issues/auxiliary/issue-36954.rs @@ -8,7 +8,6 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -#![feature(min_const_fn)] #![crate_type = "lib"] const fn foo(i: i32) -> i32 { diff --git a/src/test/run-pass/issues/issue-29927.rs b/src/test/run-pass/issues/issue-29927.rs index 863d9e74abb28..ce28ebc53cd9e 100644 --- a/src/test/run-pass/issues/issue-29927.rs +++ b/src/test/run-pass/issues/issue-29927.rs @@ -10,7 +10,6 @@ // run-pass #![allow(dead_code)] -#![feature(min_const_fn)] struct A { field: usize, } diff --git a/src/test/run-pass/issues/issue-33537.rs b/src/test/run-pass/issues/issue-33537.rs index 3ef1595b95887..023b0e800f59f 100644 --- a/src/test/run-pass/issues/issue-33537.rs +++ b/src/test/run-pass/issues/issue-33537.rs @@ -9,7 +9,6 @@ // except according to those terms. // run-pass -#![feature(min_const_fn)] const fn foo() -> *const i8 { b"foo" as *const _ as *const i8 diff --git a/src/test/run-pass/issues/issue-37991.rs b/src/test/run-pass/issues/issue-37991.rs index 578c22fe23221..e63ba3acce334 100644 --- a/src/test/run-pass/issues/issue-37991.rs +++ b/src/test/run-pass/issues/issue-37991.rs @@ -9,7 +9,6 @@ // except according to those terms. // run-pass -#![feature(min_const_fn)] const fn foo() -> i64 { 3 diff --git a/src/test/run-pass/issues/issue29927-1.rs b/src/test/run-pass/issues/issue29927-1.rs index e33329092067e..2104f5ef08a7f 100644 --- a/src/test/run-pass/issues/issue29927-1.rs +++ b/src/test/run-pass/issues/issue29927-1.rs @@ -10,7 +10,6 @@ // run-pass #![allow(dead_code)] -#![feature(min_const_fn)] const fn f() -> usize { 5 } diff --git a/src/test/rustdoc/auxiliary/issue-27362.rs b/src/test/rustdoc/auxiliary/issue-27362.rs index 0c1eedc86ccfd..454f8cb4a510f 100644 --- a/src/test/rustdoc/auxiliary/issue-27362.rs +++ b/src/test/rustdoc/auxiliary/issue-27362.rs @@ -10,8 +10,6 @@ // compile-flags: -Cmetadata=aux -#![feature(min_const_fn)] - pub const fn foo() {} pub const unsafe fn bar() {} diff --git a/src/test/rustdoc/const-fn.rs b/src/test/rustdoc/const-fn.rs index dc7a2799b46a9..cb4a5909120c4 100644 --- a/src/test/rustdoc/const-fn.rs +++ b/src/test/rustdoc/const-fn.rs @@ -8,7 +8,6 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -#![feature(min_const_fn)] #![crate_name = "foo"] // @has foo/fn.bar.html diff --git a/src/test/rustdoc/const.rs b/src/test/rustdoc/const.rs index 49694e3ae08d1..074a211cd0899 100644 --- a/src/test/rustdoc/const.rs +++ b/src/test/rustdoc/const.rs @@ -10,8 +10,6 @@ #![crate_type="lib"] -#![feature(min_const_fn)] - pub struct Foo; impl Foo { diff --git a/src/test/ui/borrowck/move-in-static-initializer-issue-38520.ast.stderr b/src/test/ui/borrowck/move-in-static-initializer-issue-38520.ast.stderr index 4c399ab6014df..0c0f539df6a3b 100644 --- a/src/test/ui/borrowck/move-in-static-initializer-issue-38520.ast.stderr +++ b/src/test/ui/borrowck/move-in-static-initializer-issue-38520.ast.stderr @@ -1,11 +1,11 @@ error[E0507]: cannot move out of borrowed content - --> $DIR/move-in-static-initializer-issue-38520.rs:27:23 + --> $DIR/move-in-static-initializer-issue-38520.rs:25:23 | LL | static Y: usize = get(*&X); //[ast]~ ERROR E0507 | ^^^ cannot move out of borrowed content error[E0507]: cannot move out of borrowed content - --> $DIR/move-in-static-initializer-issue-38520.rs:29:22 + --> $DIR/move-in-static-initializer-issue-38520.rs:27:22 | LL | const Z: usize = get(*&X); //[ast]~ ERROR E0507 | ^^^ cannot move out of borrowed content diff --git a/src/test/ui/borrowck/move-in-static-initializer-issue-38520.mir.stderr b/src/test/ui/borrowck/move-in-static-initializer-issue-38520.mir.stderr index 4c399ab6014df..0c0f539df6a3b 100644 --- a/src/test/ui/borrowck/move-in-static-initializer-issue-38520.mir.stderr +++ b/src/test/ui/borrowck/move-in-static-initializer-issue-38520.mir.stderr @@ -1,11 +1,11 @@ error[E0507]: cannot move out of borrowed content - --> $DIR/move-in-static-initializer-issue-38520.rs:27:23 + --> $DIR/move-in-static-initializer-issue-38520.rs:25:23 | LL | static Y: usize = get(*&X); //[ast]~ ERROR E0507 | ^^^ cannot move out of borrowed content error[E0507]: cannot move out of borrowed content - --> $DIR/move-in-static-initializer-issue-38520.rs:29:22 + --> $DIR/move-in-static-initializer-issue-38520.rs:27:22 | LL | const Z: usize = get(*&X); //[ast]~ ERROR E0507 | ^^^ cannot move out of borrowed content diff --git a/src/test/ui/borrowck/move-in-static-initializer-issue-38520.rs b/src/test/ui/borrowck/move-in-static-initializer-issue-38520.rs index d71c8462587d0..34e76c92a658d 100644 --- a/src/test/ui/borrowck/move-in-static-initializer-issue-38520.rs +++ b/src/test/ui/borrowck/move-in-static-initializer-issue-38520.rs @@ -15,8 +15,6 @@ // permitted as `Foo` is not copy (even in a static/const // initializer). -#![feature(min_const_fn)] - struct Foo(usize); const fn get(x: Foo) -> usize { diff --git a/src/test/ui/consts/auxiliary/const_fn_lib.rs b/src/test/ui/consts/auxiliary/const_fn_lib.rs index 499227e71a74c..5063c8d1d1f54 100644 --- a/src/test/ui/consts/auxiliary/const_fn_lib.rs +++ b/src/test/ui/consts/auxiliary/const_fn_lib.rs @@ -11,6 +11,5 @@ // Crate that exports a const fn. Used for testing cross-crate. #![crate_type="rlib"] -#![feature(min_const_fn)] pub const fn foo() -> usize { 22 } //~ ERROR const fn is unstable diff --git a/src/test/ui/consts/const-eval/issue-43197.rs b/src/test/ui/consts/const-eval/issue-43197.rs index 200f423f6e39b..6e60fd834d4c3 100644 --- a/src/test/ui/consts/const-eval/issue-43197.rs +++ b/src/test/ui/consts/const-eval/issue-43197.rs @@ -10,8 +10,6 @@ #![warn(const_err)] -#![feature(min_const_fn)] - const fn foo(x: u32) -> u32 { x } diff --git a/src/test/ui/consts/const-eval/issue-43197.stderr b/src/test/ui/consts/const-eval/issue-43197.stderr index 66921dcd7c508..6229790f8adc2 100644 --- a/src/test/ui/consts/const-eval/issue-43197.stderr +++ b/src/test/ui/consts/const-eval/issue-43197.stderr @@ -1,5 +1,5 @@ warning: this constant cannot be used - --> $DIR/issue-43197.rs:20:5 + --> $DIR/issue-43197.rs:18:5 | LL | const X: u32 = 0-1; | ^^^^^^^^^^^^^^^---^ @@ -13,7 +13,7 @@ LL | #![warn(const_err)] | ^^^^^^^^^ warning: this constant cannot be used - --> $DIR/issue-43197.rs:22:5 + --> $DIR/issue-43197.rs:20:5 | LL | const Y: u32 = foo(0-1); | ^^^^^^^^^^^^^^^^^^^---^^ @@ -21,7 +21,7 @@ LL | const Y: u32 = foo(0-1); | attempt to subtract with overflow error[E0080]: referenced constant has errors - --> $DIR/issue-43197.rs:24:26 + --> $DIR/issue-43197.rs:22:26 | LL | const Y: u32 = foo(0-1); | --- attempt to subtract with overflow @@ -30,13 +30,13 @@ LL | println!("{} {}", X, Y); | ^ error[E0080]: erroneous constant used - --> $DIR/issue-43197.rs:24:26 + --> $DIR/issue-43197.rs:22:26 | LL | println!("{} {}", X, Y); | ^ referenced constant has errors error[E0080]: referenced constant has errors - --> $DIR/issue-43197.rs:24:23 + --> $DIR/issue-43197.rs:22:23 | LL | const X: u32 = 0-1; | --- attempt to subtract with overflow @@ -45,7 +45,7 @@ LL | println!("{} {}", X, Y); | ^ error[E0080]: erroneous constant used - --> $DIR/issue-43197.rs:24:23 + --> $DIR/issue-43197.rs:22:23 | LL | println!("{} {}", X, Y); | ^ referenced constant has errors diff --git a/src/test/ui/consts/const-eval/issue-47971.rs b/src/test/ui/consts/const-eval/issue-47971.rs index 2bc860e3ef94f..dc449c663c3d1 100644 --- a/src/test/ui/consts/const-eval/issue-47971.rs +++ b/src/test/ui/consts/const-eval/issue-47971.rs @@ -10,8 +10,6 @@ // compile-pass -#![feature(min_const_fn)] - struct S(pub &'static u32, pub u32); const fn g(ss: &S) -> &u32 { &ss.1 } diff --git a/src/test/ui/consts/const-pattern-not-const-evaluable.rs b/src/test/ui/consts/const-pattern-not-const-evaluable.rs index 4f02b1eef3a0f..07880b0300129 100644 --- a/src/test/ui/consts/const-pattern-not-const-evaluable.rs +++ b/src/test/ui/consts/const-pattern-not-const-evaluable.rs @@ -10,8 +10,6 @@ // compile-pass -#![feature(min_const_fn)] - #[derive(PartialEq, Eq)] enum Cake { BlackForest, diff --git a/src/test/ui/consts/min_const_fn/cmp_fn_pointers.rs b/src/test/ui/consts/min_const_fn/cmp_fn_pointers.rs new file mode 100644 index 0000000000000..d8abd97655805 --- /dev/null +++ b/src/test/ui/consts/min_const_fn/cmp_fn_pointers.rs @@ -0,0 +1,5 @@ +const fn cmp(x: fn(), y: fn()) -> bool { //~ ERROR function pointers in const fn are unstable + x == y +} + +fn main() {} diff --git a/src/test/ui/consts/min_const_fn/cmp_fn_pointers.stderr b/src/test/ui/consts/min_const_fn/cmp_fn_pointers.stderr new file mode 100644 index 0000000000000..a050c10e02cf9 --- /dev/null +++ b/src/test/ui/consts/min_const_fn/cmp_fn_pointers.stderr @@ -0,0 +1,8 @@ +error: function pointers in const fn are unstable + --> $DIR/cmp_fn_pointers.rs:1:14 + | +LL | const fn cmp(x: fn(), y: fn()) -> bool { //~ ERROR function pointers in const fn are unstable + | ^ + +error: aborting due to previous error + diff --git a/src/test/ui/consts/min_const_fn/min_const_fn.nll.stderr b/src/test/ui/consts/min_const_fn/min_const_fn.nll.stderr index 715884d517512..a03c5168367db 100644 --- a/src/test/ui/consts/min_const_fn/min_const_fn.nll.stderr +++ b/src/test/ui/consts/min_const_fn/min_const_fn.nll.stderr @@ -1,197 +1,197 @@ error[E0493]: destructors cannot be evaluated at compile-time - --> $DIR/min_const_fn.rs:49:25 + --> $DIR/min_const_fn.rs:47:25 | LL | const fn into_inner(self) -> T { self.0 } //~ destructors cannot be evaluated | ^^^^ constant functions cannot evaluate destructors error: mutable references in const fn are unstable - --> $DIR/min_const_fn.rs:51:36 + --> $DIR/min_const_fn.rs:49:36 | LL | const fn get_mut(&mut self) -> &mut T { &mut self.0 } | ^^^^^^ error[E0493]: destructors cannot be evaluated at compile-time - --> $DIR/min_const_fn.rs:56:28 + --> $DIR/min_const_fn.rs:54:28 | LL | const fn into_inner_lt(self) -> T { self.0 } //~ destructors cannot be evaluated | ^^^^ constant functions cannot evaluate destructors error: mutable references in const fn are unstable - --> $DIR/min_const_fn.rs:58:42 + --> $DIR/min_const_fn.rs:56:42 | LL | const fn get_mut_lt(&'a mut self) -> &mut T { &mut self.0 } | ^^^^^^ error[E0493]: destructors cannot be evaluated at compile-time - --> $DIR/min_const_fn.rs:63:27 + --> $DIR/min_const_fn.rs:61:27 | LL | const fn into_inner_s(self) -> T { self.0 } //~ ERROR destructors | ^^^^ constant functions cannot evaluate destructors error: mutable references in const fn are unstable - --> $DIR/min_const_fn.rs:65:38 + --> $DIR/min_const_fn.rs:63:38 | LL | const fn get_mut_s(&mut self) -> &mut T { &mut self.0 } | ^^^^^^ error: mutable references in const fn are unstable - --> $DIR/min_const_fn.rs:70:39 + --> $DIR/min_const_fn.rs:68:39 | LL | const fn get_mut_sq(&mut self) -> &mut T { &mut self.0 } | ^^^^^^ error: trait bounds other than `Sized` on const fn parameters are unstable - --> $DIR/min_const_fn.rs:88:16 + --> $DIR/min_const_fn.rs:86:16 | LL | const fn foo11(t: T) -> T { t } | ^ error: trait bounds other than `Sized` on const fn parameters are unstable - --> $DIR/min_const_fn.rs:90:18 + --> $DIR/min_const_fn.rs:88:18 | LL | const fn foo11_2(t: T) -> T { t } | ^ error: only int, `bool` and `char` operations are stable in const fn - --> $DIR/min_const_fn.rs:92:33 + --> $DIR/min_const_fn.rs:90:33 | LL | const fn foo19(f: f32) -> f32 { f * 2.0 } | ^^^^^^^ error: only int, `bool` and `char` operations are stable in const fn - --> $DIR/min_const_fn.rs:94:35 + --> $DIR/min_const_fn.rs:92:35 | LL | const fn foo19_2(f: f32) -> f32 { 2.0 - f } | ^^^^^^^ error: only int and `bool` operations are stable in const fn - --> $DIR/min_const_fn.rs:96:35 + --> $DIR/min_const_fn.rs:94:35 | LL | const fn foo19_3(f: f32) -> f32 { -f } | ^^ error: only int, `bool` and `char` operations are stable in const fn - --> $DIR/min_const_fn.rs:98:43 + --> $DIR/min_const_fn.rs:96:43 | LL | const fn foo19_4(f: f32, g: f32) -> f32 { f / g } | ^^^^^ error: cannot access `static` items in const fn - --> $DIR/min_const_fn.rs:102:27 + --> $DIR/min_const_fn.rs:100:27 | LL | const fn foo25() -> u32 { BAR } //~ ERROR cannot access `static` items in const fn | ^^^ error: cannot access `static` items in const fn - --> $DIR/min_const_fn.rs:103:36 + --> $DIR/min_const_fn.rs:101:36 | LL | const fn foo26() -> &'static u32 { &BAR } //~ ERROR cannot access `static` items | ^^^^ error: casting pointers to ints is unstable in const fn - --> $DIR/min_const_fn.rs:104:42 + --> $DIR/min_const_fn.rs:102:42 | LL | const fn foo30(x: *const u32) -> usize { x as usize } | ^^^^^^^^^^ error: casting pointers to ints is unstable in const fn - --> $DIR/min_const_fn.rs:106:42 + --> $DIR/min_const_fn.rs:104:42 | LL | const fn foo30_2(x: *mut u32) -> usize { x as usize } | ^^^^^^^^^^ error: `if`, `match`, `&&` and `||` are not stable in const fn - --> $DIR/min_const_fn.rs:108:38 + --> $DIR/min_const_fn.rs:106:38 | LL | const fn foo30_4(b: bool) -> usize { if b { 1 } else { 42 } } | ^^^^^^^^^^^^^^^^^^^^^^ error: `if`, `match`, `&&` and `||` are not stable in const fn - --> $DIR/min_const_fn.rs:110:29 + --> $DIR/min_const_fn.rs:108:29 | LL | const fn foo30_5(b: bool) { while b { } } //~ ERROR not stable in const fn | ^^^^^^^^^^^ error: local variables in const fn are unstable - --> $DIR/min_const_fn.rs:111:34 + --> $DIR/min_const_fn.rs:109:34 | LL | const fn foo30_6() -> bool { let x = true; x } //~ ERROR local variables in const fn are unstable | ^ error: `if`, `match`, `&&` and `||` are not stable in const fn - --> $DIR/min_const_fn.rs:112:44 + --> $DIR/min_const_fn.rs:110:44 | LL | const fn foo36(a: bool, b: bool) -> bool { a && b } | ^^^^^^ error: `if`, `match`, `&&` and `||` are not stable in const fn - --> $DIR/min_const_fn.rs:114:44 + --> $DIR/min_const_fn.rs:112:44 | LL | const fn foo37(a: bool, b: bool) -> bool { a || b } | ^^^^^^ error: mutable references in const fn are unstable - --> $DIR/min_const_fn.rs:116:14 + --> $DIR/min_const_fn.rs:114:14 | LL | const fn inc(x: &mut i32) { *x += 1 } | ^ error: trait bounds other than `Sized` on const fn parameters are unstable - --> $DIR/min_const_fn.rs:121:6 + --> $DIR/min_const_fn.rs:119:6 | LL | impl Foo { | ^ error: trait bounds other than `Sized` on const fn parameters are unstable - --> $DIR/min_const_fn.rs:126:6 + --> $DIR/min_const_fn.rs:124:6 | LL | impl Foo { | ^ error: trait bounds other than `Sized` on const fn parameters are unstable - --> $DIR/min_const_fn.rs:131:6 + --> $DIR/min_const_fn.rs:129:6 | LL | impl Foo { | ^ error: `impl Trait` in const fn is unstable - --> $DIR/min_const_fn.rs:137:24 + --> $DIR/min_const_fn.rs:135:24 | LL | const fn no_rpit2() -> AlanTuring { AlanTuring(0) } | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ error: trait bounds other than `Sized` on const fn parameters are unstable - --> $DIR/min_const_fn.rs:139:34 + --> $DIR/min_const_fn.rs:137:34 | LL | const fn no_apit2(_x: AlanTuring) {} | ^^^^^^^^^^^^^^^^^^^^ error: trait bounds other than `Sized` on const fn parameters are unstable - --> $DIR/min_const_fn.rs:141:22 + --> $DIR/min_const_fn.rs:139:22 | LL | const fn no_apit(_x: impl std::fmt::Debug) {} //~ ERROR trait bounds other than `Sized` | ^^^^^^^^^^^^^^^^^^^^ error: `impl Trait` in const fn is unstable - --> $DIR/min_const_fn.rs:142:23 + --> $DIR/min_const_fn.rs:140:23 | LL | const fn no_rpit() -> impl std::fmt::Debug {} //~ ERROR `impl Trait` in const fn is unstable | ^^^^^^^^^^^^^^^^^^^^ error: trait bounds other than `Sized` on const fn parameters are unstable - --> $DIR/min_const_fn.rs:143:23 + --> $DIR/min_const_fn.rs:141:23 | LL | const fn no_dyn_trait(_x: &dyn std::fmt::Debug) {} //~ ERROR trait bounds other than `Sized` | ^^ error: trait bounds other than `Sized` on const fn parameters are unstable - --> $DIR/min_const_fn.rs:144:32 + --> $DIR/min_const_fn.rs:142:32 | LL | const fn no_dyn_trait_ret() -> &'static dyn std::fmt::Debug { &() } | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ error[E0716]: temporary value dropped while borrowed - --> $DIR/min_const_fn.rs:144:64 + --> $DIR/min_const_fn.rs:142:64 | LL | const fn no_dyn_trait_ret() -> &'static dyn std::fmt::Debug { &() } | ^^ - temporary value is freed at the end of this statement @@ -201,19 +201,19 @@ LL | const fn no_dyn_trait_ret() -> &'static dyn std::fmt::Debug { &() } = note: borrowed value must be valid for the static lifetime... error: trait bounds other than `Sized` on const fn parameters are unstable - --> $DIR/min_const_fn.rs:149:41 + --> $DIR/min_const_fn.rs:147:41 | LL | const fn really_no_traits_i_mean_it() { (&() as &std::fmt::Debug, ()).1 } | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ error: function pointers in const fn are unstable - --> $DIR/min_const_fn.rs:152:21 + --> $DIR/min_const_fn.rs:150:21 | LL | const fn no_fn_ptrs(_x: fn()) {} | ^^ error: function pointers in const fn are unstable - --> $DIR/min_const_fn.rs:154:27 + --> $DIR/min_const_fn.rs:152:27 | LL | const fn no_fn_ptrs2() -> fn() { fn foo() {} foo } | ^^^^ diff --git a/src/test/ui/consts/min_const_fn/min_const_fn.rs b/src/test/ui/consts/min_const_fn/min_const_fn.rs index b861e312d4245..0dba3a7de5378 100644 --- a/src/test/ui/consts/min_const_fn/min_const_fn.rs +++ b/src/test/ui/consts/min_const_fn/min_const_fn.rs @@ -8,8 +8,6 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -#![feature(min_const_fn)] - // ok const fn foo1() {} const fn foo2(x: i32) -> i32 { x } diff --git a/src/test/ui/consts/min_const_fn/min_const_fn.stderr b/src/test/ui/consts/min_const_fn/min_const_fn.stderr index 6779b8a761461..bcb9be6e5485e 100644 --- a/src/test/ui/consts/min_const_fn/min_const_fn.stderr +++ b/src/test/ui/consts/min_const_fn/min_const_fn.stderr @@ -1,209 +1,209 @@ error[E0493]: destructors cannot be evaluated at compile-time - --> $DIR/min_const_fn.rs:49:25 + --> $DIR/min_const_fn.rs:47:25 | LL | const fn into_inner(self) -> T { self.0 } //~ destructors cannot be evaluated | ^^^^ constant functions cannot evaluate destructors error: mutable references in const fn are unstable - --> $DIR/min_const_fn.rs:51:36 + --> $DIR/min_const_fn.rs:49:36 | LL | const fn get_mut(&mut self) -> &mut T { &mut self.0 } | ^^^^^^ error[E0493]: destructors cannot be evaluated at compile-time - --> $DIR/min_const_fn.rs:56:28 + --> $DIR/min_const_fn.rs:54:28 | LL | const fn into_inner_lt(self) -> T { self.0 } //~ destructors cannot be evaluated | ^^^^ constant functions cannot evaluate destructors error: mutable references in const fn are unstable - --> $DIR/min_const_fn.rs:58:42 + --> $DIR/min_const_fn.rs:56:42 | LL | const fn get_mut_lt(&'a mut self) -> &mut T { &mut self.0 } | ^^^^^^ error[E0493]: destructors cannot be evaluated at compile-time - --> $DIR/min_const_fn.rs:63:27 + --> $DIR/min_const_fn.rs:61:27 | LL | const fn into_inner_s(self) -> T { self.0 } //~ ERROR destructors | ^^^^ constant functions cannot evaluate destructors error: mutable references in const fn are unstable - --> $DIR/min_const_fn.rs:65:38 + --> $DIR/min_const_fn.rs:63:38 | LL | const fn get_mut_s(&mut self) -> &mut T { &mut self.0 } | ^^^^^^ error: mutable references in const fn are unstable - --> $DIR/min_const_fn.rs:70:39 + --> $DIR/min_const_fn.rs:68:39 | LL | const fn get_mut_sq(&mut self) -> &mut T { &mut self.0 } | ^^^^^^ error: trait bounds other than `Sized` on const fn parameters are unstable - --> $DIR/min_const_fn.rs:88:16 + --> $DIR/min_const_fn.rs:86:16 | LL | const fn foo11(t: T) -> T { t } | ^ error: trait bounds other than `Sized` on const fn parameters are unstable - --> $DIR/min_const_fn.rs:90:18 + --> $DIR/min_const_fn.rs:88:18 | LL | const fn foo11_2(t: T) -> T { t } | ^ error: only int, `bool` and `char` operations are stable in const fn - --> $DIR/min_const_fn.rs:92:33 + --> $DIR/min_const_fn.rs:90:33 | LL | const fn foo19(f: f32) -> f32 { f * 2.0 } | ^^^^^^^ error: only int, `bool` and `char` operations are stable in const fn - --> $DIR/min_const_fn.rs:94:35 + --> $DIR/min_const_fn.rs:92:35 | LL | const fn foo19_2(f: f32) -> f32 { 2.0 - f } | ^^^^^^^ error: only int and `bool` operations are stable in const fn - --> $DIR/min_const_fn.rs:96:35 + --> $DIR/min_const_fn.rs:94:35 | LL | const fn foo19_3(f: f32) -> f32 { -f } | ^^ error: only int, `bool` and `char` operations are stable in const fn - --> $DIR/min_const_fn.rs:98:43 + --> $DIR/min_const_fn.rs:96:43 | LL | const fn foo19_4(f: f32, g: f32) -> f32 { f / g } | ^^^^^ error: cannot access `static` items in const fn - --> $DIR/min_const_fn.rs:102:27 + --> $DIR/min_const_fn.rs:100:27 | LL | const fn foo25() -> u32 { BAR } //~ ERROR cannot access `static` items in const fn | ^^^ error: cannot access `static` items in const fn - --> $DIR/min_const_fn.rs:103:36 + --> $DIR/min_const_fn.rs:101:36 | LL | const fn foo26() -> &'static u32 { &BAR } //~ ERROR cannot access `static` items | ^^^^ error: casting pointers to ints is unstable in const fn - --> $DIR/min_const_fn.rs:104:42 + --> $DIR/min_const_fn.rs:102:42 | LL | const fn foo30(x: *const u32) -> usize { x as usize } | ^^^^^^^^^^ error: casting pointers to ints is unstable in const fn - --> $DIR/min_const_fn.rs:106:42 + --> $DIR/min_const_fn.rs:104:42 | LL | const fn foo30_2(x: *mut u32) -> usize { x as usize } | ^^^^^^^^^^ error: `if`, `match`, `&&` and `||` are not stable in const fn - --> $DIR/min_const_fn.rs:108:38 + --> $DIR/min_const_fn.rs:106:38 | LL | const fn foo30_4(b: bool) -> usize { if b { 1 } else { 42 } } | ^^^^^^^^^^^^^^^^^^^^^^ error: `if`, `match`, `&&` and `||` are not stable in const fn - --> $DIR/min_const_fn.rs:110:29 + --> $DIR/min_const_fn.rs:108:29 | LL | const fn foo30_5(b: bool) { while b { } } //~ ERROR not stable in const fn | ^^^^^^^^^^^ error: local variables in const fn are unstable - --> $DIR/min_const_fn.rs:111:34 + --> $DIR/min_const_fn.rs:109:34 | LL | const fn foo30_6() -> bool { let x = true; x } //~ ERROR local variables in const fn are unstable | ^ error: `if`, `match`, `&&` and `||` are not stable in const fn - --> $DIR/min_const_fn.rs:112:44 + --> $DIR/min_const_fn.rs:110:44 | LL | const fn foo36(a: bool, b: bool) -> bool { a && b } | ^^^^^^ error: `if`, `match`, `&&` and `||` are not stable in const fn - --> $DIR/min_const_fn.rs:114:44 + --> $DIR/min_const_fn.rs:112:44 | LL | const fn foo37(a: bool, b: bool) -> bool { a || b } | ^^^^^^ error: mutable references in const fn are unstable - --> $DIR/min_const_fn.rs:116:14 + --> $DIR/min_const_fn.rs:114:14 | LL | const fn inc(x: &mut i32) { *x += 1 } | ^ error: trait bounds other than `Sized` on const fn parameters are unstable - --> $DIR/min_const_fn.rs:121:6 + --> $DIR/min_const_fn.rs:119:6 | LL | impl Foo { | ^ error: trait bounds other than `Sized` on const fn parameters are unstable - --> $DIR/min_const_fn.rs:126:6 + --> $DIR/min_const_fn.rs:124:6 | LL | impl Foo { | ^ error: trait bounds other than `Sized` on const fn parameters are unstable - --> $DIR/min_const_fn.rs:131:6 + --> $DIR/min_const_fn.rs:129:6 | LL | impl Foo { | ^ error: `impl Trait` in const fn is unstable - --> $DIR/min_const_fn.rs:137:24 + --> $DIR/min_const_fn.rs:135:24 | LL | const fn no_rpit2() -> AlanTuring { AlanTuring(0) } | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ error: trait bounds other than `Sized` on const fn parameters are unstable - --> $DIR/min_const_fn.rs:139:34 + --> $DIR/min_const_fn.rs:137:34 | LL | const fn no_apit2(_x: AlanTuring) {} | ^^^^^^^^^^^^^^^^^^^^ error: trait bounds other than `Sized` on const fn parameters are unstable - --> $DIR/min_const_fn.rs:141:22 + --> $DIR/min_const_fn.rs:139:22 | LL | const fn no_apit(_x: impl std::fmt::Debug) {} //~ ERROR trait bounds other than `Sized` | ^^^^^^^^^^^^^^^^^^^^ error: `impl Trait` in const fn is unstable - --> $DIR/min_const_fn.rs:142:23 + --> $DIR/min_const_fn.rs:140:23 | LL | const fn no_rpit() -> impl std::fmt::Debug {} //~ ERROR `impl Trait` in const fn is unstable | ^^^^^^^^^^^^^^^^^^^^ error: trait bounds other than `Sized` on const fn parameters are unstable - --> $DIR/min_const_fn.rs:143:23 + --> $DIR/min_const_fn.rs:141:23 | LL | const fn no_dyn_trait(_x: &dyn std::fmt::Debug) {} //~ ERROR trait bounds other than `Sized` | ^^ error: trait bounds other than `Sized` on const fn parameters are unstable - --> $DIR/min_const_fn.rs:144:32 + --> $DIR/min_const_fn.rs:142:32 | LL | const fn no_dyn_trait_ret() -> &'static dyn std::fmt::Debug { &() } | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ error: trait bounds other than `Sized` on const fn parameters are unstable - --> $DIR/min_const_fn.rs:149:41 + --> $DIR/min_const_fn.rs:147:41 | LL | const fn really_no_traits_i_mean_it() { (&() as &std::fmt::Debug, ()).1 } | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ error: function pointers in const fn are unstable - --> $DIR/min_const_fn.rs:152:21 + --> $DIR/min_const_fn.rs:150:21 | LL | const fn no_fn_ptrs(_x: fn()) {} | ^^ error: function pointers in const fn are unstable - --> $DIR/min_const_fn.rs:154:27 + --> $DIR/min_const_fn.rs:152:27 | LL | const fn no_fn_ptrs2() -> fn() { fn foo() {} foo } | ^^^^ diff --git a/src/test/ui/consts/min_const_fn/min_const_fn_dyn.nll.stderr b/src/test/ui/consts/min_const_fn/min_const_fn_dyn.nll.stderr index 9fc38e9e1f36e..5d071a0fe2405 100644 --- a/src/test/ui/consts/min_const_fn/min_const_fn_dyn.nll.stderr +++ b/src/test/ui/consts/min_const_fn/min_const_fn_dyn.nll.stderr @@ -1,17 +1,17 @@ error: trait bounds other than `Sized` on const fn parameters are unstable - --> $DIR/min_const_fn_dyn.rs:21:5 + --> $DIR/min_const_fn_dyn.rs:19:5 | LL | x.0.field; | ^^^^^^^^^ error: trait bounds other than `Sized` on const fn parameters are unstable - --> $DIR/min_const_fn_dyn.rs:24:66 + --> $DIR/min_const_fn_dyn.rs:22:66 | LL | const fn no_inner_dyn_trait_ret() -> Hide { Hide(HasDyn { field: &0 }) } | ^^ error[E0716]: temporary value dropped while borrowed - --> $DIR/min_const_fn_dyn.rs:24:67 + --> $DIR/min_const_fn_dyn.rs:22:67 | LL | const fn no_inner_dyn_trait_ret() -> Hide { Hide(HasDyn { field: &0 }) } | ^ - temporary value is freed at the end of this statement diff --git a/src/test/ui/consts/min_const_fn/min_const_fn_dyn.rs b/src/test/ui/consts/min_const_fn/min_const_fn_dyn.rs index 38e2825643009..e02474734d9ae 100644 --- a/src/test/ui/consts/min_const_fn/min_const_fn_dyn.rs +++ b/src/test/ui/consts/min_const_fn/min_const_fn_dyn.rs @@ -8,8 +8,6 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -#![feature(min_const_fn)] - struct HasDyn { field: &'static dyn std::fmt::Debug, } diff --git a/src/test/ui/consts/min_const_fn/min_const_fn_dyn.stderr b/src/test/ui/consts/min_const_fn/min_const_fn_dyn.stderr index 3a1055f2ede15..7bf9bdb6fa90a 100644 --- a/src/test/ui/consts/min_const_fn/min_const_fn_dyn.stderr +++ b/src/test/ui/consts/min_const_fn/min_const_fn_dyn.stderr @@ -1,11 +1,11 @@ error: trait bounds other than `Sized` on const fn parameters are unstable - --> $DIR/min_const_fn_dyn.rs:21:5 + --> $DIR/min_const_fn_dyn.rs:19:5 | LL | x.0.field; | ^^^^^^^^^ error: trait bounds other than `Sized` on const fn parameters are unstable - --> $DIR/min_const_fn_dyn.rs:24:66 + --> $DIR/min_const_fn_dyn.rs:22:66 | LL | const fn no_inner_dyn_trait_ret() -> Hide { Hide(HasDyn { field: &0 }) } | ^^ diff --git a/src/test/ui/consts/min_const_fn/min_const_fn_fn_ptr.rs b/src/test/ui/consts/min_const_fn/min_const_fn_fn_ptr.rs index 100d275f97e73..64f212bc23792 100644 --- a/src/test/ui/consts/min_const_fn/min_const_fn_fn_ptr.rs +++ b/src/test/ui/consts/min_const_fn/min_const_fn_fn_ptr.rs @@ -8,8 +8,6 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -#![feature(min_const_fn)] - struct HasPtr { field: fn(), } diff --git a/src/test/ui/consts/min_const_fn/min_const_fn_fn_ptr.stderr b/src/test/ui/consts/min_const_fn/min_const_fn_fn_ptr.stderr index c10af3d2c8e71..54ffe66581de1 100644 --- a/src/test/ui/consts/min_const_fn/min_const_fn_fn_ptr.stderr +++ b/src/test/ui/consts/min_const_fn/min_const_fn_fn_ptr.stderr @@ -1,11 +1,11 @@ error: function pointers in const fn are unstable - --> $DIR/min_const_fn_fn_ptr.rs:23:5 + --> $DIR/min_const_fn_fn_ptr.rs:21:5 | LL | x.0.field; | ^^^^^^^^^ error: function pointers in const fn are unstable - --> $DIR/min_const_fn_fn_ptr.rs:26:59 + --> $DIR/min_const_fn_fn_ptr.rs:24:59 | LL | const fn no_inner_dyn_trait_ret() -> Hide { Hide(HasPtr { field }) } | ^^^^^ diff --git a/src/test/ui/consts/min_const_fn/min_const_fn_libstd.rs b/src/test/ui/consts/min_const_fn/min_const_fn_libstd.rs index fcc9545d97f15..1a3e6d01912a2 100644 --- a/src/test/ui/consts/min_const_fn/min_const_fn_libstd.rs +++ b/src/test/ui/consts/min_const_fn/min_const_fn_libstd.rs @@ -8,7 +8,7 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -#![feature(integer_atomics, min_const_fn)] +#![feature(integer_atomics)] // compile-pass diff --git a/src/test/ui/consts/min_const_fn/min_const_fn_unsafe.rs b/src/test/ui/consts/min_const_fn/min_const_fn_unsafe.rs index e7caa4c6cb426..67332c6d2cfb2 100644 --- a/src/test/ui/consts/min_const_fn/min_const_fn_unsafe.rs +++ b/src/test/ui/consts/min_const_fn/min_const_fn_unsafe.rs @@ -8,8 +8,6 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -#![feature(min_const_fn)] - // ok const unsafe fn foo4() -> i32 { 42 } const unsafe fn foo5() -> *const T { 0 as *const T } diff --git a/src/test/ui/consts/min_const_fn/min_const_fn_unsafe.stderr b/src/test/ui/consts/min_const_fn/min_const_fn_unsafe.stderr index 17cba8569c148..8cff0d491d8a4 100644 --- a/src/test/ui/consts/min_const_fn/min_const_fn_unsafe.stderr +++ b/src/test/ui/consts/min_const_fn/min_const_fn_unsafe.stderr @@ -1,5 +1,5 @@ error[E0658]: dereferencing raw pointers in constant functions is unstable (see issue #51911) - --> $DIR/min_const_fn_unsafe.rs:29:51 + --> $DIR/min_const_fn_unsafe.rs:27:51 | LL | const unsafe fn foo30_3(x: *mut usize) -> usize { *x } //~ ERROR not allowed in const fn | ^^ @@ -7,7 +7,7 @@ LL | const unsafe fn foo30_3(x: *mut usize) -> usize { *x } //~ ERROR not allowe = help: add #![feature(const_raw_ptr_deref)] to the crate attributes to enable error[E0658]: unions in const fn are unstable (see issue #51909) - --> $DIR/min_const_fn_unsafe.rs:36:5 + --> $DIR/min_const_fn_unsafe.rs:34:5 | LL | Foo { x: () }.y //~ ERROR not allowed in const fn | ^^^^^^^^^^^^^^^ @@ -15,7 +15,7 @@ LL | Foo { x: () }.y //~ ERROR not allowed in const fn = help: add #![feature(const_fn_union)] to the crate attributes to enable error: call to unsafe function is unsafe and unsafe operations are not allowed in const fn - --> $DIR/min_const_fn_unsafe.rs:21:14 + --> $DIR/min_const_fn_unsafe.rs:19:14 | LL | unsafe { foo4() } //~ ERROR unsafe operations are not allowed in const fn | ^^^^^^ call to unsafe function @@ -23,7 +23,7 @@ LL | unsafe { foo4() } //~ ERROR unsafe operations are not allowed in const = note: consult the function's documentation for information on how to avoid undefined behavior error: call to unsafe function is unsafe and unsafe operations are not allowed in const fn - --> $DIR/min_const_fn_unsafe.rs:24:14 + --> $DIR/min_const_fn_unsafe.rs:22:14 | LL | unsafe { foo5::() } //~ ERROR unsafe operations are not allowed in const fn | ^^^^^^^^^^^^^^^^ call to unsafe function @@ -31,7 +31,7 @@ LL | unsafe { foo5::() } //~ ERROR unsafe operations are not allowed = note: consult the function's documentation for information on how to avoid undefined behavior error: call to unsafe function is unsafe and unsafe operations are not allowed in const fn - --> $DIR/min_const_fn_unsafe.rs:27:14 + --> $DIR/min_const_fn_unsafe.rs:25:14 | LL | unsafe { foo6::>>() } //~ ERROR not allowed in const fn | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ call to unsafe function @@ -39,7 +39,7 @@ LL | unsafe { foo6::>>() } //~ ERROR not allowed in = note: consult the function's documentation for information on how to avoid undefined behavior error: dereference of raw pointer is unsafe and unsafe operations are not allowed in const fn - --> $DIR/min_const_fn_unsafe.rs:29:51 + --> $DIR/min_const_fn_unsafe.rs:27:51 | LL | const unsafe fn foo30_3(x: *mut usize) -> usize { *x } //~ ERROR not allowed in const fn | ^^ dereference of raw pointer @@ -47,7 +47,7 @@ LL | const unsafe fn foo30_3(x: *mut usize) -> usize { *x } //~ ERROR not allowe = note: raw pointers may be NULL, dangling or unaligned; they can violate aliasing rules and cause data races: all of these are undefined behavior error: access to union field is unsafe and unsafe operations are not allowed in const fn - --> $DIR/min_const_fn_unsafe.rs:36:5 + --> $DIR/min_const_fn_unsafe.rs:34:5 | LL | Foo { x: () }.y //~ ERROR not allowed in const fn | ^^^^^^^^^^^^^^^ access to union field diff --git a/src/test/ui/consts/min_const_fn/promotion.nll.stderr b/src/test/ui/consts/min_const_fn/promotion.nll.stderr index 999c26b535e9c..396b58dd219d8 100644 --- a/src/test/ui/consts/min_const_fn/promotion.nll.stderr +++ b/src/test/ui/consts/min_const_fn/promotion.nll.stderr @@ -1,5 +1,5 @@ error[E0716]: temporary value dropped while borrowed - --> $DIR/promotion.rs:13:27 + --> $DIR/promotion.rs:11:27 | LL | let x: &'static () = &foo1(); //~ ERROR does not live long enough | ^^^^^^ creates a temporary which is freed while still in use @@ -10,7 +10,7 @@ LL | } = note: borrowed value must be valid for the static lifetime... error[E0716]: temporary value dropped while borrowed - --> $DIR/promotion.rs:14:28 + --> $DIR/promotion.rs:12:28 | LL | let y: &'static i32 = &foo2(42); //~ ERROR does not live long enough | ^^^^^^^^ creates a temporary which is freed while still in use @@ -21,7 +21,7 @@ LL | } = note: borrowed value must be valid for the static lifetime... error[E0716]: temporary value dropped while borrowed - --> $DIR/promotion.rs:15:28 + --> $DIR/promotion.rs:13:28 | LL | let z: &'static i32 = &foo3(); //~ ERROR does not live long enough | ^^^^^^ creates a temporary which is freed while still in use @@ -32,7 +32,7 @@ LL | } = note: borrowed value must be valid for the static lifetime... error[E0716]: temporary value dropped while borrowed - --> $DIR/promotion.rs:16:34 + --> $DIR/promotion.rs:14:34 | LL | let a: &'static Cell = &foo4(); //~ ERROR does not live long enough | ^^^^^^ creates a temporary which is freed while still in use @@ -43,7 +43,7 @@ LL | } = note: borrowed value must be valid for the static lifetime... error[E0716]: temporary value dropped while borrowed - --> $DIR/promotion.rs:17:42 + --> $DIR/promotion.rs:15:42 | LL | let a: &'static Option> = &foo5(); //~ ERROR does not live long enough | ^^^^^^ creates a temporary which is freed while still in use @@ -54,7 +54,7 @@ LL | } = note: borrowed value must be valid for the static lifetime... error[E0716]: temporary value dropped while borrowed - --> $DIR/promotion.rs:18:42 + --> $DIR/promotion.rs:16:42 | LL | let a: &'static Option> = &foo6(); //~ ERROR does not live long enough | ^^^^^^ creates a temporary which is freed while still in use diff --git a/src/test/ui/consts/min_const_fn/promotion.rs b/src/test/ui/consts/min_const_fn/promotion.rs index cb3bfd74711ca..969bf40a93ba7 100644 --- a/src/test/ui/consts/min_const_fn/promotion.rs +++ b/src/test/ui/consts/min_const_fn/promotion.rs @@ -1,5 +1,3 @@ -#![feature(min_const_fn)] - use std::cell::Cell; const fn foo1() {} diff --git a/src/test/ui/consts/min_const_fn/promotion.stderr b/src/test/ui/consts/min_const_fn/promotion.stderr index 68d584658223f..7052f68c3ec61 100644 --- a/src/test/ui/consts/min_const_fn/promotion.stderr +++ b/src/test/ui/consts/min_const_fn/promotion.stderr @@ -1,5 +1,5 @@ error[E0597]: borrowed value does not live long enough - --> $DIR/promotion.rs:13:27 + --> $DIR/promotion.rs:11:27 | LL | let x: &'static () = &foo1(); //~ ERROR does not live long enough | ^^^^^^ temporary value does not live long enough @@ -10,7 +10,7 @@ LL | } = note: borrowed value must be valid for the static lifetime... error[E0597]: borrowed value does not live long enough - --> $DIR/promotion.rs:14:28 + --> $DIR/promotion.rs:12:28 | LL | let y: &'static i32 = &foo2(42); //~ ERROR does not live long enough | ^^^^^^^^ temporary value does not live long enough @@ -21,7 +21,7 @@ LL | } = note: borrowed value must be valid for the static lifetime... error[E0597]: borrowed value does not live long enough - --> $DIR/promotion.rs:15:28 + --> $DIR/promotion.rs:13:28 | LL | let z: &'static i32 = &foo3(); //~ ERROR does not live long enough | ^^^^^^ temporary value does not live long enough @@ -32,7 +32,7 @@ LL | } = note: borrowed value must be valid for the static lifetime... error[E0597]: borrowed value does not live long enough - --> $DIR/promotion.rs:16:34 + --> $DIR/promotion.rs:14:34 | LL | let a: &'static Cell = &foo4(); //~ ERROR does not live long enough | ^^^^^^ temporary value does not live long enough @@ -43,7 +43,7 @@ LL | } = note: borrowed value must be valid for the static lifetime... error[E0597]: borrowed value does not live long enough - --> $DIR/promotion.rs:17:42 + --> $DIR/promotion.rs:15:42 | LL | let a: &'static Option> = &foo5(); //~ ERROR does not live long enough | ^^^^^^ temporary value does not live long enough @@ -54,7 +54,7 @@ LL | } = note: borrowed value must be valid for the static lifetime... error[E0597]: borrowed value does not live long enough - --> $DIR/promotion.rs:18:42 + --> $DIR/promotion.rs:16:42 | LL | let a: &'static Option> = &foo6(); //~ ERROR does not live long enough | ^^^^^^ temporary value does not live long enough diff --git a/src/test/ui/feature-gates/feature-gate-const_fn.rs b/src/test/ui/feature-gates/feature-gate-const_fn.rs index f774658975b79..e52331fa92ac8 100644 --- a/src/test/ui/feature-gates/feature-gate-const_fn.rs +++ b/src/test/ui/feature-gates/feature-gate-const_fn.rs @@ -8,9 +8,7 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -// Test use of const fn without the `const_fn` feature gate. -// `min_const_fn` is checked in its own file -#![feature(min_const_fn)] +// Test use of advanced const fn without the `const_fn` feature gate. const fn foo() -> usize { 0 } // ok diff --git a/src/test/ui/feature-gates/feature-gate-const_fn.stderr b/src/test/ui/feature-gates/feature-gate-const_fn.stderr index 26c0c7877b4ec..150a702d105fa 100644 --- a/src/test/ui/feature-gates/feature-gate-const_fn.stderr +++ b/src/test/ui/feature-gates/feature-gate-const_fn.stderr @@ -1,23 +1,23 @@ error[E0379]: trait fns cannot be declared const - --> $DIR/feature-gate-const_fn.rs:18:5 + --> $DIR/feature-gate-const_fn.rs:16:5 | LL | const fn foo() -> u32; //~ ERROR const fn is unstable | ^^^^^ trait fns cannot be const error[E0379]: trait fns cannot be declared const - --> $DIR/feature-gate-const_fn.rs:20:5 + --> $DIR/feature-gate-const_fn.rs:18:5 | LL | const fn bar() -> u32 { 0 } //~ ERROR const fn is unstable | ^^^^^ trait fns cannot be const error[E0379]: trait fns cannot be declared const - --> $DIR/feature-gate-const_fn.rs:29:5 + --> $DIR/feature-gate-const_fn.rs:27:5 | LL | const fn foo() -> u32 { 0 } //~ ERROR trait fns cannot be declared const | ^^^^^ trait fns cannot be const error[E0658]: const fn is unstable (see issue #24111) - --> $DIR/feature-gate-const_fn.rs:18:5 + --> $DIR/feature-gate-const_fn.rs:16:5 | LL | const fn foo() -> u32; //~ ERROR const fn is unstable | ^^^^^^^^^^^^^^^^^^^^^^ @@ -25,7 +25,7 @@ LL | const fn foo() -> u32; //~ ERROR const fn is unstable = help: add #![feature(const_fn)] to the crate attributes to enable error[E0658]: const fn is unstable (see issue #24111) - --> $DIR/feature-gate-const_fn.rs:20:5 + --> $DIR/feature-gate-const_fn.rs:18:5 | LL | const fn bar() -> u32 { 0 } //~ ERROR const fn is unstable | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ diff --git a/src/test/ui/feature-gates/feature-gate-min_const_fn.rs b/src/test/ui/feature-gates/feature-gate-min_const_fn.rs index e052ba9c8b43a..40cb75316efa1 100644 --- a/src/test/ui/feature-gates/feature-gate-min_const_fn.rs +++ b/src/test/ui/feature-gates/feature-gate-min_const_fn.rs @@ -10,7 +10,7 @@ // Test use of min_const_fn without feature gate. -const fn foo() -> usize { 0 } //~ ERROR const fn is unstable +const fn foo() -> usize { 0 } // stabilized trait Foo { const fn foo() -> u32; //~ ERROR const fn is unstable @@ -20,12 +20,11 @@ trait Foo { } impl Foo { - const fn baz() -> u32 { 0 } //~ ERROR const fn is unstable + const fn baz() -> u32 { 0 } // stabilized } impl Foo for u32 { - const fn foo() -> u32 { 0 } //~ ERROR const fn is unstable - //~| ERROR trait fns cannot be declared const + const fn foo() -> u32 { 0 } //~ ERROR trait fns cannot be declared const } static FOO: usize = foo(); diff --git a/src/test/ui/feature-gates/feature-gate-min_const_fn.stderr b/src/test/ui/feature-gates/feature-gate-min_const_fn.stderr index aa7750362b2fd..34526746db844 100644 --- a/src/test/ui/feature-gates/feature-gate-min_const_fn.stderr +++ b/src/test/ui/feature-gates/feature-gate-min_const_fn.stderr @@ -13,17 +13,9 @@ LL | const fn bar() -> u32 { 0 } //~ ERROR const fn is unstable error[E0379]: trait fns cannot be declared const --> $DIR/feature-gate-min_const_fn.rs:27:5 | -LL | const fn foo() -> u32 { 0 } //~ ERROR const fn is unstable +LL | const fn foo() -> u32 { 0 } //~ ERROR trait fns cannot be declared const | ^^^^^ trait fns cannot be const -error[E0658]: const fn is unstable (see issue #53555) - --> $DIR/feature-gate-min_const_fn.rs:13:1 - | -LL | const fn foo() -> usize { 0 } //~ ERROR const fn is unstable - | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - | - = help: add #![feature(min_const_fn)] to the crate attributes to enable - error[E0658]: const fn is unstable (see issue #24111) --> $DIR/feature-gate-min_const_fn.rs:16:5 | @@ -40,23 +32,7 @@ LL | const fn bar() -> u32 { 0 } //~ ERROR const fn is unstable | = help: add #![feature(const_fn)] to the crate attributes to enable -error[E0658]: const fn is unstable (see issue #53555) - --> $DIR/feature-gate-min_const_fn.rs:23:5 - | -LL | const fn baz() -> u32 { 0 } //~ ERROR const fn is unstable - | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ - | - = help: add #![feature(min_const_fn)] to the crate attributes to enable - -error[E0658]: const fn is unstable (see issue #53555) - --> $DIR/feature-gate-min_const_fn.rs:27:5 - | -LL | const fn foo() -> u32 { 0 } //~ ERROR const fn is unstable - | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ - | - = help: add #![feature(min_const_fn)] to the crate attributes to enable - -error: aborting due to 8 previous errors +error: aborting due to 5 previous errors Some errors occurred: E0379, E0658. For more information about an error, try `rustc --explain E0379`. diff --git a/src/test/ui/infinite/infinite-recursion-const-fn.rs b/src/test/ui/infinite/infinite-recursion-const-fn.rs index 63ae18cf9c2fa..f99a080a9f07d 100644 --- a/src/test/ui/infinite/infinite-recursion-const-fn.rs +++ b/src/test/ui/infinite/infinite-recursion-const-fn.rs @@ -10,7 +10,6 @@ //https://github.com/rust-lang/rust/issues/31364 -#![feature(min_const_fn)] const fn a() -> usize { b() } const fn b() -> usize { a() } const ARR: [i32; a()] = [5; 6]; //~ ERROR could not evaluate constant expression diff --git a/src/test/ui/infinite/infinite-recursion-const-fn.stderr b/src/test/ui/infinite/infinite-recursion-const-fn.stderr index fb7c1be75413e..579cc6bd548f9 100644 --- a/src/test/ui/infinite/infinite-recursion-const-fn.stderr +++ b/src/test/ui/infinite/infinite-recursion-const-fn.stderr @@ -1,5 +1,5 @@ error[E0080]: could not evaluate constant expression - --> $DIR/infinite-recursion-const-fn.rs:16:1 + --> $DIR/infinite-recursion-const-fn.rs:15:1 | LL | const fn a() -> usize { b() } | --- diff --git a/src/test/ui/issues/issue-28822.rs b/src/test/ui/issues/issue-28822.rs index af8531feff23a..03b91a1322454 100644 --- a/src/test/ui/issues/issue-28822.rs +++ b/src/test/ui/issues/issue-28822.rs @@ -10,7 +10,6 @@ // compile-pass #![allow(dead_code)] -#![feature(min_const_fn)] fn main() {} diff --git a/src/test/ui/unsafe/unsafe-const-fn.rs b/src/test/ui/unsafe/unsafe-const-fn.rs index fe0bb7533a86f..88be25066ce40 100644 --- a/src/test/ui/unsafe/unsafe-const-fn.rs +++ b/src/test/ui/unsafe/unsafe-const-fn.rs @@ -10,8 +10,6 @@ // A quick test of 'unsafe const fn' functionality -#![feature(min_const_fn)] - const unsafe fn dummy(v: u32) -> u32 { !v } diff --git a/src/test/ui/unsafe/unsafe-const-fn.stderr b/src/test/ui/unsafe/unsafe-const-fn.stderr index d4b3ed687e5e4..d1a267d4f842e 100644 --- a/src/test/ui/unsafe/unsafe-const-fn.stderr +++ b/src/test/ui/unsafe/unsafe-const-fn.stderr @@ -1,5 +1,5 @@ error[E0133]: call to unsafe function is unsafe and requires unsafe function or block - --> $DIR/unsafe-const-fn.rs:19:18 + --> $DIR/unsafe-const-fn.rs:17:18 | LL | const VAL: u32 = dummy(0xFFFF); | ^^^^^^^^^^^^^ call to unsafe function From ccbe7877a02194a4961b8edc938aa4d29f165251 Mon Sep 17 00:00:00 2001 From: Oliver Scherer Date: Fri, 5 Oct 2018 12:28:46 +0200 Subject: [PATCH 2/3] Remove old unused error code --- src/librustc_mir/diagnostics.rs | 18 ------------------ 1 file changed, 18 deletions(-) diff --git a/src/librustc_mir/diagnostics.rs b/src/librustc_mir/diagnostics.rs index 75745849290eb..56031054b9183 100644 --- a/src/librustc_mir/diagnostics.rs +++ b/src/librustc_mir/diagnostics.rs @@ -665,24 +665,6 @@ fn main() { ``` "##, -E0022: r##" -Constant functions are not allowed to mutate anything. Thus, binding to an -argument with a mutable pattern is not allowed. For example, - -```compile_fail -const fn foo(mut x: u8) { - // do stuff -} -``` - -Is incorrect because the function body may not mutate `x`. - -Remove any mutable bindings from the argument list to fix this error. In case -you need to mutate the argument, try lazily initializing a global variable -instead of using a `const fn`, or refactoring the code to a functional style to -avoid mutation if possible. -"##, - E0133: r##" Unsafe code was used outside of an unsafe function or block. From fb04e2644730f48ff257d467c2ef6e25274e17d1 Mon Sep 17 00:00:00 2001 From: Oliver Scherer Date: Fri, 5 Oct 2018 12:29:03 +0200 Subject: [PATCH 3/3] Stabilize min_const_fn feature gate --- src/libsyntax/feature_gate.rs | 15 ++------------- 1 file changed, 2 insertions(+), 13 deletions(-) diff --git a/src/libsyntax/feature_gate.rs b/src/libsyntax/feature_gate.rs index e854e3d67606f..d72800bcd1e99 100644 --- a/src/libsyntax/feature_gate.rs +++ b/src/libsyntax/feature_gate.rs @@ -40,16 +40,6 @@ use symbol::{keywords, Symbol}; use std::{env}; macro_rules! set { - // The const_fn feature also enables the min_const_fn feature, because `min_const_fn` allows - // the declaration `const fn`, but the `const_fn` feature gate enables things inside those - // functions that we do not want to expose to the user for now. - (const_fn) => {{ - fn f(features: &mut Features, _: Span) { - features.const_fn = true; - features.min_const_fn = true; - } - f as fn(&mut Features, Span) - }}; ($field: ident) => {{ fn f(features: &mut Features, _: Span) { features.$field = true; @@ -219,9 +209,6 @@ declare_features! ( // Allows the definition of `const fn` functions with some advanced features. (active, const_fn, "1.2.0", Some(24111), None), - // Allows the definition of `const fn` functions. - (active, min_const_fn, "1.30.0", Some(53555), None), - // Allows let bindings and destructuring in `const fn` functions and constants. (active, const_let, "1.22.1", Some(48821), None), @@ -685,6 +672,8 @@ declare_features! ( (accepted, extern_prelude, "1.30.0", Some(44660), None), // Parentheses in patterns (accepted, pattern_parentheses, "1.31.0", Some(51087), None), + // Allows the definition of `const fn` functions. + (accepted, min_const_fn, "1.31.0", Some(53555), None), ); // If you change this, please modify src/doc/unstable-book as well. You must