From 64d98f8ee037282c35007b64c2649055c56af1db Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Wed, 17 Apr 2024 14:19:03 +0200 Subject: Merging upstream version 1.68.2+dfsg1. Signed-off-by: Daniel Baumann --- .../const_limit/const_eval_limit_not_reached.rs | 20 ++++++++++++++++++++ .../consts/const_limit/const_eval_limit_overflow.rs | 15 +++++++++++++++ .../const_limit/const_eval_limit_overflow.stderr | 10 ++++++++++ .../consts/const_limit/const_eval_limit_reached.rs | 16 ++++++++++++++++ .../const_limit/const_eval_limit_reached.stderr | 9 +++++++++ .../const_limit/feature-gate-const_eval_limit.rs | 14 ++++++++++++++ .../const_limit/feature-gate-const_eval_limit.stderr | 12 ++++++++++++ 7 files changed, 96 insertions(+) create mode 100644 tests/ui/consts/const_limit/const_eval_limit_not_reached.rs create mode 100644 tests/ui/consts/const_limit/const_eval_limit_overflow.rs create mode 100644 tests/ui/consts/const_limit/const_eval_limit_overflow.stderr create mode 100644 tests/ui/consts/const_limit/const_eval_limit_reached.rs create mode 100644 tests/ui/consts/const_limit/const_eval_limit_reached.stderr create mode 100644 tests/ui/consts/const_limit/feature-gate-const_eval_limit.rs create mode 100644 tests/ui/consts/const_limit/feature-gate-const_eval_limit.stderr (limited to 'tests/ui/consts/const_limit') diff --git a/tests/ui/consts/const_limit/const_eval_limit_not_reached.rs b/tests/ui/consts/const_limit/const_eval_limit_not_reached.rs new file mode 100644 index 000000000..629d1f02a --- /dev/null +++ b/tests/ui/consts/const_limit/const_eval_limit_not_reached.rs @@ -0,0 +1,20 @@ +// check-pass + +#![feature(const_eval_limit)] + +// This needs to be higher than the number of loop iterations since each pass through the loop may +// hit more than one terminator. +#![const_eval_limit="4000"] + +const X: usize = { + let mut x = 0; + while x != 1000 { + x += 1; + } + + x +}; + +fn main() { + assert_eq!(X, 1000); +} diff --git a/tests/ui/consts/const_limit/const_eval_limit_overflow.rs b/tests/ui/consts/const_limit/const_eval_limit_overflow.rs new file mode 100644 index 000000000..1c49593cd --- /dev/null +++ b/tests/ui/consts/const_limit/const_eval_limit_overflow.rs @@ -0,0 +1,15 @@ +#![feature(const_eval_limit)] +#![const_eval_limit="18_446_744_073_709_551_615"] +//~^ ERROR `limit` must be a non-negative integer + +const CONSTANT: usize = limit(); + +fn main() { + assert_eq!(CONSTANT, 1764); +} + +const fn limit() -> usize { + let x = 42; + + x * 42 +} diff --git a/tests/ui/consts/const_limit/const_eval_limit_overflow.stderr b/tests/ui/consts/const_limit/const_eval_limit_overflow.stderr new file mode 100644 index 000000000..7f5d5e6cd --- /dev/null +++ b/tests/ui/consts/const_limit/const_eval_limit_overflow.stderr @@ -0,0 +1,10 @@ +error: `limit` must be a non-negative integer + --> $DIR/const_eval_limit_overflow.rs:2:1 + | +LL | #![const_eval_limit="18_446_744_073_709_551_615"] + | ^^^^^^^^^^^^^^^^^^^^----------------------------^ + | | + | not a valid integer + +error: aborting due to previous error + diff --git a/tests/ui/consts/const_limit/const_eval_limit_reached.rs b/tests/ui/consts/const_limit/const_eval_limit_reached.rs new file mode 100644 index 000000000..3ce038c1d --- /dev/null +++ b/tests/ui/consts/const_limit/const_eval_limit_reached.rs @@ -0,0 +1,16 @@ +#![feature(const_eval_limit)] +#![const_eval_limit = "500"] + +const X: usize = { + let mut x = 0; + while x != 1000 { + //~^ ERROR evaluation of constant value failed + x += 1; + } + + x +}; + +fn main() { + assert_eq!(X, 1000); +} diff --git a/tests/ui/consts/const_limit/const_eval_limit_reached.stderr b/tests/ui/consts/const_limit/const_eval_limit_reached.stderr new file mode 100644 index 000000000..850aebdfb --- /dev/null +++ b/tests/ui/consts/const_limit/const_eval_limit_reached.stderr @@ -0,0 +1,9 @@ +error[E0080]: evaluation of constant value failed + --> $DIR/const_eval_limit_reached.rs:6:11 + | +LL | while x != 1000 { + | ^^^^^^^^^ exceeded interpreter step limit (see `#[const_eval_limit]`) + +error: aborting due to previous error + +For more information about this error, try `rustc --explain E0080`. diff --git a/tests/ui/consts/const_limit/feature-gate-const_eval_limit.rs b/tests/ui/consts/const_limit/feature-gate-const_eval_limit.rs new file mode 100644 index 000000000..61119d751 --- /dev/null +++ b/tests/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/tests/ui/consts/const_limit/feature-gate-const_eval_limit.stderr b/tests/ui/consts/const_limit/feature-gate-const_eval_limit.stderr new file mode 100644 index 000000000..5bd29c7df --- /dev/null +++ b/tests/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: see issue #67217 for more information + = 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`. -- cgit v1.2.3