Stabilize const_constructor
This commit is contained in:
parent
95f437b3cf
commit
170718c93f
8 changed files with 45 additions and 109 deletions
|
|
@ -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.
|
||||
|
||||
|
|
|
|||
|
|
@ -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());
|
||||
}
|
||||
|
|
@ -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
|
||||
|
||||
|
|
@ -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
|
||||
|
||||
|
|
@ -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() {}
|
||||
Loading…
Add table
Add a link
Reference in a new issue