This repository was archived by the owner on May 28, 2025. It is now read-only.
File tree Expand file tree Collapse file tree 10 files changed +203
-0
lines changed
src/test/ui/const-generics Expand file tree Collapse file tree 10 files changed +203
-0
lines changed Original file line number Diff line number Diff line change
1
+ #![feature(generic_const_exprs, array_map)]
2
+ #![allow(incomplete_features)]
3
+
4
+ pub struct ConstCheck<const CHECK: bool>;
5
+
6
+ pub trait True {}
7
+ impl True for ConstCheck<true> {}
8
+
9
+ pub trait OrdesDec {
10
+ type Newlen;
11
+ type Output;
12
+
13
+ fn pop(self) -> (Self::Newlen, Self::Output);
14
+ }
15
+
16
+ impl<T, const N: usize> OrdesDec for [T; N]
17
+ where
18
+ ConstCheck<{N > 1}>: True,
19
+ [T; N - 1]: Sized,
20
+ {
21
+ type Newlen = [T; N - 1];
22
+ type Output = T;
23
+
24
+ fn pop(self) -> (Self::Newlen, Self::Output) {
25
+ let mut iter = IntoIter::new(self);
26
+ //~^ ERROR: failed to resolve: use of undeclared type `IntoIter`
27
+ let end = iter.next_back().unwrap();
28
+ let new = [(); N - 1].map(move |()| iter.next().unwrap());
29
+ (new, end)
30
+ }
31
+ }
32
+
33
+ fn main() {}
Original file line number Diff line number Diff line change
1
+ error[E0433]: failed to resolve: use of undeclared type `IntoIter`
2
+ --> $DIR/issue-82956.rs:25:24
3
+ |
4
+ LL | let mut iter = IntoIter::new(self);
5
+ | ^^^^^^^^ not found in this scope
6
+ |
7
+ help: consider importing one of these items
8
+ |
9
+ LL | use std::array::IntoIter;
10
+ |
11
+ LL | use std::collections::binary_heap::IntoIter;
12
+ |
13
+ LL | use std::collections::btree_map::IntoIter;
14
+ |
15
+ LL | use std::collections::btree_set::IntoIter;
16
+ |
17
+ and 8 other candidates
18
+
19
+ error: aborting due to previous error
20
+
21
+ For more information about this error, try `rustc --explain E0433`.
Original file line number Diff line number Diff line change
1
+ #![allow(incomplete_features)]
2
+ #![feature(generic_const_exprs)]
3
+
4
+ trait Bar<const N: usize> {}
5
+
6
+ trait Foo<'a> {
7
+ const N: usize;
8
+ type Baz: Bar<{ Self::N }>;
9
+ //~^ ERROR: unconstrained generic constant
10
+ }
11
+
12
+ fn main() {}
Original file line number Diff line number Diff line change
1
+ error: unconstrained generic constant
2
+ --> $DIR/issue-84659.rs:8:15
3
+ |
4
+ LL | type Baz: Bar<{ Self::N }>;
5
+ | ^^^^^^^^^^^^^^^^
6
+ |
7
+ = help: try adding a `where` bound using this expression: `where [(); { Self::N }]:`
8
+
9
+ error: aborting due to previous error
10
+
Original file line number Diff line number Diff line change
1
+ #![feature(generic_const_exprs)]
2
+ #![allow(incomplete_features)]
3
+
4
+ pub trait X {
5
+ const Y: usize;
6
+ }
7
+
8
+ fn z<T>(t: T)
9
+ where
10
+ T: X,
11
+ [(); T::Y]: ,
12
+ {
13
+ }
14
+
15
+ fn unit_literals() {
16
+ z(" ");
17
+ //~^ ERROR: the trait bound `&str: X` is not satisfied
18
+ }
19
+
20
+ fn main() {}
Original file line number Diff line number Diff line change
1
+ error[E0277]: the trait bound `&str: X` is not satisfied
2
+ --> $DIR/issue-86530.rs:16:7
3
+ |
4
+ LL | z(" ");
5
+ | ^^^ the trait `X` is not implemented for `&str`
6
+ |
7
+ note: required by a bound in `z`
8
+ --> $DIR/issue-86530.rs:10:8
9
+ |
10
+ LL | fn z<T>(t: T)
11
+ | - required by a bound in this
12
+ LL | where
13
+ LL | T: X,
14
+ | ^ required by this bound in `z`
15
+
16
+ error: aborting due to previous error
17
+
18
+ For more information about this error, try `rustc --explain E0277`.
Original file line number Diff line number Diff line change
1
+ // run-pass
2
+ #![feature(adt_const_params, generic_const_exprs)]
3
+ #![allow(incomplete_features)]
4
+
5
+ pub trait Foo {
6
+ const ASSOC_C: usize;
7
+ fn foo() where [(); Self::ASSOC_C]:;
8
+ }
9
+
10
+ struct Bar<const N: &'static ()>;
11
+ impl<const N: &'static ()> Foo for Bar<N> {
12
+ const ASSOC_C: usize = 3;
13
+
14
+ fn foo() where [u8; Self::ASSOC_C]: {
15
+ let _: [u8; Self::ASSOC_C] = loop {};
16
+ }
17
+ }
18
+
19
+ fn main() {}
Original file line number Diff line number Diff line change
1
+ // run-pass
2
+ #![feature(adt_const_params, generic_const_exprs)]
3
+ #![allow(incomplete_features, unused_variables)]
4
+
5
+ struct F<const S: &'static str>;
6
+ impl<const S: &'static str> X for F<{ S }> {
7
+ const W: usize = 3;
8
+
9
+ fn d(r: &[u8; Self::W]) -> F<{ S }> {
10
+ let x: [u8; Self::W] = [0; Self::W];
11
+ F
12
+ }
13
+ }
14
+
15
+ pub trait X {
16
+ const W: usize;
17
+ fn d(r: &[u8; Self::W]) -> Self;
18
+ }
19
+
20
+ fn main() {}
Original file line number Diff line number Diff line change
1
+ trait Trait<const N: usize> {
2
+ const Assoc: usize;
3
+ }
4
+
5
+ impl<const N: usize> Trait<N> for () {
6
+ const Assoc: usize = 1;
7
+ }
8
+
9
+
10
+ pub const fn foo<const N: usize>() where (): Trait<N> {
11
+ let bar = [(); <()>::Assoc];
12
+ //~^ error: constant expression depends on a generic parameter
13
+ }
14
+
15
+ trait Trait2<const N: usize> {
16
+ const Assoc2: usize;
17
+ }
18
+
19
+ impl<const N: usize> Trait2<N> for () {
20
+ const Assoc2: usize = N - 1;
21
+ }
22
+
23
+
24
+ pub const fn foo2<const N: usize>() where (): Trait2<N> {
25
+ let bar2 = [(); <()>::Assoc2];
26
+ //~^ error: constant expression depends on a generic parameter
27
+ }
28
+
29
+ fn main() {
30
+ foo::<0>();
31
+ foo2::<0>();
32
+ }
Original file line number Diff line number Diff line change
1
+ error: constant expression depends on a generic parameter
2
+ --> $DIR/sneaky-array-repeat-expr.rs:11:20
3
+ |
4
+ LL | let bar = [(); <()>::Assoc];
5
+ | ^^^^^^^^^^^
6
+ |
7
+ = note: this may fail depending on what value the parameter takes
8
+
9
+ error: constant expression depends on a generic parameter
10
+ --> $DIR/sneaky-array-repeat-expr.rs:25:21
11
+ |
12
+ LL | let bar2 = [(); <()>::Assoc2];
13
+ | ^^^^^^^^^^^^
14
+ |
15
+ = note: this may fail depending on what value the parameter takes
16
+
17
+ error: aborting due to 2 previous errors
18
+
You can’t perform that action at this time.
0 commit comments