diff options
Diffstat (limited to 'src')
7 files changed, 124 insertions, 2 deletions
diff --git a/src/test/ui/const-generics/fn_with_two_const_inputs.rs b/src/test/ui/const-generics/fn_with_two_const_inputs.rs new file mode 100644 index 00000000000..0d6246a9f02 --- /dev/null +++ b/src/test/ui/const-generics/fn_with_two_const_inputs.rs @@ -0,0 +1,23 @@ +#![feature(generic_const_exprs)] +#![allow(incomplete_features)] + +const fn both(_: usize, b: usize) -> usize { + b +} + +fn foo<const N: usize, const M: usize>() -> [(); N + 2] +where + [(); both(N + 1, M + 1)]:, +{ + bar() + //~^ ERROR: unconstrained generic constant +} + +fn bar<const N: usize>() -> [(); N] +where + [(); N + 1]:, +{ + [(); N] +} + +fn main() {} diff --git a/src/test/ui/const-generics/fn_with_two_const_inputs.stderr b/src/test/ui/const-generics/fn_with_two_const_inputs.stderr new file mode 100644 index 00000000000..614e7e0d2fc --- /dev/null +++ b/src/test/ui/const-generics/fn_with_two_const_inputs.stderr @@ -0,0 +1,18 @@ +error: unconstrained generic constant + --> $DIR/fn_with_two_const_inputs.rs:12:5 + | +LL | bar() + | ^^^ + | + = help: try adding a `where` bound using this expression: `where [(); N + 1]:` +note: required by a bound in `bar` + --> $DIR/fn_with_two_const_inputs.rs:18:10 + | +LL | fn bar<const N: usize>() -> [(); N] + | --- required by a bound in this +LL | where +LL | [(); N + 1]:, + | ^^^^^ required by this bound in `bar` + +error: aborting due to previous error + diff --git a/src/test/ui/const-generics/fn_with_two_same_const_inputs.rs b/src/test/ui/const-generics/fn_with_two_same_const_inputs.rs new file mode 100644 index 00000000000..f0ce093e07a --- /dev/null +++ b/src/test/ui/const-generics/fn_with_two_same_const_inputs.rs @@ -0,0 +1,22 @@ +// check-pass +#![feature(generic_const_exprs)] +#![allow(incomplete_features)] + +const fn both(_: usize, b: usize) -> usize { + b +} + +fn foo<const N: usize>() +where + [(); both(N + 1, N + 1)]:, +{ + bar::<N>(); +} + +fn bar<const N: usize>() +where + [(); N + 1]:, +{ +} + +fn main() {} diff --git a/src/test/ui/const-generics/generic_const_exprs/const_kind_expr/wf_obligation.rs b/src/test/ui/const-generics/generic_const_exprs/const_kind_expr/wf_obligation.rs index d64468767eb..6093fc70b16 100644 --- a/src/test/ui/const-generics/generic_const_exprs/const_kind_expr/wf_obligation.rs +++ b/src/test/ui/const-generics/generic_const_exprs/const_kind_expr/wf_obligation.rs @@ -15,8 +15,8 @@ where [(); (L - 1) + 1 + L]:, { foo::<_, L>([(); L + 1 + L]); - //~^ ERROR: unconstrained generic constant - //~| ERROR: mismatched types + //~^ ERROR: mismatched types + //~^^ ERROR: unconstrained generic constant } fn main() {} diff --git a/src/test/ui/const-generics/two_matching_preds.rs b/src/test/ui/const-generics/two_matching_preds.rs new file mode 100644 index 00000000000..de608f73e2c --- /dev/null +++ b/src/test/ui/const-generics/two_matching_preds.rs @@ -0,0 +1,19 @@ +// check-pass +#![feature(generic_const_exprs)] +#![allow(incomplete_features)] + +fn foo<const N: usize>() +where + [(); N + 1]:, + [(); N + 1]:, +{ + bar::<N>(); +} + +fn bar<const N: usize>() +where + [(); N + 1]:, +{ +} + +fn main() {} diff --git a/src/test/ui/const-generics/unify_with_nested_expr.rs b/src/test/ui/const-generics/unify_with_nested_expr.rs new file mode 100644 index 00000000000..1271e0902a3 --- /dev/null +++ b/src/test/ui/const-generics/unify_with_nested_expr.rs @@ -0,0 +1,18 @@ +#![feature(generic_const_exprs)] +#![allow(incomplete_features)] + +fn foo<const N: usize>() +where + [(); N + 1 + 1]:, +{ + bar(); + //~^ ERROR: type annotations +} + +fn bar<const N: usize>() +where + [(); N + 1]:, +{ +} + +fn main() {} diff --git a/src/test/ui/const-generics/unify_with_nested_expr.stderr b/src/test/ui/const-generics/unify_with_nested_expr.stderr new file mode 100644 index 00000000000..8bab0dff7f2 --- /dev/null +++ b/src/test/ui/const-generics/unify_with_nested_expr.stderr @@ -0,0 +1,22 @@ +error[E0284]: type annotations needed + --> $DIR/unify_with_nested_expr.rs:8:5 + | +LL | bar(); + | ^^^ cannot infer the value of the const parameter `N` declared on the function `bar` + | +note: required by a bound in `bar` + --> $DIR/unify_with_nested_expr.rs:14:10 + | +LL | fn bar<const N: usize>() + | --- required by a bound in this +LL | where +LL | [(); N + 1]:, + | ^^^^^ required by this bound in `bar` +help: consider specifying the generic argument + | +LL | bar::<N>(); + | +++++ + +error: aborting due to previous error + +For more information about this error, try `rustc --explain E0284`. |
