Skip to content

Commit 6cdf747

Browse files
committed
Add regression tests for seemingly fixed issues
1 parent e1b9081 commit 6cdf747

File tree

4 files changed

+73
-0
lines changed

4 files changed

+73
-0
lines changed
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
#![allow(incomplete_features)]
2+
#![feature(const_closures, const_trait_impl)]
3+
4+
const fn create_array<const N: usize>(mut f: impl FnMut(usize) -> u32 + Copy) -> [u32; N] {
5+
let mut array = [0; N];
6+
let mut i = 0;
7+
loop {
8+
array[i] = f(i);
9+
//~^ ERROR the trait bound `impl FnMut(usize) -> u32 + Copy: [const] FnMut(usize)` is not satisfied [E0277]
10+
i += 1;
11+
if i == N {
12+
break;
13+
}
14+
}
15+
array
16+
}
17+
18+
fn main() {
19+
let x = create_array(const |i| 2 * i as u32);
20+
assert_eq!(x, [0, 2, 4, 6, 8]);
21+
22+
let y = create_array(const |i| 2 * i as u32 + 1);
23+
assert_eq!(y, [1, 3, 5, 7, 9]);
24+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
error[E0277]: the trait bound `impl FnMut(usize) -> u32 + Copy: [const] FnMut(usize)` is not satisfied
2+
--> $DIR/const-closure-issue-125866-error.rs:8:22
3+
|
4+
LL | array[i] = f(i);
5+
| - ^
6+
| |
7+
| required by a bound introduced by this call
8+
9+
error: aborting due to 1 previous error
10+
11+
For more information about this error, try `rustc --explain E0277`.
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
//@ run-pass
2+
3+
#![allow(incomplete_features)]
4+
#![feature(const_closures, const_trait_impl)]
5+
6+
const fn create_array<const N: usize>(mut f: impl [const] FnMut(usize) -> u32 + Copy) -> [u32; N] {
7+
let mut array = [0; N];
8+
let mut i = 0;
9+
loop {
10+
array[i] = f(i);
11+
i += 1;
12+
if i == N {
13+
break;
14+
}
15+
}
16+
array
17+
}
18+
19+
fn main() {
20+
let x = create_array(const |i| 2 * i as u32);
21+
assert_eq!(x, [0, 2, 4, 6, 8]);
22+
23+
let y = create_array(const |i| 2 * i as u32 + 1);
24+
assert_eq!(y, [1, 3, 5, 7, 9]);
25+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
//@ check-pass
2+
3+
#![feature(const_trait_impl, const_destruct, const_clone)]
4+
5+
use std::marker::Destruct;
6+
7+
const fn f<T, F: [const] Fn(&T) -> T + [const] Destruct>(_: F) {}
8+
9+
const fn g<T: [const] Clone>() {
10+
f(<T as Clone>::clone);
11+
}
12+
13+
fn main() {}

0 commit comments

Comments
 (0)