Add missing tests in root const-gen dir
This commit is contained in:
parent
be650a7ecd
commit
9bf40f10bc
83 changed files with 1182 additions and 102 deletions
|
@ -1,7 +1,9 @@
|
|||
// check-pass
|
||||
// revisions: full min
|
||||
|
||||
#![feature(const_generics)]
|
||||
//~^ WARN the feature `const_generics` is incomplete
|
||||
#![cfg_attr(full, feature(const_generics))]
|
||||
#![cfg_attr(full, allow(incomplete_features))]
|
||||
#![cfg_attr(min, feature(min_const_generics))]
|
||||
|
||||
trait Trait {}
|
||||
|
||||
|
|
|
@ -0,0 +1,18 @@
|
|||
error: constant expression depends on a generic parameter
|
||||
--> $DIR/array-size-in-generic-struct-param.rs:9:38
|
||||
|
|
||||
LL | struct ArithArrayLen<const N: usize>([u32; 0 + N]);
|
||||
| ^^^^^^^^^^^^
|
||||
|
|
||||
= note: this may fail depending on what value the parameter takes
|
||||
|
||||
error: constant expression depends on a generic parameter
|
||||
--> $DIR/array-size-in-generic-struct-param.rs:20:10
|
||||
|
|
||||
LL | arr: [u8; CFG.arr_size],
|
||||
| ^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
= note: this may fail depending on what value the parameter takes
|
||||
|
||||
error: aborting due to 2 previous errors
|
||||
|
|
@ -0,0 +1,27 @@
|
|||
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]);
|
||||
| ^ 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/array-size-in-generic-struct-param.rs:20:15
|
||||
|
|
||||
LL | arr: [u8; CFG.arr_size],
|
||||
| ^^^ non-trivial anonymous constants must not depend on the parameter `CFG`
|
||||
|
|
||||
= help: it is currently only allowed to use either `CFG` or `{ CFG }` as generic constants
|
||||
|
||||
error: using `Config` as const generic parameters is forbidden
|
||||
--> $DIR/array-size-in-generic-struct-param.rs:18:21
|
||||
|
|
||||
LL | struct B<const CFG: Config> {
|
||||
| ^^^^^^
|
||||
|
|
||||
= note: the only supported types are integers, `bool` and `char`
|
||||
= note: more complex types are supported with `#[feature(const_generics)]`
|
||||
|
||||
error: aborting due to 3 previous errors
|
||||
|
|
@ -1,9 +1,14 @@
|
|||
#![feature(const_generics)]
|
||||
//~^ WARN the feature `const_generics` is incomplete
|
||||
// Tests that array sizes that depend on const-params does not yet work.
|
||||
// revisions: full min
|
||||
|
||||
#![cfg_attr(full, feature(const_generics))]
|
||||
#![cfg_attr(full, allow(incomplete_features))]
|
||||
#![cfg_attr(min, feature(min_const_generics))]
|
||||
|
||||
#[allow(dead_code)]
|
||||
struct ArithArrayLen<const N: usize>([u32; 0 + N]);
|
||||
//~^ ERROR constant expression depends on a generic parameter
|
||||
//[full]~^ ERROR constant expression depends on a generic parameter
|
||||
//[min]~^^ ERROR generic parameters must not be used inside of non trivial constant values
|
||||
|
||||
#[derive(PartialEq, Eq)]
|
||||
struct Config {
|
||||
|
@ -11,7 +16,10 @@ struct Config {
|
|||
}
|
||||
|
||||
struct B<const CFG: Config> {
|
||||
arr: [u8; CFG.arr_size], //~ ERROR constant expression depends on a generic parameter
|
||||
//[min]~^ ERROR using `Config` as const generic parameters 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
|
||||
}
|
||||
|
||||
const C: Config = Config { arr_size: 5 };
|
||||
|
|
|
@ -1,7 +1,9 @@
|
|||
// run-pass
|
||||
// revisions: full min
|
||||
|
||||
#![feature(const_generics)]
|
||||
//~^ WARN the feature `const_generics` is incomplete
|
||||
#![cfg_attr(full, feature(const_generics))]
|
||||
#![cfg_attr(full, allow(incomplete_features))]
|
||||
#![cfg_attr(min, feature(min_const_generics))]
|
||||
|
||||
pub trait Foo {
|
||||
fn foo(&self);
|
||||
|
|
|
@ -1,7 +1,9 @@
|
|||
// run-pass
|
||||
// revisions: full min
|
||||
|
||||
#![feature(const_generics)]
|
||||
//~^ WARN the feature `const_generics` is incomplete
|
||||
#![cfg_attr(full, feature(const_generics))]
|
||||
#![cfg_attr(full, allow(incomplete_features))]
|
||||
#![cfg_attr(min, feature(min_const_generics))]
|
||||
|
||||
use std::fmt::Debug;
|
||||
|
||||
|
|
|
@ -0,0 +1,11 @@
|
|||
error[E0282]: type annotations needed
|
||||
--> $DIR/cannot-infer-const-args.rs:12:5
|
||||
|
|
||||
LL | foo();
|
||||
| ^^^
|
||||
|
|
||||
= note: unable to infer the value of a const parameter
|
||||
|
||||
error: aborting due to previous error
|
||||
|
||||
For more information about this error, try `rustc --explain E0282`.
|
|
@ -0,0 +1,11 @@
|
|||
error[E0282]: type annotations needed
|
||||
--> $DIR/cannot-infer-const-args.rs:12:5
|
||||
|
|
||||
LL | foo();
|
||||
| ^^^
|
||||
|
|
||||
= note: unable to infer the value of a const parameter
|
||||
|
||||
error: aborting due to previous error
|
||||
|
||||
For more information about this error, try `rustc --explain E0282`.
|
|
@ -1,5 +1,8 @@
|
|||
#![feature(const_generics)]
|
||||
//~^ WARN the feature `const_generics` is incomplete
|
||||
// revisions: full min
|
||||
|
||||
#![cfg_attr(full, feature(const_generics))]
|
||||
#![cfg_attr(full, allow(incomplete_features))]
|
||||
#![cfg_attr(min, feature(min_const_generics))]
|
||||
|
||||
fn foo<const X: usize>() -> usize {
|
||||
0
|
||||
|
|
|
@ -1,6 +1,9 @@
|
|||
// run-pass
|
||||
#![feature(const_generics)]
|
||||
#![allow(incomplete_features)]
|
||||
// revisions: full min
|
||||
|
||||
#![cfg_attr(full, feature(const_generics))]
|
||||
#![cfg_attr(full, allow(incomplete_features))]
|
||||
#![cfg_attr(min, feature(min_const_generics))]
|
||||
|
||||
fn foo<const N: usize>(v: &[u8; N]) -> &[u8] {
|
||||
v
|
||||
|
|
|
@ -1,8 +1,10 @@
|
|||
// Test that a concrete const type i.e. A<2>, can be used as an argument type in a function
|
||||
// run-pass
|
||||
// revisions: full min
|
||||
|
||||
#![feature(const_generics)]
|
||||
//~^ WARN the feature `const_generics` is incomplete
|
||||
#![cfg_attr(full, feature(const_generics))]
|
||||
#![cfg_attr(full, allow(incomplete_features))]
|
||||
#![cfg_attr(min, feature(min_const_generics))]
|
||||
|
||||
struct A<const N: usize>; // ok
|
||||
|
||||
|
|
|
@ -1,9 +1,11 @@
|
|||
// Test that a method/associated non-method within an impl block of a concrete const type i.e. A<2>,
|
||||
// is callable.
|
||||
// run-pass
|
||||
// revisions: full min
|
||||
|
||||
#![feature(const_generics)]
|
||||
//~^ WARN the feature `const_generics` is incomplete
|
||||
#![cfg_attr(full, feature(const_generics))]
|
||||
#![cfg_attr(full, allow(incomplete_features))]
|
||||
#![cfg_attr(min, feature(min_const_generics))]
|
||||
|
||||
pub struct A<const N: u32>;
|
||||
|
||||
|
|
|
@ -1,7 +1,10 @@
|
|||
// Checks whether conditions in traits can be evaluated.
|
||||
// run-pass
|
||||
// revisions: full min
|
||||
|
||||
#![feature(const_generics)]
|
||||
//~^ WARN the feature `const_generics` is incomplete
|
||||
#![cfg_attr(full, feature(const_generics))]
|
||||
#![cfg_attr(full, allow(incomplete_features))]
|
||||
#![cfg_attr(min, feature(min_const_generics))]
|
||||
|
||||
trait IsZeroTrait<const IS_ZERO: bool>{}
|
||||
|
||||
|
|
|
@ -1,7 +1,10 @@
|
|||
// Check that const args in functions can be used.
|
||||
// run-pass
|
||||
// revisions: full min
|
||||
|
||||
#![feature(const_generics)]
|
||||
//~^ WARN the feature `const_generics` is incomplete
|
||||
#![cfg_attr(full, feature(const_generics))]
|
||||
#![cfg_attr(full, allow(incomplete_features))]
|
||||
#![cfg_attr(min, feature(min_const_generics))]
|
||||
|
||||
fn const_u32_identity<const X: u32>() -> u32 {
|
||||
X
|
||||
|
|
|
@ -1,7 +1,9 @@
|
|||
// run-pass
|
||||
// revisions: full
|
||||
// FIXME Omitted min revision for now due to ICE.
|
||||
|
||||
#![feature(const_generics)]
|
||||
//~^ WARN the feature `const_generics` is incomplete
|
||||
#![cfg_attr(full, feature(const_generics))]
|
||||
#![cfg_attr(full, allow(incomplete_features))]
|
||||
#![allow(dead_code)]
|
||||
|
||||
fn test<const N: usize>() {}
|
||||
|
|
|
@ -0,0 +1,8 @@
|
|||
error: expected one of `,` or `>`, found `+`
|
||||
--> $DIR/const-expression-parameter.rs:16:22
|
||||
|
|
||||
LL | i32_identity::<1 + 2>();
|
||||
| ^ expected one of `,` or `>`
|
||||
|
||||
error: aborting due to previous error
|
||||
|
|
@ -0,0 +1,8 @@
|
|||
error: expected one of `,` or `>`, found `+`
|
||||
--> $DIR/const-expression-parameter.rs:16:22
|
||||
|
|
||||
LL | i32_identity::<1 + 2>();
|
||||
| ^ expected one of `,` or `>`
|
||||
|
||||
error: aborting due to previous error
|
||||
|
|
@ -1,5 +1,8 @@
|
|||
#![feature(const_generics)]
|
||||
//~^ WARN the feature `const_generics` is incomplete
|
||||
// revisions: full min
|
||||
|
||||
#![cfg_attr(full, feature(const_generics))]
|
||||
#![cfg_attr(full, allow(incomplete_features))]
|
||||
#![cfg_attr(min, feature(min_const_generics))]
|
||||
|
||||
fn i32_identity<const X: i32>() -> i32 {
|
||||
5
|
||||
|
|
|
@ -1,6 +1,10 @@
|
|||
// Check `const fn` with const param is alright
|
||||
// run-pass
|
||||
#![feature(const_generics)]
|
||||
//~^ WARN the feature `const_generics` is incomplete
|
||||
// revisions: full min
|
||||
|
||||
#![cfg_attr(full, feature(const_generics))]
|
||||
#![cfg_attr(full, allow(incomplete_features))]
|
||||
#![cfg_attr(min, feature(min_const_generics))]
|
||||
|
||||
const fn const_u32_identity<const X: u32>() -> u32 {
|
||||
X
|
||||
|
|
|
@ -1,7 +1,9 @@
|
|||
// run-pass
|
||||
// revisions: full min
|
||||
|
||||
#![feature(const_generics)]
|
||||
//~^ WARN the feature `const_generics` is incomplete
|
||||
#![cfg_attr(full, feature(const_generics))]
|
||||
#![cfg_attr(full, allow(incomplete_features))]
|
||||
#![cfg_attr(min, feature(min_const_generics))]
|
||||
|
||||
struct Foo<T, const N: usize>([T; N]);
|
||||
|
||||
|
|
|
@ -1,7 +1,9 @@
|
|||
// run-pass
|
||||
// revisions: full min
|
||||
|
||||
#![feature(const_generics)]
|
||||
//~^ WARN the feature `const_generics` is incomplete
|
||||
#![cfg_attr(full, feature(const_generics))]
|
||||
#![cfg_attr(full, allow(incomplete_features))]
|
||||
#![cfg_attr(min, feature(min_const_generics))]
|
||||
|
||||
#[derive(Debug)]
|
||||
struct S<const N: usize>;
|
||||
|
|
|
@ -1,7 +1,9 @@
|
|||
// check-pass
|
||||
// revisions: full min
|
||||
|
||||
#![allow(incomplete_features)]
|
||||
#![feature(const_generics)]
|
||||
#![cfg_attr(full, feature(const_generics))]
|
||||
#![cfg_attr(full, allow(incomplete_features))]
|
||||
#![cfg_attr(min, feature(min_const_generics))]
|
||||
|
||||
struct Foo<const A: usize, const B: usize>;
|
||||
|
||||
|
|
|
@ -0,0 +1,33 @@
|
|||
error[E0637]: `&` without an explicit lifetime name cannot be used here
|
||||
--> $DIR/const-param-elided-lifetime.rs:11:19
|
||||
|
|
||||
LL | struct A<const N: &u8>;
|
||||
| ^ explicit lifetime name needed here
|
||||
|
||||
error[E0637]: `&` without an explicit lifetime name cannot be used here
|
||||
--> $DIR/const-param-elided-lifetime.rs:16:15
|
||||
|
|
||||
LL | impl<const N: &u8> A<N> {
|
||||
| ^ explicit lifetime name needed here
|
||||
|
||||
error[E0637]: `&` without an explicit lifetime name cannot be used here
|
||||
--> $DIR/const-param-elided-lifetime.rs:19:21
|
||||
|
|
||||
LL | fn foo<const M: &u8>(&self) {}
|
||||
| ^ explicit lifetime name needed here
|
||||
|
||||
error[E0637]: `&` without an explicit lifetime name cannot be used here
|
||||
--> $DIR/const-param-elided-lifetime.rs:24:15
|
||||
|
|
||||
LL | impl<const N: &u8> B for A<N> {}
|
||||
| ^ explicit lifetime name needed here
|
||||
|
||||
error[E0637]: `&` without an explicit lifetime name cannot be used here
|
||||
--> $DIR/const-param-elided-lifetime.rs:28:17
|
||||
|
|
||||
LL | fn bar<const N: &u8>() {}
|
||||
| ^ explicit lifetime name needed here
|
||||
|
||||
error: aborting due to 5 previous errors
|
||||
|
||||
For more information about this error, try `rustc --explain E0637`.
|
|
@ -0,0 +1,78 @@
|
|||
error[E0637]: `&` without an explicit lifetime name cannot be used here
|
||||
--> $DIR/const-param-elided-lifetime.rs:11:19
|
||||
|
|
||||
LL | struct A<const N: &u8>;
|
||||
| ^ explicit lifetime name needed here
|
||||
|
||||
error[E0637]: `&` without an explicit lifetime name cannot be used here
|
||||
--> $DIR/const-param-elided-lifetime.rs:16:15
|
||||
|
|
||||
LL | impl<const N: &u8> A<N> {
|
||||
| ^ explicit lifetime name needed here
|
||||
|
||||
error[E0637]: `&` without an explicit lifetime name cannot be used here
|
||||
--> $DIR/const-param-elided-lifetime.rs:19:21
|
||||
|
|
||||
LL | fn foo<const M: &u8>(&self) {}
|
||||
| ^ explicit lifetime name needed here
|
||||
|
||||
error[E0637]: `&` without an explicit lifetime name cannot be used here
|
||||
--> $DIR/const-param-elided-lifetime.rs:24:15
|
||||
|
|
||||
LL | impl<const N: &u8> B for A<N> {}
|
||||
| ^ explicit lifetime name needed here
|
||||
|
||||
error[E0637]: `&` without an explicit lifetime name cannot be used here
|
||||
--> $DIR/const-param-elided-lifetime.rs:28:17
|
||||
|
|
||||
LL | fn bar<const N: &u8>() {}
|
||||
| ^ explicit lifetime name needed here
|
||||
|
||||
error: using `&'static u8` as const generic parameters is forbidden
|
||||
--> $DIR/const-param-elided-lifetime.rs:11:19
|
||||
|
|
||||
LL | struct A<const N: &u8>;
|
||||
| ^^^
|
||||
|
|
||||
= note: the only supported types are integers, `bool` and `char`
|
||||
= note: more complex types are supported with `#[feature(const_generics)]`
|
||||
|
||||
error: using `&'static u8` as const generic parameters is forbidden
|
||||
--> $DIR/const-param-elided-lifetime.rs:16:15
|
||||
|
|
||||
LL | impl<const N: &u8> A<N> {
|
||||
| ^^^
|
||||
|
|
||||
= note: the only supported types are integers, `bool` and `char`
|
||||
= note: more complex types are supported with `#[feature(const_generics)]`
|
||||
|
||||
error: using `&'static u8` as const generic parameters is forbidden
|
||||
--> $DIR/const-param-elided-lifetime.rs:24:15
|
||||
|
|
||||
LL | impl<const N: &u8> B for A<N> {}
|
||||
| ^^^
|
||||
|
|
||||
= note: the only supported types are integers, `bool` and `char`
|
||||
= note: more complex types are supported with `#[feature(const_generics)]`
|
||||
|
||||
error: using `&'static u8` as const generic parameters is forbidden
|
||||
--> $DIR/const-param-elided-lifetime.rs:28:17
|
||||
|
|
||||
LL | fn bar<const N: &u8>() {}
|
||||
| ^^^
|
||||
|
|
||||
= note: the only supported types are integers, `bool` and `char`
|
||||
= note: more complex types are supported with `#[feature(const_generics)]`
|
||||
|
||||
error: using `&'static u8` as const generic parameters is forbidden
|
||||
--> $DIR/const-param-elided-lifetime.rs:19:21
|
||||
|
|
||||
LL | fn foo<const M: &u8>(&self) {}
|
||||
| ^^^
|
||||
|
|
||||
= note: the only supported types are integers, `bool` and `char`
|
||||
= note: more complex types are supported with `#[feature(const_generics)]`
|
||||
|
||||
error: aborting due to 10 previous errors
|
||||
|
||||
For more information about this error, try `rustc --explain E0637`.
|
|
@ -2,23 +2,31 @@
|
|||
// behaviour of trait bounds where `fn foo<T: Ord<&u8>>() {}` is illegal. Though we could change
|
||||
// elided lifetimes within the type of a const generic parameters to be 'static, like elided
|
||||
// lifetimes within const/static items.
|
||||
// revisions: full min
|
||||
|
||||
#![feature(const_generics)]
|
||||
//~^ WARN the feature `const_generics` is incomplete
|
||||
#![cfg_attr(full, feature(const_generics))]
|
||||
#![cfg_attr(full, allow(incomplete_features))]
|
||||
#![cfg_attr(min, feature(min_const_generics))]
|
||||
|
||||
struct A<const N: &u8>;
|
||||
//~^ ERROR `&` without an explicit lifetime name cannot be used here
|
||||
//[min]~^^ ERROR using `&'static u8` as const generic parameters is forbidden
|
||||
trait B {}
|
||||
|
||||
impl<const N: &u8> A<N> { //~ ERROR `&` without an explicit lifetime name cannot be used here
|
||||
impl<const N: &u8> A<N> {
|
||||
//~^ ERROR `&` without an explicit lifetime name cannot be used here
|
||||
//[min]~^^ ERROR using `&'static u8` as const generic parameters is forbidden
|
||||
fn foo<const M: &u8>(&self) {}
|
||||
//~^ ERROR `&` without an explicit lifetime name cannot be used here
|
||||
//[min]~^^ ERROR using `&'static u8` as const generic parameters is forbidden
|
||||
}
|
||||
|
||||
impl<const N: &u8> B for A<N> {}
|
||||
//~^ ERROR `&` without an explicit lifetime name cannot be used here
|
||||
//[min]~^^ ERROR using `&'static u8` as const generic parameters is forbidden
|
||||
|
||||
fn bar<const N: &u8>() {}
|
||||
//~^ ERROR `&` without an explicit lifetime name cannot be used here
|
||||
//[min]~^^ ERROR using `&'static u8` as const generic parameters is forbidden
|
||||
|
||||
fn main() {}
|
||||
|
|
|
@ -0,0 +1,13 @@
|
|||
error[E0401]: can't use generic parameters from outer function
|
||||
--> $DIR/const-param-from-outer-fn.rs:9:9
|
||||
|
|
||||
LL | fn foo<const X: u32>() {
|
||||
| - const parameter from outer function
|
||||
LL | fn bar() -> u32 {
|
||||
| --- try adding a local generic parameter in this method instead
|
||||
LL | X
|
||||
| ^ use of generic parameter from outer function
|
||||
|
||||
error: aborting due to previous error
|
||||
|
||||
For more information about this error, try `rustc --explain E0401`.
|
|
@ -0,0 +1,13 @@
|
|||
error[E0401]: can't use generic parameters from outer function
|
||||
--> $DIR/const-param-from-outer-fn.rs:9:9
|
||||
|
|
||||
LL | fn foo<const X: u32>() {
|
||||
| - const parameter from outer function
|
||||
LL | fn bar() -> u32 {
|
||||
| --- try adding a local generic parameter in this method instead
|
||||
LL | X
|
||||
| ^ use of generic parameter from outer function
|
||||
|
||||
error: aborting due to previous error
|
||||
|
||||
For more information about this error, try `rustc --explain E0401`.
|
|
@ -1,5 +1,8 @@
|
|||
#![feature(const_generics)]
|
||||
//~^ WARN the feature `const_generics` is incomplete
|
||||
// revisions: full min
|
||||
|
||||
#![cfg_attr(full, feature(const_generics))]
|
||||
#![cfg_attr(full, allow(incomplete_features))]
|
||||
#![cfg_attr(min, feature(min_const_generics))]
|
||||
|
||||
fn foo<const X: u32>() {
|
||||
fn bar() -> u32 {
|
||||
|
|
|
@ -1,8 +1,12 @@
|
|||
// Check that const parameters are permitted in traits.
|
||||
// run-pass
|
||||
// revisions: full min
|
||||
|
||||
#![feature(const_generics)]
|
||||
//~^ WARN the feature `const_generics` is incomplete
|
||||
#![cfg_attr(full, feature(const_generics))]
|
||||
#![cfg_attr(full, allow(incomplete_features))]
|
||||
#![cfg_attr(min, feature(min_const_generics))]
|
||||
|
||||
trait Trait<const T: ()> {}
|
||||
|
||||
trait Trait<const T: u8> {}
|
||||
|
||||
fn main() {}
|
||||
|
|
|
@ -0,0 +1,15 @@
|
|||
error[E0770]: the type of const parameters must not depend on other generic parameters
|
||||
--> $DIR/const-param-type-depends-on-const-param.rs:12:52
|
||||
|
|
||||
LL | pub struct Dependent<const N: usize, const X: [u8; N]>([(); N]);
|
||||
| ^ the type must not depend on the parameter `N`
|
||||
|
||||
error[E0770]: the type of const parameters must not depend on other generic parameters
|
||||
--> $DIR/const-param-type-depends-on-const-param.rs:16:40
|
||||
|
|
||||
LL | pub struct SelfDependent<const N: [u8; N]>;
|
||||
| ^ the type must not depend on the parameter `N`
|
||||
|
||||
error: aborting due to 2 previous errors
|
||||
|
||||
For more information about this error, try `rustc --explain E0770`.
|
|
@ -0,0 +1,33 @@
|
|||
error[E0770]: the type of const parameters must not depend on other generic parameters
|
||||
--> $DIR/const-param-type-depends-on-const-param.rs:12:52
|
||||
|
|
||||
LL | pub struct Dependent<const N: usize, const X: [u8; N]>([(); N]);
|
||||
| ^ the type must not depend on the parameter `N`
|
||||
|
||||
error[E0770]: the type of const parameters must not depend on other generic parameters
|
||||
--> $DIR/const-param-type-depends-on-const-param.rs:16:40
|
||||
|
|
||||
LL | pub struct SelfDependent<const N: [u8; N]>;
|
||||
| ^ the type must not depend on the parameter `N`
|
||||
|
||||
error: using `[u8; _]` as const generic parameters is forbidden
|
||||
--> $DIR/const-param-type-depends-on-const-param.rs:12:47
|
||||
|
|
||||
LL | pub struct Dependent<const N: usize, const X: [u8; N]>([(); N]);
|
||||
| ^^^^^^^
|
||||
|
|
||||
= note: the only supported types are integers, `bool` and `char`
|
||||
= note: more complex types are supported with `#[feature(const_generics)]`
|
||||
|
||||
error: using `[u8; _]` as const generic parameters is forbidden
|
||||
--> $DIR/const-param-type-depends-on-const-param.rs:16:35
|
||||
|
|
||||
LL | pub struct SelfDependent<const N: [u8; N]>;
|
||||
| ^^^^^^^
|
||||
|
|
||||
= note: the only supported types are integers, `bool` and `char`
|
||||
= note: more complex types are supported with `#[feature(const_generics)]`
|
||||
|
||||
error: aborting due to 4 previous errors
|
||||
|
||||
For more information about this error, try `rustc --explain E0770`.
|
|
@ -1,5 +1,8 @@
|
|||
#![feature(const_generics)]
|
||||
//~^ WARN the feature `const_generics` is incomplete
|
||||
// revisions: full min
|
||||
|
||||
#![cfg_attr(full, feature(const_generics))]
|
||||
#![cfg_attr(full, allow(incomplete_features))]
|
||||
#![cfg_attr(min, feature(min_const_generics))]
|
||||
|
||||
// Currently, const parameters cannot depend on other generic parameters,
|
||||
// as our current implementation can't really support this.
|
||||
|
@ -8,8 +11,10 @@
|
|||
|
||||
pub struct Dependent<const N: usize, const X: [u8; N]>([(); N]);
|
||||
//~^ ERROR: the type of const parameters must not depend on other generic parameters
|
||||
//[min]~^^ ERROR using `[u8; _]` as const generic parameters is forbidden
|
||||
|
||||
pub struct SelfDependent<const N: [u8; N]>;
|
||||
//~^ ERROR: the type of const parameters must not depend on other generic parameters
|
||||
//[min]~^^ ERROR using `[u8; _]` as const generic parameters is forbidden
|
||||
|
||||
fn main() {}
|
||||
|
|
|
@ -0,0 +1,18 @@
|
|||
error[E0770]: the type of const parameters must not depend on other generic parameters
|
||||
--> $DIR/const-param-type-depends-on-type-param.rs:12:34
|
||||
|
|
||||
LL | pub struct Dependent<T, const X: T>([(); X]);
|
||||
| ^ the type must not depend on the parameter `T`
|
||||
|
||||
error[E0392]: parameter `T` is never used
|
||||
--> $DIR/const-param-type-depends-on-type-param.rs:12:22
|
||||
|
|
||||
LL | pub struct Dependent<T, const X: T>([(); X]);
|
||||
| ^ unused parameter
|
||||
|
|
||||
= help: consider removing `T`, referring to it in a field, or using a marker such as `std::marker::PhantomData`
|
||||
|
||||
error: aborting due to 2 previous errors
|
||||
|
||||
Some errors have detailed explanations: E0392, E0770.
|
||||
For more information about an error, try `rustc --explain E0392`.
|
|
@ -0,0 +1,18 @@
|
|||
error[E0770]: the type of const parameters must not depend on other generic parameters
|
||||
--> $DIR/const-param-type-depends-on-type-param.rs:12:34
|
||||
|
|
||||
LL | pub struct Dependent<T, const X: T>([(); X]);
|
||||
| ^ the type must not depend on the parameter `T`
|
||||
|
||||
error[E0392]: parameter `T` is never used
|
||||
--> $DIR/const-param-type-depends-on-type-param.rs:12:22
|
||||
|
|
||||
LL | pub struct Dependent<T, const X: T>([(); X]);
|
||||
| ^ unused parameter
|
||||
|
|
||||
= help: consider removing `T`, referring to it in a field, or using a marker such as `std::marker::PhantomData`
|
||||
|
||||
error: aborting due to 2 previous errors
|
||||
|
||||
Some errors have detailed explanations: E0392, E0770.
|
||||
For more information about an error, try `rustc --explain E0392`.
|
|
@ -1,5 +1,8 @@
|
|||
#![feature(const_generics)]
|
||||
//~^ WARN the feature `const_generics` is incomplete
|
||||
// revisions: full min
|
||||
|
||||
#![cfg_attr(full, feature(const_generics))]
|
||||
#![cfg_attr(full, allow(incomplete_features))]
|
||||
#![cfg_attr(min, feature(min_const_generics))]
|
||||
|
||||
// Currently, const parameters cannot depend on other generic parameters,
|
||||
// as our current implementation can't really support this.
|
||||
|
|
|
@ -0,0 +1,14 @@
|
|||
error: const parameter `x` should have an upper case name
|
||||
--> $DIR/const-parameter-uppercase-lint.rs:9:15
|
||||
|
|
||||
LL | fn noop<const x: u32>() {
|
||||
| ^ help: convert the identifier to upper case (notice the capitalization): `X`
|
||||
|
|
||||
note: the lint level is defined here
|
||||
--> $DIR/const-parameter-uppercase-lint.rs:7:9
|
||||
|
|
||||
LL | #![deny(non_upper_case_globals)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: aborting due to previous error
|
||||
|
|
@ -0,0 +1,14 @@
|
|||
error: const parameter `x` should have an upper case name
|
||||
--> $DIR/const-parameter-uppercase-lint.rs:9:15
|
||||
|
|
||||
LL | fn noop<const x: u32>() {
|
||||
| ^ help: convert the identifier to upper case (notice the capitalization): `X`
|
||||
|
|
||||
note: the lint level is defined here
|
||||
--> $DIR/const-parameter-uppercase-lint.rs:7:9
|
||||
|
|
||||
LL | #![deny(non_upper_case_globals)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: aborting due to previous error
|
||||
|
|
@ -1,5 +1,8 @@
|
|||
#![feature(const_generics)]
|
||||
//~^ WARN the feature `const_generics` is incomplete
|
||||
// revisions: full min
|
||||
|
||||
#![cfg_attr(full, feature(const_generics))]
|
||||
#![cfg_attr(full, allow(incomplete_features))]
|
||||
#![cfg_attr(min, feature(min_const_generics))]
|
||||
|
||||
#![deny(non_upper_case_globals)]
|
||||
|
||||
|
|
|
@ -1,7 +1,10 @@
|
|||
// Check that arrays can be used with generic const and type.
|
||||
// run-pass
|
||||
// revisions: full min
|
||||
|
||||
#![feature(const_generics)]
|
||||
//~^ WARN the feature `const_generics` is incomplete
|
||||
#![cfg_attr(full, feature(const_generics))]
|
||||
#![cfg_attr(full, allow(incomplete_features))]
|
||||
#![cfg_attr(min, feature(min_const_generics))]
|
||||
|
||||
#![allow(dead_code, unused_variables)]
|
||||
|
||||
|
|
|
@ -1,7 +1,10 @@
|
|||
// Check that deriving debug on struct with const is permitted.
|
||||
// run-pass
|
||||
// revisions: full min
|
||||
|
||||
#![feature(const_generics)]
|
||||
//~^ WARN the feature `const_generics` is incomplete
|
||||
#![cfg_attr(full, feature(const_generics))]
|
||||
#![cfg_attr(full, allow(incomplete_features))]
|
||||
#![cfg_attr(min, feature(min_const_generics))]
|
||||
|
||||
#[derive(Debug)]
|
||||
struct X<const N: usize> {
|
||||
|
|
12
src/test/ui/const-generics/different_byref.full.stderr
Normal file
12
src/test/ui/const-generics/different_byref.full.stderr
Normal file
|
@ -0,0 +1,12 @@
|
|||
error[E0308]: mismatched types
|
||||
--> $DIR/different_byref.rs:13:9
|
||||
|
|
||||
LL | x = Const::<{ [4] }> {};
|
||||
| ^^^^^^^^^^^^^^^^^^^ expected `3_usize`, found `4_usize`
|
||||
|
|
||||
= note: expected type `[3_usize]`
|
||||
found type `[4_usize]`
|
||||
|
||||
error: aborting due to previous error
|
||||
|
||||
For more information about this error, try `rustc --explain E0308`.
|
11
src/test/ui/const-generics/different_byref.min.stderr
Normal file
11
src/test/ui/const-generics/different_byref.min.stderr
Normal file
|
@ -0,0 +1,11 @@
|
|||
error: using `[usize; 1]` as const generic parameters is forbidden
|
||||
--> $DIR/different_byref.rs:8:23
|
||||
|
|
||||
LL | struct Const<const V: [usize; 1]> {}
|
||||
| ^^^^^^^^^^
|
||||
|
|
||||
= 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
|
||||
|
|
@ -1,11 +1,15 @@
|
|||
#![feature(const_generics)]
|
||||
//~^ WARN the feature `const_generics` is incomplete
|
||||
// Check that different const types are different.
|
||||
// revisions: full min
|
||||
|
||||
#![cfg_attr(full, feature(const_generics))]
|
||||
#![cfg_attr(full, allow(incomplete_features))]
|
||||
#![cfg_attr(min, feature(min_const_generics))]
|
||||
|
||||
struct Const<const V: [usize; 1]> {}
|
||||
//[min]~^ using `[usize; 1]` as const generic parameters is forbidden
|
||||
|
||||
fn main() {
|
||||
let mut x = Const::<{ [3] }> {};
|
||||
x = Const::<{ [4] }> {};
|
||||
//~^ ERROR mismatched types
|
||||
|
||||
//[full]~^ ERROR mismatched types
|
||||
}
|
||||
|
|
14
src/test/ui/const-generics/fn-const-param-call.full.stderr
Normal file
14
src/test/ui/const-generics/fn-const-param-call.full.stderr
Normal file
|
@ -0,0 +1,14 @@
|
|||
error: using function pointers as const generic parameters is forbidden
|
||||
--> $DIR/fn-const-param-call.rs:12:25
|
||||
|
|
||||
LL | struct Wrapper<const F: fn() -> u32>;
|
||||
| ^^^^^^^^^^^
|
||||
|
||||
error: using function pointers as const generic parameters is forbidden
|
||||
--> $DIR/fn-const-param-call.rs:14:15
|
||||
|
|
||||
LL | impl<const F: fn() -> u32> Wrapper<F> {
|
||||
| ^^^^^^^^^^^
|
||||
|
||||
error: aborting due to 2 previous errors
|
||||
|
20
src/test/ui/const-generics/fn-const-param-call.min.stderr
Normal file
20
src/test/ui/const-generics/fn-const-param-call.min.stderr
Normal file
|
@ -0,0 +1,20 @@
|
|||
error: using function pointers as const generic parameters is forbidden
|
||||
--> $DIR/fn-const-param-call.rs:12:25
|
||||
|
|
||||
LL | struct Wrapper<const F: fn() -> u32>;
|
||||
| ^^^^^^^^^^^
|
||||
|
|
||||
= note: the only supported types are integers, `bool` and `char`
|
||||
= note: more complex types are supported with `#[feature(const_generics)]`
|
||||
|
||||
error: using function pointers as const generic parameters is forbidden
|
||||
--> $DIR/fn-const-param-call.rs:14:15
|
||||
|
|
||||
LL | impl<const F: fn() -> u32> Wrapper<F> {
|
||||
| ^^^^^^^^^^^
|
||||
|
|
||||
= 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
|
||||
|
|
@ -1,5 +1,9 @@
|
|||
#![feature(const_generics)]
|
||||
//~^ WARN the feature `const_generics` is incomplete
|
||||
// Check that functions cannot be used as const parameters.
|
||||
// revisions: full min
|
||||
|
||||
#![cfg_attr(full, feature(const_generics))]
|
||||
#![cfg_attr(full, allow(incomplete_features))]
|
||||
#![cfg_attr(min, feature(min_const_generics))]
|
||||
|
||||
fn function() -> u32 {
|
||||
17
|
||||
|
|
|
@ -0,0 +1,8 @@
|
|||
error: using function pointers as const generic parameters is forbidden
|
||||
--> $DIR/fn-const-param-infer.rs:7:25
|
||||
|
|
||||
LL | struct Checked<const F: fn(usize) -> bool>;
|
||||
| ^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: aborting due to previous error
|
||||
|
11
src/test/ui/const-generics/fn-const-param-infer.min.stderr
Normal file
11
src/test/ui/const-generics/fn-const-param-infer.min.stderr
Normal file
|
@ -0,0 +1,11 @@
|
|||
error: using function pointers as const generic parameters is forbidden
|
||||
--> $DIR/fn-const-param-infer.rs:7:25
|
||||
|
|
||||
LL | struct Checked<const F: fn(usize) -> bool>;
|
||||
| ^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
= 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
|
||||
|
|
@ -1,5 +1,8 @@
|
|||
#![feature(const_generics)]
|
||||
//~^ WARN the feature `const_generics` is incomplete
|
||||
// revisions: full min
|
||||
|
||||
#![cfg_attr(full, feature(const_generics))]
|
||||
#![cfg_attr(full, allow(incomplete_features))]
|
||||
#![cfg_attr(min, feature(min_const_generics))]
|
||||
|
||||
struct Checked<const F: fn(usize) -> bool>;
|
||||
//~^ ERROR: using function pointers as const generic parameters
|
||||
|
|
|
@ -1,7 +1,9 @@
|
|||
// run-pass
|
||||
// revisions: full min
|
||||
|
||||
#![feature(const_generics)]
|
||||
//~^ WARN the feature `const_generics` is incomplete
|
||||
#![cfg_attr(full, feature(const_generics))]
|
||||
#![cfg_attr(full, allow(incomplete_features))]
|
||||
#![cfg_attr(min, feature(min_const_generics))]
|
||||
|
||||
use std::fmt::Display;
|
||||
|
||||
|
|
|
@ -0,0 +1,9 @@
|
|||
error[E0741]: `C` must be annotated with `#[derive(PartialEq, Eq)]` to be used as the type of a const parameter
|
||||
--> $DIR/forbid-non-structural_match-types.rs:15:19
|
||||
|
|
||||
LL | struct D<const X: C>;
|
||||
| ^ `C` doesn't derive both `PartialEq` and `Eq`
|
||||
|
||||
error: aborting due to previous error
|
||||
|
||||
For more information about this error, try `rustc --explain E0741`.
|
|
@ -0,0 +1,27 @@
|
|||
error: using `A` as const generic parameters is forbidden
|
||||
--> $DIR/forbid-non-structural_match-types.rs:10:19
|
||||
|
|
||||
LL | struct B<const X: A>; // ok
|
||||
| ^
|
||||
|
|
||||
= note: the only supported types are integers, `bool` and `char`
|
||||
= note: more complex types are supported with `#[feature(const_generics)]`
|
||||
|
||||
error: using `C` as const generic parameters is forbidden
|
||||
--> $DIR/forbid-non-structural_match-types.rs:15:19
|
||||
|
|
||||
LL | struct D<const X: C>;
|
||||
| ^
|
||||
|
|
||||
= note: the only supported types are integers, `bool` and `char`
|
||||
= note: more complex types are supported with `#[feature(const_generics)]`
|
||||
|
||||
error[E0741]: `C` must be annotated with `#[derive(PartialEq, Eq)]` to be used as the type of a const parameter
|
||||
--> $DIR/forbid-non-structural_match-types.rs:15:19
|
||||
|
|
||||
LL | struct D<const X: C>;
|
||||
| ^ `C` doesn't derive both `PartialEq` and `Eq`
|
||||
|
||||
error: aborting due to 3 previous errors
|
||||
|
||||
For more information about this error, try `rustc --explain E0741`.
|
|
@ -1,13 +1,18 @@
|
|||
#![feature(const_generics)]
|
||||
//~^ WARN the feature `const_generics` is incomplete
|
||||
// revisions: full min
|
||||
|
||||
#![cfg_attr(full, feature(const_generics))]
|
||||
#![cfg_attr(full, allow(incomplete_features))]
|
||||
#![cfg_attr(min, feature(min_const_generics))]
|
||||
|
||||
#[derive(PartialEq, Eq)]
|
||||
struct A;
|
||||
|
||||
struct B<const X: A>; // ok
|
||||
//[min]~^ ERROR using `A` as const generic parameters is forbidden
|
||||
|
||||
struct C;
|
||||
|
||||
struct D<const X: C>; //~ ERROR `C` must be annotated with `#[derive(PartialEq, Eq)]`
|
||||
//[min]~^ ERROR using `C` as const generic parameters is forbidden
|
||||
|
||||
fn main() {}
|
||||
|
|
|
@ -0,0 +1,19 @@
|
|||
error[E0044]: foreign items may not have const parameters
|
||||
--> $DIR/foreign-item-const-parameter.rs:8:5
|
||||
|
|
||||
LL | fn foo<const X: usize>();
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^ can't have const parameters
|
||||
|
|
||||
= help: replace the const parameters with concrete consts
|
||||
|
||||
error[E0044]: foreign items may not have type or const parameters
|
||||
--> $DIR/foreign-item-const-parameter.rs:10:5
|
||||
|
|
||||
LL | fn bar<T, const X: usize>(_: T);
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ can't have type or const parameters
|
||||
|
|
||||
= help: replace the type or const parameters with concrete types or consts
|
||||
|
||||
error: aborting due to 2 previous errors
|
||||
|
||||
For more information about this error, try `rustc --explain E0044`.
|
|
@ -0,0 +1,19 @@
|
|||
error[E0044]: foreign items may not have const parameters
|
||||
--> $DIR/foreign-item-const-parameter.rs:8:5
|
||||
|
|
||||
LL | fn foo<const X: usize>();
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^ can't have const parameters
|
||||
|
|
||||
= help: replace the const parameters with concrete consts
|
||||
|
||||
error[E0044]: foreign items may not have type or const parameters
|
||||
--> $DIR/foreign-item-const-parameter.rs:10:5
|
||||
|
|
||||
LL | fn bar<T, const X: usize>(_: T);
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ can't have type or const parameters
|
||||
|
|
||||
= help: replace the type or const parameters with concrete types or consts
|
||||
|
||||
error: aborting due to 2 previous errors
|
||||
|
||||
For more information about this error, try `rustc --explain E0044`.
|
|
@ -1,5 +1,8 @@
|
|||
#![feature(const_generics)]
|
||||
//~^ WARN the feature `const_generics` is incomplete
|
||||
// revisions: full min
|
||||
|
||||
#![cfg_attr(full, feature(const_generics))]
|
||||
#![cfg_attr(full, allow(incomplete_features))]
|
||||
#![cfg_attr(min, feature(min_const_generics))]
|
||||
|
||||
extern "C" {
|
||||
fn foo<const X: usize>(); //~ ERROR foreign items may not have const parameters
|
||||
|
|
|
@ -1,7 +1,9 @@
|
|||
// run-pass
|
||||
// revisions: full min
|
||||
|
||||
#![feature(const_generics)]
|
||||
//~^ WARN the feature `const_generics` is incomplete
|
||||
#![cfg_attr(full, feature(const_generics))]
|
||||
#![cfg_attr(full, allow(incomplete_features))]
|
||||
#![cfg_attr(min, feature(min_const_generics))]
|
||||
|
||||
struct S<const X: u32>;
|
||||
|
||||
|
|
|
@ -0,0 +1,15 @@
|
|||
error[E0107]: wrong number of const arguments: expected 2, found 1
|
||||
--> $DIR/incorrect-number-of-const-args.rs:12:5
|
||||
|
|
||||
LL | foo::<0>();
|
||||
| ^^^^^^^^ expected 2 const arguments
|
||||
|
||||
error[E0107]: wrong number of const arguments: expected 2, found 3
|
||||
--> $DIR/incorrect-number-of-const-args.rs:13:17
|
||||
|
|
||||
LL | foo::<0, 0, 0>();
|
||||
| ^ unexpected const argument
|
||||
|
||||
error: aborting due to 2 previous errors
|
||||
|
||||
For more information about this error, try `rustc --explain E0107`.
|
|
@ -0,0 +1,15 @@
|
|||
error[E0107]: wrong number of const arguments: expected 2, found 1
|
||||
--> $DIR/incorrect-number-of-const-args.rs:12:5
|
||||
|
|
||||
LL | foo::<0>();
|
||||
| ^^^^^^^^ expected 2 const arguments
|
||||
|
||||
error[E0107]: wrong number of const arguments: expected 2, found 3
|
||||
--> $DIR/incorrect-number-of-const-args.rs:13:17
|
||||
|
|
||||
LL | foo::<0, 0, 0>();
|
||||
| ^ unexpected const argument
|
||||
|
||||
error: aborting due to 2 previous errors
|
||||
|
||||
For more information about this error, try `rustc --explain E0107`.
|
|
@ -1,5 +1,8 @@
|
|||
#![feature(const_generics)]
|
||||
//~^ WARN the feature `const_generics` is incomplete
|
||||
// revisions: full min
|
||||
|
||||
#![cfg_attr(full, feature(const_generics))]
|
||||
#![cfg_attr(full, allow(incomplete_features))]
|
||||
#![cfg_attr(min, feature(min_const_generics))]
|
||||
|
||||
fn foo<const X: usize, const Y: usize>() -> usize {
|
||||
0
|
||||
|
|
|
@ -1,8 +1,11 @@
|
|||
// run-pass
|
||||
//
|
||||
// see issue #70529
|
||||
#![feature(const_generics)]
|
||||
//~^ WARN the feature `const_generics` is incomplete
|
||||
// revisions: full min
|
||||
|
||||
#![cfg_attr(full, feature(const_generics))]
|
||||
#![cfg_attr(full, allow(incomplete_features))]
|
||||
#![cfg_attr(min, feature(min_const_generics))]
|
||||
|
||||
struct A<const N: usize> {
|
||||
arr: [u8; N],
|
||||
|
|
|
@ -1,8 +1,11 @@
|
|||
// check-pass
|
||||
//
|
||||
// see issue #70529
|
||||
#![feature(const_generics)]
|
||||
//~^ WARN the feature `const_generics` is incomplete
|
||||
// revisions: full min
|
||||
|
||||
#![cfg_attr(full, feature(const_generics))]
|
||||
#![cfg_attr(full, allow(incomplete_features))]
|
||||
#![cfg_attr(min, feature(min_const_generics))]
|
||||
|
||||
fn as_chunks<const N: usize>() -> [u8; N] {
|
||||
loop {}
|
||||
|
|
|
@ -1,7 +1,9 @@
|
|||
// check-pass
|
||||
// revisions: full min
|
||||
|
||||
#![feature(const_generics)]
|
||||
//~^ WARN the feature `const_generics` is incomplete
|
||||
#![cfg_attr(full, feature(const_generics))]
|
||||
#![cfg_attr(full, allow(incomplete_features))]
|
||||
#![cfg_attr(min, feature(min_const_generics))]
|
||||
|
||||
fn takes_closure_of_array_3<F>(f: F) where F: Fn([i32; 3]) {
|
||||
f([1, 2, 3]);
|
||||
|
|
|
@ -0,0 +1,18 @@
|
|||
error: constant expression depends on a generic parameter
|
||||
--> $DIR/issue-61522-array-len-succ.rs:7:40
|
||||
|
|
||||
LL | pub struct MyArray<const COUNT: usize>([u8; COUNT + 1]);
|
||||
| ^^^^^^^^^^^^^^^
|
||||
|
|
||||
= note: this may fail depending on what value the parameter takes
|
||||
|
||||
error: constant expression depends on a generic parameter
|
||||
--> $DIR/issue-61522-array-len-succ.rs:12:24
|
||||
|
|
||||
LL | fn inner(&self) -> &[u8; COUNT + 1] {
|
||||
| ^^^^^^^^^^^^^^^^
|
||||
|
|
||||
= note: this may fail depending on what value the parameter takes
|
||||
|
||||
error: aborting due to 2 previous errors
|
||||
|
|
@ -0,0 +1,18 @@
|
|||
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]);
|
||||
| ^^^^^ non-trivial anonymous constants must not depend on the parameter `COUNT`
|
||||
|
|
||||
= 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
|
||||
--> $DIR/issue-61522-array-len-succ.rs:12:30
|
||||
|
|
||||
LL | fn inner(&self) -> &[u8; COUNT + 1] {
|
||||
| ^^^^^ non-trivial anonymous constants must not depend on the parameter `COUNT`
|
||||
|
|
||||
= help: it is currently only allowed to use either `COUNT` or `{ COUNT }` as generic constants
|
||||
|
||||
error: aborting due to 2 previous errors
|
||||
|
|
@ -1,12 +1,17 @@
|
|||
#![feature(const_generics)]
|
||||
//~^ WARN the feature `const_generics` is incomplete
|
||||
// revisions: full min
|
||||
|
||||
#![cfg_attr(full, feature(const_generics))]
|
||||
#![cfg_attr(full, allow(incomplete_features))]
|
||||
#![cfg_attr(min, feature(min_const_generics))]
|
||||
|
||||
pub struct MyArray<const COUNT: usize>([u8; COUNT + 1]);
|
||||
//~^ ERROR constant expression depends on a generic parameter
|
||||
//[full]~^ ERROR constant expression depends on a generic parameter
|
||||
//[min]~^^ ERROR generic parameters must not be used
|
||||
|
||||
impl<const COUNT: usize> MyArray<COUNT> {
|
||||
fn inner(&self) -> &[u8; COUNT + 1] {
|
||||
//~^ ERROR constant expression depends on a generic parameter
|
||||
//[full]~^ ERROR constant expression depends on a generic parameter
|
||||
//[min]~^^ ERROR generic parameters must not be used
|
||||
&self.0
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,11 @@
|
|||
error: using `&'static str` as const generic parameters is forbidden
|
||||
--> $DIR/issue-66596-impl-trait-for-str-const-arg.rs:9:25
|
||||
|
|
||||
LL | trait Trait<const NAME: &'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 previous error
|
||||
|
|
@ -1,9 +1,13 @@
|
|||
// check-pass
|
||||
//[full] check-pass
|
||||
// revisions: full min
|
||||
|
||||
#![cfg_attr(full, feature(const_generics))]
|
||||
#![cfg_attr(full, allow(incomplete_features))]
|
||||
#![cfg_attr(min, feature(min_const_generics))]
|
||||
|
||||
#![feature(const_generics)]
|
||||
//~^ WARN the feature `const_generics` is incomplete
|
||||
|
||||
trait Trait<const NAME: &'static str> {
|
||||
//[min]~^ ERROR using `&'static str` as const generic parameters is forbidden
|
||||
type Assoc;
|
||||
}
|
||||
|
||||
|
|
|
@ -1,8 +1,10 @@
|
|||
// aux-build:impl-const.rs
|
||||
// run-pass
|
||||
// revisions: full min
|
||||
|
||||
#![feature(const_generics)]
|
||||
#![allow(incomplete_features)]
|
||||
#![cfg_attr(full, feature(const_generics))]
|
||||
#![cfg_attr(full, allow(incomplete_features))]
|
||||
#![cfg_attr(min, feature(min_const_generics))]
|
||||
|
||||
extern crate impl_const;
|
||||
|
||||
|
|
|
@ -1,6 +1,9 @@
|
|||
// build-pass
|
||||
#![feature(const_generics)]
|
||||
#![allow(incomplete_features)]
|
||||
// revisions: full min
|
||||
|
||||
#![cfg_attr(full, feature(const_generics))]
|
||||
#![cfg_attr(full, allow(incomplete_features))]
|
||||
#![cfg_attr(min, feature(min_const_generics))]
|
||||
|
||||
pub fn works() {
|
||||
let array/*: [_; _]*/ = default_array();
|
||||
|
|
|
@ -1,6 +1,9 @@
|
|||
// build-pass
|
||||
#![feature(const_generics)]
|
||||
#![allow(incomplete_features)]
|
||||
// revisions: full min
|
||||
|
||||
#![cfg_attr(full, feature(const_generics))]
|
||||
#![cfg_attr(full, allow(incomplete_features))]
|
||||
#![cfg_attr(min, feature(min_const_generics))]
|
||||
|
||||
fn works() {
|
||||
let array/*: [u8; _]*/ = default_byte_array();
|
||||
|
|
|
@ -1,6 +1,9 @@
|
|||
// check-pass
|
||||
#![allow(incomplete_features)]
|
||||
#![feature(const_generics)]
|
||||
// revisions: full min
|
||||
|
||||
#![cfg_attr(full, feature(const_generics))]
|
||||
#![cfg_attr(full, allow(incomplete_features))]
|
||||
#![cfg_attr(min, feature(min_const_generics))]
|
||||
|
||||
pub trait Foo<const B: bool> {}
|
||||
pub fn bar<T: Foo<{ true }>>() {}
|
||||
|
|
|
@ -1,7 +1,10 @@
|
|||
// run-pass
|
||||
// revisions: full min
|
||||
|
||||
#![cfg_attr(full, feature(const_generics))]
|
||||
#![cfg_attr(full, allow(incomplete_features))]
|
||||
#![cfg_attr(min, feature(min_const_generics))]
|
||||
|
||||
#![feature(const_generics)]
|
||||
//~^ WARN the feature `const_generics` is incomplete
|
||||
|
||||
use std::ops::AddAssign;
|
||||
|
||||
|
|
159
src/test/ui/const-generics/nested-type.full.stderr
Normal file
159
src/test/ui/const-generics/nested-type.full.stderr
Normal file
|
@ -0,0 +1,159 @@
|
|||
error[E0391]: cycle detected when computing type of `Foo`
|
||||
--> $DIR/nested-type.rs:7:1
|
||||
|
|
||||
LL | struct Foo<const N: [u8; {
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
note: ...which requires computing type of `Foo::N`...
|
||||
--> $DIR/nested-type.rs:7:18
|
||||
|
|
||||
LL | struct Foo<const N: [u8; {
|
||||
| ^
|
||||
note: ...which requires const-evaluating + checking `Foo::{{constant}}#0`...
|
||||
--> $DIR/nested-type.rs:7:26
|
||||
|
|
||||
LL | struct Foo<const N: [u8; {
|
||||
| __________________________^
|
||||
LL | |
|
||||
LL | |
|
||||
LL | |
|
||||
... |
|
||||
LL | | Foo::<17>::value()
|
||||
LL | | }]>;
|
||||
| |_^
|
||||
note: ...which requires const-evaluating + checking `Foo::{{constant}}#0`...
|
||||
--> $DIR/nested-type.rs:7:26
|
||||
|
|
||||
LL | struct Foo<const N: [u8; {
|
||||
| __________________________^
|
||||
LL | |
|
||||
LL | |
|
||||
LL | |
|
||||
... |
|
||||
LL | | Foo::<17>::value()
|
||||
LL | | }]>;
|
||||
| |_^
|
||||
note: ...which requires const-evaluating `Foo::{{constant}}#0`...
|
||||
--> $DIR/nested-type.rs:7:26
|
||||
|
|
||||
LL | struct Foo<const N: [u8; {
|
||||
| __________________________^
|
||||
LL | |
|
||||
LL | |
|
||||
LL | |
|
||||
... |
|
||||
LL | | Foo::<17>::value()
|
||||
LL | | }]>;
|
||||
| |_^
|
||||
note: ...which requires type-checking `Foo::{{constant}}#0`...
|
||||
--> $DIR/nested-type.rs:7:26
|
||||
|
|
||||
LL | struct Foo<const N: [u8; {
|
||||
| __________________________^
|
||||
LL | |
|
||||
LL | |
|
||||
LL | |
|
||||
... |
|
||||
LL | | Foo::<17>::value()
|
||||
LL | | }]>;
|
||||
| |_^
|
||||
note: ...which requires computing the variances of `Foo::{{constant}}#0::Foo`...
|
||||
--> $DIR/nested-type.rs:11:5
|
||||
|
|
||||
LL | struct Foo<const N: usize>;
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
= note: ...which requires computing the variances for items in this crate...
|
||||
= note: ...which again requires computing type of `Foo`, completing the cycle
|
||||
note: cycle used when collecting item types in top-level module
|
||||
--> $DIR/nested-type.rs:3:1
|
||||
|
|
||||
LL | / #![cfg_attr(full, feature(const_generics))]
|
||||
LL | | #![cfg_attr(full, allow(incomplete_features))]
|
||||
LL | | #![cfg_attr(min, feature(min_const_generics))]
|
||||
LL | |
|
||||
... |
|
||||
LL | |
|
||||
LL | | fn main() {}
|
||||
| |____________^
|
||||
|
||||
error[E0391]: cycle detected when computing type of `Foo`
|
||||
--> $DIR/nested-type.rs:7:1
|
||||
|
|
||||
LL | struct Foo<const N: [u8; {
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
note: ...which requires computing type of `Foo::N`...
|
||||
--> $DIR/nested-type.rs:7:18
|
||||
|
|
||||
LL | struct Foo<const N: [u8; {
|
||||
| ^
|
||||
note: ...which requires const-evaluating + checking `Foo::{{constant}}#0`...
|
||||
--> $DIR/nested-type.rs:7:26
|
||||
|
|
||||
LL | struct Foo<const N: [u8; {
|
||||
| __________________________^
|
||||
LL | |
|
||||
LL | |
|
||||
LL | |
|
||||
... |
|
||||
LL | | Foo::<17>::value()
|
||||
LL | | }]>;
|
||||
| |_^
|
||||
note: ...which requires const-evaluating + checking `Foo::{{constant}}#0`...
|
||||
--> $DIR/nested-type.rs:7:26
|
||||
|
|
||||
LL | struct Foo<const N: [u8; {
|
||||
| __________________________^
|
||||
LL | |
|
||||
LL | |
|
||||
LL | |
|
||||
... |
|
||||
LL | | Foo::<17>::value()
|
||||
LL | | }]>;
|
||||
| |_^
|
||||
note: ...which requires const-evaluating `Foo::{{constant}}#0`...
|
||||
--> $DIR/nested-type.rs:7:26
|
||||
|
|
||||
LL | struct Foo<const N: [u8; {
|
||||
| __________________________^
|
||||
LL | |
|
||||
LL | |
|
||||
LL | |
|
||||
... |
|
||||
LL | | Foo::<17>::value()
|
||||
LL | | }]>;
|
||||
| |_^
|
||||
note: ...which requires type-checking `Foo::{{constant}}#0`...
|
||||
--> $DIR/nested-type.rs:7:26
|
||||
|
|
||||
LL | struct Foo<const N: [u8; {
|
||||
| __________________________^
|
||||
LL | |
|
||||
LL | |
|
||||
LL | |
|
||||
... |
|
||||
LL | | Foo::<17>::value()
|
||||
LL | | }]>;
|
||||
| |_^
|
||||
note: ...which requires computing the variances of `Foo::{{constant}}#0::Foo`...
|
||||
--> $DIR/nested-type.rs:11:5
|
||||
|
|
||||
LL | struct Foo<const N: usize>;
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
= note: ...which requires computing the variances for items in this crate...
|
||||
= note: ...which again requires computing type of `Foo`, completing the cycle
|
||||
note: cycle used when collecting item types in top-level module
|
||||
--> $DIR/nested-type.rs:3:1
|
||||
|
|
||||
LL | / #![cfg_attr(full, feature(const_generics))]
|
||||
LL | | #![cfg_attr(full, allow(incomplete_features))]
|
||||
LL | | #![cfg_attr(min, feature(min_const_generics))]
|
||||
LL | |
|
||||
... |
|
||||
LL | |
|
||||
LL | | fn main() {}
|
||||
| |____________^
|
||||
|
||||
error: aborting due to 2 previous errors
|
||||
|
||||
For more information about this error, try `rustc --explain E0391`.
|
175
src/test/ui/const-generics/nested-type.min.stderr
Normal file
175
src/test/ui/const-generics/nested-type.min.stderr
Normal file
|
@ -0,0 +1,175 @@
|
|||
error: using `[u8; _]` as const generic parameters is forbidden
|
||||
--> $DIR/nested-type.rs:7:21
|
||||
|
|
||||
LL | struct Foo<const N: [u8; {
|
||||
| _____________________^
|
||||
LL | |
|
||||
LL | |
|
||||
LL | |
|
||||
... |
|
||||
LL | | Foo::<17>::value()
|
||||
LL | | }]>;
|
||||
| |__^
|
||||
|
|
||||
= note: the only supported types are integers, `bool` and `char`
|
||||
= note: more complex types are supported with `#[feature(const_generics)]`
|
||||
|
||||
error[E0391]: cycle detected when computing type of `Foo`
|
||||
--> $DIR/nested-type.rs:7:1
|
||||
|
|
||||
LL | struct Foo<const N: [u8; {
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
note: ...which requires computing type of `Foo::N`...
|
||||
--> $DIR/nested-type.rs:7:18
|
||||
|
|
||||
LL | struct Foo<const N: [u8; {
|
||||
| ^
|
||||
note: ...which requires const-evaluating + checking `Foo::{{constant}}#0`...
|
||||
--> $DIR/nested-type.rs:7:26
|
||||
|
|
||||
LL | struct Foo<const N: [u8; {
|
||||
| __________________________^
|
||||
LL | |
|
||||
LL | |
|
||||
LL | |
|
||||
... |
|
||||
LL | | Foo::<17>::value()
|
||||
LL | | }]>;
|
||||
| |_^
|
||||
note: ...which requires const-evaluating + checking `Foo::{{constant}}#0`...
|
||||
--> $DIR/nested-type.rs:7:26
|
||||
|
|
||||
LL | struct Foo<const N: [u8; {
|
||||
| __________________________^
|
||||
LL | |
|
||||
LL | |
|
||||
LL | |
|
||||
... |
|
||||
LL | | Foo::<17>::value()
|
||||
LL | | }]>;
|
||||
| |_^
|
||||
note: ...which requires const-evaluating `Foo::{{constant}}#0`...
|
||||
--> $DIR/nested-type.rs:7:26
|
||||
|
|
||||
LL | struct Foo<const N: [u8; {
|
||||
| __________________________^
|
||||
LL | |
|
||||
LL | |
|
||||
LL | |
|
||||
... |
|
||||
LL | | Foo::<17>::value()
|
||||
LL | | }]>;
|
||||
| |_^
|
||||
note: ...which requires type-checking `Foo::{{constant}}#0`...
|
||||
--> $DIR/nested-type.rs:7:26
|
||||
|
|
||||
LL | struct Foo<const N: [u8; {
|
||||
| __________________________^
|
||||
LL | |
|
||||
LL | |
|
||||
LL | |
|
||||
... |
|
||||
LL | | Foo::<17>::value()
|
||||
LL | | }]>;
|
||||
| |_^
|
||||
note: ...which requires computing the variances of `Foo::{{constant}}#0::Foo`...
|
||||
--> $DIR/nested-type.rs:11:5
|
||||
|
|
||||
LL | struct Foo<const N: usize>;
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
= note: ...which requires computing the variances for items in this crate...
|
||||
= note: ...which again requires computing type of `Foo`, completing the cycle
|
||||
note: cycle used when collecting item types in top-level module
|
||||
--> $DIR/nested-type.rs:3:1
|
||||
|
|
||||
LL | / #![cfg_attr(full, feature(const_generics))]
|
||||
LL | | #![cfg_attr(full, allow(incomplete_features))]
|
||||
LL | | #![cfg_attr(min, feature(min_const_generics))]
|
||||
LL | |
|
||||
... |
|
||||
LL | |
|
||||
LL | | fn main() {}
|
||||
| |____________^
|
||||
|
||||
error[E0391]: cycle detected when computing type of `Foo`
|
||||
--> $DIR/nested-type.rs:7:1
|
||||
|
|
||||
LL | struct Foo<const N: [u8; {
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
note: ...which requires computing type of `Foo::N`...
|
||||
--> $DIR/nested-type.rs:7:18
|
||||
|
|
||||
LL | struct Foo<const N: [u8; {
|
||||
| ^
|
||||
note: ...which requires const-evaluating + checking `Foo::{{constant}}#0`...
|
||||
--> $DIR/nested-type.rs:7:26
|
||||
|
|
||||
LL | struct Foo<const N: [u8; {
|
||||
| __________________________^
|
||||
LL | |
|
||||
LL | |
|
||||
LL | |
|
||||
... |
|
||||
LL | | Foo::<17>::value()
|
||||
LL | | }]>;
|
||||
| |_^
|
||||
note: ...which requires const-evaluating + checking `Foo::{{constant}}#0`...
|
||||
--> $DIR/nested-type.rs:7:26
|
||||
|
|
||||
LL | struct Foo<const N: [u8; {
|
||||
| __________________________^
|
||||
LL | |
|
||||
LL | |
|
||||
LL | |
|
||||
... |
|
||||
LL | | Foo::<17>::value()
|
||||
LL | | }]>;
|
||||
| |_^
|
||||
note: ...which requires const-evaluating `Foo::{{constant}}#0`...
|
||||
--> $DIR/nested-type.rs:7:26
|
||||
|
|
||||
LL | struct Foo<const N: [u8; {
|
||||
| __________________________^
|
||||
LL | |
|
||||
LL | |
|
||||
LL | |
|
||||
... |
|
||||
LL | | Foo::<17>::value()
|
||||
LL | | }]>;
|
||||
| |_^
|
||||
note: ...which requires type-checking `Foo::{{constant}}#0`...
|
||||
--> $DIR/nested-type.rs:7:26
|
||||
|
|
||||
LL | struct Foo<const N: [u8; {
|
||||
| __________________________^
|
||||
LL | |
|
||||
LL | |
|
||||
LL | |
|
||||
... |
|
||||
LL | | Foo::<17>::value()
|
||||
LL | | }]>;
|
||||
| |_^
|
||||
note: ...which requires computing the variances of `Foo::{{constant}}#0::Foo`...
|
||||
--> $DIR/nested-type.rs:11:5
|
||||
|
|
||||
LL | struct Foo<const N: usize>;
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
= note: ...which requires computing the variances for items in this crate...
|
||||
= note: ...which again requires computing type of `Foo`, completing the cycle
|
||||
note: cycle used when collecting item types in top-level module
|
||||
--> $DIR/nested-type.rs:3:1
|
||||
|
|
||||
LL | / #![cfg_attr(full, feature(const_generics))]
|
||||
LL | | #![cfg_attr(full, allow(incomplete_features))]
|
||||
LL | | #![cfg_attr(min, feature(min_const_generics))]
|
||||
LL | |
|
||||
... |
|
||||
LL | |
|
||||
LL | | fn main() {}
|
||||
| |____________^
|
||||
|
||||
error: aborting due to 3 previous errors
|
||||
|
||||
For more information about this error, try `rustc --explain E0391`.
|
|
@ -1,9 +1,13 @@
|
|||
#![feature(const_generics)]
|
||||
#![allow(incomplete_features)]
|
||||
// revisions: full min
|
||||
|
||||
#![cfg_attr(full, feature(const_generics))]
|
||||
#![cfg_attr(full, allow(incomplete_features))]
|
||||
#![cfg_attr(min, feature(min_const_generics))]
|
||||
|
||||
struct Foo<const N: [u8; {
|
||||
//~^ ERROR cycle detected
|
||||
//~| ERROR cycle detected
|
||||
//[min]~| ERROR using `[u8; _]` as const generic
|
||||
struct Foo<const N: usize>;
|
||||
|
||||
impl<const N: usize> Foo<N> {
|
||||
|
|
|
@ -0,0 +1,22 @@
|
|||
error: type parameters with a default must be trailing
|
||||
--> $DIR/params-in-ct-in-ty-param-lazy-norm.rs:12:12
|
||||
|
|
||||
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: constant values inside of type parameter defaults must not depend on generic parameters
|
||||
--> $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);
|
||||
| ^ the anonymous constant must not depend on the parameter `T`
|
||||
|
||||
error: constant values inside of type parameter defaults must not depend on generic parameters
|
||||
--> $DIR/params-in-ct-in-ty-param-lazy-norm.rs:12:21
|
||||
|
|
||||
LL | struct Bar<T = [u8; N], const N: usize>(T);
|
||||
| ^ the anonymous constant must not depend on the parameter `N`
|
||||
|
||||
error: aborting due to 3 previous errors
|
||||
|
|
@ -0,0 +1,24 @@
|
|||
error: type parameters with a default must be trailing
|
||||
--> $DIR/params-in-ct-in-ty-param-lazy-norm.rs:12:12
|
||||
|
|
||||
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
|
||||
--> $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);
|
||||
| ^ non-trivial anonymous constants must not depend on the parameter `T`
|
||||
|
|
||||
= help: it is currently only allowed to use either `T` or `{ T }` as generic constants
|
||||
|
||||
error: constant values inside of type parameter defaults must not depend on generic parameters
|
||||
--> $DIR/params-in-ct-in-ty-param-lazy-norm.rs:12:21
|
||||
|
|
||||
LL | struct Bar<T = [u8; N], const N: usize>(T);
|
||||
| ^ the anonymous constant must not depend on the parameter `N`
|
||||
|
||||
error: aborting due to 3 previous errors
|
||||
|
|
@ -1,7 +1,12 @@
|
|||
#![feature(const_generics)] //~ WARN the feature `const_generics` is incomplete
|
||||
// revisions: full min
|
||||
|
||||
#![cfg_attr(full, feature(const_generics))]
|
||||
#![cfg_attr(full, allow(incomplete_features))]
|
||||
#![cfg_attr(min, feature(min_const_generics))]
|
||||
|
||||
struct Foo<T, U = [u8; std::mem::size_of::<T>()]>(T, U);
|
||||
//~^ ERROR constant values inside of type parameter defaults
|
||||
//[full]~^ ERROR constant values inside of type parameter defaults
|
||||
//[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);
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
// Test if emits error if cannot properly infer constant.
|
||||
// Test that we emit an error if we cannot properly infer a constant.
|
||||
// revisions: full min
|
||||
|
||||
#![cfg_attr(full, feature(const_generics))]
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
error[E0412]: cannot find type `UnknownStruct` in this scope
|
||||
--> $DIR/unknown_adt.rs:10:12
|
||||
--> $DIR/unknown_adt.rs:8:12
|
||||
|
|
||||
LL | let _: UnknownStruct<7>;
|
||||
| ^^^^^^^^^^^^^ not found in this scope
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
error[E0412]: cannot find type `UnknownStruct` in this scope
|
||||
--> $DIR/unknown_adt.rs:10:12
|
||||
--> $DIR/unknown_adt.rs:8:12
|
||||
|
|
||||
LL | let _: UnknownStruct<7>;
|
||||
| ^^^^^^^^^^^^^ not found in this scope
|
||||
|
|
|
@ -1,7 +1,5 @@
|
|||
// Checks errors when there is an abstract data type.
|
||||
// revisions: full min
|
||||
|
||||
|
||||
#![cfg_attr(full, feature(const_generics))]
|
||||
#![cfg_attr(full, allow(incomplete_features))]
|
||||
#![cfg_attr(min, feature(min_const_generics))]
|
||||
|
|
Loading…
Add table
Reference in a new issue