diff options
| author | Dylan DPC <dylan.dpc@gmail.com> | 2020-10-05 02:29:36 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-10-05 02:29:36 +0200 |
| commit | e032bb7c65d5444a44bda9bd7db5c42b4931b0aa (patch) | |
| tree | 1bdc8c6b98cc7339aaea902f4e75679483e18308 /src | |
| parent | f1afed541e7676860ec2162eed47a5dcd2043b18 (diff) | |
| parent | 6647eeefb91a2f0e09f7df9f197917d22b01e846 (diff) | |
| download | rust-e032bb7c65d5444a44bda9bd7db5c42b4931b0aa.tar.gz rust-e032bb7c65d5444a44bda9bd7db5c42b4931b0aa.zip | |
Rollup merge of #77439 - varkor:min_const_generics-tests, r=lcnr,estebank
Fix missing diagnostic span for `impl Trait` with const generics, and add various tests for `min_const_generics` and `const_generics` Closes https://github.com/rust-lang/rust/issues/61410. Adds `min_const_generics` tests for: - https://github.com/rust-lang/rust/issues/73727 - https://github.com/rust-lang/rust/issues/72293 - https://github.com/rust-lang/rust/issues/67375 - https://github.com/rust-lang/rust/issues/75153 - https://github.com/rust-lang/rust/issues/71922 - https://github.com/rust-lang/rust/issues/69913 - https://github.com/rust-lang/rust/issues/67945 - https://github.com/rust-lang/rust/issues/69239 Adds `const_generics` tests for: - https://github.com/rust-lang/rust/issues/67375 - https://github.com/rust-lang/rust/issues/75153 - https://github.com/rust-lang/rust/issues/71922 - https://github.com/rust-lang/rust/issues/69913 - https://github.com/rust-lang/rust/issues/67945 - https://github.com/rust-lang/rust/issues/69239 (I only added separate `min_const_generics` and `const_generics` tests if they were handled differently by the two features.) We need to figure out how to deduplicate when `const_generics` is stabilised, but we can discuss that later. For now, we should be checking neither feature breaks, so require regression tests for both. I've given them identical names when I've added both, which should make it easier to spot them later. r? @lcnr
Diffstat (limited to 'src')
69 files changed, 623 insertions, 62 deletions
diff --git a/src/test/ui/const-generics/array-size-in-generic-struct-param.min.stderr b/src/test/ui/const-generics/array-size-in-generic-struct-param.min.stderr index 809514e8a1c..0fc45513cd7 100644 --- a/src/test/ui/const-generics/array-size-in-generic-struct-param.min.stderr +++ b/src/test/ui/const-generics/array-size-in-generic-struct-param.min.stderr @@ -1,4 +1,4 @@ -error: generic parameters must not be used inside of non trivial constant values +error: generic parameters must not be used inside of non-trivial constant values --> $DIR/array-size-in-generic-struct-param.rs:9:48 | LL | struct ArithArrayLen<const N: usize>([u32; 0 + N]); @@ -6,7 +6,7 @@ LL | struct ArithArrayLen<const N: usize>([u32; 0 + N]); | = help: it is currently only allowed to use either `N` or `{ N }` as generic constants -error: generic parameters must not be used inside of non trivial constant values +error: generic parameters must not be used inside of non-trivial constant values --> $DIR/array-size-in-generic-struct-param.rs:20:15 | LL | arr: [u8; CFG.arr_size], diff --git a/src/test/ui/const-generics/array-size-in-generic-struct-param.rs b/src/test/ui/const-generics/array-size-in-generic-struct-param.rs index 8bd3b787259..dd45b6ed278 100644 --- a/src/test/ui/const-generics/array-size-in-generic-struct-param.rs +++ b/src/test/ui/const-generics/array-size-in-generic-struct-param.rs @@ -8,7 +8,7 @@ #[allow(dead_code)] struct ArithArrayLen<const N: usize>([u32; 0 + N]); //[full]~^ ERROR constant expression depends on a generic parameter -//[min]~^^ ERROR generic parameters must not be used inside of non trivial constant values +//[min]~^^ ERROR generic parameters must not be used inside of non-trivial constant values #[derive(PartialEq, Eq)] struct Config { @@ -19,7 +19,7 @@ struct B<const CFG: Config> { //[min]~^ ERROR `Config` is forbidden arr: [u8; CFG.arr_size], //[full]~^ ERROR constant expression depends on a generic parameter - //[min]~^^ ERROR generic parameters must not be used inside of non trivial + //[min]~^^ ERROR generic parameters must not be used inside of non-trivial } const C: Config = Config { arr_size: 5 }; diff --git a/src/test/ui/const-generics/const-argument-if-length.full.stderr b/src/test/ui/const-generics/const-argument-if-length.full.stderr new file mode 100644 index 00000000000..9b1c1be1aa0 --- /dev/null +++ b/src/test/ui/const-generics/const-argument-if-length.full.stderr @@ -0,0 +1,42 @@ +error[E0277]: the size for values of type `T` cannot be known at compilation time + --> $DIR/const-argument-if-length.rs:8:28 + | +LL | pub const fn is_zst<T: ?Sized>() -> usize { + | - this type parameter needs to be `Sized` +LL | if std::mem::size_of::<T>() == 0 { + | ^ doesn't have a size known at compile-time + | + ::: $SRC_DIR/core/src/mem/mod.rs:LL:COL + | +LL | pub const fn size_of<T>() -> usize { + | - required by this bound in `std::mem::size_of` + +error[E0080]: evaluation of constant value failed + --> $DIR/const-argument-if-length.rs:19:15 + | +LL | pad: [u8; is_zst::<T>()], + | ^^^^^^^^^^^^^ referenced constant has errors + +error[E0277]: the size for values of type `T` cannot be known at compilation time + --> $DIR/const-argument-if-length.rs:17:12 + | +LL | pub struct AtLeastByte<T: ?Sized> { + | - this type parameter needs to be `Sized` +LL | value: T, + | ^ doesn't have a size known at compile-time + | + = note: only the last field of a struct may have a dynamically sized type + = help: change the field's type to have a statically known size +help: borrowed types always have a statically known size + | +LL | value: &T, + | ^ +help: the `Box` type always has a statically known size and allocates its contents in the heap + | +LL | value: Box<T>, + | ^^^^ ^ + +error: aborting due to 3 previous errors + +Some errors have detailed explanations: E0080, E0277. +For more information about an error, try `rustc --explain E0080`. diff --git a/src/test/ui/const-generics/const-argument-if-length.min.stderr b/src/test/ui/const-generics/const-argument-if-length.min.stderr new file mode 100644 index 00000000000..c666dce479f --- /dev/null +++ b/src/test/ui/const-generics/const-argument-if-length.min.stderr @@ -0,0 +1,30 @@ +error: generic parameters must not be used inside of non-trivial constant values + --> $DIR/const-argument-if-length.rs:19:24 + | +LL | pad: [u8; is_zst::<T>()], + | ^ non-trivial anonymous constants must not depend on the parameter `T` + | + = note: type parameters are currently not permitted in anonymous constants + +error[E0277]: the size for values of type `T` cannot be known at compilation time + --> $DIR/const-argument-if-length.rs:17:12 + | +LL | pub struct AtLeastByte<T: ?Sized> { + | - this type parameter needs to be `Sized` +LL | value: T, + | ^ doesn't have a size known at compile-time + | + = note: only the last field of a struct may have a dynamically sized type + = help: change the field's type to have a statically known size +help: borrowed types always have a statically known size + | +LL | value: &T, + | ^ +help: the `Box` type always has a statically known size and allocates its contents in the heap + | +LL | value: Box<T>, + | ^^^^ ^ + +error: aborting due to 2 previous errors + +For more information about this error, try `rustc --explain E0277`. diff --git a/src/test/ui/const-generics/const-argument-if-length.rs b/src/test/ui/const-generics/const-argument-if-length.rs new file mode 100644 index 00000000000..481ff97d68d --- /dev/null +++ b/src/test/ui/const-generics/const-argument-if-length.rs @@ -0,0 +1,24 @@ +// revisions: full min + +#![cfg_attr(full, allow(incomplete_features))] +#![cfg_attr(full, feature(const_generics))] +#![cfg_attr(min, feature(min_const_generics))] + +pub const fn is_zst<T: ?Sized>() -> usize { + if std::mem::size_of::<T>() == 0 { + //[full]~^ ERROR the size for values of type `T` cannot be known at compilation time + 1 + } else { + 0 + } +} + +pub struct AtLeastByte<T: ?Sized> { + value: T, + //~^ ERROR the size for values of type `T` cannot be known at compilation time + pad: [u8; is_zst::<T>()], + //[min]~^ ERROR generic parameters must not be used inside of non-trivial constant values + //[full]~^^ ERROR evaluation of constant value failed +} + +fn main() {} diff --git a/src/test/ui/const-generics/const_evaluatable_checked/feature-gate-const_evaluatable_checked.min.stderr b/src/test/ui/const-generics/const_evaluatable_checked/feature-gate-const_evaluatable_checked.min.stderr index 269710db164..4b3235fd087 100644 --- a/src/test/ui/const-generics/const_evaluatable_checked/feature-gate-const_evaluatable_checked.min.stderr +++ b/src/test/ui/const-generics/const_evaluatable_checked/feature-gate-const_evaluatable_checked.min.stderr @@ -1,4 +1,4 @@ -error: generic parameters must not be used inside of non trivial constant values +error: generic parameters must not be used inside of non-trivial constant values --> $DIR/feature-gate-const_evaluatable_checked.rs:6:33 | LL | type Arr<const N: usize> = [u8; N - 1]; diff --git a/src/test/ui/const-generics/const_evaluatable_checked/feature-gate-const_evaluatable_checked.rs b/src/test/ui/const-generics/const_evaluatable_checked/feature-gate-const_evaluatable_checked.rs index af3090115f2..d552e0f5430 100644 --- a/src/test/ui/const-generics/const_evaluatable_checked/feature-gate-const_evaluatable_checked.rs +++ b/src/test/ui/const-generics/const_evaluatable_checked/feature-gate-const_evaluatable_checked.rs @@ -4,7 +4,7 @@ #![cfg_attr(min, feature(min_const_generics))] type Arr<const N: usize> = [u8; N - 1]; -//[min]~^ ERROR generic parameters must not be used inside of non trivial constant values +//[min]~^ ERROR generic parameters must not be used inside of non-trivial constant values fn test<const N: usize>() -> Arr<N> where Arr<N>: Default { //[full]~^ ERROR constant expression depends diff --git a/src/test/ui/const-generics/const_evaluatable_checked/simple.min.stderr b/src/test/ui/const-generics/const_evaluatable_checked/simple.min.stderr index 3cac604a7b3..85a15b1e75f 100644 --- a/src/test/ui/const-generics/const_evaluatable_checked/simple.min.stderr +++ b/src/test/ui/const-generics/const_evaluatable_checked/simple.min.stderr @@ -1,4 +1,4 @@ -error: generic parameters must not be used inside of non trivial constant values +error: generic parameters must not be used inside of non-trivial constant values --> $DIR/simple.rs:8:53 | LL | fn test<const N: usize>() -> [u8; N - 1] where [u8; N - 1]: Default { @@ -6,7 +6,7 @@ LL | fn test<const N: usize>() -> [u8; N - 1] where [u8; N - 1]: Default { | = help: it is currently only allowed to use either `N` or `{ N }` as generic constants -error: generic parameters must not be used inside of non trivial constant values +error: generic parameters must not be used inside of non-trivial constant values --> $DIR/simple.rs:8:35 | LL | fn test<const N: usize>() -> [u8; N - 1] where [u8; N - 1]: Default { diff --git a/src/test/ui/const-generics/const_evaluatable_checked/simple_fail.min.stderr b/src/test/ui/const-generics/const_evaluatable_checked/simple_fail.min.stderr index 042710f1327..2eac9505624 100644 --- a/src/test/ui/const-generics/const_evaluatable_checked/simple_fail.min.stderr +++ b/src/test/ui/const-generics/const_evaluatable_checked/simple_fail.min.stderr @@ -1,4 +1,4 @@ -error: generic parameters must not be used inside of non trivial constant values +error: generic parameters must not be used inside of non-trivial constant values --> $DIR/simple_fail.rs:7:33 | LL | type Arr<const N: usize> = [u8; N - 1]; diff --git a/src/test/ui/const-generics/const_evaluatable_checked/simple_fail.rs b/src/test/ui/const-generics/const_evaluatable_checked/simple_fail.rs index b15e0ff1839..637c940f714 100644 --- a/src/test/ui/const-generics/const_evaluatable_checked/simple_fail.rs +++ b/src/test/ui/const-generics/const_evaluatable_checked/simple_fail.rs @@ -5,7 +5,7 @@ #![allow(incomplete_features)] type Arr<const N: usize> = [u8; N - 1]; //[full]~ ERROR evaluation of constant -//[min]~^ ERROR generic parameters must not be used inside of non trivial constant values +//[min]~^ ERROR generic parameters must not be used inside of non-trivial constant values fn test<const N: usize>() -> Arr<N> where Arr<N>: Sized { todo!() diff --git a/src/test/ui/const-generics/generic-function-call-in-array-length.full.stderr b/src/test/ui/const-generics/generic-function-call-in-array-length.full.stderr new file mode 100644 index 00000000000..43b42d82d0c --- /dev/null +++ b/src/test/ui/const-generics/generic-function-call-in-array-length.full.stderr @@ -0,0 +1,10 @@ +error: constant expression depends on a generic parameter + --> $DIR/generic-function-call-in-array-length.rs:9:29 + | +LL | fn bar<const N: usize>() -> [u32; foo(N)] { + | ^^^^^^^^^^^^^ + | + = note: this may fail depending on what value the parameter takes + +error: aborting due to previous error + diff --git a/src/test/ui/const-generics/generic-function-call-in-array-length.min.stderr b/src/test/ui/const-generics/generic-function-call-in-array-length.min.stderr new file mode 100644 index 00000000000..e7e968e4c2a --- /dev/null +++ b/src/test/ui/const-generics/generic-function-call-in-array-length.min.stderr @@ -0,0 +1,18 @@ +error: generic parameters must not be used inside of non-trivial constant values + --> $DIR/generic-function-call-in-array-length.rs:9:39 + | +LL | fn bar<const N: usize>() -> [u32; foo(N)] { + | ^ non-trivial anonymous constants must not depend on the parameter `N` + | + = help: it is currently only allowed to use either `N` or `{ N }` as generic constants + +error: generic parameters must not be used inside of non-trivial constant values + --> $DIR/generic-function-call-in-array-length.rs:12:13 + | +LL | [0; foo(N)] + | ^ non-trivial anonymous constants must not depend on the parameter `N` + | + = help: it is currently only allowed to use either `N` or `{ N }` as generic constants + +error: aborting due to 2 previous errors + diff --git a/src/test/ui/const-generics/generic-function-call-in-array-length.rs b/src/test/ui/const-generics/generic-function-call-in-array-length.rs new file mode 100644 index 00000000000..c8bbae29343 --- /dev/null +++ b/src/test/ui/const-generics/generic-function-call-in-array-length.rs @@ -0,0 +1,16 @@ +// revisions: full min + +#![cfg_attr(full, allow(incomplete_features))] +#![cfg_attr(full, feature(const_generics))] +#![cfg_attr(min, feature(min_const_generics))] + +const fn foo(n: usize) -> usize { n * 2 } + +fn bar<const N: usize>() -> [u32; foo(N)] { + //[min]~^ ERROR generic parameters must not be used inside of non-trivial constant values + //[full]~^^ ERROR constant expression depends on a generic parameter + [0; foo(N)] + //[min]~^ ERROR generic parameters must not be used inside of non-trivial constant values +} + +fn main() {} diff --git a/src/test/ui/const-generics/generic-sum-in-array-length.full.stderr b/src/test/ui/const-generics/generic-sum-in-array-length.full.stderr new file mode 100644 index 00000000000..d311e1c0bae --- /dev/null +++ b/src/test/ui/const-generics/generic-sum-in-array-length.full.stderr @@ -0,0 +1,10 @@ +error: constant expression depends on a generic parameter + --> $DIR/generic-sum-in-array-length.rs:7:45 + | +LL | fn foo<const A: usize, const B: usize>(bar: [usize; A + B]) {} + | ^^^^^^^^^^^^^^ + | + = note: this may fail depending on what value the parameter takes + +error: aborting due to previous error + diff --git a/src/test/ui/const-generics/generic-sum-in-array-length.min.stderr b/src/test/ui/const-generics/generic-sum-in-array-length.min.stderr new file mode 100644 index 00000000000..6f157fbbbbb --- /dev/null +++ b/src/test/ui/const-generics/generic-sum-in-array-length.min.stderr @@ -0,0 +1,18 @@ +error: generic parameters must not be used inside of non-trivial constant values + --> $DIR/generic-sum-in-array-length.rs:7:53 + | +LL | fn foo<const A: usize, const B: usize>(bar: [usize; A + B]) {} + | ^ non-trivial anonymous constants must not depend on the parameter `A` + | + = help: it is currently only allowed to use either `A` or `{ A }` as generic constants + +error: generic parameters must not be used inside of non-trivial constant values + --> $DIR/generic-sum-in-array-length.rs:7:57 + | +LL | fn foo<const A: usize, const B: usize>(bar: [usize; A + B]) {} + | ^ non-trivial anonymous constants must not depend on the parameter `B` + | + = help: it is currently only allowed to use either `B` or `{ B }` as generic constants + +error: aborting due to 2 previous errors + diff --git a/src/test/ui/const-generics/generic-sum-in-array-length.rs b/src/test/ui/const-generics/generic-sum-in-array-length.rs new file mode 100644 index 00000000000..810095b384b --- /dev/null +++ b/src/test/ui/const-generics/generic-sum-in-array-length.rs @@ -0,0 +1,12 @@ +// revisions: full min + +#![cfg_attr(full, allow(incomplete_features))] +#![cfg_attr(full, feature(const_generics))] +#![cfg_attr(min, feature(min_const_generics))] + +fn foo<const A: usize, const B: usize>(bar: [usize; A + B]) {} +//[min]~^ ERROR generic parameters must not be used inside of non-trivial constant values +//[min]~| ERROR generic parameters must not be used inside of non-trivial constant values +//[full]~^^^ ERROR constant expression depends on a generic parameter + +fn main() {} diff --git a/src/test/ui/const-generics/impl-trait-with-const-arguments.full.stderr b/src/test/ui/const-generics/impl-trait-with-const-arguments.full.stderr new file mode 100644 index 00000000000..a587cb61873 --- /dev/null +++ b/src/test/ui/const-generics/impl-trait-with-const-arguments.full.stderr @@ -0,0 +1,8 @@ +error[E0632]: cannot provide explicit generic arguments when `impl Trait` is used in argument position + --> $DIR/impl-trait-with-const-arguments.rs:24:20 + | +LL | assert_eq!(f::<4usize>(Usizable), 20usize); + | ^^^^^^ explicit generic argument not allowed + +error: aborting due to previous error + diff --git a/src/test/ui/const-generics/impl-trait-with-const-arguments.min.stderr b/src/test/ui/const-generics/impl-trait-with-const-arguments.min.stderr new file mode 100644 index 00000000000..a587cb61873 --- /dev/null +++ b/src/test/ui/const-generics/impl-trait-with-const-arguments.min.stderr @@ -0,0 +1,8 @@ +error[E0632]: cannot provide explicit generic arguments when `impl Trait` is used in argument position + --> $DIR/impl-trait-with-const-arguments.rs:24:20 + | +LL | assert_eq!(f::<4usize>(Usizable), 20usize); + | ^^^^^^ explicit generic argument not allowed + +error: aborting due to previous error + diff --git a/src/test/ui/const-generics/impl-trait-with-const-arguments.rs b/src/test/ui/const-generics/impl-trait-with-const-arguments.rs new file mode 100644 index 00000000000..a4c75792ee3 --- /dev/null +++ b/src/test/ui/const-generics/impl-trait-with-const-arguments.rs @@ -0,0 +1,26 @@ +// revisions: full min + +#![cfg_attr(full, allow(incomplete_features))] +#![cfg_attr(full, feature(const_generics))] +#![cfg_attr(min, feature(min_const_generics))] + +trait Usizer { + fn m(self) -> usize; +} + +fn f<const N: usize>(u: impl Usizer) -> usize { + N + u.m() +} + +struct Usizable; + +impl Usizer for Usizable { + fn m(self) -> usize { + 16 + } +} + +fn main() { + assert_eq!(f::<4usize>(Usizable), 20usize); +//~^ ERROR cannot provide explicit generic arguments when `impl Trait` is used in argument position +} diff --git a/src/test/ui/const-generics/intrinsics-type_name-as-const-argument.full.stderr b/src/test/ui/const-generics/intrinsics-type_name-as-const-argument.full.stderr new file mode 100644 index 00000000000..c09d16d0ab0 --- /dev/null +++ b/src/test/ui/const-generics/intrinsics-type_name-as-const-argument.full.stderr @@ -0,0 +1,10 @@ +error: constant expression depends on a generic parameter + --> $DIR/intrinsics-type_name-as-const-argument.rs:15:8 + | +LL | T: Trait<{std::intrinsics::type_name::<T>()}> + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + | + = note: this may fail depending on what value the parameter takes + +error: aborting due to previous error + diff --git a/src/test/ui/const-generics/intrinsics-type_name-as-const-argument.min.stderr b/src/test/ui/const-generics/intrinsics-type_name-as-const-argument.min.stderr new file mode 100644 index 00000000000..307db088bf8 --- /dev/null +++ b/src/test/ui/const-generics/intrinsics-type_name-as-const-argument.min.stderr @@ -0,0 +1,19 @@ +error: generic parameters must not be used inside of non-trivial constant values + --> $DIR/intrinsics-type_name-as-const-argument.rs:15:44 + | +LL | T: Trait<{std::intrinsics::type_name::<T>()}> + | ^ non-trivial anonymous constants must not depend on the parameter `T` + | + = note: type parameters are currently not permitted in anonymous constants + +error: `&'static str` is forbidden as the type of a const generic parameter + --> $DIR/intrinsics-type_name-as-const-argument.rs:10:22 + | +LL | trait Trait<const S: &'static str> {} + | ^^^^^^^^^^^^ + | + = note: the only supported types are integers, `bool` and `char` + = note: more complex types are supported with `#[feature(const_generics)]` + +error: aborting due to 2 previous errors + diff --git a/src/test/ui/const-generics/intrinsics-type_name-as-const-argument.rs b/src/test/ui/const-generics/intrinsics-type_name-as-const-argument.rs new file mode 100644 index 00000000000..37b6cf4bab9 --- /dev/null +++ b/src/test/ui/const-generics/intrinsics-type_name-as-const-argument.rs @@ -0,0 +1,22 @@ +// revisions: full min + +#![cfg_attr(full, allow(incomplete_features))] +#![cfg_attr(full, feature(const_generics))] +#![cfg_attr(min, feature(min_const_generics))] + +#![feature(core_intrinsics)] +#![feature(const_type_name)] + +trait Trait<const S: &'static str> {} +//[min]~^ ERROR `&'static str` is forbidden as the type of a const generic parameter + +struct Bug<T> +where + T: Trait<{std::intrinsics::type_name::<T>()}> + //[min]~^ ERROR generic parameters must not be used inside of non-trivial constant values + //[full]~^^ ERROR constant expression depends on a generic parameter +{ + t: T +} + +fn main() {} diff --git a/src/test/ui/const-generics/issue-61522-array-len-succ.min.stderr b/src/test/ui/const-generics/issue-61522-array-len-succ.min.stderr index a1b1a095041..2c1bc055b28 100644 --- a/src/test/ui/const-generics/issue-61522-array-len-succ.min.stderr +++ b/src/test/ui/const-generics/issue-61522-array-len-succ.min.stderr @@ -1,4 +1,4 @@ -error: generic parameters must not be used inside of non trivial constant values +error: generic parameters must not be used inside of non-trivial constant values --> $DIR/issue-61522-array-len-succ.rs:7:45 | LL | pub struct MyArray<const COUNT: usize>([u8; COUNT + 1]); @@ -6,7 +6,7 @@ LL | pub struct MyArray<const COUNT: usize>([u8; COUNT + 1]); | = help: it is currently only allowed to use either `COUNT` or `{ COUNT }` as generic constants -error: generic parameters must not be used inside of non trivial constant values +error: generic parameters must not be used inside of non-trivial constant values --> $DIR/issue-61522-array-len-succ.rs:12:30 | LL | fn inner(&self) -> &[u8; COUNT + 1] { diff --git a/src/test/ui/const-generics/issue-67375.full.stderr b/src/test/ui/const-generics/issue-67375.full.stderr new file mode 100644 index 00000000000..e15d65f197e --- /dev/null +++ b/src/test/ui/const-generics/issue-67375.full.stderr @@ -0,0 +1,21 @@ +warning: cannot use constants which depend on generic parameters in types + --> $DIR/issue-67375.rs:9:12 + | +LL | inner: [(); { [|_: &T| {}; 0].len() }], + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + | + = note: `#[warn(const_evaluatable_unchecked)]` on by default + = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release! + = note: for more information, see issue #76200 <https://github.com/rust-lang/rust/issues/76200> + +error[E0392]: parameter `T` is never used + --> $DIR/issue-67375.rs:7:12 + | +LL | struct Bug<T> { + | ^ unused parameter + | + = help: consider removing `T`, referring to it in a field, or using a marker such as `PhantomData` + +error: aborting due to previous error; 1 warning emitted + +For more information about this error, try `rustc --explain E0392`. diff --git a/src/test/ui/const-generics/issue-67375.min.stderr b/src/test/ui/const-generics/issue-67375.min.stderr new file mode 100644 index 00000000000..b13d9fdab0d --- /dev/null +++ b/src/test/ui/const-generics/issue-67375.min.stderr @@ -0,0 +1,19 @@ +error: generic parameters must not be used inside of non-trivial constant values + --> $DIR/issue-67375.rs:9:25 + | +LL | inner: [(); { [|_: &T| {}; 0].len() }], + | ^ non-trivial anonymous constants must not depend on the parameter `T` + | + = note: type parameters are currently not permitted in anonymous constants + +error[E0392]: parameter `T` is never used + --> $DIR/issue-67375.rs:7:12 + | +LL | struct Bug<T> { + | ^ unused parameter + | + = help: consider removing `T`, referring to it in a field, or using a marker such as `PhantomData` + +error: aborting due to 2 previous errors + +For more information about this error, try `rustc --explain E0392`. diff --git a/src/test/ui/const-generics/issue-67375.rs b/src/test/ui/const-generics/issue-67375.rs new file mode 100644 index 00000000000..994ec92cfb5 --- /dev/null +++ b/src/test/ui/const-generics/issue-67375.rs @@ -0,0 +1,15 @@ +// revisions: full min + +#![cfg_attr(full, allow(incomplete_features))] +#![cfg_attr(full, feature(const_generics))] +#![cfg_attr(min, feature(min_const_generics))] + +struct Bug<T> { + //~^ ERROR parameter `T` is never used + inner: [(); { [|_: &T| {}; 0].len() }], + //[min]~^ ERROR generic parameters must not be used inside of non-trivial constant values + //[full]~^^ WARN cannot use constants which depend on generic parameters in types + //[full]~^^^ WARN this was previously accepted by the compiler +} + +fn main() {} diff --git a/src/test/ui/const-generics/issue-67945-1.full.stderr b/src/test/ui/const-generics/issue-67945-1.full.stderr new file mode 100644 index 00000000000..e79c4f5374e --- /dev/null +++ b/src/test/ui/const-generics/issue-67945-1.full.stderr @@ -0,0 +1,26 @@ +error[E0308]: mismatched types + --> $DIR/issue-67945-1.rs:14:20 + | +LL | struct Bug<S> { + | - this type parameter +... +LL | let x: S = MaybeUninit::uninit(); + | - ^^^^^^^^^^^^^^^^^^^^^ expected type parameter `S`, found union `MaybeUninit` + | | + | expected due to this + | + = note: expected type parameter `S` + found union `MaybeUninit<_>` + +error[E0392]: parameter `S` is never used + --> $DIR/issue-67945-1.rs:11:12 + | +LL | struct Bug<S> { + | ^ unused parameter + | + = help: consider removing `S`, referring to it in a field, or using a marker such as `PhantomData` + +error: aborting due to 2 previous errors + +Some errors have detailed explanations: E0308, E0392. +For more information about an error, try `rustc --explain E0308`. diff --git a/src/test/ui/const-generics/issue-67945-1.min.stderr b/src/test/ui/const-generics/issue-67945-1.min.stderr new file mode 100644 index 00000000000..949b5da5920 --- /dev/null +++ b/src/test/ui/const-generics/issue-67945-1.min.stderr @@ -0,0 +1,27 @@ +error: generic parameters must not be used inside of non-trivial constant values + --> $DIR/issue-67945-1.rs:14:16 + | +LL | let x: S = MaybeUninit::uninit(); + | ^ non-trivial anonymous constants must not depend on the parameter `S` + | + = note: type parameters are currently not permitted in anonymous constants + +error: generic parameters must not be used inside of non-trivial constant values + --> $DIR/issue-67945-1.rs:17:45 + | +LL | let b = &*(&x as *const _ as *const S); + | ^ non-trivial anonymous constants must not depend on the parameter `S` + | + = note: type parameters are currently not permitted in anonymous constants + +error[E0392]: parameter `S` is never used + --> $DIR/issue-67945-1.rs:11:12 + | +LL | struct Bug<S> { + | ^ unused parameter + | + = help: consider removing `S`, referring to it in a field, or using a marker such as `PhantomData` + +error: aborting due to 3 previous errors + +For more information about this error, try `rustc --explain E0392`. diff --git a/src/test/ui/const-generics/issue-67945-1.rs b/src/test/ui/const-generics/issue-67945-1.rs new file mode 100644 index 00000000000..d1a83e978d1 --- /dev/null +++ b/src/test/ui/const-generics/issue-67945-1.rs @@ -0,0 +1,23 @@ +// revisions: full min + +#![cfg_attr(full, allow(incomplete_features))] +#![cfg_attr(full, feature(const_generics))] +#![cfg_attr(min, feature(min_const_generics))] + +use std::marker::PhantomData; + +use std::mem::{self, MaybeUninit}; + +struct Bug<S> { + //~^ ERROR parameter `S` is never used + A: [(); { + let x: S = MaybeUninit::uninit(); + //[min]~^ ERROR generic parameters must not be used inside of non-trivial constant values + //[full]~^^ ERROR mismatched types + let b = &*(&x as *const _ as *const S); + //[min]~^ ERROR generic parameters must not be used inside of non-trivial constant values + 0 + }], +} + +fn main() {} diff --git a/src/test/ui/const-generics/issue-67945-2.full.stderr b/src/test/ui/const-generics/issue-67945-2.full.stderr new file mode 100644 index 00000000000..2f54b802df8 --- /dev/null +++ b/src/test/ui/const-generics/issue-67945-2.full.stderr @@ -0,0 +1,26 @@ +error[E0308]: mismatched types + --> $DIR/issue-67945-2.rs:12:20 + | +LL | struct Bug<S> { + | - this type parameter +... +LL | let x: S = MaybeUninit::uninit(); + | - ^^^^^^^^^^^^^^^^^^^^^ expected type parameter `S`, found union `MaybeUninit` + | | + | expected due to this + | + = note: expected type parameter `S` + found union `MaybeUninit<_>` + +error[E0392]: parameter `S` is never used + --> $DIR/issue-67945-2.rs:9:12 + | +LL | struct Bug<S> { + | ^ unused parameter + | + = help: consider removing `S`, referring to it in a field, or using a marker such as `PhantomData` + +error: aborting due to 2 previous errors + +Some errors have detailed explanations: E0308, E0392. +For more information about an error, try `rustc --explain E0308`. diff --git a/src/test/ui/const-generics/issue-67945-2.min.stderr b/src/test/ui/const-generics/issue-67945-2.min.stderr new file mode 100644 index 00000000000..ed445b3e8f7 --- /dev/null +++ b/src/test/ui/const-generics/issue-67945-2.min.stderr @@ -0,0 +1,27 @@ +error: generic parameters must not be used inside of non-trivial constant values + --> $DIR/issue-67945-2.rs:12:16 + | +LL | let x: S = MaybeUninit::uninit(); + | ^ non-trivial anonymous constants must not depend on the parameter `S` + | + = note: type parameters are currently not permitted in anonymous constants + +error: generic parameters must not be used inside of non-trivial constant values + --> $DIR/issue-67945-2.rs:15:45 + | +LL | let b = &*(&x as *const _ as *const S); + | ^ non-trivial anonymous constants must not depend on the parameter `S` + | + = note: type parameters are currently not permitted in anonymous constants + +error[E0392]: parameter `S` is never used + --> $DIR/issue-67945-2.rs:9:12 + | +LL | struct Bug<S> { + | ^ unused parameter + | + = help: consider removing `S`, referring to it in a field, or using a marker such as `PhantomData` + +error: aborting due to 3 previous errors + +For more information about this error, try `rustc --explain E0392`. diff --git a/src/test/ui/const-generics/issue-67945-2.rs b/src/test/ui/const-generics/issue-67945-2.rs new file mode 100644 index 00000000000..7f789297df0 --- /dev/null +++ b/src/test/ui/const-generics/issue-67945-2.rs @@ -0,0 +1,21 @@ +// revisions: full min + +#![cfg_attr(full, allow(incomplete_features))] +#![cfg_attr(full, feature(const_generics))] +#![cfg_attr(min, feature(min_const_generics))] + +use std::mem::MaybeUninit; + +struct Bug<S> { + //~^ ERROR parameter `S` is never used + A: [(); { + let x: S = MaybeUninit::uninit(); + //[min]~^ ERROR generic parameters must not be used inside of non-trivial constant values + //[full]~^^ ERROR mismatched types + let b = &*(&x as *const _ as *const S); + //[min]~^ ERROR generic parameters must not be used inside of non-trivial constant values + 0 + }], +} + +fn main() {} diff --git a/src/test/ui/const-generics/issue-67945-3.full.stderr b/src/test/ui/const-generics/issue-67945-3.full.stderr new file mode 100644 index 00000000000..c33b88588c0 --- /dev/null +++ b/src/test/ui/const-generics/issue-67945-3.full.stderr @@ -0,0 +1,16 @@ +error: constant expression depends on a generic parameter + --> $DIR/issue-67945-3.rs:8:8 + | +LL | A: [(); { + | ________^ +LL | | +LL | | let x: Option<Box<Self>> = None; +LL | | +LL | | 0 +LL | | }], + | |______^ + | + = note: this may fail depending on what value the parameter takes + +error: aborting due to previous error + diff --git a/src/test/ui/const-generics/issue-67945-3.min.stderr b/src/test/ui/const-generics/issue-67945-3.min.stderr new file mode 100644 index 00000000000..9c6e101ece8 --- /dev/null +++ b/src/test/ui/const-generics/issue-67945-3.min.stderr @@ -0,0 +1,8 @@ +error: generic `Self` types are currently not permitted in anonymous constants + --> $DIR/issue-67945-3.rs:10:27 + | +LL | let x: Option<Box<Self>> = None; + | ^^^^ + +error: aborting due to previous error + diff --git a/src/test/ui/const-generics/issue-67945-3.rs b/src/test/ui/const-generics/issue-67945-3.rs new file mode 100644 index 00000000000..bca079101e2 --- /dev/null +++ b/src/test/ui/const-generics/issue-67945-3.rs @@ -0,0 +1,17 @@ +// revisions: full min + +#![cfg_attr(full, allow(incomplete_features))] +#![cfg_attr(full, feature(const_generics))] +#![cfg_attr(min, feature(min_const_generics))] + +struct Bug<S: ?Sized> { + A: [(); { + //[full]~^ ERROR constant expression depends on a generic parameter + let x: Option<Box<Self>> = None; + //[min]~^ ERROR generic `Self` types are currently not permitted in anonymous constants + 0 + }], + B: S +} + +fn main() {} diff --git a/src/test/ui/const-generics/issues/issue-61747.min.stderr b/src/test/ui/const-generics/issues/issue-61747.min.stderr index 2061b6c55bb..fdd9a569748 100644 --- a/src/test/ui/const-generics/issues/issue-61747.min.stderr +++ b/src/test/ui/const-generics/issues/issue-61747.min.stderr @@ -1,4 +1,4 @@ -error: generic parameters must not be used inside of non trivial constant values +error: generic parameters must not be used inside of non-trivial constant values --> $DIR/issue-61747.rs:8:30 | LL | fn successor() -> Const<{C + 1}> { diff --git a/src/test/ui/const-generics/issues/issue-61935.min.stderr b/src/test/ui/const-generics/issues/issue-61935.min.stderr index e5715ec658c..f461a31eeae 100644 --- a/src/test/ui/const-generics/issues/issue-61935.min.stderr +++ b/src/test/ui/const-generics/issues/issue-61935.min.stderr @@ -1,4 +1,4 @@ -error: generic parameters must not be used inside of non trivial constant values +error: generic parameters must not be used inside of non-trivial constant values --> $DIR/issue-61935.rs:10:23 | LL | Self:FooImpl<{N==0}> diff --git a/src/test/ui/const-generics/issues/issue-61935.rs b/src/test/ui/const-generics/issues/issue-61935.rs index 64257da0309..a181a8dabe5 100644 --- a/src/test/ui/const-generics/issues/issue-61935.rs +++ b/src/test/ui/const-generics/issues/issue-61935.rs @@ -9,7 +9,7 @@ impl<const N: usize> Foo for [(); N] where Self:FooImpl<{N==0}> //[full]~^ERROR constant expression depends on a generic parameter -//[min]~^^ERROR generic parameters must not be used inside of non trivial constant values +//[min]~^^ERROR generic parameters must not be used inside of non-trivial constant values {} trait FooImpl<const IS_ZERO: bool>{} diff --git a/src/test/ui/const-generics/issues/issue-62220.min.stderr b/src/test/ui/const-generics/issues/issue-62220.min.stderr index 943b689bf61..84975e8f3be 100644 --- a/src/test/ui/const-generics/issues/issue-62220.min.stderr +++ b/src/test/ui/const-generics/issues/issue-62220.min.stderr @@ -1,4 +1,4 @@ -error: generic parameters must not be used inside of non trivial constant values +error: generic parameters must not be used inside of non-trivial constant values --> $DIR/issue-62220.rs:8:59 | LL | pub type TruncatedVector<T, const N: usize> = Vector<T, { N - 1 }>; diff --git a/src/test/ui/const-generics/issues/issue-62220.rs b/src/test/ui/const-generics/issues/issue-62220.rs index acb13ad1170..5694dc6d04d 100644 --- a/src/test/ui/const-generics/issues/issue-62220.rs +++ b/src/test/ui/const-generics/issues/issue-62220.rs @@ -6,7 +6,7 @@ pub struct Vector<T, const N: usize>([T; N]); pub type TruncatedVector<T, const N: usize> = Vector<T, { N - 1 }>; -//[min]~^ ERROR generic parameters must not be used inside of non trivial constant values +//[min]~^ ERROR generic parameters must not be used inside of non-trivial constant values impl<T, const N: usize> Vector<T, { N }> { /// Drop the last component and return the vector with one fewer dimension. diff --git a/src/test/ui/const-generics/issues/issue-62456.min.stderr b/src/test/ui/const-generics/issues/issue-62456.min.stderr index 335f0ead278..f94ba8c0c9b 100644 --- a/src/test/ui/const-generics/issues/issue-62456.min.stderr +++ b/src/test/ui/const-generics/issues/issue-62456.min.stderr @@ -1,4 +1,4 @@ -error: generic parameters must not be used inside of non trivial constant values +error: generic parameters must not be used inside of non-trivial constant values --> $DIR/issue-62456.rs:7:20 | LL | let _ = [0u64; N + 1]; diff --git a/src/test/ui/const-generics/issues/issue-62456.rs b/src/test/ui/const-generics/issues/issue-62456.rs index c96868c00a3..338ec42799d 100644 --- a/src/test/ui/const-generics/issues/issue-62456.rs +++ b/src/test/ui/const-generics/issues/issue-62456.rs @@ -6,7 +6,7 @@ fn foo<const N: usize>() { let _ = [0u64; N + 1]; //[full]~^ ERROR constant expression depends on a generic parameter - //[min]~^^ ERROR generic parameters must not be used inside of non trivial constant values + //[min]~^^ ERROR generic parameters must not be used inside of non-trivial constant values } fn main() {} diff --git a/src/test/ui/const-generics/issues/issue-64494.min.stderr b/src/test/ui/const-generics/issues/issue-64494.min.stderr index 07822f86f52..f712171bbac 100644 --- a/src/test/ui/const-generics/issues/issue-64494.min.stderr +++ b/src/test/ui/const-generics/issues/issue-64494.min.stderr @@ -1,4 +1,4 @@ -error: generic parameters must not be used inside of non trivial constant values +error: generic parameters must not be used inside of non-trivial constant values --> $DIR/issue-64494.rs:16:38 | LL | impl<T: Foo> MyTrait for T where Is<{T::VAL == 5}>: True {} @@ -6,7 +6,7 @@ LL | impl<T: Foo> MyTrait for T where Is<{T::VAL == 5}>: True {} | = note: type parameters are currently not permitted in anonymous constants -error: generic parameters must not be used inside of non trivial constant values +error: generic parameters must not be used inside of non-trivial constant values --> $DIR/issue-64494.rs:19:38 | LL | impl<T: Foo> MyTrait for T where Is<{T::VAL == 6}>: True {} diff --git a/src/test/ui/const-generics/issues/issue-64494.rs b/src/test/ui/const-generics/issues/issue-64494.rs index 3b598a41522..b62ebf846d5 100644 --- a/src/test/ui/const-generics/issues/issue-64494.rs +++ b/src/test/ui/const-generics/issues/issue-64494.rs @@ -15,10 +15,10 @@ impl True for Is<{true}> {} impl<T: Foo> MyTrait for T where Is<{T::VAL == 5}>: True {} //[full]~^ ERROR constant expression depends on a generic parameter -//[min]~^^ ERROR generic parameters must not be used inside of non trivial constant values +//[min]~^^ ERROR generic parameters must not be used inside of non-trivial constant values impl<T: Foo> MyTrait for T where Is<{T::VAL == 6}>: True {} //[full]~^ ERROR constant expression depends on a generic parameter -//[min]~^^ ERROR generic parameters must not be used inside of non trivial constant values +//[min]~^^ ERROR generic parameters must not be used inside of non-trivial constant values //[min]~| ERROR conflicting implementations of trait `MyTrait` fn main() {} diff --git a/src/test/ui/const-generics/issues/issue-66205.min.stderr b/src/test/ui/const-generics/issues/issue-66205.min.stderr index 86709c389b6..a18126ccfef 100644 --- a/src/test/ui/const-generics/issues/issue-66205.min.stderr +++ b/src/test/ui/const-generics/issues/issue-66205.min.stderr @@ -1,4 +1,4 @@ -error: generic parameters must not be used inside of non trivial constant values +error: generic parameters must not be used inside of non-trivial constant values --> $DIR/issue-66205.rs:8:14 | LL | fact::<{ N - 1 }>(); diff --git a/src/test/ui/const-generics/issues/issue-66205.rs b/src/test/ui/const-generics/issues/issue-66205.rs index e115eff356a..668f49852e1 100644 --- a/src/test/ui/const-generics/issues/issue-66205.rs +++ b/src/test/ui/const-generics/issues/issue-66205.rs @@ -7,7 +7,7 @@ fn fact<const N: usize>() { fact::<{ N - 1 }>(); //[full]~^ ERROR constant expression depends on a generic parameter - //[min]~^^ ERROR generic parameters must not be used inside of non trivial constant values + //[min]~^^ ERROR generic parameters must not be used inside of non-trivial constant values } fn main() {} diff --git a/src/test/ui/const-generics/issues/issue-67739.min.stderr b/src/test/ui/const-generics/issues/issue-67739.min.stderr index 68f1733decb..ba378de4156 100644 --- a/src/test/ui/const-generics/issues/issue-67739.min.stderr +++ b/src/test/ui/const-generics/issues/issue-67739.min.stderr @@ -1,4 +1,4 @@ -error: generic parameters must not be used inside of non trivial constant values +error: generic parameters must not be used inside of non-trivial constant values --> $DIR/issue-67739.rs:12:30 | LL | [0u8; mem::size_of::<Self::Associated>()]; diff --git a/src/test/ui/const-generics/issues/issue-67739.rs b/src/test/ui/const-generics/issues/issue-67739.rs index 72bf3ee9602..296e4d423c4 100644 --- a/src/test/ui/const-generics/issues/issue-67739.rs +++ b/src/test/ui/const-generics/issues/issue-67739.rs @@ -11,7 +11,7 @@ pub trait Trait { fn associated_size(&self) -> usize { [0u8; mem::size_of::<Self::Associated>()]; //[full]~^ ERROR constant expression depends on a generic parameter - //[min]~^^ ERROR generic parameters must not be used inside of non trivial constant values + //[min]~^^ ERROR generic parameters must not be used inside of non-trivial constant values 0 } } diff --git a/src/test/ui/const-generics/issues/issue-68366.min.stderr b/src/test/ui/const-generics/issues/issue-68366.min.stderr index 8d34bdc6ea0..73d6fec6f9b 100644 --- a/src/test/ui/const-generics/issues/issue-68366.min.stderr +++ b/src/test/ui/const-generics/issues/issue-68366.min.stderr @@ -1,4 +1,4 @@ -error: generic parameters must not be used inside of non trivial constant values +error: generic parameters must not be used inside of non-trivial constant values --> $DIR/issue-68366.rs:12:37 | LL | impl <const N: usize> Collatz<{Some(N)}> {} diff --git a/src/test/ui/const-generics/issues/issue-68366.rs b/src/test/ui/const-generics/issues/issue-68366.rs index 819fcaffea1..ac313eb3b2f 100644 --- a/src/test/ui/const-generics/issues/issue-68366.rs +++ b/src/test/ui/const-generics/issues/issue-68366.rs @@ -11,7 +11,7 @@ struct Collatz<const N: Option<usize>>; impl <const N: usize> Collatz<{Some(N)}> {} //~^ ERROR the const parameter -//[min]~^^ generic parameters must not be used inside of non trivial constant values +//[min]~^^ generic parameters must not be used inside of non-trivial constant values struct Foo; diff --git a/src/test/ui/const-generics/issues/issue-68977.min.stderr b/src/test/ui/const-generics/issues/issue-68977.min.stderr index 5b2137b244c..59d2be3ce4b 100644 --- a/src/test/ui/const-generics/issues/issue-68977.min.stderr +++ b/src/test/ui/const-generics/issues/issue-68977.min.stderr @@ -1,4 +1,4 @@ -error: generic parameters must not be used inside of non trivial constant values +error: generic parameters must not be used inside of non-trivial constant values --> $DIR/issue-68977.rs:29:17 | LL | PhantomU8<{(INT_BITS + FRAC_BITS + 7) / 8}>; @@ -6,7 +6,7 @@ LL | PhantomU8<{(INT_BITS + FRAC_BITS + 7) / 8}>; | = help: it is currently only allowed to use either `INT_BITS` or `{ INT_BITS }` as generic constants -error: generic parameters must not be used inside of non trivial constant values +error: generic parameters must not be used inside of non-trivial constant values --> $DIR/issue-68977.rs:29:28 | LL | PhantomU8<{(INT_BITS + FRAC_BITS + 7) / 8}>; diff --git a/src/test/ui/const-generics/issues/issue-68977.rs b/src/test/ui/const-generics/issues/issue-68977.rs index 02e634efec3..49b305a5a78 100644 --- a/src/test/ui/const-generics/issues/issue-68977.rs +++ b/src/test/ui/const-generics/issues/issue-68977.rs @@ -27,8 +27,8 @@ fxp_storage_impls! { type FxpStorageHelper<const INT_BITS: u8, const FRAC_BITS: u8> = PhantomU8<{(INT_BITS + FRAC_BITS + 7) / 8}>; - //[min]~^ ERROR generic parameters must not be used inside of non trivial constant values - //[min]~| ERROR generic parameters must not be used inside of non trivial constant values + //[min]~^ ERROR generic parameters must not be used inside of non-trivial constant values + //[min]~| ERROR generic parameters must not be used inside of non-trivial constant values struct Fxp<const INT_BITS: u8, const FRAC_BITS: u8> where diff --git a/src/test/ui/const-generics/issues/issue-72787.min.stderr b/src/test/ui/const-generics/issues/issue-72787.min.stderr index d3e9887fe20..a4c80b1d8c0 100644 --- a/src/test/ui/const-generics/issues/issue-72787.min.stderr +++ b/src/test/ui/const-generics/issues/issue-72787.min.stderr @@ -1,4 +1,4 @@ -error: generic parameters must not be used inside of non trivial constant values +error: generic parameters must not be used inside of non-trivial constant values --> $DIR/issue-72787.rs:11:17 | LL | Condition<{ LHS <= RHS }>: True @@ -6,7 +6,7 @@ LL | Condition<{ LHS <= RHS }>: True | = help: it is currently only allowed to use either `LHS` or `{ LHS }` as generic constants -error: generic parameters must not be used inside of non trivial constant values +error: generic parameters must not be used inside of non-trivial constant values --> $DIR/issue-72787.rs:11:24 | LL | Condition<{ LHS <= RHS }>: True @@ -14,7 +14,7 @@ LL | Condition<{ LHS <= RHS }>: True | = help: it is currently only allowed to use either `RHS` or `{ RHS }` as generic constants -error: generic parameters must not be used inside of non trivial constant values +error: generic parameters must not be used inside of non-trivial constant values --> $DIR/issue-72787.rs:26:25 | LL | IsLessOrEqual<{ 8 - I }, { 8 - J }>: True, @@ -22,7 +22,7 @@ LL | IsLessOrEqual<{ 8 - I }, { 8 - J }>: True, | = help: it is currently only allowed to use either `I` or `{ I }` as generic constants -error: generic parameters must not be used inside of non trivial constant values +error: generic parameters must not be used inside of non-trivial constant values --> $DIR/issue-72787.rs:26:36 | LL | IsLessOrEqual<{ 8 - I }, { 8 - J }>: True, diff --git a/src/test/ui/const-generics/issues/issue-72787.rs b/src/test/ui/const-generics/issues/issue-72787.rs index 45c20191c88..779c1d2950e 100644 --- a/src/test/ui/const-generics/issues/issue-72787.rs +++ b/src/test/ui/const-generics/issues/issue-72787.rs @@ -10,8 +10,8 @@ pub trait True {} impl<const LHS: u32, const RHS: u32> True for IsLessOrEqual<LHS, RHS> where Condition<{ LHS <= RHS }>: True //[full]~^ Error constant expression depends on a generic parameter -//[min]~^^ Error generic parameters must not be used inside of non trivial constant values -//[min]~| Error generic parameters must not be used inside of non trivial constant values +//[min]~^^ Error generic parameters must not be used inside of non-trivial constant values +//[min]~| Error generic parameters must not be used inside of non-trivial constant values { } impl True for Condition<true> {} @@ -28,8 +28,8 @@ where //[full]~| constant expression depends on a generic parameter //[full]~| constant expression depends on a generic parameter //[full]~| constant expression depends on a generic parameter -//[min]~^^^^^ Error generic parameters must not be used inside of non trivial constant values -//[min]~| Error generic parameters must not be used inside of non trivial constant values +//[min]~^^^^^ Error generic parameters must not be used inside of non-trivial constant values +//[min]~| Error generic parameters must not be used inside of non-trivial constant values // Condition<{ 8 - I <= 8 - J }>: True, { fn print() { diff --git a/src/test/ui/const-generics/issues/issue-72819-generic-in-const-eval.min.stderr b/src/test/ui/const-generics/issues/issue-72819-generic-in-const-eval.min.stderr index 48a1f0bd19c..afc14c7dcff 100644 --- a/src/test/ui/const-generics/issues/issue-72819-generic-in-const-eval.min.stderr +++ b/src/test/ui/const-generics/issues/issue-72819-generic-in-const-eval.min.stderr @@ -1,4 +1,4 @@ -error: generic parameters must not be used inside of non trivial constant values +error: generic parameters must not be used inside of non-trivial constant values --> $DIR/issue-72819-generic-in-const-eval.rs:9:17 | LL | where Assert::<{N < usize::max_value() / 2}>: IsTrue, diff --git a/src/test/ui/const-generics/issues/issue-72819-generic-in-const-eval.rs b/src/test/ui/const-generics/issues/issue-72819-generic-in-const-eval.rs index b653b91d99d..65c7f00a72a 100644 --- a/src/test/ui/const-generics/issues/issue-72819-generic-in-const-eval.rs +++ b/src/test/ui/const-generics/issues/issue-72819-generic-in-const-eval.rs @@ -8,7 +8,7 @@ struct Arr<const N: usize> where Assert::<{N < usize::max_value() / 2}>: IsTrue, //[full]~^ ERROR constant expression depends on a generic parameter -//[min]~^^ ERROR generic parameters must not be used inside of non trivial constant values +//[min]~^^ ERROR generic parameters must not be used inside of non-trivial constant values { } diff --git a/src/test/ui/const-generics/issues/issue-76701-ty-param-in-const.min.stderr b/src/test/ui/const-generics/issues/issue-76701-ty-param-in-const.min.stderr index a39495e0b2d..0db948d0a45 100644 --- a/src/test/ui/const-generics/issues/issue-76701-ty-param-in-const.min.stderr +++ b/src/test/ui/const-generics/issues/issue-76701-ty-param-in-const.min.stderr @@ -1,4 +1,4 @@ -error: generic parameters must not be used inside of non trivial constant values +error: generic parameters must not be used inside of non-trivial constant values --> $DIR/issue-76701-ty-param-in-const.rs:6:46 | LL | fn ty_param<T>() -> [u8; std::mem::size_of::<T>()] { @@ -6,7 +6,7 @@ LL | fn ty_param<T>() -> [u8; std::mem::size_of::<T>()] { | = note: type parameters are currently not permitted in anonymous constants -error: generic parameters must not be used inside of non trivial constant values +error: generic parameters must not be used inside of non-trivial constant values --> $DIR/issue-76701-ty-param-in-const.rs:12:42 | LL | fn const_param<const N: usize>() -> [u8; N + 1] { diff --git a/src/test/ui/const-generics/issues/issue-76701-ty-param-in-const.rs b/src/test/ui/const-generics/issues/issue-76701-ty-param-in-const.rs index 9252b592360..3c5bfb03f08 100644 --- a/src/test/ui/const-generics/issues/issue-76701-ty-param-in-const.rs +++ b/src/test/ui/const-generics/issues/issue-76701-ty-param-in-const.rs @@ -5,13 +5,13 @@ fn ty_param<T>() -> [u8; std::mem::size_of::<T>()] { //[full]~^ ERROR constant expression depends on a generic parameter - //[min]~^^ ERROR generic parameters must not be used inside of non trivial constant values + //[min]~^^ ERROR generic parameters must not be used inside of non-trivial constant values todo!() } fn const_param<const N: usize>() -> [u8; N + 1] { //[full]~^ ERROR constant expression depends on a generic parameter - //[min]~^^ ERROR generic parameters must not be used inside of non trivial constant values + //[min]~^^ ERROR generic parameters must not be used inside of non-trivial constant values todo!() } diff --git a/src/test/ui/const-generics/min_const_generics/complex-expression.rs b/src/test/ui/const-generics/min_const_generics/complex-expression.rs index f9cb0d2829d..c6380f6394d 100644 --- a/src/test/ui/const-generics/min_const_generics/complex-expression.rs +++ b/src/test/ui/const-generics/min_const_generics/complex-expression.rs @@ -7,19 +7,19 @@ fn ok<const M: usize>() -> [u8; M] { } struct Break0<const N: usize>([u8; { N + 1 }]); -//~^ ERROR generic parameters must not be used inside of non trivial constant values +//~^ ERROR generic parameters must not be used inside of non-trivial constant values struct Break1<const N: usize>([u8; { { N } }]); -//~^ ERROR generic parameters must not be used inside of non trivial constant values +//~^ ERROR generic parameters must not be used inside of non-trivial constant values fn break2<const N: usize>() { let _: [u8; N + 1]; - //~^ ERROR generic parameters must not be used inside of non trivial constant values + //~^ ERROR generic parameters must not be used inside of non-trivial constant values } fn break3<const N: usize>() { let _ = [0; N + 1]; - //~^ ERROR generic parameters must not be used inside of non trivial constant values + //~^ ERROR generic parameters must not be used inside of non-trivial constant values } trait Foo { diff --git a/src/test/ui/const-generics/min_const_generics/complex-expression.stderr b/src/test/ui/const-generics/min_const_generics/complex-expression.stderr index baed8d13f00..d8897f53d7f 100644 --- a/src/test/ui/const-generics/min_const_generics/complex-expression.stderr +++ b/src/test/ui/const-generics/min_const_generics/complex-expression.stderr @@ -1,4 +1,4 @@ -error: generic parameters must not be used inside of non trivial constant values +error: generic parameters must not be used inside of non-trivial constant values --> $DIR/complex-expression.rs:9:38 | LL | struct Break0<const N: usize>([u8; { N + 1 }]); @@ -6,7 +6,7 @@ LL | struct Break0<const N: usize>([u8; { N + 1 }]); | = help: it is currently only allowed to use either `N` or `{ N }` as generic constants -error: generic parameters must not be used inside of non trivial constant values +error: generic parameters must not be used inside of non-trivial constant values --> $DIR/complex-expression.rs:12:40 | LL | struct Break1<const N: usize>([u8; { { N } }]); @@ -14,7 +14,7 @@ LL | struct Break1<const N: usize>([u8; { { N } }]); | = help: it is currently only allowed to use either `N` or `{ N }` as generic constants -error: generic parameters must not be used inside of non trivial constant values +error: generic parameters must not be used inside of non-trivial constant values --> $DIR/complex-expression.rs:16:17 | LL | let _: [u8; N + 1]; @@ -22,7 +22,7 @@ LL | let _: [u8; N + 1]; | = help: it is currently only allowed to use either `N` or `{ N }` as generic constants -error: generic parameters must not be used inside of non trivial constant values +error: generic parameters must not be used inside of non-trivial constant values --> $DIR/complex-expression.rs:21:17 | LL | let _ = [0; N + 1]; diff --git a/src/test/ui/const-generics/min_const_generics/self-ty-in-const-1.stderr b/src/test/ui/const-generics/min_const_generics/self-ty-in-const-1.stderr index edb77a87430..7dc81bf45af 100644 --- a/src/test/ui/const-generics/min_const_generics/self-ty-in-const-1.stderr +++ b/src/test/ui/const-generics/min_const_generics/self-ty-in-const-1.stderr @@ -1,4 +1,4 @@ -error: generic parameters must not be used inside of non trivial constant values +error: generic parameters must not be used inside of non-trivial constant values --> $DIR/self-ty-in-const-1.rs:4:41 | LL | fn t1() -> [u8; std::mem::size_of::<Self>()]; diff --git a/src/test/ui/const-generics/min_const_generics/static-reference-array-const-param.rs b/src/test/ui/const-generics/min_const_generics/static-reference-array-const-param.rs new file mode 100644 index 00000000000..0ef17109bed --- /dev/null +++ b/src/test/ui/const-generics/min_const_generics/static-reference-array-const-param.rs @@ -0,0 +1,8 @@ +#![feature(min_const_generics)] + +fn a<const X: &'static [u32]>() {} +//~^ ERROR `&'static [u32]` is forbidden as the type of a const generic parameter + +fn main() { + a::<{&[]}>(); +} diff --git a/src/test/ui/const-generics/min_const_generics/static-reference-array-const-param.stderr b/src/test/ui/const-generics/min_const_generics/static-reference-array-const-param.stderr new file mode 100644 index 00000000000..cc32d8a67fe --- /dev/null +++ b/src/test/ui/const-generics/min_const_generics/static-reference-array-const-param.stderr @@ -0,0 +1,11 @@ +error: `&'static [u32]` is forbidden as the type of a const generic parameter + --> $DIR/static-reference-array-const-param.rs:3:15 + | +LL | fn a<const X: &'static [u32]>() {} + | ^^^^^^^^^^^^^^ + | + = note: the only supported types are integers, `bool` and `char` + = note: more complex types are supported with `#[feature(const_generics)]` + +error: aborting due to previous error + diff --git a/src/test/ui/const-generics/min_const_generics/transmute-const-param-static-reference.rs b/src/test/ui/const-generics/min_const_generics/transmute-const-param-static-reference.rs new file mode 100644 index 00000000000..dfa1ece2f36 --- /dev/null +++ b/src/test/ui/const-generics/min_const_generics/transmute-const-param-static-reference.rs @@ -0,0 +1,12 @@ +#![feature(min_const_generics)] + +struct Const<const P: &'static ()>; +//~^ ERROR `&'static ()` is forbidden as the type of a const generic parameter + +fn main() { + const A: &'static () = unsafe { + std::mem::transmute(10 as *const ()) + }; + + let _ = Const::<{A}>; +} diff --git a/src/test/ui/const-generics/min_const_generics/transmute-const-param-static-reference.stderr b/src/test/ui/const-generics/min_const_generics/transmute-const-param-static-reference.stderr new file mode 100644 index 00000000000..063120ad074 --- /dev/null +++ b/src/test/ui/const-generics/min_const_generics/transmute-const-param-static-reference.stderr @@ -0,0 +1,11 @@ +error: `&'static ()` is forbidden as the type of a const generic parameter + --> $DIR/transmute-const-param-static-reference.rs:3:23 + | +LL | struct Const<const P: &'static ()>; + | ^^^^^^^^^^^ + | + = note: the only supported types are integers, `bool` and `char` + = note: more complex types are supported with `#[feature(const_generics)]` + +error: aborting due to previous error + diff --git a/src/test/ui/const-generics/params-in-ct-in-ty-param-lazy-norm.min.stderr b/src/test/ui/const-generics/params-in-ct-in-ty-param-lazy-norm.min.stderr index e545ae8571f..0dd591d891f 100644 --- a/src/test/ui/const-generics/params-in-ct-in-ty-param-lazy-norm.min.stderr +++ b/src/test/ui/const-generics/params-in-ct-in-ty-param-lazy-norm.min.stderr @@ -6,7 +6,7 @@ LL | struct Bar<T = [u8; N], const N: usize>(T); | = note: using type defaults and const parameters in the same parameter list is currently not permitted -error: generic parameters must not be used inside of non trivial constant values +error: generic parameters must not be used inside of non-trivial constant values --> $DIR/params-in-ct-in-ty-param-lazy-norm.rs:7:44 | LL | struct Foo<T, U = [u8; std::mem::size_of::<T>()]>(T, U); diff --git a/src/test/ui/const-generics/params-in-ct-in-ty-param-lazy-norm.rs b/src/test/ui/const-generics/params-in-ct-in-ty-param-lazy-norm.rs index e52773c78db..b9d74850f37 100644 --- a/src/test/ui/const-generics/params-in-ct-in-ty-param-lazy-norm.rs +++ b/src/test/ui/const-generics/params-in-ct-in-ty-param-lazy-norm.rs @@ -6,7 +6,7 @@ struct Foo<T, U = [u8; std::mem::size_of::<T>()]>(T, U); //[full]~^ ERROR constant values inside of type parameter defaults -//[min]~^^ ERROR generic parameters must not be used inside of non trivial +//[min]~^^ ERROR generic parameters must not be used inside of non-trivial // FIXME(const_generics:defaults): We still don't know how to we deal with type defaults. struct Bar<T = [u8; N], const N: usize>(T); diff --git a/src/test/ui/const-generics/wf-misc.min.stderr b/src/test/ui/const-generics/wf-misc.min.stderr index f2acb8fc06e..1c52d601749 100644 --- a/src/test/ui/const-generics/wf-misc.min.stderr +++ b/src/test/ui/const-generics/wf-misc.min.stderr @@ -1,4 +1,4 @@ -error: generic parameters must not be used inside of non trivial constant values +error: generic parameters must not be used inside of non-trivial constant values --> $DIR/wf-misc.rs:9:17 | LL | let _: [u8; N + 1]; @@ -6,7 +6,7 @@ LL | let _: [u8; N + 1]; | = help: it is currently only allowed to use either `N` or `{ N }` as generic constants -error: generic parameters must not be used inside of non trivial constant values +error: generic parameters must not be used inside of non-trivial constant values --> $DIR/wf-misc.rs:17:21 | LL | let _: Const::<{N + 1}>; diff --git a/src/test/ui/const-generics/wf-misc.rs b/src/test/ui/const-generics/wf-misc.rs index e6f7a9963e8..f8c41404c46 100644 --- a/src/test/ui/const-generics/wf-misc.rs +++ b/src/test/ui/const-generics/wf-misc.rs @@ -8,7 +8,7 @@ pub fn arr_len<const N: usize>() { let _: [u8; N + 1]; //[full]~^ ERROR constant expression depends on a generic parameter - //[min]~^^ ERROR generic parameters must not be used inside of non trivial + //[min]~^^ ERROR generic parameters must not be used inside of non-trivial } struct Const<const N: usize>; @@ -16,7 +16,7 @@ struct Const<const N: usize>; pub fn func_call<const N: usize>() { let _: Const::<{N + 1}>; //[full]~^ ERROR constant expression depends on a generic parameter - //[min]~^^ ERROR generic parameters must not be used inside of non trivial + //[min]~^^ ERROR generic parameters must not be used inside of non-trivial } fn main() {} |
