Stabilize `min_const_fn`
This commit is contained in:
parent
b8bea5a0a6
commit
ec74d3533a
|
@ -86,7 +86,7 @@
|
||||||
#![feature(box_syntax)]
|
#![feature(box_syntax)]
|
||||||
#![feature(cfg_target_has_atomic)]
|
#![feature(cfg_target_has_atomic)]
|
||||||
#![feature(coerce_unsized)]
|
#![feature(coerce_unsized)]
|
||||||
#![feature(min_const_fn)]
|
#![cfg_attr(stage0, feature(min_const_fn))]
|
||||||
#![feature(core_intrinsics)]
|
#![feature(core_intrinsics)]
|
||||||
#![feature(custom_attribute)]
|
#![feature(custom_attribute)]
|
||||||
#![feature(dropck_eyepatch)]
|
#![feature(dropck_eyepatch)]
|
||||||
|
|
|
@ -11,7 +11,7 @@
|
||||||
#![feature(allocator_api)]
|
#![feature(allocator_api)]
|
||||||
#![feature(alloc_system)]
|
#![feature(alloc_system)]
|
||||||
#![feature(box_syntax)]
|
#![feature(box_syntax)]
|
||||||
#![feature(min_const_fn)]
|
#![cfg_attr(stage0, feature(min_const_fn))]
|
||||||
#![feature(drain_filter)]
|
#![feature(drain_filter)]
|
||||||
#![feature(exact_size_is_empty)]
|
#![feature(exact_size_is_empty)]
|
||||||
#![feature(pattern)]
|
#![feature(pattern)]
|
||||||
|
|
|
@ -42,7 +42,7 @@
|
||||||
|
|
||||||
#![feature(box_patterns)]
|
#![feature(box_patterns)]
|
||||||
#![feature(box_syntax)]
|
#![feature(box_syntax)]
|
||||||
#![feature(min_const_fn)]
|
#![cfg_attr(stage0, feature(min_const_fn))]
|
||||||
#![feature(core_intrinsics)]
|
#![feature(core_intrinsics)]
|
||||||
#![feature(drain_filter)]
|
#![feature(drain_filter)]
|
||||||
#![cfg_attr(windows, feature(libc))]
|
#![cfg_attr(windows, feature(libc))]
|
||||||
|
|
|
@ -65,7 +65,7 @@ impl<'a, 'tcx> TyCtxt<'a, 'tcx, 'tcx> {
|
||||||
_ => true,
|
_ => true,
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// users enabling the `const_fn` can do what they want
|
// users enabling the `const_fn` feature gate can do what they want
|
||||||
!self.sess.features_untracked().const_fn
|
!self.sess.features_untracked().const_fn
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -22,7 +22,7 @@
|
||||||
html_root_url = "https://doc.rust-lang.org/nightly/")]
|
html_root_url = "https://doc.rust-lang.org/nightly/")]
|
||||||
|
|
||||||
#![feature(box_syntax)]
|
#![feature(box_syntax)]
|
||||||
#![feature(min_const_fn)]
|
#![cfg_attr(stage0, feature(min_const_fn))]
|
||||||
#![feature(nll)]
|
#![feature(nll)]
|
||||||
#![feature(slice_patterns)]
|
#![feature(slice_patterns)]
|
||||||
|
|
||||||
|
|
|
@ -250,7 +250,7 @@
|
||||||
#![feature(cfg_target_vendor)]
|
#![feature(cfg_target_vendor)]
|
||||||
#![feature(char_error_internals)]
|
#![feature(char_error_internals)]
|
||||||
#![feature(compiler_builtins_lib)]
|
#![feature(compiler_builtins_lib)]
|
||||||
#![feature(min_const_fn)]
|
#![cfg_attr(stage0, feature(min_const_fn))]
|
||||||
#![feature(const_int_ops)]
|
#![feature(const_int_ops)]
|
||||||
#![feature(const_ip)]
|
#![feature(const_ip)]
|
||||||
#![feature(const_raw_ptr_deref)]
|
#![feature(const_raw_ptr_deref)]
|
||||||
|
|
|
@ -107,8 +107,7 @@ pub struct Stability {
|
||||||
pub level: StabilityLevel,
|
pub level: StabilityLevel,
|
||||||
pub feature: Symbol,
|
pub feature: Symbol,
|
||||||
pub rustc_depr: Option<RustcDeprecation>,
|
pub rustc_depr: Option<RustcDeprecation>,
|
||||||
/// `None` means the function is stable but needs to be allowed by the
|
/// `None` means the function is stable but needs to be a stable const fn, too
|
||||||
/// `min_const_fn` feature
|
|
||||||
/// `Some` contains the feature gate required to be able to use the function
|
/// `Some` contains the feature gate required to be able to use the function
|
||||||
/// as const fn
|
/// as const fn
|
||||||
pub const_stability: Option<Symbol>,
|
pub const_stability: Option<Symbol>,
|
||||||
|
|
|
@ -1806,9 +1806,6 @@ impl<'a> Visitor<'a> for PostExpansionVisitor<'a> {
|
||||||
if header.asyncness.is_async() {
|
if header.asyncness.is_async() {
|
||||||
gate_feature_post!(&self, async_await, span, "async fn is unstable");
|
gate_feature_post!(&self, async_await, span, "async fn is unstable");
|
||||||
}
|
}
|
||||||
if header.constness.node == ast::Constness::Const {
|
|
||||||
gate_feature_post!(&self, min_const_fn, span, "const fn is unstable");
|
|
||||||
}
|
|
||||||
// stability of const fn methods are covered in
|
// stability of const fn methods are covered in
|
||||||
// visit_trait_item and visit_impl_item below; this is
|
// visit_trait_item and visit_impl_item below; this is
|
||||||
// because default methods don't pass through this
|
// because default methods don't pass through this
|
||||||
|
@ -1863,11 +1860,7 @@ impl<'a> Visitor<'a> for PostExpansionVisitor<'a> {
|
||||||
}
|
}
|
||||||
|
|
||||||
match ii.node {
|
match ii.node {
|
||||||
ast::ImplItemKind::Method(ref sig, _) => {
|
ast::ImplItemKind::Method(..) => {}
|
||||||
if sig.header.constness.node == ast::Constness::Const {
|
|
||||||
gate_feature_post!(&self, min_const_fn, ii.span, "const fn is unstable");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
ast::ImplItemKind::Existential(..) => {
|
ast::ImplItemKind::Existential(..) => {
|
||||||
gate_feature_post!(
|
gate_feature_post!(
|
||||||
&self,
|
&self,
|
||||||
|
|
|
@ -13,7 +13,6 @@
|
||||||
|
|
||||||
// NB: We do not expect *any* monomorphization to be generated here.
|
// NB: We do not expect *any* monomorphization to be generated here.
|
||||||
|
|
||||||
#![feature(min_const_fn)]
|
|
||||||
#![deny(dead_code)]
|
#![deny(dead_code)]
|
||||||
#![crate_type = "rlib"]
|
#![crate_type = "rlib"]
|
||||||
|
|
||||||
|
|
|
@ -10,7 +10,6 @@
|
||||||
|
|
||||||
// compile-flags:-Clink-dead-code
|
// compile-flags:-Clink-dead-code
|
||||||
|
|
||||||
#![feature(min_const_fn)]
|
|
||||||
#![crate_type = "rlib"]
|
#![crate_type = "rlib"]
|
||||||
|
|
||||||
// This test makes sure that, when -Clink-dead-code is specified, we generate
|
// This test makes sure that, when -Clink-dead-code is specified, we generate
|
||||||
|
|
|
@ -8,7 +8,6 @@
|
||||||
// option. This file may not be copied, modified, or distributed
|
// option. This file may not be copied, modified, or distributed
|
||||||
// except according to those terms.
|
// except according to those terms.
|
||||||
|
|
||||||
#![feature(min_const_fn)]
|
|
||||||
#![feature(cfg_target_thread_local, thread_local_internals)]
|
#![feature(cfg_target_thread_local, thread_local_internals)]
|
||||||
|
|
||||||
// On platforms *without* `#[thread_local]`, use
|
// On platforms *without* `#[thread_local]`, use
|
||||||
|
|
|
@ -15,8 +15,6 @@
|
||||||
|
|
||||||
// compile-flags: -Z lower_128bit_ops=yes -C debug_assertions=yes
|
// compile-flags: -Z lower_128bit_ops=yes -C debug_assertions=yes
|
||||||
|
|
||||||
#![feature(min_const_fn)]
|
|
||||||
|
|
||||||
static TEST_SIGNED: i128 = const_signed(-222);
|
static TEST_SIGNED: i128 = const_signed(-222);
|
||||||
static TEST_UNSIGNED: u128 = const_unsigned(200);
|
static TEST_UNSIGNED: u128 = const_unsigned(200);
|
||||||
|
|
||||||
|
|
|
@ -12,8 +12,6 @@
|
||||||
|
|
||||||
// compile-flags: -Z lower_128bit_ops=yes -C debug_assertions=no -O
|
// compile-flags: -Z lower_128bit_ops=yes -C debug_assertions=no -O
|
||||||
|
|
||||||
#![feature(min_const_fn)]
|
|
||||||
|
|
||||||
static TEST_SIGNED: i128 = const_signed(-222);
|
static TEST_SIGNED: i128 = const_signed(-222);
|
||||||
static TEST_UNSIGNED: u128 = const_unsigned(200);
|
static TEST_UNSIGNED: u128 = const_unsigned(200);
|
||||||
|
|
||||||
|
|
|
@ -10,7 +10,6 @@
|
||||||
|
|
||||||
// error-pattern:index out of bounds: the len is 5 but the index is 5
|
// error-pattern:index out of bounds: the len is 5 but the index is 5
|
||||||
|
|
||||||
#![feature(min_const_fn)]
|
|
||||||
const fn test(x: usize) -> i32 {
|
const fn test(x: usize) -> i32 {
|
||||||
[42;5][x]
|
[42;5][x]
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
#![feature(min_const_fn, rustc_attrs, rustc_private, step_trait)]
|
#![feature(rustc_attrs, rustc_private, step_trait)]
|
||||||
|
|
||||||
#[macro_use] extern crate rustc_data_structures;
|
#[macro_use] extern crate rustc_data_structures;
|
||||||
extern crate rustc_serialize;
|
extern crate rustc_serialize;
|
||||||
|
|
|
@ -11,6 +11,5 @@
|
||||||
// Crate that exports a const fn. Used for testing cross-crate.
|
// Crate that exports a const fn. Used for testing cross-crate.
|
||||||
|
|
||||||
#![crate_type="rlib"]
|
#![crate_type="rlib"]
|
||||||
#![feature(min_const_fn)]
|
|
||||||
|
|
||||||
pub const fn foo() -> usize { 22 }
|
pub const fn foo() -> usize { 22 }
|
||||||
|
|
|
@ -10,7 +10,6 @@
|
||||||
|
|
||||||
// run-pass
|
// run-pass
|
||||||
#![allow(dead_code)]
|
#![allow(dead_code)]
|
||||||
#![feature(min_const_fn)]
|
|
||||||
|
|
||||||
const fn add(x: usize, y: usize) -> usize {
|
const fn add(x: usize, y: usize) -> usize {
|
||||||
x + y
|
x + y
|
||||||
|
|
|
@ -9,7 +9,6 @@
|
||||||
// except according to those terms.
|
// except according to those terms.
|
||||||
|
|
||||||
// run-pass
|
// run-pass
|
||||||
#![feature(min_const_fn)]
|
|
||||||
|
|
||||||
struct Foo { value: u32 }
|
struct Foo { value: u32 }
|
||||||
|
|
||||||
|
|
|
@ -11,8 +11,6 @@
|
||||||
// run-pass
|
// run-pass
|
||||||
// Test a call whose argument is the result of another call.
|
// Test a call whose argument is the result of another call.
|
||||||
|
|
||||||
#![feature(min_const_fn)]
|
|
||||||
|
|
||||||
const fn sub(x: u32, y: u32) -> u32 {
|
const fn sub(x: u32, y: u32) -> u32 {
|
||||||
x - y
|
x - y
|
||||||
}
|
}
|
||||||
|
|
|
@ -10,8 +10,6 @@
|
||||||
|
|
||||||
// run-pass
|
// run-pass
|
||||||
|
|
||||||
#![feature(min_const_fn)]
|
|
||||||
|
|
||||||
struct A;
|
struct A;
|
||||||
|
|
||||||
impl A {
|
impl A {
|
||||||
|
|
|
@ -10,7 +10,6 @@
|
||||||
|
|
||||||
// run-pass
|
// run-pass
|
||||||
#![allow(unreachable_patterns)]
|
#![allow(unreachable_patterns)]
|
||||||
#![feature(min_const_fn)]
|
|
||||||
|
|
||||||
#[derive(PartialEq, Eq)]
|
#[derive(PartialEq, Eq)]
|
||||||
enum Cake {
|
enum Cake {
|
||||||
|
|
|
@ -10,7 +10,6 @@
|
||||||
|
|
||||||
// run-pass
|
// run-pass
|
||||||
#![allow(dead_code)]
|
#![allow(dead_code)]
|
||||||
#![feature(min_const_fn)]
|
|
||||||
|
|
||||||
use std::mem;
|
use std::mem;
|
||||||
|
|
||||||
|
|
|
@ -12,8 +12,6 @@
|
||||||
#![allow(dead_code)]
|
#![allow(dead_code)]
|
||||||
// A quick test of 'unsafe const fn' functionality
|
// A quick test of 'unsafe const fn' functionality
|
||||||
|
|
||||||
#![feature(min_const_fn)]
|
|
||||||
|
|
||||||
const unsafe fn dummy(v: u32) -> u32 {
|
const unsafe fn dummy(v: u32) -> u32 {
|
||||||
!v
|
!v
|
||||||
}
|
}
|
||||||
|
|
|
@ -9,7 +9,6 @@
|
||||||
// except according to those terms.
|
// except according to those terms.
|
||||||
|
|
||||||
// run-pass
|
// run-pass
|
||||||
#![feature(min_const_fn)]
|
|
||||||
|
|
||||||
const FOO: isize = 10;
|
const FOO: isize = 10;
|
||||||
const BAR: isize = 3;
|
const BAR: isize = 3;
|
||||||
|
|
|
@ -14,8 +14,6 @@
|
||||||
|
|
||||||
// https://github.com/rust-lang/rust/issues/48279
|
// https://github.com/rust-lang/rust/issues/48279
|
||||||
|
|
||||||
#![feature(min_const_fn)]
|
|
||||||
|
|
||||||
#[derive(PartialEq, Eq)]
|
#[derive(PartialEq, Eq)]
|
||||||
pub struct NonZeroU32 {
|
pub struct NonZeroU32 {
|
||||||
value: u32
|
value: u32
|
||||||
|
|
|
@ -13,8 +13,6 @@
|
||||||
|
|
||||||
// https://github.com/rust-lang/rust/issues/46114
|
// https://github.com/rust-lang/rust/issues/46114
|
||||||
|
|
||||||
#![feature(min_const_fn)]
|
|
||||||
|
|
||||||
#[derive(Eq, PartialEq)]
|
#[derive(Eq, PartialEq)]
|
||||||
struct A { value: u32 }
|
struct A { value: u32 }
|
||||||
|
|
||||||
|
|
|
@ -12,7 +12,6 @@
|
||||||
|
|
||||||
// https://github.com/rust-lang/rust/issues/43754
|
// https://github.com/rust-lang/rust/issues/43754
|
||||||
|
|
||||||
#![feature(min_const_fn)]
|
|
||||||
const fn foo(x: usize) -> usize {
|
const fn foo(x: usize) -> usize {
|
||||||
return x;
|
return x;
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,7 +8,6 @@
|
||||||
// option. This file may not be copied, modified, or distributed
|
// option. This file may not be copied, modified, or distributed
|
||||||
// except according to those terms.
|
// except according to those terms.
|
||||||
|
|
||||||
#![feature(min_const_fn)]
|
|
||||||
#![crate_type = "lib"]
|
#![crate_type = "lib"]
|
||||||
|
|
||||||
const fn foo(i: i32) -> i32 {
|
const fn foo(i: i32) -> i32 {
|
||||||
|
|
|
@ -10,7 +10,6 @@
|
||||||
|
|
||||||
// run-pass
|
// run-pass
|
||||||
#![allow(dead_code)]
|
#![allow(dead_code)]
|
||||||
#![feature(min_const_fn)]
|
|
||||||
struct A {
|
struct A {
|
||||||
field: usize,
|
field: usize,
|
||||||
}
|
}
|
||||||
|
|
|
@ -9,7 +9,6 @@
|
||||||
// except according to those terms.
|
// except according to those terms.
|
||||||
|
|
||||||
// run-pass
|
// run-pass
|
||||||
#![feature(min_const_fn)]
|
|
||||||
|
|
||||||
const fn foo() -> *const i8 {
|
const fn foo() -> *const i8 {
|
||||||
b"foo" as *const _ as *const i8
|
b"foo" as *const _ as *const i8
|
||||||
|
|
|
@ -9,7 +9,6 @@
|
||||||
// except according to those terms.
|
// except according to those terms.
|
||||||
|
|
||||||
// run-pass
|
// run-pass
|
||||||
#![feature(min_const_fn)]
|
|
||||||
|
|
||||||
const fn foo() -> i64 {
|
const fn foo() -> i64 {
|
||||||
3
|
3
|
||||||
|
|
|
@ -10,7 +10,6 @@
|
||||||
|
|
||||||
// run-pass
|
// run-pass
|
||||||
#![allow(dead_code)]
|
#![allow(dead_code)]
|
||||||
#![feature(min_const_fn)]
|
|
||||||
const fn f() -> usize {
|
const fn f() -> usize {
|
||||||
5
|
5
|
||||||
}
|
}
|
||||||
|
|
|
@ -10,8 +10,6 @@
|
||||||
|
|
||||||
// compile-flags: -Cmetadata=aux
|
// compile-flags: -Cmetadata=aux
|
||||||
|
|
||||||
#![feature(min_const_fn)]
|
|
||||||
|
|
||||||
pub const fn foo() {}
|
pub const fn foo() {}
|
||||||
pub const unsafe fn bar() {}
|
pub const unsafe fn bar() {}
|
||||||
|
|
||||||
|
|
|
@ -8,7 +8,6 @@
|
||||||
// option. This file may not be copied, modified, or distributed
|
// option. This file may not be copied, modified, or distributed
|
||||||
// except according to those terms.
|
// except according to those terms.
|
||||||
|
|
||||||
#![feature(min_const_fn)]
|
|
||||||
#![crate_name = "foo"]
|
#![crate_name = "foo"]
|
||||||
|
|
||||||
// @has foo/fn.bar.html
|
// @has foo/fn.bar.html
|
||||||
|
|
|
@ -10,8 +10,6 @@
|
||||||
|
|
||||||
#![crate_type="lib"]
|
#![crate_type="lib"]
|
||||||
|
|
||||||
#![feature(min_const_fn)]
|
|
||||||
|
|
||||||
pub struct Foo;
|
pub struct Foo;
|
||||||
|
|
||||||
impl Foo {
|
impl Foo {
|
||||||
|
|
|
@ -1,11 +1,11 @@
|
||||||
error[E0507]: cannot move out of borrowed content
|
error[E0507]: cannot move out of borrowed content
|
||||||
--> $DIR/move-in-static-initializer-issue-38520.rs:27:23
|
--> $DIR/move-in-static-initializer-issue-38520.rs:25:23
|
||||||
|
|
|
|
||||||
LL | static Y: usize = get(*&X); //[ast]~ ERROR E0507
|
LL | static Y: usize = get(*&X); //[ast]~ ERROR E0507
|
||||||
| ^^^ cannot move out of borrowed content
|
| ^^^ cannot move out of borrowed content
|
||||||
|
|
||||||
error[E0507]: cannot move out of borrowed content
|
error[E0507]: cannot move out of borrowed content
|
||||||
--> $DIR/move-in-static-initializer-issue-38520.rs:29:22
|
--> $DIR/move-in-static-initializer-issue-38520.rs:27:22
|
||||||
|
|
|
|
||||||
LL | const Z: usize = get(*&X); //[ast]~ ERROR E0507
|
LL | const Z: usize = get(*&X); //[ast]~ ERROR E0507
|
||||||
| ^^^ cannot move out of borrowed content
|
| ^^^ cannot move out of borrowed content
|
||||||
|
|
|
@ -1,11 +1,11 @@
|
||||||
error[E0507]: cannot move out of borrowed content
|
error[E0507]: cannot move out of borrowed content
|
||||||
--> $DIR/move-in-static-initializer-issue-38520.rs:27:23
|
--> $DIR/move-in-static-initializer-issue-38520.rs:25:23
|
||||||
|
|
|
|
||||||
LL | static Y: usize = get(*&X); //[ast]~ ERROR E0507
|
LL | static Y: usize = get(*&X); //[ast]~ ERROR E0507
|
||||||
| ^^^ cannot move out of borrowed content
|
| ^^^ cannot move out of borrowed content
|
||||||
|
|
||||||
error[E0507]: cannot move out of borrowed content
|
error[E0507]: cannot move out of borrowed content
|
||||||
--> $DIR/move-in-static-initializer-issue-38520.rs:29:22
|
--> $DIR/move-in-static-initializer-issue-38520.rs:27:22
|
||||||
|
|
|
|
||||||
LL | const Z: usize = get(*&X); //[ast]~ ERROR E0507
|
LL | const Z: usize = get(*&X); //[ast]~ ERROR E0507
|
||||||
| ^^^ cannot move out of borrowed content
|
| ^^^ cannot move out of borrowed content
|
||||||
|
|
|
@ -15,8 +15,6 @@
|
||||||
// permitted as `Foo` is not copy (even in a static/const
|
// permitted as `Foo` is not copy (even in a static/const
|
||||||
// initializer).
|
// initializer).
|
||||||
|
|
||||||
#![feature(min_const_fn)]
|
|
||||||
|
|
||||||
struct Foo(usize);
|
struct Foo(usize);
|
||||||
|
|
||||||
const fn get(x: Foo) -> usize {
|
const fn get(x: Foo) -> usize {
|
||||||
|
|
|
@ -11,6 +11,5 @@
|
||||||
// Crate that exports a const fn. Used for testing cross-crate.
|
// Crate that exports a const fn. Used for testing cross-crate.
|
||||||
|
|
||||||
#![crate_type="rlib"]
|
#![crate_type="rlib"]
|
||||||
#![feature(min_const_fn)]
|
|
||||||
|
|
||||||
pub const fn foo() -> usize { 22 } //~ ERROR const fn is unstable
|
pub const fn foo() -> usize { 22 } //~ ERROR const fn is unstable
|
||||||
|
|
|
@ -10,8 +10,6 @@
|
||||||
|
|
||||||
#![warn(const_err)]
|
#![warn(const_err)]
|
||||||
|
|
||||||
#![feature(min_const_fn)]
|
|
||||||
|
|
||||||
const fn foo(x: u32) -> u32 {
|
const fn foo(x: u32) -> u32 {
|
||||||
x
|
x
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
warning: this constant cannot be used
|
warning: this constant cannot be used
|
||||||
--> $DIR/issue-43197.rs:20:5
|
--> $DIR/issue-43197.rs:18:5
|
||||||
|
|
|
|
||||||
LL | const X: u32 = 0-1;
|
LL | const X: u32 = 0-1;
|
||||||
| ^^^^^^^^^^^^^^^---^
|
| ^^^^^^^^^^^^^^^---^
|
||||||
|
@ -13,7 +13,7 @@ LL | #![warn(const_err)]
|
||||||
| ^^^^^^^^^
|
| ^^^^^^^^^
|
||||||
|
|
||||||
warning: this constant cannot be used
|
warning: this constant cannot be used
|
||||||
--> $DIR/issue-43197.rs:22:5
|
--> $DIR/issue-43197.rs:20:5
|
||||||
|
|
|
|
||||||
LL | const Y: u32 = foo(0-1);
|
LL | const Y: u32 = foo(0-1);
|
||||||
| ^^^^^^^^^^^^^^^^^^^---^^
|
| ^^^^^^^^^^^^^^^^^^^---^^
|
||||||
|
@ -21,7 +21,7 @@ LL | const Y: u32 = foo(0-1);
|
||||||
| attempt to subtract with overflow
|
| attempt to subtract with overflow
|
||||||
|
|
||||||
error[E0080]: referenced constant has errors
|
error[E0080]: referenced constant has errors
|
||||||
--> $DIR/issue-43197.rs:24:26
|
--> $DIR/issue-43197.rs:22:26
|
||||||
|
|
|
|
||||||
LL | const Y: u32 = foo(0-1);
|
LL | const Y: u32 = foo(0-1);
|
||||||
| --- attempt to subtract with overflow
|
| --- attempt to subtract with overflow
|
||||||
|
@ -30,13 +30,13 @@ LL | println!("{} {}", X, Y);
|
||||||
| ^
|
| ^
|
||||||
|
|
||||||
error[E0080]: erroneous constant used
|
error[E0080]: erroneous constant used
|
||||||
--> $DIR/issue-43197.rs:24:26
|
--> $DIR/issue-43197.rs:22:26
|
||||||
|
|
|
|
||||||
LL | println!("{} {}", X, Y);
|
LL | println!("{} {}", X, Y);
|
||||||
| ^ referenced constant has errors
|
| ^ referenced constant has errors
|
||||||
|
|
||||||
error[E0080]: referenced constant has errors
|
error[E0080]: referenced constant has errors
|
||||||
--> $DIR/issue-43197.rs:24:23
|
--> $DIR/issue-43197.rs:22:23
|
||||||
|
|
|
|
||||||
LL | const X: u32 = 0-1;
|
LL | const X: u32 = 0-1;
|
||||||
| --- attempt to subtract with overflow
|
| --- attempt to subtract with overflow
|
||||||
|
@ -45,7 +45,7 @@ LL | println!("{} {}", X, Y);
|
||||||
| ^
|
| ^
|
||||||
|
|
||||||
error[E0080]: erroneous constant used
|
error[E0080]: erroneous constant used
|
||||||
--> $DIR/issue-43197.rs:24:23
|
--> $DIR/issue-43197.rs:22:23
|
||||||
|
|
|
|
||||||
LL | println!("{} {}", X, Y);
|
LL | println!("{} {}", X, Y);
|
||||||
| ^ referenced constant has errors
|
| ^ referenced constant has errors
|
||||||
|
|
|
@ -10,8 +10,6 @@
|
||||||
|
|
||||||
// compile-pass
|
// compile-pass
|
||||||
|
|
||||||
#![feature(min_const_fn)]
|
|
||||||
|
|
||||||
struct S(pub &'static u32, pub u32);
|
struct S(pub &'static u32, pub u32);
|
||||||
|
|
||||||
const fn g(ss: &S) -> &u32 { &ss.1 }
|
const fn g(ss: &S) -> &u32 { &ss.1 }
|
||||||
|
|
|
@ -10,8 +10,6 @@
|
||||||
|
|
||||||
// compile-pass
|
// compile-pass
|
||||||
|
|
||||||
#![feature(min_const_fn)]
|
|
||||||
|
|
||||||
#[derive(PartialEq, Eq)]
|
#[derive(PartialEq, Eq)]
|
||||||
enum Cake {
|
enum Cake {
|
||||||
BlackForest,
|
BlackForest,
|
||||||
|
|
|
@ -0,0 +1,5 @@
|
||||||
|
const fn cmp(x: fn(), y: fn()) -> bool { //~ ERROR function pointers in const fn are unstable
|
||||||
|
x == y
|
||||||
|
}
|
||||||
|
|
||||||
|
fn main() {}
|
|
@ -0,0 +1,8 @@
|
||||||
|
error: function pointers in const fn are unstable
|
||||||
|
--> $DIR/cmp_fn_pointers.rs:1:14
|
||||||
|
|
|
||||||
|
LL | const fn cmp(x: fn(), y: fn()) -> bool { //~ ERROR function pointers in const fn are unstable
|
||||||
|
| ^
|
||||||
|
|
||||||
|
error: aborting due to previous error
|
||||||
|
|
|
@ -1,197 +1,197 @@
|
||||||
error[E0493]: destructors cannot be evaluated at compile-time
|
error[E0493]: destructors cannot be evaluated at compile-time
|
||||||
--> $DIR/min_const_fn.rs:49:25
|
--> $DIR/min_const_fn.rs:47:25
|
||||||
|
|
|
|
||||||
LL | const fn into_inner(self) -> T { self.0 } //~ destructors cannot be evaluated
|
LL | const fn into_inner(self) -> T { self.0 } //~ destructors cannot be evaluated
|
||||||
| ^^^^ constant functions cannot evaluate destructors
|
| ^^^^ constant functions cannot evaluate destructors
|
||||||
|
|
||||||
error: mutable references in const fn are unstable
|
error: mutable references in const fn are unstable
|
||||||
--> $DIR/min_const_fn.rs:51:36
|
--> $DIR/min_const_fn.rs:49:36
|
||||||
|
|
|
|
||||||
LL | const fn get_mut(&mut self) -> &mut T { &mut self.0 }
|
LL | const fn get_mut(&mut self) -> &mut T { &mut self.0 }
|
||||||
| ^^^^^^
|
| ^^^^^^
|
||||||
|
|
||||||
error[E0493]: destructors cannot be evaluated at compile-time
|
error[E0493]: destructors cannot be evaluated at compile-time
|
||||||
--> $DIR/min_const_fn.rs:56:28
|
--> $DIR/min_const_fn.rs:54:28
|
||||||
|
|
|
|
||||||
LL | const fn into_inner_lt(self) -> T { self.0 } //~ destructors cannot be evaluated
|
LL | const fn into_inner_lt(self) -> T { self.0 } //~ destructors cannot be evaluated
|
||||||
| ^^^^ constant functions cannot evaluate destructors
|
| ^^^^ constant functions cannot evaluate destructors
|
||||||
|
|
||||||
error: mutable references in const fn are unstable
|
error: mutable references in const fn are unstable
|
||||||
--> $DIR/min_const_fn.rs:58:42
|
--> $DIR/min_const_fn.rs:56:42
|
||||||
|
|
|
|
||||||
LL | const fn get_mut_lt(&'a mut self) -> &mut T { &mut self.0 }
|
LL | const fn get_mut_lt(&'a mut self) -> &mut T { &mut self.0 }
|
||||||
| ^^^^^^
|
| ^^^^^^
|
||||||
|
|
||||||
error[E0493]: destructors cannot be evaluated at compile-time
|
error[E0493]: destructors cannot be evaluated at compile-time
|
||||||
--> $DIR/min_const_fn.rs:63:27
|
--> $DIR/min_const_fn.rs:61:27
|
||||||
|
|
|
|
||||||
LL | const fn into_inner_s(self) -> T { self.0 } //~ ERROR destructors
|
LL | const fn into_inner_s(self) -> T { self.0 } //~ ERROR destructors
|
||||||
| ^^^^ constant functions cannot evaluate destructors
|
| ^^^^ constant functions cannot evaluate destructors
|
||||||
|
|
||||||
error: mutable references in const fn are unstable
|
error: mutable references in const fn are unstable
|
||||||
--> $DIR/min_const_fn.rs:65:38
|
--> $DIR/min_const_fn.rs:63:38
|
||||||
|
|
|
|
||||||
LL | const fn get_mut_s(&mut self) -> &mut T { &mut self.0 }
|
LL | const fn get_mut_s(&mut self) -> &mut T { &mut self.0 }
|
||||||
| ^^^^^^
|
| ^^^^^^
|
||||||
|
|
||||||
error: mutable references in const fn are unstable
|
error: mutable references in const fn are unstable
|
||||||
--> $DIR/min_const_fn.rs:70:39
|
--> $DIR/min_const_fn.rs:68:39
|
||||||
|
|
|
|
||||||
LL | const fn get_mut_sq(&mut self) -> &mut T { &mut self.0 }
|
LL | const fn get_mut_sq(&mut self) -> &mut T { &mut self.0 }
|
||||||
| ^^^^^^
|
| ^^^^^^
|
||||||
|
|
||||||
error: trait bounds other than `Sized` on const fn parameters are unstable
|
error: trait bounds other than `Sized` on const fn parameters are unstable
|
||||||
--> $DIR/min_const_fn.rs:88:16
|
--> $DIR/min_const_fn.rs:86:16
|
||||||
|
|
|
|
||||||
LL | const fn foo11<T: std::fmt::Display>(t: T) -> T { t }
|
LL | const fn foo11<T: std::fmt::Display>(t: T) -> T { t }
|
||||||
| ^
|
| ^
|
||||||
|
|
||||||
error: trait bounds other than `Sized` on const fn parameters are unstable
|
error: trait bounds other than `Sized` on const fn parameters are unstable
|
||||||
--> $DIR/min_const_fn.rs:90:18
|
--> $DIR/min_const_fn.rs:88:18
|
||||||
|
|
|
|
||||||
LL | const fn foo11_2<T: Send>(t: T) -> T { t }
|
LL | const fn foo11_2<T: Send>(t: T) -> T { t }
|
||||||
| ^
|
| ^
|
||||||
|
|
||||||
error: only int, `bool` and `char` operations are stable in const fn
|
error: only int, `bool` and `char` operations are stable in const fn
|
||||||
--> $DIR/min_const_fn.rs:92:33
|
--> $DIR/min_const_fn.rs:90:33
|
||||||
|
|
|
|
||||||
LL | const fn foo19(f: f32) -> f32 { f * 2.0 }
|
LL | const fn foo19(f: f32) -> f32 { f * 2.0 }
|
||||||
| ^^^^^^^
|
| ^^^^^^^
|
||||||
|
|
||||||
error: only int, `bool` and `char` operations are stable in const fn
|
error: only int, `bool` and `char` operations are stable in const fn
|
||||||
--> $DIR/min_const_fn.rs:94:35
|
--> $DIR/min_const_fn.rs:92:35
|
||||||
|
|
|
|
||||||
LL | const fn foo19_2(f: f32) -> f32 { 2.0 - f }
|
LL | const fn foo19_2(f: f32) -> f32 { 2.0 - f }
|
||||||
| ^^^^^^^
|
| ^^^^^^^
|
||||||
|
|
||||||
error: only int and `bool` operations are stable in const fn
|
error: only int and `bool` operations are stable in const fn
|
||||||
--> $DIR/min_const_fn.rs:96:35
|
--> $DIR/min_const_fn.rs:94:35
|
||||||
|
|
|
|
||||||
LL | const fn foo19_3(f: f32) -> f32 { -f }
|
LL | const fn foo19_3(f: f32) -> f32 { -f }
|
||||||
| ^^
|
| ^^
|
||||||
|
|
||||||
error: only int, `bool` and `char` operations are stable in const fn
|
error: only int, `bool` and `char` operations are stable in const fn
|
||||||
--> $DIR/min_const_fn.rs:98:43
|
--> $DIR/min_const_fn.rs:96:43
|
||||||
|
|
|
|
||||||
LL | const fn foo19_4(f: f32, g: f32) -> f32 { f / g }
|
LL | const fn foo19_4(f: f32, g: f32) -> f32 { f / g }
|
||||||
| ^^^^^
|
| ^^^^^
|
||||||
|
|
||||||
error: cannot access `static` items in const fn
|
error: cannot access `static` items in const fn
|
||||||
--> $DIR/min_const_fn.rs:102:27
|
--> $DIR/min_const_fn.rs:100:27
|
||||||
|
|
|
|
||||||
LL | const fn foo25() -> u32 { BAR } //~ ERROR cannot access `static` items in const fn
|
LL | const fn foo25() -> u32 { BAR } //~ ERROR cannot access `static` items in const fn
|
||||||
| ^^^
|
| ^^^
|
||||||
|
|
||||||
error: cannot access `static` items in const fn
|
error: cannot access `static` items in const fn
|
||||||
--> $DIR/min_const_fn.rs:103:36
|
--> $DIR/min_const_fn.rs:101:36
|
||||||
|
|
|
|
||||||
LL | const fn foo26() -> &'static u32 { &BAR } //~ ERROR cannot access `static` items
|
LL | const fn foo26() -> &'static u32 { &BAR } //~ ERROR cannot access `static` items
|
||||||
| ^^^^
|
| ^^^^
|
||||||
|
|
||||||
error: casting pointers to ints is unstable in const fn
|
error: casting pointers to ints is unstable in const fn
|
||||||
--> $DIR/min_const_fn.rs:104:42
|
--> $DIR/min_const_fn.rs:102:42
|
||||||
|
|
|
|
||||||
LL | const fn foo30(x: *const u32) -> usize { x as usize }
|
LL | const fn foo30(x: *const u32) -> usize { x as usize }
|
||||||
| ^^^^^^^^^^
|
| ^^^^^^^^^^
|
||||||
|
|
||||||
error: casting pointers to ints is unstable in const fn
|
error: casting pointers to ints is unstable in const fn
|
||||||
--> $DIR/min_const_fn.rs:106:42
|
--> $DIR/min_const_fn.rs:104:42
|
||||||
|
|
|
|
||||||
LL | const fn foo30_2(x: *mut u32) -> usize { x as usize }
|
LL | const fn foo30_2(x: *mut u32) -> usize { x as usize }
|
||||||
| ^^^^^^^^^^
|
| ^^^^^^^^^^
|
||||||
|
|
||||||
error: `if`, `match`, `&&` and `||` are not stable in const fn
|
error: `if`, `match`, `&&` and `||` are not stable in const fn
|
||||||
--> $DIR/min_const_fn.rs:108:38
|
--> $DIR/min_const_fn.rs:106:38
|
||||||
|
|
|
|
||||||
LL | const fn foo30_4(b: bool) -> usize { if b { 1 } else { 42 } }
|
LL | const fn foo30_4(b: bool) -> usize { if b { 1 } else { 42 } }
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
error: `if`, `match`, `&&` and `||` are not stable in const fn
|
error: `if`, `match`, `&&` and `||` are not stable in const fn
|
||||||
--> $DIR/min_const_fn.rs:110:29
|
--> $DIR/min_const_fn.rs:108:29
|
||||||
|
|
|
|
||||||
LL | const fn foo30_5(b: bool) { while b { } } //~ ERROR not stable in const fn
|
LL | const fn foo30_5(b: bool) { while b { } } //~ ERROR not stable in const fn
|
||||||
| ^^^^^^^^^^^
|
| ^^^^^^^^^^^
|
||||||
|
|
||||||
error: local variables in const fn are unstable
|
error: local variables in const fn are unstable
|
||||||
--> $DIR/min_const_fn.rs:111:34
|
--> $DIR/min_const_fn.rs:109:34
|
||||||
|
|
|
|
||||||
LL | const fn foo30_6() -> bool { let x = true; x } //~ ERROR local variables in const fn are unstable
|
LL | const fn foo30_6() -> bool { let x = true; x } //~ ERROR local variables in const fn are unstable
|
||||||
| ^
|
| ^
|
||||||
|
|
||||||
error: `if`, `match`, `&&` and `||` are not stable in const fn
|
error: `if`, `match`, `&&` and `||` are not stable in const fn
|
||||||
--> $DIR/min_const_fn.rs:112:44
|
--> $DIR/min_const_fn.rs:110:44
|
||||||
|
|
|
|
||||||
LL | const fn foo36(a: bool, b: bool) -> bool { a && b }
|
LL | const fn foo36(a: bool, b: bool) -> bool { a && b }
|
||||||
| ^^^^^^
|
| ^^^^^^
|
||||||
|
|
||||||
error: `if`, `match`, `&&` and `||` are not stable in const fn
|
error: `if`, `match`, `&&` and `||` are not stable in const fn
|
||||||
--> $DIR/min_const_fn.rs:114:44
|
--> $DIR/min_const_fn.rs:112:44
|
||||||
|
|
|
|
||||||
LL | const fn foo37(a: bool, b: bool) -> bool { a || b }
|
LL | const fn foo37(a: bool, b: bool) -> bool { a || b }
|
||||||
| ^^^^^^
|
| ^^^^^^
|
||||||
|
|
||||||
error: mutable references in const fn are unstable
|
error: mutable references in const fn are unstable
|
||||||
--> $DIR/min_const_fn.rs:116:14
|
--> $DIR/min_const_fn.rs:114:14
|
||||||
|
|
|
|
||||||
LL | const fn inc(x: &mut i32) { *x += 1 }
|
LL | const fn inc(x: &mut i32) { *x += 1 }
|
||||||
| ^
|
| ^
|
||||||
|
|
||||||
error: trait bounds other than `Sized` on const fn parameters are unstable
|
error: trait bounds other than `Sized` on const fn parameters are unstable
|
||||||
--> $DIR/min_const_fn.rs:121:6
|
--> $DIR/min_const_fn.rs:119:6
|
||||||
|
|
|
|
||||||
LL | impl<T: std::fmt::Debug> Foo<T> {
|
LL | impl<T: std::fmt::Debug> Foo<T> {
|
||||||
| ^
|
| ^
|
||||||
|
|
||||||
error: trait bounds other than `Sized` on const fn parameters are unstable
|
error: trait bounds other than `Sized` on const fn parameters are unstable
|
||||||
--> $DIR/min_const_fn.rs:126:6
|
--> $DIR/min_const_fn.rs:124:6
|
||||||
|
|
|
|
||||||
LL | impl<T: std::fmt::Debug + Sized> Foo<T> {
|
LL | impl<T: std::fmt::Debug + Sized> Foo<T> {
|
||||||
| ^
|
| ^
|
||||||
|
|
||||||
error: trait bounds other than `Sized` on const fn parameters are unstable
|
error: trait bounds other than `Sized` on const fn parameters are unstable
|
||||||
--> $DIR/min_const_fn.rs:131:6
|
--> $DIR/min_const_fn.rs:129:6
|
||||||
|
|
|
|
||||||
LL | impl<T: Sync + Sized> Foo<T> {
|
LL | impl<T: Sync + Sized> Foo<T> {
|
||||||
| ^
|
| ^
|
||||||
|
|
||||||
error: `impl Trait` in const fn is unstable
|
error: `impl Trait` in const fn is unstable
|
||||||
--> $DIR/min_const_fn.rs:137:24
|
--> $DIR/min_const_fn.rs:135:24
|
||||||
|
|
|
|
||||||
LL | const fn no_rpit2() -> AlanTuring<impl std::fmt::Debug> { AlanTuring(0) }
|
LL | const fn no_rpit2() -> AlanTuring<impl std::fmt::Debug> { AlanTuring(0) }
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
error: trait bounds other than `Sized` on const fn parameters are unstable
|
error: trait bounds other than `Sized` on const fn parameters are unstable
|
||||||
--> $DIR/min_const_fn.rs:139:34
|
--> $DIR/min_const_fn.rs:137:34
|
||||||
|
|
|
|
||||||
LL | const fn no_apit2(_x: AlanTuring<impl std::fmt::Debug>) {}
|
LL | const fn no_apit2(_x: AlanTuring<impl std::fmt::Debug>) {}
|
||||||
| ^^^^^^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
error: trait bounds other than `Sized` on const fn parameters are unstable
|
error: trait bounds other than `Sized` on const fn parameters are unstable
|
||||||
--> $DIR/min_const_fn.rs:141:22
|
--> $DIR/min_const_fn.rs:139:22
|
||||||
|
|
|
|
||||||
LL | const fn no_apit(_x: impl std::fmt::Debug) {} //~ ERROR trait bounds other than `Sized`
|
LL | const fn no_apit(_x: impl std::fmt::Debug) {} //~ ERROR trait bounds other than `Sized`
|
||||||
| ^^^^^^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
error: `impl Trait` in const fn is unstable
|
error: `impl Trait` in const fn is unstable
|
||||||
--> $DIR/min_const_fn.rs:142:23
|
--> $DIR/min_const_fn.rs:140:23
|
||||||
|
|
|
|
||||||
LL | const fn no_rpit() -> impl std::fmt::Debug {} //~ ERROR `impl Trait` in const fn is unstable
|
LL | const fn no_rpit() -> impl std::fmt::Debug {} //~ ERROR `impl Trait` in const fn is unstable
|
||||||
| ^^^^^^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
error: trait bounds other than `Sized` on const fn parameters are unstable
|
error: trait bounds other than `Sized` on const fn parameters are unstable
|
||||||
--> $DIR/min_const_fn.rs:143:23
|
--> $DIR/min_const_fn.rs:141:23
|
||||||
|
|
|
|
||||||
LL | const fn no_dyn_trait(_x: &dyn std::fmt::Debug) {} //~ ERROR trait bounds other than `Sized`
|
LL | const fn no_dyn_trait(_x: &dyn std::fmt::Debug) {} //~ ERROR trait bounds other than `Sized`
|
||||||
| ^^
|
| ^^
|
||||||
|
|
||||||
error: trait bounds other than `Sized` on const fn parameters are unstable
|
error: trait bounds other than `Sized` on const fn parameters are unstable
|
||||||
--> $DIR/min_const_fn.rs:144:32
|
--> $DIR/min_const_fn.rs:142:32
|
||||||
|
|
|
|
||||||
LL | const fn no_dyn_trait_ret() -> &'static dyn std::fmt::Debug { &() }
|
LL | const fn no_dyn_trait_ret() -> &'static dyn std::fmt::Debug { &() }
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
error[E0716]: temporary value dropped while borrowed
|
error[E0716]: temporary value dropped while borrowed
|
||||||
--> $DIR/min_const_fn.rs:144:64
|
--> $DIR/min_const_fn.rs:142:64
|
||||||
|
|
|
|
||||||
LL | const fn no_dyn_trait_ret() -> &'static dyn std::fmt::Debug { &() }
|
LL | const fn no_dyn_trait_ret() -> &'static dyn std::fmt::Debug { &() }
|
||||||
| ^^ - temporary value is freed at the end of this statement
|
| ^^ - temporary value is freed at the end of this statement
|
||||||
|
@ -201,19 +201,19 @@ LL | const fn no_dyn_trait_ret() -> &'static dyn std::fmt::Debug { &() }
|
||||||
= note: borrowed value must be valid for the static lifetime...
|
= note: borrowed value must be valid for the static lifetime...
|
||||||
|
|
||||||
error: trait bounds other than `Sized` on const fn parameters are unstable
|
error: trait bounds other than `Sized` on const fn parameters are unstable
|
||||||
--> $DIR/min_const_fn.rs:149:41
|
--> $DIR/min_const_fn.rs:147:41
|
||||||
|
|
|
|
||||||
LL | const fn really_no_traits_i_mean_it() { (&() as &std::fmt::Debug, ()).1 }
|
LL | const fn really_no_traits_i_mean_it() { (&() as &std::fmt::Debug, ()).1 }
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
error: function pointers in const fn are unstable
|
error: function pointers in const fn are unstable
|
||||||
--> $DIR/min_const_fn.rs:152:21
|
--> $DIR/min_const_fn.rs:150:21
|
||||||
|
|
|
|
||||||
LL | const fn no_fn_ptrs(_x: fn()) {}
|
LL | const fn no_fn_ptrs(_x: fn()) {}
|
||||||
| ^^
|
| ^^
|
||||||
|
|
||||||
error: function pointers in const fn are unstable
|
error: function pointers in const fn are unstable
|
||||||
--> $DIR/min_const_fn.rs:154:27
|
--> $DIR/min_const_fn.rs:152:27
|
||||||
|
|
|
|
||||||
LL | const fn no_fn_ptrs2() -> fn() { fn foo() {} foo }
|
LL | const fn no_fn_ptrs2() -> fn() { fn foo() {} foo }
|
||||||
| ^^^^
|
| ^^^^
|
||||||
|
|
|
@ -8,8 +8,6 @@
|
||||||
// option. This file may not be copied, modified, or distributed
|
// option. This file may not be copied, modified, or distributed
|
||||||
// except according to those terms.
|
// except according to those terms.
|
||||||
|
|
||||||
#![feature(min_const_fn)]
|
|
||||||
|
|
||||||
// ok
|
// ok
|
||||||
const fn foo1() {}
|
const fn foo1() {}
|
||||||
const fn foo2(x: i32) -> i32 { x }
|
const fn foo2(x: i32) -> i32 { x }
|
||||||
|
|
|
@ -1,209 +1,209 @@
|
||||||
error[E0493]: destructors cannot be evaluated at compile-time
|
error[E0493]: destructors cannot be evaluated at compile-time
|
||||||
--> $DIR/min_const_fn.rs:49:25
|
--> $DIR/min_const_fn.rs:47:25
|
||||||
|
|
|
|
||||||
LL | const fn into_inner(self) -> T { self.0 } //~ destructors cannot be evaluated
|
LL | const fn into_inner(self) -> T { self.0 } //~ destructors cannot be evaluated
|
||||||
| ^^^^ constant functions cannot evaluate destructors
|
| ^^^^ constant functions cannot evaluate destructors
|
||||||
|
|
||||||
error: mutable references in const fn are unstable
|
error: mutable references in const fn are unstable
|
||||||
--> $DIR/min_const_fn.rs:51:36
|
--> $DIR/min_const_fn.rs:49:36
|
||||||
|
|
|
|
||||||
LL | const fn get_mut(&mut self) -> &mut T { &mut self.0 }
|
LL | const fn get_mut(&mut self) -> &mut T { &mut self.0 }
|
||||||
| ^^^^^^
|
| ^^^^^^
|
||||||
|
|
||||||
error[E0493]: destructors cannot be evaluated at compile-time
|
error[E0493]: destructors cannot be evaluated at compile-time
|
||||||
--> $DIR/min_const_fn.rs:56:28
|
--> $DIR/min_const_fn.rs:54:28
|
||||||
|
|
|
|
||||||
LL | const fn into_inner_lt(self) -> T { self.0 } //~ destructors cannot be evaluated
|
LL | const fn into_inner_lt(self) -> T { self.0 } //~ destructors cannot be evaluated
|
||||||
| ^^^^ constant functions cannot evaluate destructors
|
| ^^^^ constant functions cannot evaluate destructors
|
||||||
|
|
||||||
error: mutable references in const fn are unstable
|
error: mutable references in const fn are unstable
|
||||||
--> $DIR/min_const_fn.rs:58:42
|
--> $DIR/min_const_fn.rs:56:42
|
||||||
|
|
|
|
||||||
LL | const fn get_mut_lt(&'a mut self) -> &mut T { &mut self.0 }
|
LL | const fn get_mut_lt(&'a mut self) -> &mut T { &mut self.0 }
|
||||||
| ^^^^^^
|
| ^^^^^^
|
||||||
|
|
||||||
error[E0493]: destructors cannot be evaluated at compile-time
|
error[E0493]: destructors cannot be evaluated at compile-time
|
||||||
--> $DIR/min_const_fn.rs:63:27
|
--> $DIR/min_const_fn.rs:61:27
|
||||||
|
|
|
|
||||||
LL | const fn into_inner_s(self) -> T { self.0 } //~ ERROR destructors
|
LL | const fn into_inner_s(self) -> T { self.0 } //~ ERROR destructors
|
||||||
| ^^^^ constant functions cannot evaluate destructors
|
| ^^^^ constant functions cannot evaluate destructors
|
||||||
|
|
||||||
error: mutable references in const fn are unstable
|
error: mutable references in const fn are unstable
|
||||||
--> $DIR/min_const_fn.rs:65:38
|
--> $DIR/min_const_fn.rs:63:38
|
||||||
|
|
|
|
||||||
LL | const fn get_mut_s(&mut self) -> &mut T { &mut self.0 }
|
LL | const fn get_mut_s(&mut self) -> &mut T { &mut self.0 }
|
||||||
| ^^^^^^
|
| ^^^^^^
|
||||||
|
|
||||||
error: mutable references in const fn are unstable
|
error: mutable references in const fn are unstable
|
||||||
--> $DIR/min_const_fn.rs:70:39
|
--> $DIR/min_const_fn.rs:68:39
|
||||||
|
|
|
|
||||||
LL | const fn get_mut_sq(&mut self) -> &mut T { &mut self.0 }
|
LL | const fn get_mut_sq(&mut self) -> &mut T { &mut self.0 }
|
||||||
| ^^^^^^
|
| ^^^^^^
|
||||||
|
|
||||||
error: trait bounds other than `Sized` on const fn parameters are unstable
|
error: trait bounds other than `Sized` on const fn parameters are unstable
|
||||||
--> $DIR/min_const_fn.rs:88:16
|
--> $DIR/min_const_fn.rs:86:16
|
||||||
|
|
|
|
||||||
LL | const fn foo11<T: std::fmt::Display>(t: T) -> T { t }
|
LL | const fn foo11<T: std::fmt::Display>(t: T) -> T { t }
|
||||||
| ^
|
| ^
|
||||||
|
|
||||||
error: trait bounds other than `Sized` on const fn parameters are unstable
|
error: trait bounds other than `Sized` on const fn parameters are unstable
|
||||||
--> $DIR/min_const_fn.rs:90:18
|
--> $DIR/min_const_fn.rs:88:18
|
||||||
|
|
|
|
||||||
LL | const fn foo11_2<T: Send>(t: T) -> T { t }
|
LL | const fn foo11_2<T: Send>(t: T) -> T { t }
|
||||||
| ^
|
| ^
|
||||||
|
|
||||||
error: only int, `bool` and `char` operations are stable in const fn
|
error: only int, `bool` and `char` operations are stable in const fn
|
||||||
--> $DIR/min_const_fn.rs:92:33
|
--> $DIR/min_const_fn.rs:90:33
|
||||||
|
|
|
|
||||||
LL | const fn foo19(f: f32) -> f32 { f * 2.0 }
|
LL | const fn foo19(f: f32) -> f32 { f * 2.0 }
|
||||||
| ^^^^^^^
|
| ^^^^^^^
|
||||||
|
|
||||||
error: only int, `bool` and `char` operations are stable in const fn
|
error: only int, `bool` and `char` operations are stable in const fn
|
||||||
--> $DIR/min_const_fn.rs:94:35
|
--> $DIR/min_const_fn.rs:92:35
|
||||||
|
|
|
|
||||||
LL | const fn foo19_2(f: f32) -> f32 { 2.0 - f }
|
LL | const fn foo19_2(f: f32) -> f32 { 2.0 - f }
|
||||||
| ^^^^^^^
|
| ^^^^^^^
|
||||||
|
|
||||||
error: only int and `bool` operations are stable in const fn
|
error: only int and `bool` operations are stable in const fn
|
||||||
--> $DIR/min_const_fn.rs:96:35
|
--> $DIR/min_const_fn.rs:94:35
|
||||||
|
|
|
|
||||||
LL | const fn foo19_3(f: f32) -> f32 { -f }
|
LL | const fn foo19_3(f: f32) -> f32 { -f }
|
||||||
| ^^
|
| ^^
|
||||||
|
|
||||||
error: only int, `bool` and `char` operations are stable in const fn
|
error: only int, `bool` and `char` operations are stable in const fn
|
||||||
--> $DIR/min_const_fn.rs:98:43
|
--> $DIR/min_const_fn.rs:96:43
|
||||||
|
|
|
|
||||||
LL | const fn foo19_4(f: f32, g: f32) -> f32 { f / g }
|
LL | const fn foo19_4(f: f32, g: f32) -> f32 { f / g }
|
||||||
| ^^^^^
|
| ^^^^^
|
||||||
|
|
||||||
error: cannot access `static` items in const fn
|
error: cannot access `static` items in const fn
|
||||||
--> $DIR/min_const_fn.rs:102:27
|
--> $DIR/min_const_fn.rs:100:27
|
||||||
|
|
|
|
||||||
LL | const fn foo25() -> u32 { BAR } //~ ERROR cannot access `static` items in const fn
|
LL | const fn foo25() -> u32 { BAR } //~ ERROR cannot access `static` items in const fn
|
||||||
| ^^^
|
| ^^^
|
||||||
|
|
||||||
error: cannot access `static` items in const fn
|
error: cannot access `static` items in const fn
|
||||||
--> $DIR/min_const_fn.rs:103:36
|
--> $DIR/min_const_fn.rs:101:36
|
||||||
|
|
|
|
||||||
LL | const fn foo26() -> &'static u32 { &BAR } //~ ERROR cannot access `static` items
|
LL | const fn foo26() -> &'static u32 { &BAR } //~ ERROR cannot access `static` items
|
||||||
| ^^^^
|
| ^^^^
|
||||||
|
|
||||||
error: casting pointers to ints is unstable in const fn
|
error: casting pointers to ints is unstable in const fn
|
||||||
--> $DIR/min_const_fn.rs:104:42
|
--> $DIR/min_const_fn.rs:102:42
|
||||||
|
|
|
|
||||||
LL | const fn foo30(x: *const u32) -> usize { x as usize }
|
LL | const fn foo30(x: *const u32) -> usize { x as usize }
|
||||||
| ^^^^^^^^^^
|
| ^^^^^^^^^^
|
||||||
|
|
||||||
error: casting pointers to ints is unstable in const fn
|
error: casting pointers to ints is unstable in const fn
|
||||||
--> $DIR/min_const_fn.rs:106:42
|
--> $DIR/min_const_fn.rs:104:42
|
||||||
|
|
|
|
||||||
LL | const fn foo30_2(x: *mut u32) -> usize { x as usize }
|
LL | const fn foo30_2(x: *mut u32) -> usize { x as usize }
|
||||||
| ^^^^^^^^^^
|
| ^^^^^^^^^^
|
||||||
|
|
||||||
error: `if`, `match`, `&&` and `||` are not stable in const fn
|
error: `if`, `match`, `&&` and `||` are not stable in const fn
|
||||||
--> $DIR/min_const_fn.rs:108:38
|
--> $DIR/min_const_fn.rs:106:38
|
||||||
|
|
|
|
||||||
LL | const fn foo30_4(b: bool) -> usize { if b { 1 } else { 42 } }
|
LL | const fn foo30_4(b: bool) -> usize { if b { 1 } else { 42 } }
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
error: `if`, `match`, `&&` and `||` are not stable in const fn
|
error: `if`, `match`, `&&` and `||` are not stable in const fn
|
||||||
--> $DIR/min_const_fn.rs:110:29
|
--> $DIR/min_const_fn.rs:108:29
|
||||||
|
|
|
|
||||||
LL | const fn foo30_5(b: bool) { while b { } } //~ ERROR not stable in const fn
|
LL | const fn foo30_5(b: bool) { while b { } } //~ ERROR not stable in const fn
|
||||||
| ^^^^^^^^^^^
|
| ^^^^^^^^^^^
|
||||||
|
|
||||||
error: local variables in const fn are unstable
|
error: local variables in const fn are unstable
|
||||||
--> $DIR/min_const_fn.rs:111:34
|
--> $DIR/min_const_fn.rs:109:34
|
||||||
|
|
|
|
||||||
LL | const fn foo30_6() -> bool { let x = true; x } //~ ERROR local variables in const fn are unstable
|
LL | const fn foo30_6() -> bool { let x = true; x } //~ ERROR local variables in const fn are unstable
|
||||||
| ^
|
| ^
|
||||||
|
|
||||||
error: `if`, `match`, `&&` and `||` are not stable in const fn
|
error: `if`, `match`, `&&` and `||` are not stable in const fn
|
||||||
--> $DIR/min_const_fn.rs:112:44
|
--> $DIR/min_const_fn.rs:110:44
|
||||||
|
|
|
|
||||||
LL | const fn foo36(a: bool, b: bool) -> bool { a && b }
|
LL | const fn foo36(a: bool, b: bool) -> bool { a && b }
|
||||||
| ^^^^^^
|
| ^^^^^^
|
||||||
|
|
||||||
error: `if`, `match`, `&&` and `||` are not stable in const fn
|
error: `if`, `match`, `&&` and `||` are not stable in const fn
|
||||||
--> $DIR/min_const_fn.rs:114:44
|
--> $DIR/min_const_fn.rs:112:44
|
||||||
|
|
|
|
||||||
LL | const fn foo37(a: bool, b: bool) -> bool { a || b }
|
LL | const fn foo37(a: bool, b: bool) -> bool { a || b }
|
||||||
| ^^^^^^
|
| ^^^^^^
|
||||||
|
|
||||||
error: mutable references in const fn are unstable
|
error: mutable references in const fn are unstable
|
||||||
--> $DIR/min_const_fn.rs:116:14
|
--> $DIR/min_const_fn.rs:114:14
|
||||||
|
|
|
|
||||||
LL | const fn inc(x: &mut i32) { *x += 1 }
|
LL | const fn inc(x: &mut i32) { *x += 1 }
|
||||||
| ^
|
| ^
|
||||||
|
|
||||||
error: trait bounds other than `Sized` on const fn parameters are unstable
|
error: trait bounds other than `Sized` on const fn parameters are unstable
|
||||||
--> $DIR/min_const_fn.rs:121:6
|
--> $DIR/min_const_fn.rs:119:6
|
||||||
|
|
|
|
||||||
LL | impl<T: std::fmt::Debug> Foo<T> {
|
LL | impl<T: std::fmt::Debug> Foo<T> {
|
||||||
| ^
|
| ^
|
||||||
|
|
||||||
error: trait bounds other than `Sized` on const fn parameters are unstable
|
error: trait bounds other than `Sized` on const fn parameters are unstable
|
||||||
--> $DIR/min_const_fn.rs:126:6
|
--> $DIR/min_const_fn.rs:124:6
|
||||||
|
|
|
|
||||||
LL | impl<T: std::fmt::Debug + Sized> Foo<T> {
|
LL | impl<T: std::fmt::Debug + Sized> Foo<T> {
|
||||||
| ^
|
| ^
|
||||||
|
|
||||||
error: trait bounds other than `Sized` on const fn parameters are unstable
|
error: trait bounds other than `Sized` on const fn parameters are unstable
|
||||||
--> $DIR/min_const_fn.rs:131:6
|
--> $DIR/min_const_fn.rs:129:6
|
||||||
|
|
|
|
||||||
LL | impl<T: Sync + Sized> Foo<T> {
|
LL | impl<T: Sync + Sized> Foo<T> {
|
||||||
| ^
|
| ^
|
||||||
|
|
||||||
error: `impl Trait` in const fn is unstable
|
error: `impl Trait` in const fn is unstable
|
||||||
--> $DIR/min_const_fn.rs:137:24
|
--> $DIR/min_const_fn.rs:135:24
|
||||||
|
|
|
|
||||||
LL | const fn no_rpit2() -> AlanTuring<impl std::fmt::Debug> { AlanTuring(0) }
|
LL | const fn no_rpit2() -> AlanTuring<impl std::fmt::Debug> { AlanTuring(0) }
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
error: trait bounds other than `Sized` on const fn parameters are unstable
|
error: trait bounds other than `Sized` on const fn parameters are unstable
|
||||||
--> $DIR/min_const_fn.rs:139:34
|
--> $DIR/min_const_fn.rs:137:34
|
||||||
|
|
|
|
||||||
LL | const fn no_apit2(_x: AlanTuring<impl std::fmt::Debug>) {}
|
LL | const fn no_apit2(_x: AlanTuring<impl std::fmt::Debug>) {}
|
||||||
| ^^^^^^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
error: trait bounds other than `Sized` on const fn parameters are unstable
|
error: trait bounds other than `Sized` on const fn parameters are unstable
|
||||||
--> $DIR/min_const_fn.rs:141:22
|
--> $DIR/min_const_fn.rs:139:22
|
||||||
|
|
|
|
||||||
LL | const fn no_apit(_x: impl std::fmt::Debug) {} //~ ERROR trait bounds other than `Sized`
|
LL | const fn no_apit(_x: impl std::fmt::Debug) {} //~ ERROR trait bounds other than `Sized`
|
||||||
| ^^^^^^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
error: `impl Trait` in const fn is unstable
|
error: `impl Trait` in const fn is unstable
|
||||||
--> $DIR/min_const_fn.rs:142:23
|
--> $DIR/min_const_fn.rs:140:23
|
||||||
|
|
|
|
||||||
LL | const fn no_rpit() -> impl std::fmt::Debug {} //~ ERROR `impl Trait` in const fn is unstable
|
LL | const fn no_rpit() -> impl std::fmt::Debug {} //~ ERROR `impl Trait` in const fn is unstable
|
||||||
| ^^^^^^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
error: trait bounds other than `Sized` on const fn parameters are unstable
|
error: trait bounds other than `Sized` on const fn parameters are unstable
|
||||||
--> $DIR/min_const_fn.rs:143:23
|
--> $DIR/min_const_fn.rs:141:23
|
||||||
|
|
|
|
||||||
LL | const fn no_dyn_trait(_x: &dyn std::fmt::Debug) {} //~ ERROR trait bounds other than `Sized`
|
LL | const fn no_dyn_trait(_x: &dyn std::fmt::Debug) {} //~ ERROR trait bounds other than `Sized`
|
||||||
| ^^
|
| ^^
|
||||||
|
|
||||||
error: trait bounds other than `Sized` on const fn parameters are unstable
|
error: trait bounds other than `Sized` on const fn parameters are unstable
|
||||||
--> $DIR/min_const_fn.rs:144:32
|
--> $DIR/min_const_fn.rs:142:32
|
||||||
|
|
|
|
||||||
LL | const fn no_dyn_trait_ret() -> &'static dyn std::fmt::Debug { &() }
|
LL | const fn no_dyn_trait_ret() -> &'static dyn std::fmt::Debug { &() }
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
error: trait bounds other than `Sized` on const fn parameters are unstable
|
error: trait bounds other than `Sized` on const fn parameters are unstable
|
||||||
--> $DIR/min_const_fn.rs:149:41
|
--> $DIR/min_const_fn.rs:147:41
|
||||||
|
|
|
|
||||||
LL | const fn really_no_traits_i_mean_it() { (&() as &std::fmt::Debug, ()).1 }
|
LL | const fn really_no_traits_i_mean_it() { (&() as &std::fmt::Debug, ()).1 }
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
error: function pointers in const fn are unstable
|
error: function pointers in const fn are unstable
|
||||||
--> $DIR/min_const_fn.rs:152:21
|
--> $DIR/min_const_fn.rs:150:21
|
||||||
|
|
|
|
||||||
LL | const fn no_fn_ptrs(_x: fn()) {}
|
LL | const fn no_fn_ptrs(_x: fn()) {}
|
||||||
| ^^
|
| ^^
|
||||||
|
|
||||||
error: function pointers in const fn are unstable
|
error: function pointers in const fn are unstable
|
||||||
--> $DIR/min_const_fn.rs:154:27
|
--> $DIR/min_const_fn.rs:152:27
|
||||||
|
|
|
|
||||||
LL | const fn no_fn_ptrs2() -> fn() { fn foo() {} foo }
|
LL | const fn no_fn_ptrs2() -> fn() { fn foo() {} foo }
|
||||||
| ^^^^
|
| ^^^^
|
||||||
|
|
|
@ -1,17 +1,17 @@
|
||||||
error: trait bounds other than `Sized` on const fn parameters are unstable
|
error: trait bounds other than `Sized` on const fn parameters are unstable
|
||||||
--> $DIR/min_const_fn_dyn.rs:21:5
|
--> $DIR/min_const_fn_dyn.rs:19:5
|
||||||
|
|
|
|
||||||
LL | x.0.field;
|
LL | x.0.field;
|
||||||
| ^^^^^^^^^
|
| ^^^^^^^^^
|
||||||
|
|
||||||
error: trait bounds other than `Sized` on const fn parameters are unstable
|
error: trait bounds other than `Sized` on const fn parameters are unstable
|
||||||
--> $DIR/min_const_fn_dyn.rs:24:66
|
--> $DIR/min_const_fn_dyn.rs:22:66
|
||||||
|
|
|
|
||||||
LL | const fn no_inner_dyn_trait_ret() -> Hide { Hide(HasDyn { field: &0 }) }
|
LL | const fn no_inner_dyn_trait_ret() -> Hide { Hide(HasDyn { field: &0 }) }
|
||||||
| ^^
|
| ^^
|
||||||
|
|
||||||
error[E0716]: temporary value dropped while borrowed
|
error[E0716]: temporary value dropped while borrowed
|
||||||
--> $DIR/min_const_fn_dyn.rs:24:67
|
--> $DIR/min_const_fn_dyn.rs:22:67
|
||||||
|
|
|
|
||||||
LL | const fn no_inner_dyn_trait_ret() -> Hide { Hide(HasDyn { field: &0 }) }
|
LL | const fn no_inner_dyn_trait_ret() -> Hide { Hide(HasDyn { field: &0 }) }
|
||||||
| ^ - temporary value is freed at the end of this statement
|
| ^ - temporary value is freed at the end of this statement
|
||||||
|
|
|
@ -8,8 +8,6 @@
|
||||||
// option. This file may not be copied, modified, or distributed
|
// option. This file may not be copied, modified, or distributed
|
||||||
// except according to those terms.
|
// except according to those terms.
|
||||||
|
|
||||||
#![feature(min_const_fn)]
|
|
||||||
|
|
||||||
struct HasDyn {
|
struct HasDyn {
|
||||||
field: &'static dyn std::fmt::Debug,
|
field: &'static dyn std::fmt::Debug,
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,11 +1,11 @@
|
||||||
error: trait bounds other than `Sized` on const fn parameters are unstable
|
error: trait bounds other than `Sized` on const fn parameters are unstable
|
||||||
--> $DIR/min_const_fn_dyn.rs:21:5
|
--> $DIR/min_const_fn_dyn.rs:19:5
|
||||||
|
|
|
|
||||||
LL | x.0.field;
|
LL | x.0.field;
|
||||||
| ^^^^^^^^^
|
| ^^^^^^^^^
|
||||||
|
|
||||||
error: trait bounds other than `Sized` on const fn parameters are unstable
|
error: trait bounds other than `Sized` on const fn parameters are unstable
|
||||||
--> $DIR/min_const_fn_dyn.rs:24:66
|
--> $DIR/min_const_fn_dyn.rs:22:66
|
||||||
|
|
|
|
||||||
LL | const fn no_inner_dyn_trait_ret() -> Hide { Hide(HasDyn { field: &0 }) }
|
LL | const fn no_inner_dyn_trait_ret() -> Hide { Hide(HasDyn { field: &0 }) }
|
||||||
| ^^
|
| ^^
|
||||||
|
|
|
@ -8,8 +8,6 @@
|
||||||
// option. This file may not be copied, modified, or distributed
|
// option. This file may not be copied, modified, or distributed
|
||||||
// except according to those terms.
|
// except according to those terms.
|
||||||
|
|
||||||
#![feature(min_const_fn)]
|
|
||||||
|
|
||||||
struct HasPtr {
|
struct HasPtr {
|
||||||
field: fn(),
|
field: fn(),
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,11 +1,11 @@
|
||||||
error: function pointers in const fn are unstable
|
error: function pointers in const fn are unstable
|
||||||
--> $DIR/min_const_fn_fn_ptr.rs:23:5
|
--> $DIR/min_const_fn_fn_ptr.rs:21:5
|
||||||
|
|
|
|
||||||
LL | x.0.field;
|
LL | x.0.field;
|
||||||
| ^^^^^^^^^
|
| ^^^^^^^^^
|
||||||
|
|
||||||
error: function pointers in const fn are unstable
|
error: function pointers in const fn are unstable
|
||||||
--> $DIR/min_const_fn_fn_ptr.rs:26:59
|
--> $DIR/min_const_fn_fn_ptr.rs:24:59
|
||||||
|
|
|
|
||||||
LL | const fn no_inner_dyn_trait_ret() -> Hide { Hide(HasPtr { field }) }
|
LL | const fn no_inner_dyn_trait_ret() -> Hide { Hide(HasPtr { field }) }
|
||||||
| ^^^^^
|
| ^^^^^
|
||||||
|
|
|
@ -8,7 +8,7 @@
|
||||||
// option. This file may not be copied, modified, or distributed
|
// option. This file may not be copied, modified, or distributed
|
||||||
// except according to those terms.
|
// except according to those terms.
|
||||||
|
|
||||||
#![feature(integer_atomics, min_const_fn)]
|
#![feature(integer_atomics)]
|
||||||
|
|
||||||
// compile-pass
|
// compile-pass
|
||||||
|
|
||||||
|
|
|
@ -8,8 +8,6 @@
|
||||||
// option. This file may not be copied, modified, or distributed
|
// option. This file may not be copied, modified, or distributed
|
||||||
// except according to those terms.
|
// except according to those terms.
|
||||||
|
|
||||||
#![feature(min_const_fn)]
|
|
||||||
|
|
||||||
// ok
|
// ok
|
||||||
const unsafe fn foo4() -> i32 { 42 }
|
const unsafe fn foo4() -> i32 { 42 }
|
||||||
const unsafe fn foo5<T>() -> *const T { 0 as *const T }
|
const unsafe fn foo5<T>() -> *const T { 0 as *const T }
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
error[E0658]: dereferencing raw pointers in constant functions is unstable (see issue #51911)
|
error[E0658]: dereferencing raw pointers in constant functions is unstable (see issue #51911)
|
||||||
--> $DIR/min_const_fn_unsafe.rs:29:51
|
--> $DIR/min_const_fn_unsafe.rs:27:51
|
||||||
|
|
|
|
||||||
LL | const unsafe fn foo30_3(x: *mut usize) -> usize { *x } //~ ERROR not allowed in const fn
|
LL | const unsafe fn foo30_3(x: *mut usize) -> usize { *x } //~ ERROR not allowed in const fn
|
||||||
| ^^
|
| ^^
|
||||||
|
@ -7,7 +7,7 @@ LL | const unsafe fn foo30_3(x: *mut usize) -> usize { *x } //~ ERROR not allowe
|
||||||
= help: add #![feature(const_raw_ptr_deref)] to the crate attributes to enable
|
= help: add #![feature(const_raw_ptr_deref)] to the crate attributes to enable
|
||||||
|
|
||||||
error[E0658]: unions in const fn are unstable (see issue #51909)
|
error[E0658]: unions in const fn are unstable (see issue #51909)
|
||||||
--> $DIR/min_const_fn_unsafe.rs:36:5
|
--> $DIR/min_const_fn_unsafe.rs:34:5
|
||||||
|
|
|
|
||||||
LL | Foo { x: () }.y //~ ERROR not allowed in const fn
|
LL | Foo { x: () }.y //~ ERROR not allowed in const fn
|
||||||
| ^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^
|
||||||
|
@ -15,7 +15,7 @@ LL | Foo { x: () }.y //~ ERROR not allowed in const fn
|
||||||
= help: add #![feature(const_fn_union)] to the crate attributes to enable
|
= help: add #![feature(const_fn_union)] to the crate attributes to enable
|
||||||
|
|
||||||
error: call to unsafe function is unsafe and unsafe operations are not allowed in const fn
|
error: call to unsafe function is unsafe and unsafe operations are not allowed in const fn
|
||||||
--> $DIR/min_const_fn_unsafe.rs:21:14
|
--> $DIR/min_const_fn_unsafe.rs:19:14
|
||||||
|
|
|
|
||||||
LL | unsafe { foo4() } //~ ERROR unsafe operations are not allowed in const fn
|
LL | unsafe { foo4() } //~ ERROR unsafe operations are not allowed in const fn
|
||||||
| ^^^^^^ call to unsafe function
|
| ^^^^^^ call to unsafe function
|
||||||
|
@ -23,7 +23,7 @@ LL | unsafe { foo4() } //~ ERROR unsafe operations are not allowed in const
|
||||||
= note: consult the function's documentation for information on how to avoid undefined behavior
|
= note: consult the function's documentation for information on how to avoid undefined behavior
|
||||||
|
|
||||||
error: call to unsafe function is unsafe and unsafe operations are not allowed in const fn
|
error: call to unsafe function is unsafe and unsafe operations are not allowed in const fn
|
||||||
--> $DIR/min_const_fn_unsafe.rs:24:14
|
--> $DIR/min_const_fn_unsafe.rs:22:14
|
||||||
|
|
|
|
||||||
LL | unsafe { foo5::<String>() } //~ ERROR unsafe operations are not allowed in const fn
|
LL | unsafe { foo5::<String>() } //~ ERROR unsafe operations are not allowed in const fn
|
||||||
| ^^^^^^^^^^^^^^^^ call to unsafe function
|
| ^^^^^^^^^^^^^^^^ call to unsafe function
|
||||||
|
@ -31,7 +31,7 @@ LL | unsafe { foo5::<String>() } //~ ERROR unsafe operations are not allowed
|
||||||
= note: consult the function's documentation for information on how to avoid undefined behavior
|
= note: consult the function's documentation for information on how to avoid undefined behavior
|
||||||
|
|
||||||
error: call to unsafe function is unsafe and unsafe operations are not allowed in const fn
|
error: call to unsafe function is unsafe and unsafe operations are not allowed in const fn
|
||||||
--> $DIR/min_const_fn_unsafe.rs:27:14
|
--> $DIR/min_const_fn_unsafe.rs:25:14
|
||||||
|
|
|
|
||||||
LL | unsafe { foo6::<Vec<std::cell::Cell<u32>>>() } //~ ERROR not allowed in const fn
|
LL | unsafe { foo6::<Vec<std::cell::Cell<u32>>>() } //~ ERROR not allowed in const fn
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ call to unsafe function
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ call to unsafe function
|
||||||
|
@ -39,7 +39,7 @@ LL | unsafe { foo6::<Vec<std::cell::Cell<u32>>>() } //~ ERROR not allowed in
|
||||||
= note: consult the function's documentation for information on how to avoid undefined behavior
|
= note: consult the function's documentation for information on how to avoid undefined behavior
|
||||||
|
|
||||||
error: dereference of raw pointer is unsafe and unsafe operations are not allowed in const fn
|
error: dereference of raw pointer is unsafe and unsafe operations are not allowed in const fn
|
||||||
--> $DIR/min_const_fn_unsafe.rs:29:51
|
--> $DIR/min_const_fn_unsafe.rs:27:51
|
||||||
|
|
|
|
||||||
LL | const unsafe fn foo30_3(x: *mut usize) -> usize { *x } //~ ERROR not allowed in const fn
|
LL | const unsafe fn foo30_3(x: *mut usize) -> usize { *x } //~ ERROR not allowed in const fn
|
||||||
| ^^ dereference of raw pointer
|
| ^^ dereference of raw pointer
|
||||||
|
@ -47,7 +47,7 @@ LL | const unsafe fn foo30_3(x: *mut usize) -> usize { *x } //~ ERROR not allowe
|
||||||
= note: raw pointers may be NULL, dangling or unaligned; they can violate aliasing rules and cause data races: all of these are undefined behavior
|
= note: raw pointers may be NULL, dangling or unaligned; they can violate aliasing rules and cause data races: all of these are undefined behavior
|
||||||
|
|
||||||
error: access to union field is unsafe and unsafe operations are not allowed in const fn
|
error: access to union field is unsafe and unsafe operations are not allowed in const fn
|
||||||
--> $DIR/min_const_fn_unsafe.rs:36:5
|
--> $DIR/min_const_fn_unsafe.rs:34:5
|
||||||
|
|
|
|
||||||
LL | Foo { x: () }.y //~ ERROR not allowed in const fn
|
LL | Foo { x: () }.y //~ ERROR not allowed in const fn
|
||||||
| ^^^^^^^^^^^^^^^ access to union field
|
| ^^^^^^^^^^^^^^^ access to union field
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
error[E0716]: temporary value dropped while borrowed
|
error[E0716]: temporary value dropped while borrowed
|
||||||
--> $DIR/promotion.rs:13:27
|
--> $DIR/promotion.rs:11:27
|
||||||
|
|
|
|
||||||
LL | let x: &'static () = &foo1(); //~ ERROR does not live long enough
|
LL | let x: &'static () = &foo1(); //~ ERROR does not live long enough
|
||||||
| ^^^^^^ creates a temporary which is freed while still in use
|
| ^^^^^^ creates a temporary which is freed while still in use
|
||||||
|
@ -10,7 +10,7 @@ LL | }
|
||||||
= note: borrowed value must be valid for the static lifetime...
|
= note: borrowed value must be valid for the static lifetime...
|
||||||
|
|
||||||
error[E0716]: temporary value dropped while borrowed
|
error[E0716]: temporary value dropped while borrowed
|
||||||
--> $DIR/promotion.rs:14:28
|
--> $DIR/promotion.rs:12:28
|
||||||
|
|
|
|
||||||
LL | let y: &'static i32 = &foo2(42); //~ ERROR does not live long enough
|
LL | let y: &'static i32 = &foo2(42); //~ ERROR does not live long enough
|
||||||
| ^^^^^^^^ creates a temporary which is freed while still in use
|
| ^^^^^^^^ creates a temporary which is freed while still in use
|
||||||
|
@ -21,7 +21,7 @@ LL | }
|
||||||
= note: borrowed value must be valid for the static lifetime...
|
= note: borrowed value must be valid for the static lifetime...
|
||||||
|
|
||||||
error[E0716]: temporary value dropped while borrowed
|
error[E0716]: temporary value dropped while borrowed
|
||||||
--> $DIR/promotion.rs:15:28
|
--> $DIR/promotion.rs:13:28
|
||||||
|
|
|
|
||||||
LL | let z: &'static i32 = &foo3(); //~ ERROR does not live long enough
|
LL | let z: &'static i32 = &foo3(); //~ ERROR does not live long enough
|
||||||
| ^^^^^^ creates a temporary which is freed while still in use
|
| ^^^^^^ creates a temporary which is freed while still in use
|
||||||
|
@ -32,7 +32,7 @@ LL | }
|
||||||
= note: borrowed value must be valid for the static lifetime...
|
= note: borrowed value must be valid for the static lifetime...
|
||||||
|
|
||||||
error[E0716]: temporary value dropped while borrowed
|
error[E0716]: temporary value dropped while borrowed
|
||||||
--> $DIR/promotion.rs:16:34
|
--> $DIR/promotion.rs:14:34
|
||||||
|
|
|
|
||||||
LL | let a: &'static Cell<i32> = &foo4(); //~ ERROR does not live long enough
|
LL | let a: &'static Cell<i32> = &foo4(); //~ ERROR does not live long enough
|
||||||
| ^^^^^^ creates a temporary which is freed while still in use
|
| ^^^^^^ creates a temporary which is freed while still in use
|
||||||
|
@ -43,7 +43,7 @@ LL | }
|
||||||
= note: borrowed value must be valid for the static lifetime...
|
= note: borrowed value must be valid for the static lifetime...
|
||||||
|
|
||||||
error[E0716]: temporary value dropped while borrowed
|
error[E0716]: temporary value dropped while borrowed
|
||||||
--> $DIR/promotion.rs:17:42
|
--> $DIR/promotion.rs:15:42
|
||||||
|
|
|
|
||||||
LL | let a: &'static Option<Cell<i32>> = &foo5(); //~ ERROR does not live long enough
|
LL | let a: &'static Option<Cell<i32>> = &foo5(); //~ ERROR does not live long enough
|
||||||
| ^^^^^^ creates a temporary which is freed while still in use
|
| ^^^^^^ creates a temporary which is freed while still in use
|
||||||
|
@ -54,7 +54,7 @@ LL | }
|
||||||
= note: borrowed value must be valid for the static lifetime...
|
= note: borrowed value must be valid for the static lifetime...
|
||||||
|
|
||||||
error[E0716]: temporary value dropped while borrowed
|
error[E0716]: temporary value dropped while borrowed
|
||||||
--> $DIR/promotion.rs:18:42
|
--> $DIR/promotion.rs:16:42
|
||||||
|
|
|
|
||||||
LL | let a: &'static Option<Cell<i32>> = &foo6(); //~ ERROR does not live long enough
|
LL | let a: &'static Option<Cell<i32>> = &foo6(); //~ ERROR does not live long enough
|
||||||
| ^^^^^^ creates a temporary which is freed while still in use
|
| ^^^^^^ creates a temporary which is freed while still in use
|
||||||
|
|
|
@ -1,5 +1,3 @@
|
||||||
#![feature(min_const_fn)]
|
|
||||||
|
|
||||||
use std::cell::Cell;
|
use std::cell::Cell;
|
||||||
|
|
||||||
const fn foo1() {}
|
const fn foo1() {}
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
error[E0597]: borrowed value does not live long enough
|
error[E0597]: borrowed value does not live long enough
|
||||||
--> $DIR/promotion.rs:13:27
|
--> $DIR/promotion.rs:11:27
|
||||||
|
|
|
|
||||||
LL | let x: &'static () = &foo1(); //~ ERROR does not live long enough
|
LL | let x: &'static () = &foo1(); //~ ERROR does not live long enough
|
||||||
| ^^^^^^ temporary value does not live long enough
|
| ^^^^^^ temporary value does not live long enough
|
||||||
|
@ -10,7 +10,7 @@ LL | }
|
||||||
= note: borrowed value must be valid for the static lifetime...
|
= note: borrowed value must be valid for the static lifetime...
|
||||||
|
|
||||||
error[E0597]: borrowed value does not live long enough
|
error[E0597]: borrowed value does not live long enough
|
||||||
--> $DIR/promotion.rs:14:28
|
--> $DIR/promotion.rs:12:28
|
||||||
|
|
|
|
||||||
LL | let y: &'static i32 = &foo2(42); //~ ERROR does not live long enough
|
LL | let y: &'static i32 = &foo2(42); //~ ERROR does not live long enough
|
||||||
| ^^^^^^^^ temporary value does not live long enough
|
| ^^^^^^^^ temporary value does not live long enough
|
||||||
|
@ -21,7 +21,7 @@ LL | }
|
||||||
= note: borrowed value must be valid for the static lifetime...
|
= note: borrowed value must be valid for the static lifetime...
|
||||||
|
|
||||||
error[E0597]: borrowed value does not live long enough
|
error[E0597]: borrowed value does not live long enough
|
||||||
--> $DIR/promotion.rs:15:28
|
--> $DIR/promotion.rs:13:28
|
||||||
|
|
|
|
||||||
LL | let z: &'static i32 = &foo3(); //~ ERROR does not live long enough
|
LL | let z: &'static i32 = &foo3(); //~ ERROR does not live long enough
|
||||||
| ^^^^^^ temporary value does not live long enough
|
| ^^^^^^ temporary value does not live long enough
|
||||||
|
@ -32,7 +32,7 @@ LL | }
|
||||||
= note: borrowed value must be valid for the static lifetime...
|
= note: borrowed value must be valid for the static lifetime...
|
||||||
|
|
||||||
error[E0597]: borrowed value does not live long enough
|
error[E0597]: borrowed value does not live long enough
|
||||||
--> $DIR/promotion.rs:16:34
|
--> $DIR/promotion.rs:14:34
|
||||||
|
|
|
|
||||||
LL | let a: &'static Cell<i32> = &foo4(); //~ ERROR does not live long enough
|
LL | let a: &'static Cell<i32> = &foo4(); //~ ERROR does not live long enough
|
||||||
| ^^^^^^ temporary value does not live long enough
|
| ^^^^^^ temporary value does not live long enough
|
||||||
|
@ -43,7 +43,7 @@ LL | }
|
||||||
= note: borrowed value must be valid for the static lifetime...
|
= note: borrowed value must be valid for the static lifetime...
|
||||||
|
|
||||||
error[E0597]: borrowed value does not live long enough
|
error[E0597]: borrowed value does not live long enough
|
||||||
--> $DIR/promotion.rs:17:42
|
--> $DIR/promotion.rs:15:42
|
||||||
|
|
|
|
||||||
LL | let a: &'static Option<Cell<i32>> = &foo5(); //~ ERROR does not live long enough
|
LL | let a: &'static Option<Cell<i32>> = &foo5(); //~ ERROR does not live long enough
|
||||||
| ^^^^^^ temporary value does not live long enough
|
| ^^^^^^ temporary value does not live long enough
|
||||||
|
@ -54,7 +54,7 @@ LL | }
|
||||||
= note: borrowed value must be valid for the static lifetime...
|
= note: borrowed value must be valid for the static lifetime...
|
||||||
|
|
||||||
error[E0597]: borrowed value does not live long enough
|
error[E0597]: borrowed value does not live long enough
|
||||||
--> $DIR/promotion.rs:18:42
|
--> $DIR/promotion.rs:16:42
|
||||||
|
|
|
|
||||||
LL | let a: &'static Option<Cell<i32>> = &foo6(); //~ ERROR does not live long enough
|
LL | let a: &'static Option<Cell<i32>> = &foo6(); //~ ERROR does not live long enough
|
||||||
| ^^^^^^ temporary value does not live long enough
|
| ^^^^^^ temporary value does not live long enough
|
||||||
|
|
|
@ -8,9 +8,7 @@
|
||||||
// option. This file may not be copied, modified, or distributed
|
// option. This file may not be copied, modified, or distributed
|
||||||
// except according to those terms.
|
// except according to those terms.
|
||||||
|
|
||||||
// Test use of const fn without the `const_fn` feature gate.
|
// Test use of advanced const fn without the `const_fn` feature gate.
|
||||||
// `min_const_fn` is checked in its own file
|
|
||||||
#![feature(min_const_fn)]
|
|
||||||
|
|
||||||
const fn foo() -> usize { 0 } // ok
|
const fn foo() -> usize { 0 } // ok
|
||||||
|
|
||||||
|
|
|
@ -1,23 +1,23 @@
|
||||||
error[E0379]: trait fns cannot be declared const
|
error[E0379]: trait fns cannot be declared const
|
||||||
--> $DIR/feature-gate-const_fn.rs:18:5
|
--> $DIR/feature-gate-const_fn.rs:16:5
|
||||||
|
|
|
|
||||||
LL | const fn foo() -> u32; //~ ERROR const fn is unstable
|
LL | const fn foo() -> u32; //~ ERROR const fn is unstable
|
||||||
| ^^^^^ trait fns cannot be const
|
| ^^^^^ trait fns cannot be const
|
||||||
|
|
||||||
error[E0379]: trait fns cannot be declared const
|
error[E0379]: trait fns cannot be declared const
|
||||||
--> $DIR/feature-gate-const_fn.rs:20:5
|
--> $DIR/feature-gate-const_fn.rs:18:5
|
||||||
|
|
|
|
||||||
LL | const fn bar() -> u32 { 0 } //~ ERROR const fn is unstable
|
LL | const fn bar() -> u32 { 0 } //~ ERROR const fn is unstable
|
||||||
| ^^^^^ trait fns cannot be const
|
| ^^^^^ trait fns cannot be const
|
||||||
|
|
||||||
error[E0379]: trait fns cannot be declared const
|
error[E0379]: trait fns cannot be declared const
|
||||||
--> $DIR/feature-gate-const_fn.rs:29:5
|
--> $DIR/feature-gate-const_fn.rs:27:5
|
||||||
|
|
|
|
||||||
LL | const fn foo() -> u32 { 0 } //~ ERROR trait fns cannot be declared const
|
LL | const fn foo() -> u32 { 0 } //~ ERROR trait fns cannot be declared const
|
||||||
| ^^^^^ trait fns cannot be const
|
| ^^^^^ trait fns cannot be const
|
||||||
|
|
||||||
error[E0658]: const fn is unstable (see issue #24111)
|
error[E0658]: const fn is unstable (see issue #24111)
|
||||||
--> $DIR/feature-gate-const_fn.rs:18:5
|
--> $DIR/feature-gate-const_fn.rs:16:5
|
||||||
|
|
|
|
||||||
LL | const fn foo() -> u32; //~ ERROR const fn is unstable
|
LL | const fn foo() -> u32; //~ ERROR const fn is unstable
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
@ -25,7 +25,7 @@ LL | const fn foo() -> u32; //~ ERROR const fn is unstable
|
||||||
= help: add #![feature(const_fn)] to the crate attributes to enable
|
= help: add #![feature(const_fn)] to the crate attributes to enable
|
||||||
|
|
||||||
error[E0658]: const fn is unstable (see issue #24111)
|
error[E0658]: const fn is unstable (see issue #24111)
|
||||||
--> $DIR/feature-gate-const_fn.rs:20:5
|
--> $DIR/feature-gate-const_fn.rs:18:5
|
||||||
|
|
|
|
||||||
LL | const fn bar() -> u32 { 0 } //~ ERROR const fn is unstable
|
LL | const fn bar() -> u32 { 0 } //~ ERROR const fn is unstable
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
|
@ -10,7 +10,7 @@
|
||||||
|
|
||||||
// Test use of min_const_fn without feature gate.
|
// Test use of min_const_fn without feature gate.
|
||||||
|
|
||||||
const fn foo() -> usize { 0 } //~ ERROR const fn is unstable
|
const fn foo() -> usize { 0 } // stabilized
|
||||||
|
|
||||||
trait Foo {
|
trait Foo {
|
||||||
const fn foo() -> u32; //~ ERROR const fn is unstable
|
const fn foo() -> u32; //~ ERROR const fn is unstable
|
||||||
|
@ -20,12 +20,11 @@ trait Foo {
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Foo {
|
impl Foo {
|
||||||
const fn baz() -> u32 { 0 } //~ ERROR const fn is unstable
|
const fn baz() -> u32 { 0 } // stabilized
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Foo for u32 {
|
impl Foo for u32 {
|
||||||
const fn foo() -> u32 { 0 } //~ ERROR const fn is unstable
|
const fn foo() -> u32 { 0 } //~ ERROR trait fns cannot be declared const
|
||||||
//~| ERROR trait fns cannot be declared const
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static FOO: usize = foo();
|
static FOO: usize = foo();
|
||||||
|
|
|
@ -13,17 +13,9 @@ LL | const fn bar() -> u32 { 0 } //~ ERROR const fn is unstable
|
||||||
error[E0379]: trait fns cannot be declared const
|
error[E0379]: trait fns cannot be declared const
|
||||||
--> $DIR/feature-gate-min_const_fn.rs:27:5
|
--> $DIR/feature-gate-min_const_fn.rs:27:5
|
||||||
|
|
|
|
||||||
LL | const fn foo() -> u32 { 0 } //~ ERROR const fn is unstable
|
LL | const fn foo() -> u32 { 0 } //~ ERROR trait fns cannot be declared const
|
||||||
| ^^^^^ trait fns cannot be const
|
| ^^^^^ trait fns cannot be const
|
||||||
|
|
||||||
error[E0658]: const fn is unstable (see issue #53555)
|
|
||||||
--> $DIR/feature-gate-min_const_fn.rs:13:1
|
|
||||||
|
|
|
||||||
LL | const fn foo() -> usize { 0 } //~ ERROR const fn is unstable
|
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
||||||
|
|
|
||||||
= help: add #![feature(min_const_fn)] to the crate attributes to enable
|
|
||||||
|
|
||||||
error[E0658]: const fn is unstable (see issue #24111)
|
error[E0658]: const fn is unstable (see issue #24111)
|
||||||
--> $DIR/feature-gate-min_const_fn.rs:16:5
|
--> $DIR/feature-gate-min_const_fn.rs:16:5
|
||||||
|
|
|
|
||||||
|
@ -40,23 +32,7 @@ LL | const fn bar() -> u32 { 0 } //~ ERROR const fn is unstable
|
||||||
|
|
|
|
||||||
= help: add #![feature(const_fn)] to the crate attributes to enable
|
= help: add #![feature(const_fn)] to the crate attributes to enable
|
||||||
|
|
||||||
error[E0658]: const fn is unstable (see issue #53555)
|
error: aborting due to 5 previous errors
|
||||||
--> $DIR/feature-gate-min_const_fn.rs:23:5
|
|
||||||
|
|
|
||||||
LL | const fn baz() -> u32 { 0 } //~ ERROR const fn is unstable
|
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
||||||
|
|
|
||||||
= help: add #![feature(min_const_fn)] to the crate attributes to enable
|
|
||||||
|
|
||||||
error[E0658]: const fn is unstable (see issue #53555)
|
|
||||||
--> $DIR/feature-gate-min_const_fn.rs:27:5
|
|
||||||
|
|
|
||||||
LL | const fn foo() -> u32 { 0 } //~ ERROR const fn is unstable
|
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
||||||
|
|
|
||||||
= help: add #![feature(min_const_fn)] to the crate attributes to enable
|
|
||||||
|
|
||||||
error: aborting due to 8 previous errors
|
|
||||||
|
|
||||||
Some errors occurred: E0379, E0658.
|
Some errors occurred: E0379, E0658.
|
||||||
For more information about an error, try `rustc --explain E0379`.
|
For more information about an error, try `rustc --explain E0379`.
|
||||||
|
|
|
@ -10,7 +10,6 @@
|
||||||
|
|
||||||
//https://github.com/rust-lang/rust/issues/31364
|
//https://github.com/rust-lang/rust/issues/31364
|
||||||
|
|
||||||
#![feature(min_const_fn)]
|
|
||||||
const fn a() -> usize { b() }
|
const fn a() -> usize { b() }
|
||||||
const fn b() -> usize { a() }
|
const fn b() -> usize { a() }
|
||||||
const ARR: [i32; a()] = [5; 6]; //~ ERROR could not evaluate constant expression
|
const ARR: [i32; a()] = [5; 6]; //~ ERROR could not evaluate constant expression
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
error[E0080]: could not evaluate constant expression
|
error[E0080]: could not evaluate constant expression
|
||||||
--> $DIR/infinite-recursion-const-fn.rs:16:1
|
--> $DIR/infinite-recursion-const-fn.rs:15:1
|
||||||
|
|
|
|
||||||
LL | const fn a() -> usize { b() }
|
LL | const fn a() -> usize { b() }
|
||||||
| ---
|
| ---
|
||||||
|
|
|
@ -10,7 +10,6 @@
|
||||||
|
|
||||||
// compile-pass
|
// compile-pass
|
||||||
#![allow(dead_code)]
|
#![allow(dead_code)]
|
||||||
#![feature(min_const_fn)]
|
|
||||||
|
|
||||||
fn main() {}
|
fn main() {}
|
||||||
|
|
||||||
|
|
|
@ -10,8 +10,6 @@
|
||||||
|
|
||||||
// A quick test of 'unsafe const fn' functionality
|
// A quick test of 'unsafe const fn' functionality
|
||||||
|
|
||||||
#![feature(min_const_fn)]
|
|
||||||
|
|
||||||
const unsafe fn dummy(v: u32) -> u32 {
|
const unsafe fn dummy(v: u32) -> u32 {
|
||||||
!v
|
!v
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
error[E0133]: call to unsafe function is unsafe and requires unsafe function or block
|
error[E0133]: call to unsafe function is unsafe and requires unsafe function or block
|
||||||
--> $DIR/unsafe-const-fn.rs:19:18
|
--> $DIR/unsafe-const-fn.rs:17:18
|
||||||
|
|
|
|
||||||
LL | const VAL: u32 = dummy(0xFFFF);
|
LL | const VAL: u32 = dummy(0xFFFF);
|
||||||
| ^^^^^^^^^^^^^ call to unsafe function
|
| ^^^^^^^^^^^^^ call to unsafe function
|
||||||
|
|
Loading…
Reference in New Issue