Add has_default to GenericParamDefKind::Const

This currently creates a field which is always false on GenericParamDefKind for future use when
consts are permitted to have defaults

Update const_generics:default locations

Previously just ignored them, now actually do something about them.

Fix using type check instead of value

Add parsing

This adds all the necessary changes to lower const-generics defaults from parsing.

Change P<Expr> to AnonConst

This matches the arguments passed to instantiations of const generics, and makes it specific to
just anonymous constants.

Attempt to fix lowering bugs
This commit is contained in:
kadmin 2020-08-11 00:02:45 +00:00
parent 79e5814f45
commit e4e5db4e42
39 changed files with 158 additions and 77 deletions

View file

@ -0,0 +1,15 @@
// check-pass
#![feature(const_generics)]
#![feature(const_generic_defaults)]
#![allow(incomplete_features)]
#[derive(Default)]
pub struct ConstDefault<const N: usize = 3> {
items: [u32; N]
}
pub fn main() {
let s = ConstDefault::default();
}

View file

@ -1,3 +1,6 @@
#![feature(const_generic_defaults)]
#![feature(min_const_generics)]
fn foo<const SIZE: usize = 5>() {}
//~^ ERROR default values for const generic parameters are experimental

View file

@ -1,4 +1,2 @@
trait Foo<const KIND: bool = true> {}
//~^ ERROR default values for const generic parameters are experimental
fn main() {}

View file

@ -0,0 +1,5 @@
#![feature(min_const_generics)]
#![crate_type="lib"]
struct A<const N: usize = 3>;
//~^ ERROR default values for

View file

@ -0,0 +1,10 @@
error: default values for const generic parameters are unstable
--> $DIR/feature-gate-const_generic_defaults.rs:4:27
|
LL | struct A<const N: usize = 3>;
| ^
|
= note: to enable them use #![feature(const_generic_defaults)]
error: aborting due to previous error