diff options
Diffstat (limited to 'src')
15 files changed, 52 insertions, 37 deletions
diff --git a/src/doc/unstable-book/src/language-features/const-eval-limit.md b/src/doc/unstable-book/src/language-features/const-eval-limit.md new file mode 100644 index 00000000000..d1442d866dc --- /dev/null +++ b/src/doc/unstable-book/src/language-features/const-eval-limit.md @@ -0,0 +1,7 @@ +# `const_eval_limit` + +The tracking issue for this feature is: [#67217] + +[#57563]: https://github.com/rust-lang/rust/issues/67217 + +The `const_eval_limit` allows someone to limit the evaluation steps the CTFE undertakes to evaluate a `const fn`. \ No newline at end of file diff --git a/src/doc/unstable-book/src/language-features/const-limit.md b/src/doc/unstable-book/src/language-features/const-limit.md deleted file mode 100644 index 2fc5963dc6e..00000000000 --- a/src/doc/unstable-book/src/language-features/const-limit.md +++ /dev/null @@ -1,7 +0,0 @@ -# `const_limit` - -The tracking issue for this feature is: [#67217] - -[#57563]: https://github.com/rust-lang/rust/issues/67217 - -The `const_limit` allows someone to limit the evaluation steps the CTFE undertakes to evaluate a `const fn`. \ No newline at end of file diff --git a/src/librustc/middle/limits.rs b/src/librustc/middle/limits.rs index 6ed0a498c7d..19eb8a3fab8 100644 --- a/src/librustc/middle/limits.rs +++ b/src/librustc/middle/limits.rs @@ -1,4 +1,4 @@ -//! Registering limits, recursion_limit, type_length_limit and const_limit +//! Registering limits, recursion_limit, type_length_limit and const_eval_limit //! //! There are various parts of the compiler that must impose arbitrary limits //! on how deeply they recurse to prevent stack overflow. Users can override @@ -16,7 +16,7 @@ use rustc_data_structures::sync::Once; pub fn update_limits(sess: &Session, krate: &ast::Crate) { update_limit(sess, krate, &sess.recursion_limit, sym::recursion_limit, 128); update_limit(sess, krate, &sess.type_length_limit, sym::type_length_limit, 1048576); - update_limit(sess, krate, &sess.const_limit, sym::const_limit, 1_000_000); + update_limit(sess, krate, &sess.const_eval_limit, sym::const_eval_limit, 1_000_000); } fn update_limit( diff --git a/src/librustc/middle/mod.rs b/src/librustc/middle/mod.rs index b20f2cf3a85..464488964af 100644 --- a/src/librustc/middle/mod.rs +++ b/src/librustc/middle/mod.rs @@ -28,8 +28,8 @@ pub mod lib_features { } } } +pub mod limits; pub mod privacy; -pub mod recursion_limit; pub mod region; pub mod resolve_lifetime; pub mod stability; diff --git a/src/librustc_feature/active.rs b/src/librustc_feature/active.rs index 2f9394cd566..9bfb1a3a664 100644 --- a/src/librustc_feature/active.rs +++ b/src/librustc_feature/active.rs @@ -533,7 +533,7 @@ declare_features! ( (active, const_mut_refs, "1.41.0", Some(57349), None), // Allows limiting the evaluation steps of const expressions - (active, const_limit, "1.41.0", Some(67217), None), + (active, const_eval_limit, "1.41.0", Some(67217), None), /// Allows the use of `loop` and `while` in constants. (active, const_loop, "1.41.0", Some(52000), None), diff --git a/src/librustc_feature/builtin_attrs.rs b/src/librustc_feature/builtin_attrs.rs index 2b79f6bd942..c140adf64d5 100644 --- a/src/librustc_feature/builtin_attrs.rs +++ b/src/librustc_feature/builtin_attrs.rs @@ -240,8 +240,8 @@ pub const BUILTIN_ATTRIBUTES: &[BuiltinAttribute] = &[ ungated!(recursion_limit, CrateLevel, template!(NameValueStr: "N")), ungated!(type_length_limit, CrateLevel, template!(NameValueStr: "N")), gated!( - const_limit, CrateLevel, template!(NameValueStr: "N"), const_limit, - experimental!(const_limit) + const_eval_limit, CrateLevel, template!(NameValueStr: "N"), const_eval_limit, + experimental!(const_eval_limit) ), // Entry point: diff --git a/src/librustc_interface/passes.rs b/src/librustc_interface/passes.rs index 1e9b76c3e14..29e9ea1833f 100644 --- a/src/librustc_interface/passes.rs +++ b/src/librustc_interface/passes.rs @@ -189,7 +189,7 @@ pub fn register_plugins<'a>( } sess.time("recursion_limit", || { - middle::recursion_limit::update_limits(sess, &krate); + middle::limits::update_limits(sess, &krate); }); let mut lint_store = rustc_lint::new_lint_store( diff --git a/src/librustc_session/session.rs b/src/librustc_session/session.rs index a8879f00c80..173b120e1f6 100644 --- a/src/librustc_session/session.rs +++ b/src/librustc_session/session.rs @@ -89,7 +89,7 @@ pub struct Session { pub type_length_limit: Once<usize>, /// The maximum blocks a const expression can evaluate. - pub const_limit: Once<usize>, + pub const_eval_limit: Once<usize>, /// Map from imported macro spans (which consist of /// the localized span for the macro body) to the @@ -1056,7 +1056,7 @@ fn build_session_( features: Once::new(), recursion_limit: Once::new(), type_length_limit: Once::new(), - const_limit: Once::new(), + const_eval_limit: Once::new(), imported_macro_spans: OneThread::new(RefCell::new(FxHashMap::default())), incr_comp_session: OneThread::new(RefCell::new(IncrCompSession::NotInitialized)), cgu_reuse_tracker, diff --git a/src/librustc_span/symbol.rs b/src/librustc_span/symbol.rs index e92e2fc1d43..c39f9f360c0 100644 --- a/src/librustc_span/symbol.rs +++ b/src/librustc_span/symbol.rs @@ -208,7 +208,7 @@ symbols! { console, const_compare_raw_pointers, const_constructor, - const_limit, + const_eval_limit, const_extern_fn, const_fn, const_fn_union, diff --git a/src/test/ui/consts/const_limit/const_limit_overflow.rs b/src/test/ui/consts/const_limit/const_eval_limit_not_reached.rs index bea40e60261..4ed908312fb 100644 --- a/src/test/ui/consts/const_limit/const_limit_overflow.rs +++ b/src/test/ui/consts/const_limit/const_eval_limit_not_reached.rs @@ -1,6 +1,6 @@ -// run-pass -#![feature(const_limit)] -#![const_limit="18_446_744_073_709_551_615"] +// check-pass +#![feature(const_eval_limit)] +#![const_eval_limit="1000"] const CONSTANT: usize = limit(); diff --git a/src/test/ui/consts/const_limit/feature-gate-const_limit.rs b/src/test/ui/consts/const_limit/const_eval_limit_overflow.rs index 761e80050a6..38e70f997f0 100644 --- a/src/test/ui/consts/const_limit/feature-gate-const_limit.rs +++ b/src/test/ui/consts/const_limit/const_eval_limit_overflow.rs @@ -1,5 +1,6 @@ -#![const_limit="1"] -//~^ ERROR the `#[const_limit]` attribute is an experimental feature [E0658] +// check-pass +#![feature(const_eval_limit)] +#![const_eval_limit="18_446_744_073_709_551_615"] const CONSTANT: usize = limit(); diff --git a/src/test/ui/consts/const_limit/const_limit_not_reached.rs b/src/test/ui/consts/const_limit/const_eval_limit_reached.rs index 24c0f92af34..86570c240e5 100644 --- a/src/test/ui/consts/const_limit/const_limit_not_reached.rs +++ b/src/test/ui/consts/const_limit/const_eval_limit_reached.rs @@ -1,6 +1,6 @@ -// run-pass -#![feature(const_limit)] -#![const_limit="1000"] +// check-pass +#![feature(const_eval_limit)] +#![const_eval_limit="2"] const CONSTANT: usize = limit(); diff --git a/src/test/ui/consts/const_limit/feature-gate-const_eval_limit.rs b/src/test/ui/consts/const_limit/feature-gate-const_eval_limit.rs new file mode 100644 index 00000000000..61119d7511d --- /dev/null +++ b/src/test/ui/consts/const_limit/feature-gate-const_eval_limit.rs @@ -0,0 +1,14 @@ +#![const_eval_limit="42"] +//~^ ERROR the `#[const_eval_limit]` attribute is an experimental feature [E0658] + +const CONSTANT: usize = limit(); + +fn main() { + assert_eq!(CONSTANT, 1764); +} + +const fn limit() -> usize { + let x = 42; + + x * 42 +} diff --git a/src/test/ui/consts/const_limit/feature-gate-const_eval_limit.stderr b/src/test/ui/consts/const_limit/feature-gate-const_eval_limit.stderr new file mode 100644 index 00000000000..790ba2483a1 --- /dev/null +++ b/src/test/ui/consts/const_limit/feature-gate-const_eval_limit.stderr @@ -0,0 +1,12 @@ +error[E0658]: the `#[const_eval_limit]` attribute is an experimental feature + --> $DIR/feature-gate-const_eval_limit.rs:1:1 + | +LL | #![const_eval_limit="42"] + | ^^^^^^^^^^^^^^^^^^^^^^^^^ + | + = note: for more information, see https://github.com/rust-lang/rust/issues/67217 + = help: add `#![feature(const_eval_limit)]` to the crate attributes to enable + +error: aborting due to previous error + +For more information about this error, try `rustc --explain E0658`. diff --git a/src/test/ui/consts/const_limit/feature-gate-const_limit.stderr b/src/test/ui/consts/const_limit/feature-gate-const_limit.stderr deleted file mode 100644 index db248994b47..00000000000 --- a/src/test/ui/consts/const_limit/feature-gate-const_limit.stderr +++ /dev/null @@ -1,12 +0,0 @@ -error[E0658]: the `#[const_limit]` attribute is an experimental feature - --> $DIR/feature-gate-const_limit.rs:1:1 - | -LL | #![const_limit="1"] - | ^^^^^^^^^^^^^^^^^^^ - | - = note: for more information, see https://github.com/rust-lang/rust/issues/67217 - = help: add `#![feature(const_limit)]` to the crate attributes to enable - -error: aborting due to previous error - -For more information about this error, try `rustc --explain E0658`. |
