Stabilize const_constructor

This commit is contained in:
Matthew Jasper 2019-10-07 21:08:39 +01:00
parent 95f437b3cf
commit 170718c93f
8 changed files with 45 additions and 109 deletions

View file

@ -6,8 +6,6 @@
#![cfg_attr(const_fn, feature(const_fn))]
#![feature(const_constructor)]
// Ctor(..) is transformed to Ctor { 0: ... } in HAIR lowering, so directly
// calling constructors doesn't require them to be const.

View file

@ -0,0 +1,40 @@
// revisions: min_const_fn const_fn
// run-pass
#![cfg_attr(const_fn, feature(const_fn))]
trait ConstDefault {
const DEFAULT: Self;
}
#[derive(PartialEq)]
enum E {
V(i32),
W(usize),
}
impl ConstDefault for E {
const DEFAULT: Self = Self::V(23);
}
impl ConstDefault for Option<i32> {
const DEFAULT: Self = Self::Some(23);
}
impl E {
const NON_DEFAULT: Self = Self::W(12);
const fn local_fn() -> Self {
Self::V(23)
}
}
const fn explicit_qpath() -> E {
let _x = <Option<usize>>::Some(23);
<E>::W(12)
}
fn main() {
assert!(E::DEFAULT == E::local_fn());
assert!(Option::DEFAULT == Some(23));
assert!(E::NON_DEFAULT == explicit_qpath());
}

View file

@ -1,34 +0,0 @@
error: `std::prelude::v1::Some` is not yet stable as a const fn
--> $DIR/feature-gate-const_constructor.rs:9:37
|
LL | const EXTERNAL_CONST: Option<i32> = {Some}(1);
| ^^^^^^^^^
|
= help: add `#![feature(const_constructor)]` to the crate attributes to enable
error: `E::V` is not yet stable as a const fn
--> $DIR/feature-gate-const_constructor.rs:12:24
|
LL | const LOCAL_CONST: E = {E::V}(1);
| ^^^^^^^^^
|
= help: add `#![feature(const_constructor)]` to the crate attributes to enable
error: `std::prelude::v1::Some` is not yet stable as a const fn
--> $DIR/feature-gate-const_constructor.rs:17:13
|
LL | let _ = {Some}(1);
| ^^^^^^^^^
|
= help: add `#![feature(const_constructor)]` to the crate attributes to enable
error: `E::V` is not yet stable as a const fn
--> $DIR/feature-gate-const_constructor.rs:23:13
|
LL | let _ = {E::V}(1);
| ^^^^^^^^^
|
= help: add `#![feature(const_constructor)]` to the crate attributes to enable
error: aborting due to 4 previous errors

View file

@ -1,34 +0,0 @@
error: `std::prelude::v1::Some` is not yet stable as a const fn
--> $DIR/feature-gate-const_constructor.rs:9:37
|
LL | const EXTERNAL_CONST: Option<i32> = {Some}(1);
| ^^^^^^^^^
|
= help: add `#![feature(const_constructor)]` to the crate attributes to enable
error: `E::V` is not yet stable as a const fn
--> $DIR/feature-gate-const_constructor.rs:12:24
|
LL | const LOCAL_CONST: E = {E::V}(1);
| ^^^^^^^^^
|
= help: add `#![feature(const_constructor)]` to the crate attributes to enable
error: `std::prelude::v1::Some` is not yet stable as a const fn
--> $DIR/feature-gate-const_constructor.rs:17:13
|
LL | let _ = {Some}(1);
| ^^^^^^^^^
|
= help: add `#![feature(const_constructor)]` to the crate attributes to enable
error: `E::V` is not yet stable as a const fn
--> $DIR/feature-gate-const_constructor.rs:23:13
|
LL | let _ = {E::V}(1);
| ^^^^^^^^^
|
= help: add `#![feature(const_constructor)]` to the crate attributes to enable
error: aborting due to 4 previous errors

View file

@ -1,28 +0,0 @@
// revisions: min_const_fn const_fn
#![cfg_attr(const_fn, feature(const_fn))]
enum E {
V(i32),
}
const EXTERNAL_CONST: Option<i32> = {Some}(1);
//[min_const_fn]~^ ERROR is not yet stable as a const fn
//[const_fn]~^^ ERROR is not yet stable as a const fn
const LOCAL_CONST: E = {E::V}(1);
//[min_const_fn]~^ ERROR is not yet stable as a const fn
//[const_fn]~^^ ERROR is not yet stable as a const fn
const fn external_fn() {
let _ = {Some}(1);
//[min_const_fn]~^ ERROR is not yet stable as a const fn
//[const_fn]~^^ ERROR is not yet stable as a const fn
}
const fn local_fn() {
let _ = {E::V}(1);
//[min_const_fn]~^ ERROR is not yet stable as a const fn
//[const_fn]~^^ ERROR is not yet stable as a const fn
}
fn main() {}