Update tests after feature stabilization
This commit is contained in:
parent
7723506d13
commit
8fc835831c
86 changed files with 107 additions and 718 deletions
|
@ -359,22 +359,6 @@ impl<'mir, 'tcx> Checker<'mir, 'tcx> {
|
|||
match *ty.kind() {
|
||||
ty::Ref(_, _, hir::Mutability::Mut) => self.check_op(ops::ty::MutRef(kind)),
|
||||
ty::Opaque(..) => self.check_op(ops::ty::ImplTrait),
|
||||
|
||||
ty::Dynamic(preds, _) => {
|
||||
for pred in preds.iter() {
|
||||
match pred.skip_binder() {
|
||||
ty::ExistentialPredicate::AutoTrait(_)
|
||||
| ty::ExistentialPredicate::Projection(_) => {
|
||||
self.check_op(ops::ty::DynTrait(kind))
|
||||
}
|
||||
ty::ExistentialPredicate::Trait(trait_ref) => {
|
||||
if Some(trait_ref.def_id) != self.tcx.lang_items().sized_trait() {
|
||||
self.check_op(ops::ty::DynTrait(kind))
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
_ => {}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -817,49 +817,6 @@ pub mod ty {
|
|||
}
|
||||
}
|
||||
|
||||
#[derive(Debug)]
|
||||
pub struct DynTrait(pub mir::LocalKind);
|
||||
impl<'tcx> NonConstOp<'tcx> for DynTrait {
|
||||
fn importance(&self) -> DiagnosticImportance {
|
||||
match self.0 {
|
||||
mir::LocalKind::Var | mir::LocalKind::Temp => DiagnosticImportance::Secondary,
|
||||
mir::LocalKind::ReturnPointer | mir::LocalKind::Arg => {
|
||||
DiagnosticImportance::Primary
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn status_in_item(&self, ccx: &ConstCx<'_, 'tcx>) -> Status {
|
||||
if ccx.const_kind() != hir::ConstContext::ConstFn {
|
||||
Status::Allowed
|
||||
} else {
|
||||
Status::Unstable(sym::const_fn_trait_bound)
|
||||
}
|
||||
}
|
||||
|
||||
fn build_error(
|
||||
&self,
|
||||
ccx: &ConstCx<'_, 'tcx>,
|
||||
span: Span,
|
||||
) -> DiagnosticBuilder<'tcx, ErrorGuaranteed> {
|
||||
let mut err = feature_err(
|
||||
&ccx.tcx.sess.parse_sess,
|
||||
sym::const_fn_trait_bound,
|
||||
span,
|
||||
"trait objects in const fn are unstable",
|
||||
);
|
||||
|
||||
match ccx.fn_sig() {
|
||||
Some(fn_sig) if !fn_sig.span.contains(span) => {
|
||||
err.span_label(fn_sig.span, "function declared as const here");
|
||||
}
|
||||
_ => {}
|
||||
}
|
||||
|
||||
err
|
||||
}
|
||||
}
|
||||
|
||||
/// A trait bound with the `?const Trait` opt-out
|
||||
#[derive(Debug)]
|
||||
pub struct TraitBoundNotConst;
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
#![feature(const_fn_trait_bound)]
|
||||
// Regression test related to issue 88434
|
||||
|
||||
const _CONST: &() = &f(&|_| {});
|
||||
|
|
|
@ -1,14 +1,14 @@
|
|||
error[E0080]: evaluation of constant value failed
|
||||
--> $DIR/issue-88434-minimal-example.rs:10:5
|
||||
--> $DIR/issue-88434-minimal-example.rs:9:5
|
||||
|
|
||||
LL | const _CONST: &() = &f(&|_| {});
|
||||
| ---------- inside `_CONST` at $DIR/issue-88434-minimal-example.rs:4:22
|
||||
| ---------- inside `_CONST` at $DIR/issue-88434-minimal-example.rs:3:22
|
||||
...
|
||||
LL | panic!()
|
||||
| ^^^^^^^^
|
||||
| |
|
||||
| the evaluated program panicked at 'explicit panic', $DIR/issue-88434-minimal-example.rs:10:5
|
||||
| inside `f::<[closure@$DIR/issue-88434-minimal-example.rs:4:25: 4:31]>` at $SRC_DIR/std/src/panic.rs:LL:COL
|
||||
| the evaluated program panicked at 'explicit panic', $DIR/issue-88434-minimal-example.rs:9:5
|
||||
| inside `f::<[closure@$DIR/issue-88434-minimal-example.rs:3:25: 3:31]>` at $SRC_DIR/std/src/panic.rs:LL:COL
|
||||
|
|
||||
= note: this error originates in the macro `$crate::panic::panic_2015` (in Nightly builds, run with -Z macro-backtrace for more info)
|
||||
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
#![feature(const_fn_trait_bound)]
|
||||
// Regression test for issue 88434
|
||||
|
||||
const _CONST: &[u8] = &f(&[], |_| {});
|
||||
|
|
|
@ -1,14 +1,14 @@
|
|||
error[E0080]: evaluation of constant value failed
|
||||
--> $DIR/issue-88434-removal-index-should-be-less.rs:10:5
|
||||
--> $DIR/issue-88434-removal-index-should-be-less.rs:9:5
|
||||
|
|
||||
LL | const _CONST: &[u8] = &f(&[], |_| {});
|
||||
| -------------- inside `_CONST` at $DIR/issue-88434-removal-index-should-be-less.rs:4:24
|
||||
| -------------- inside `_CONST` at $DIR/issue-88434-removal-index-should-be-less.rs:3:24
|
||||
...
|
||||
LL | panic!()
|
||||
| ^^^^^^^^
|
||||
| |
|
||||
| the evaluated program panicked at 'explicit panic', $DIR/issue-88434-removal-index-should-be-less.rs:10:5
|
||||
| inside `f::<[closure@$DIR/issue-88434-removal-index-should-be-less.rs:4:31: 4:37]>` at $SRC_DIR/std/src/panic.rs:LL:COL
|
||||
| the evaluated program panicked at 'explicit panic', $DIR/issue-88434-removal-index-should-be-less.rs:9:5
|
||||
| inside `f::<[closure@$DIR/issue-88434-removal-index-should-be-less.rs:3:31: 3:37]>` at $SRC_DIR/std/src/panic.rs:LL:COL
|
||||
|
|
||||
= note: this error originates in the macro `$crate::panic::panic_2015` (in Nightly builds, run with -Z macro-backtrace for more info)
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
#![feature(const_fn_trait_bound, generic_const_exprs)]
|
||||
#![feature(generic_const_exprs)]
|
||||
#![allow(incomplete_features)]
|
||||
|
||||
trait _Contains<T> {
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
#![feature(const_fn_trait_bound, generic_const_exprs)]
|
||||
#![feature(generic_const_exprs)]
|
||||
#![allow(incomplete_features)]
|
||||
|
||||
trait MiniTypeId {
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
// Crate that exports a const fn. Used for testing cross-crate.
|
||||
|
||||
#![feature(const_fn_fn_ptr_basics)]
|
||||
#![crate_type="rlib"]
|
||||
|
||||
pub const fn foo() -> usize { 22 }
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
#![allow(unused)]
|
||||
#![feature(const_fn_trait_bound, const_trait_impl, inline_const, negative_impls)]
|
||||
#![feature(const_trait_impl, inline_const, negative_impls)]
|
||||
|
||||
const fn f<T: ~const Drop>(x: T) {}
|
||||
|
||||
|
|
|
@ -10,23 +10,11 @@ help: skipping check that does not even have a feature gate
|
|||
|
|
||||
LL | X_CONST(x)
|
||||
| ^^^^^^^^^^
|
||||
help: skipping check for `const_fn_fn_ptr_basics` feature
|
||||
--> $DIR/const_fn_ptr.rs:18:14
|
||||
|
|
||||
LL | const fn foo(x: fn(usize) -> usize, y: usize) -> usize {
|
||||
| ^
|
||||
help: skipping check for `const_fn_fn_ptr_basics` feature
|
||||
--> $DIR/const_fn_ptr.rs:19:5
|
||||
|
|
||||
LL | x(y)
|
||||
| ^
|
||||
help: skipping check that does not even have a feature gate
|
||||
--> $DIR/const_fn_ptr.rs:19:5
|
||||
|
|
||||
LL | x(y)
|
||||
| ^^^^
|
||||
|
||||
error: `-Zunleash-the-miri-inside-of-you` may not be used to circumvent feature gates, except when testing error paths in the CTFE engine
|
||||
|
||||
error: aborting due to previous error; 1 warning emitted
|
||||
warning: 1 warning emitted
|
||||
|
||||
|
|
|
@ -12,16 +12,6 @@ LL | assert_eq!(Z, 4);
|
|||
|
||||
warning: skipping const checks
|
||||
|
|
||||
help: skipping check for `const_fn_fn_ptr_basics` feature
|
||||
--> $DIR/const_fn_ptr_fail2.rs:11:14
|
||||
|
|
||||
LL | const fn bar(x: fn(usize) -> usize, y: usize) -> usize {
|
||||
| ^
|
||||
help: skipping check for `const_fn_fn_ptr_basics` feature
|
||||
--> $DIR/const_fn_ptr_fail2.rs:12:5
|
||||
|
|
||||
LL | x(y)
|
||||
| ^
|
||||
help: skipping check that does not even have a feature gate
|
||||
--> $DIR/const_fn_ptr_fail2.rs:12:5
|
||||
|
|
||||
|
|
|
@ -1,7 +1,5 @@
|
|||
// issue-49296: Unsafe shenigans in constants can result in missing errors
|
||||
|
||||
#![feature(const_fn_trait_bound)]
|
||||
|
||||
use std::mem::transmute;
|
||||
|
||||
const fn wat(x: u64) -> &'static u64 {
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
error[E0080]: evaluation of constant value failed
|
||||
--> $DIR/issue-49296.rs:11:16
|
||||
--> $DIR/issue-49296.rs:9:16
|
||||
|
|
||||
LL | const X: u64 = *wat(42);
|
||||
| ^^^^^^^^ pointer to alloc2 was dereferenced after this allocation got freed
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
// check-pass
|
||||
#![feature(const_fn_fn_ptr_basics)]
|
||||
|
||||
const fn nested(x: (for<'a> fn(&'a ()), String)) -> (fn(&'static ()), String) {
|
||||
x
|
||||
|
|
|
@ -2,8 +2,6 @@
|
|||
|
||||
const extern "C" fn unsize(x: &[u8; 3]) -> &[u8] { x }
|
||||
const unsafe extern "C" fn closure() -> fn() { || {} }
|
||||
//~^ ERROR function pointer
|
||||
//~| ERROR function pointer cast
|
||||
const unsafe extern "C" fn use_float() { 1.0 + 1.0; }
|
||||
//~^ ERROR floating point arithmetic
|
||||
const extern "C" fn ptr_cast(val: *const u8) { val as usize; }
|
||||
|
|
|
@ -1,23 +1,5 @@
|
|||
error[E0658]: function pointers cannot appear in constant functions
|
||||
--> $DIR/const-extern-fn-min-const-fn.rs:4:41
|
||||
|
|
||||
LL | const unsafe extern "C" fn closure() -> fn() { || {} }
|
||||
| ^^^^
|
||||
|
|
||||
= note: see issue #57563 <https://github.com/rust-lang/rust/issues/57563> for more information
|
||||
= help: add `#![feature(const_fn_fn_ptr_basics)]` to the crate attributes to enable
|
||||
|
||||
error[E0658]: function pointer casts are not allowed in constant functions
|
||||
--> $DIR/const-extern-fn-min-const-fn.rs:4:48
|
||||
|
|
||||
LL | const unsafe extern "C" fn closure() -> fn() { || {} }
|
||||
| ^^^^^
|
||||
|
|
||||
= note: see issue #57563 <https://github.com/rust-lang/rust/issues/57563> for more information
|
||||
= help: add `#![feature(const_fn_fn_ptr_basics)]` to the crate attributes to enable
|
||||
|
||||
error[E0658]: floating point arithmetic is not allowed in constant functions
|
||||
--> $DIR/const-extern-fn-min-const-fn.rs:7:42
|
||||
--> $DIR/const-extern-fn-min-const-fn.rs:5:42
|
||||
|
|
||||
LL | const unsafe extern "C" fn use_float() { 1.0 + 1.0; }
|
||||
| ^^^^^^^^^
|
||||
|
@ -26,7 +8,7 @@ LL | const unsafe extern "C" fn use_float() { 1.0 + 1.0; }
|
|||
= help: add `#![feature(const_fn_floating_point_arithmetic)]` to the crate attributes to enable
|
||||
|
||||
error: pointers cannot be cast to integers during const eval
|
||||
--> $DIR/const-extern-fn-min-const-fn.rs:9:48
|
||||
--> $DIR/const-extern-fn-min-const-fn.rs:7:48
|
||||
|
|
||||
LL | const extern "C" fn ptr_cast(val: *const u8) { val as usize; }
|
||||
| ^^^^^^^^^^^^
|
||||
|
@ -34,6 +16,6 @@ LL | const extern "C" fn ptr_cast(val: *const u8) { val as usize; }
|
|||
= note: at compile-time, pointers do not have an integer value
|
||||
= note: avoiding this restriction via `transmute`, `union`, or raw pointers leads to compile-time undefined behavior
|
||||
|
||||
error: aborting due to 4 previous errors
|
||||
error: aborting due to 2 previous errors
|
||||
|
||||
For more information about this error, try `rustc --explain E0658`.
|
||||
|
|
|
@ -4,7 +4,6 @@
|
|||
// A very basic test of const fn functionality.
|
||||
|
||||
#![feature(const_indexing)]
|
||||
#![feature(const_fn_trait_bound)]
|
||||
|
||||
const fn add(x: u32, y: u32) -> u32 {
|
||||
x + y
|
||||
|
|
|
@ -1,8 +0,0 @@
|
|||
error: fatal error triggered by #[rustc_error]
|
||||
--> $DIR/const_fn_trait_bound.rs:17:1
|
||||
|
|
||||
LL | fn main() {}
|
||||
| ^^^^^^^^^
|
||||
|
||||
error: aborting due to previous error
|
||||
|
|
@ -1,17 +0,0 @@
|
|||
// gate-test-const_fn_trait_bound
|
||||
|
||||
// revisions: stock gated
|
||||
|
||||
#![feature(rustc_attrs)]
|
||||
#![cfg_attr(gated, feature(const_fn_trait_bound))]
|
||||
|
||||
const fn test1<T: std::ops::Add>() {}
|
||||
//[stock]~^ trait bounds
|
||||
const fn test2(_x: &dyn Send) {}
|
||||
//[stock]~^ trait objects in const fn are unstable
|
||||
const fn test3() -> &'static dyn Send { loop {} }
|
||||
//[stock]~^ trait objects in const fn are unstable
|
||||
|
||||
|
||||
#[rustc_error]
|
||||
fn main() {} //[gated]~ fatal error triggered by #[rustc_error]
|
|
@ -1,30 +0,0 @@
|
|||
error[E0658]: trait bounds other than `Sized` on const fn parameters are unstable
|
||||
--> $DIR/const_fn_trait_bound.rs:8:16
|
||||
|
|
||||
LL | const fn test1<T: std::ops::Add>() {}
|
||||
| ^
|
||||
|
|
||||
= note: see issue #93706 <https://github.com/rust-lang/rust/issues/93706> for more information
|
||||
= help: add `#![feature(const_fn_trait_bound)]` to the crate attributes to enable
|
||||
|
||||
error[E0658]: trait objects in const fn are unstable
|
||||
--> $DIR/const_fn_trait_bound.rs:10:16
|
||||
|
|
||||
LL | const fn test2(_x: &dyn Send) {}
|
||||
| ^^
|
||||
|
|
||||
= note: see issue #93706 <https://github.com/rust-lang/rust/issues/93706> for more information
|
||||
= help: add `#![feature(const_fn_trait_bound)]` to the crate attributes to enable
|
||||
|
||||
error[E0658]: trait objects in const fn are unstable
|
||||
--> $DIR/const_fn_trait_bound.rs:12:21
|
||||
|
|
||||
LL | const fn test3() -> &'static dyn Send { loop {} }
|
||||
| ^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
= note: see issue #93706 <https://github.com/rust-lang/rust/issues/93706> for more information
|
||||
= help: add `#![feature(const_fn_trait_bound)]` to the crate attributes to enable
|
||||
|
||||
error: aborting due to 3 previous errors
|
||||
|
||||
For more information about this error, try `rustc --explain E0658`.
|
|
@ -1,6 +1,8 @@
|
|||
// check-pass
|
||||
|
||||
const fn x() {
|
||||
let t = true;
|
||||
let x = || t; //~ ERROR function pointer
|
||||
let x = || t;
|
||||
}
|
||||
|
||||
fn main() {}
|
||||
|
|
|
@ -1,12 +0,0 @@
|
|||
error[E0658]: function pointers cannot appear in constant functions
|
||||
--> $DIR/issue-37550-1.rs:3:9
|
||||
|
|
||||
LL | let x = || t;
|
||||
| ^
|
||||
|
|
||||
= note: see issue #57563 <https://github.com/rust-lang/rust/issues/57563> for more information
|
||||
= help: add `#![feature(const_fn_fn_ptr_basics)]` to the crate attributes to enable
|
||||
|
||||
error: aborting due to previous error
|
||||
|
||||
For more information about this error, try `rustc --explain E0658`.
|
|
@ -2,8 +2,6 @@
|
|||
#![allow(dead_code)]
|
||||
#![allow(unused_variables)]
|
||||
|
||||
#![feature(const_fn_fn_ptr_basics)]
|
||||
|
||||
const fn x() {
|
||||
let t = true;
|
||||
let x = || t;
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
// run-pass
|
||||
#![feature(const_fn_fn_ptr_basics)]
|
||||
#![deny(const_err)]
|
||||
|
||||
pub struct Data<T> {
|
||||
|
|
|
@ -1,5 +1,3 @@
|
|||
#![feature(const_fn_fn_ptr_basics)]
|
||||
|
||||
const fn foo() { (||{})() }
|
||||
//~^ ERROR cannot call non-const closure
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
error[E0015]: cannot call non-const closure in constant functions
|
||||
--> $DIR/issue-56164.rs:3:18
|
||||
--> $DIR/issue-56164.rs:1:18
|
||||
|
|
||||
LL | const fn foo() { (||{})() }
|
||||
| ^^^^^^^^
|
||||
|
@ -8,7 +8,7 @@ LL | const fn foo() { (||{})() }
|
|||
= note: calls in constant functions are limited to constant functions, tuple structs and tuple variants
|
||||
|
||||
error: function pointers are not allowed in const fn
|
||||
--> $DIR/issue-56164.rs:7:5
|
||||
--> $DIR/issue-56164.rs:5:5
|
||||
|
|
||||
LL | input()
|
||||
| ^^^^^^^
|
||||
|
|
|
@ -3,7 +3,6 @@
|
|||
// regression test for #88071
|
||||
|
||||
#![feature(const_btree_new)]
|
||||
#![feature(const_fn_trait_bound)]
|
||||
|
||||
use std::collections::BTreeMap;
|
||||
|
||||
|
|
|
@ -1,15 +0,0 @@
|
|||
#![feature(rustc_attrs, staged_api, rustc_allow_const_fn_unstable)]
|
||||
#![feature(const_fn_fn_ptr_basics)]
|
||||
#![stable(feature = "rust1", since = "1.0.0")]
|
||||
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
#[rustc_const_stable(since="1.0.0", feature = "mep")]
|
||||
const fn error(_: fn()) {}
|
||||
//~^ ERROR const-stable function cannot use `#[feature(const_fn_fn_ptr_basics)]`
|
||||
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
#[rustc_const_stable(since="1.0.0", feature = "mep")]
|
||||
#[rustc_allow_const_fn_unstable(const_fn_fn_ptr_basics)]
|
||||
const fn compiles(_: fn()) {}
|
||||
|
||||
fn main() {}
|
|
@ -1,17 +0,0 @@
|
|||
error: const-stable function cannot use `#[feature(const_fn_fn_ptr_basics)]`
|
||||
--> $DIR/allow_const_fn_ptr.rs:7:16
|
||||
|
|
||||
LL | const fn error(_: fn()) {}
|
||||
| ^
|
||||
|
|
||||
help: if it is not part of the public API, make this function unstably const
|
||||
|
|
||||
LL | #[rustc_const_unstable(feature = "...", issue = "...")]
|
||||
|
|
||||
help: otherwise `#[rustc_allow_const_fn_unstable]` can be used to bypass stability checks
|
||||
|
|
||||
LL | #[rustc_allow_const_fn_unstable(const_fn_fn_ptr_basics)]
|
||||
|
|
||||
|
||||
error: aborting due to previous error
|
||||
|
|
@ -1,13 +1,11 @@
|
|||
// run-pass
|
||||
#![feature(rustc_allow_const_fn_unstable)]
|
||||
#![feature(const_fn_fn_ptr_basics)]
|
||||
|
||||
#![feature(rustc_attrs, staged_api)]
|
||||
#![stable(feature = "rust1", since = "1.0.0")]
|
||||
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
#[rustc_const_stable(since="1.0.0", feature = "mep")]
|
||||
#[rustc_allow_const_fn_unstable(const_fn_fn_ptr_basics)]
|
||||
const fn takes_fn_ptr(_: fn()) {}
|
||||
|
||||
const FN: fn() = || ();
|
||||
|
|
|
@ -1,17 +0,0 @@
|
|||
fn main() {}
|
||||
|
||||
const fn unsize(x: &[u8; 3]) -> &[u8] { x }
|
||||
const fn closure() -> fn() { || {} }
|
||||
//~^ ERROR function pointer
|
||||
//~| ERROR function pointer cast
|
||||
const fn closure2() {
|
||||
(|| {}) as fn();
|
||||
//~^ ERROR function pointer
|
||||
}
|
||||
const fn reify(f: fn()) -> unsafe fn() { f }
|
||||
//~^ ERROR function pointer
|
||||
//~| ERROR function pointer
|
||||
//~| ERROR function pointer cast
|
||||
const fn reify2() { main as unsafe fn(); }
|
||||
//~^ ERROR function pointer
|
||||
//~| ERROR function pointer cast
|
|
@ -1,75 +0,0 @@
|
|||
error[E0658]: function pointers cannot appear in constant functions
|
||||
--> $DIR/cast_errors.rs:4:23
|
||||
|
|
||||
LL | const fn closure() -> fn() { || {} }
|
||||
| ^^^^
|
||||
|
|
||||
= note: see issue #57563 <https://github.com/rust-lang/rust/issues/57563> for more information
|
||||
= help: add `#![feature(const_fn_fn_ptr_basics)]` to the crate attributes to enable
|
||||
|
||||
error[E0658]: function pointer casts are not allowed in constant functions
|
||||
--> $DIR/cast_errors.rs:4:30
|
||||
|
|
||||
LL | const fn closure() -> fn() { || {} }
|
||||
| ^^^^^
|
||||
|
|
||||
= note: see issue #57563 <https://github.com/rust-lang/rust/issues/57563> for more information
|
||||
= help: add `#![feature(const_fn_fn_ptr_basics)]` to the crate attributes to enable
|
||||
|
||||
error[E0658]: function pointer casts are not allowed in constant functions
|
||||
--> $DIR/cast_errors.rs:8:5
|
||||
|
|
||||
LL | (|| {}) as fn();
|
||||
| ^^^^^^^
|
||||
|
|
||||
= note: see issue #57563 <https://github.com/rust-lang/rust/issues/57563> for more information
|
||||
= help: add `#![feature(const_fn_fn_ptr_basics)]` to the crate attributes to enable
|
||||
|
||||
error[E0658]: function pointers cannot appear in constant functions
|
||||
--> $DIR/cast_errors.rs:11:16
|
||||
|
|
||||
LL | const fn reify(f: fn()) -> unsafe fn() { f }
|
||||
| ^
|
||||
|
|
||||
= note: see issue #57563 <https://github.com/rust-lang/rust/issues/57563> for more information
|
||||
= help: add `#![feature(const_fn_fn_ptr_basics)]` to the crate attributes to enable
|
||||
|
||||
error[E0658]: function pointers cannot appear in constant functions
|
||||
--> $DIR/cast_errors.rs:11:28
|
||||
|
|
||||
LL | const fn reify(f: fn()) -> unsafe fn() { f }
|
||||
| ^^^^^^^^^^^
|
||||
|
|
||||
= note: see issue #57563 <https://github.com/rust-lang/rust/issues/57563> for more information
|
||||
= help: add `#![feature(const_fn_fn_ptr_basics)]` to the crate attributes to enable
|
||||
|
||||
error[E0658]: function pointer casts are not allowed in constant functions
|
||||
--> $DIR/cast_errors.rs:11:42
|
||||
|
|
||||
LL | const fn reify(f: fn()) -> unsafe fn() { f }
|
||||
| ^
|
||||
|
|
||||
= note: see issue #57563 <https://github.com/rust-lang/rust/issues/57563> for more information
|
||||
= help: add `#![feature(const_fn_fn_ptr_basics)]` to the crate attributes to enable
|
||||
|
||||
error[E0658]: function pointer casts are not allowed in constant functions
|
||||
--> $DIR/cast_errors.rs:15:21
|
||||
|
|
||||
LL | const fn reify2() { main as unsafe fn(); }
|
||||
| ^^^^
|
||||
|
|
||||
= note: see issue #57563 <https://github.com/rust-lang/rust/issues/57563> for more information
|
||||
= help: add `#![feature(const_fn_fn_ptr_basics)]` to the crate attributes to enable
|
||||
|
||||
error[E0658]: function pointer casts are not allowed in constant functions
|
||||
--> $DIR/cast_errors.rs:15:21
|
||||
|
|
||||
LL | const fn reify2() { main as unsafe fn(); }
|
||||
| ^^^^
|
||||
|
|
||||
= note: see issue #57563 <https://github.com/rust-lang/rust/issues/57563> for more information
|
||||
= help: add `#![feature(const_fn_fn_ptr_basics)]` to the crate attributes to enable
|
||||
|
||||
error: aborting due to 8 previous errors
|
||||
|
||||
For more information about this error, try `rustc --explain E0658`.
|
11
src/test/ui/consts/min_const_fn/cast_fn.rs
Normal file
11
src/test/ui/consts/min_const_fn/cast_fn.rs
Normal file
|
@ -0,0 +1,11 @@
|
|||
// check-pass
|
||||
|
||||
fn main() {}
|
||||
|
||||
const fn unsize(x: &[u8; 3]) -> &[u8] { x }
|
||||
const fn closure() -> fn() { || {} }
|
||||
const fn closure2() {
|
||||
(|| {}) as fn();
|
||||
}
|
||||
const fn reify(f: fn()) -> unsafe fn() { f }
|
||||
const fn reify2() { main as unsafe fn(); }
|
|
@ -1,6 +1,4 @@
|
|||
const fn cmp(x: fn(), y: fn()) -> bool {
|
||||
//~^ ERROR function pointer
|
||||
//~| ERROR function pointer
|
||||
unsafe { x == y }
|
||||
//~^ ERROR pointers cannot be reliably compared
|
||||
}
|
||||
|
|
|
@ -1,29 +1,10 @@
|
|||
error[E0658]: function pointers cannot appear in constant functions
|
||||
--> $DIR/cmp_fn_pointers.rs:1:14
|
||||
|
|
||||
LL | const fn cmp(x: fn(), y: fn()) -> bool {
|
||||
| ^
|
||||
|
|
||||
= note: see issue #57563 <https://github.com/rust-lang/rust/issues/57563> for more information
|
||||
= help: add `#![feature(const_fn_fn_ptr_basics)]` to the crate attributes to enable
|
||||
|
||||
error[E0658]: function pointers cannot appear in constant functions
|
||||
--> $DIR/cmp_fn_pointers.rs:1:23
|
||||
|
|
||||
LL | const fn cmp(x: fn(), y: fn()) -> bool {
|
||||
| ^
|
||||
|
|
||||
= note: see issue #57563 <https://github.com/rust-lang/rust/issues/57563> for more information
|
||||
= help: add `#![feature(const_fn_fn_ptr_basics)]` to the crate attributes to enable
|
||||
|
||||
error: pointers cannot be reliably compared during const eval
|
||||
--> $DIR/cmp_fn_pointers.rs:4:14
|
||||
--> $DIR/cmp_fn_pointers.rs:2:14
|
||||
|
|
||||
LL | unsafe { x == y }
|
||||
| ^^^^^^
|
||||
|
|
||||
= note: see issue #53020 <https://github.com/rust-lang/rust/issues/53020> for more information
|
||||
|
||||
error: aborting due to 3 previous errors
|
||||
error: aborting due to previous error
|
||||
|
||||
For more information about this error, try `rustc --explain E0658`.
|
||||
|
|
|
@ -80,11 +80,10 @@ const unsafe fn ret_i32_no_unsafe() -> i32 { 42 }
|
|||
const unsafe fn ret_null_ptr_no_unsafe<T>() -> *const T { core::ptr::null() }
|
||||
const unsafe fn ret_null_mut_ptr_no_unsafe<T>() -> *mut T { core::ptr::null_mut() }
|
||||
|
||||
// not ok
|
||||
const fn foo11<T: std::fmt::Display>(t: T) -> T { t }
|
||||
//~^ ERROR trait bounds other than `Sized` on const fn parameters are unstable
|
||||
const fn foo11_2<T: Send>(t: T) -> T { t }
|
||||
//~^ ERROR trait bounds other than `Sized` on const fn parameters are unstable
|
||||
|
||||
// not ok
|
||||
|
||||
static BAR: u32 = 42;
|
||||
const fn foo25() -> u32 { BAR } //~ ERROR cannot refer to statics
|
||||
|
@ -108,41 +107,28 @@ const fn foo37(a: bool, b: bool) -> bool { a || b }
|
|||
fn main() {}
|
||||
|
||||
impl<T: std::fmt::Debug> Foo<T> {
|
||||
//~^ ERROR trait bounds other than `Sized` on const fn parameters are unstable
|
||||
const fn foo(&self) {}
|
||||
}
|
||||
|
||||
impl<T: std::fmt::Debug + Sized> Foo<T> {
|
||||
//~^ ERROR trait bounds other than `Sized` on const fn parameters are unstable
|
||||
const fn foo2(&self) {}
|
||||
}
|
||||
|
||||
impl<T: Sync + Sized> Foo<T> {
|
||||
//~^ ERROR trait bounds other than `Sized` on const fn parameters are unstable
|
||||
const fn foo3(&self) {}
|
||||
}
|
||||
|
||||
struct AlanTuring<T>(T);
|
||||
const fn no_apit2(_x: AlanTuring<impl std::fmt::Debug>) {}
|
||||
//~^ ERROR trait bounds other than `Sized`
|
||||
//~| ERROR destructor
|
||||
//~^ ERROR destructor
|
||||
const fn no_apit(_x: impl std::fmt::Debug) {}
|
||||
//~^ ERROR trait bounds other than `Sized`
|
||||
//~| ERROR destructor
|
||||
//~^ ERROR destructor
|
||||
const fn no_dyn_trait(_x: &dyn std::fmt::Debug) {}
|
||||
//~^ ERROR trait objects in const fn are unstable
|
||||
const fn no_dyn_trait_ret() -> &'static dyn std::fmt::Debug { &() }
|
||||
//~^ ERROR trait objects in const fn are unstable
|
||||
|
||||
const fn no_unsafe() { unsafe {} }
|
||||
|
||||
const fn really_no_traits_i_mean_it() { (&() as &dyn std::fmt::Debug, ()).1 }
|
||||
//~^ ERROR trait objects in const fn are unstable
|
||||
//~| ERROR trait objects in const fn are unstable
|
||||
//~| ERROR trait objects in const fn are unstable
|
||||
const fn traits_are_ok_i_mean_it() { (&() as &dyn std::fmt::Debug, ()).1 }
|
||||
|
||||
const fn no_fn_ptrs(_x: fn()) {}
|
||||
//~^ ERROR function pointer
|
||||
const fn no_fn_ptrs2() -> fn() { fn foo() {} foo }
|
||||
//~^ ERROR function pointer
|
||||
//~| ERROR function pointer cast
|
||||
const fn fn_ptrs(_x: fn()) {}
|
||||
const fn fn_ptrs2() -> fn() { fn foo() {} foo }
|
||||
|
|
|
@ -130,26 +130,8 @@ LL | const fn get_mut_sq(&mut self) -> &mut T { &mut self.0 }
|
|||
= note: see issue #57349 <https://github.com/rust-lang/rust/issues/57349> for more information
|
||||
= help: add `#![feature(const_mut_refs)]` to the crate attributes to enable
|
||||
|
||||
error[E0658]: trait bounds other than `Sized` on const fn parameters are unstable
|
||||
--> $DIR/min_const_fn.rs:84:16
|
||||
|
|
||||
LL | const fn foo11<T: std::fmt::Display>(t: T) -> T { t }
|
||||
| ^
|
||||
|
|
||||
= note: see issue #93706 <https://github.com/rust-lang/rust/issues/93706> for more information
|
||||
= help: add `#![feature(const_fn_trait_bound)]` to the crate attributes to enable
|
||||
|
||||
error[E0658]: trait bounds other than `Sized` on const fn parameters are unstable
|
||||
--> $DIR/min_const_fn.rs:86:18
|
||||
|
|
||||
LL | const fn foo11_2<T: Send>(t: T) -> T { t }
|
||||
| ^
|
||||
|
|
||||
= note: see issue #93706 <https://github.com/rust-lang/rust/issues/93706> for more information
|
||||
= help: add `#![feature(const_fn_trait_bound)]` to the crate attributes to enable
|
||||
|
||||
error[E0013]: constant functions cannot refer to statics
|
||||
--> $DIR/min_const_fn.rs:90:27
|
||||
--> $DIR/min_const_fn.rs:89:27
|
||||
|
|
||||
LL | const fn foo25() -> u32 { BAR }
|
||||
| ^^^
|
||||
|
@ -157,7 +139,7 @@ LL | const fn foo25() -> u32 { BAR }
|
|||
= help: consider extracting the value of the `static` to a `const`, and referring to that
|
||||
|
||||
error[E0013]: constant functions cannot refer to statics
|
||||
--> $DIR/min_const_fn.rs:91:37
|
||||
--> $DIR/min_const_fn.rs:90:37
|
||||
|
|
||||
LL | const fn foo26() -> &'static u32 { &BAR }
|
||||
| ^^^
|
||||
|
@ -165,7 +147,7 @@ LL | const fn foo26() -> &'static u32 { &BAR }
|
|||
= help: consider extracting the value of the `static` to a `const`, and referring to that
|
||||
|
||||
error: pointers cannot be cast to integers during const eval
|
||||
--> $DIR/min_const_fn.rs:92:42
|
||||
--> $DIR/min_const_fn.rs:91:42
|
||||
|
|
||||
LL | const fn foo30(x: *const u32) -> usize { x as usize }
|
||||
| ^^^^^^^^^^
|
||||
|
@ -174,7 +156,7 @@ LL | const fn foo30(x: *const u32) -> usize { x as usize }
|
|||
= note: avoiding this restriction via `transmute`, `union`, or raw pointers leads to compile-time undefined behavior
|
||||
|
||||
error: pointers cannot be cast to integers during const eval
|
||||
--> $DIR/min_const_fn.rs:94:63
|
||||
--> $DIR/min_const_fn.rs:93:63
|
||||
|
|
||||
LL | const fn foo30_with_unsafe(x: *const u32) -> usize { unsafe { x as usize } }
|
||||
| ^^^^^^^^^^
|
||||
|
@ -183,7 +165,7 @@ LL | const fn foo30_with_unsafe(x: *const u32) -> usize { unsafe { x as usize }
|
|||
= note: avoiding this restriction via `transmute`, `union`, or raw pointers leads to compile-time undefined behavior
|
||||
|
||||
error: pointers cannot be cast to integers during const eval
|
||||
--> $DIR/min_const_fn.rs:96:42
|
||||
--> $DIR/min_const_fn.rs:95:42
|
||||
|
|
||||
LL | const fn foo30_2(x: *mut u32) -> usize { x as usize }
|
||||
| ^^^^^^^^^^
|
||||
|
@ -192,7 +174,7 @@ LL | const fn foo30_2(x: *mut u32) -> usize { x as usize }
|
|||
= note: avoiding this restriction via `transmute`, `union`, or raw pointers leads to compile-time undefined behavior
|
||||
|
||||
error: pointers cannot be cast to integers during const eval
|
||||
--> $DIR/min_const_fn.rs:98:63
|
||||
--> $DIR/min_const_fn.rs:97:63
|
||||
|
|
||||
LL | const fn foo30_2_with_unsafe(x: *mut u32) -> usize { unsafe { x as usize } }
|
||||
| ^^^^^^^^^^
|
||||
|
@ -201,7 +183,7 @@ LL | const fn foo30_2_with_unsafe(x: *mut u32) -> usize { unsafe { x as usize }
|
|||
= note: avoiding this restriction via `transmute`, `union`, or raw pointers leads to compile-time undefined behavior
|
||||
|
||||
error[E0658]: mutable references are not allowed in constant functions
|
||||
--> $DIR/min_const_fn.rs:101:14
|
||||
--> $DIR/min_const_fn.rs:100:14
|
||||
|
|
||||
LL | const fn inc(x: &mut i32) { *x += 1 }
|
||||
| ^
|
||||
|
@ -209,155 +191,23 @@ LL | const fn inc(x: &mut i32) { *x += 1 }
|
|||
= note: see issue #57349 <https://github.com/rust-lang/rust/issues/57349> for more information
|
||||
= help: add `#![feature(const_mut_refs)]` to the crate attributes to enable
|
||||
|
||||
error[E0658]: trait bounds other than `Sized` on const fn parameters are unstable
|
||||
--> $DIR/min_const_fn.rs:110:6
|
||||
|
|
||||
LL | impl<T: std::fmt::Debug> Foo<T> {
|
||||
| ^
|
||||
LL |
|
||||
LL | const fn foo(&self) {}
|
||||
| ------------------- function declared as const here
|
||||
|
|
||||
= note: see issue #93706 <https://github.com/rust-lang/rust/issues/93706> for more information
|
||||
= help: add `#![feature(const_fn_trait_bound)]` to the crate attributes to enable
|
||||
|
||||
error[E0658]: trait bounds other than `Sized` on const fn parameters are unstable
|
||||
--> $DIR/min_const_fn.rs:115:6
|
||||
|
|
||||
LL | impl<T: std::fmt::Debug + Sized> Foo<T> {
|
||||
| ^
|
||||
LL |
|
||||
LL | const fn foo2(&self) {}
|
||||
| -------------------- function declared as const here
|
||||
|
|
||||
= note: see issue #93706 <https://github.com/rust-lang/rust/issues/93706> for more information
|
||||
= help: add `#![feature(const_fn_trait_bound)]` to the crate attributes to enable
|
||||
|
||||
error[E0658]: trait bounds other than `Sized` on const fn parameters are unstable
|
||||
--> $DIR/min_const_fn.rs:120:6
|
||||
|
|
||||
LL | impl<T: Sync + Sized> Foo<T> {
|
||||
| ^
|
||||
LL |
|
||||
LL | const fn foo3(&self) {}
|
||||
| -------------------- function declared as const here
|
||||
|
|
||||
= note: see issue #93706 <https://github.com/rust-lang/rust/issues/93706> for more information
|
||||
= help: add `#![feature(const_fn_trait_bound)]` to the crate attributes to enable
|
||||
|
||||
error[E0658]: trait bounds other than `Sized` on const fn parameters are unstable
|
||||
--> $DIR/min_const_fn.rs:126:34
|
||||
|
|
||||
LL | const fn no_apit2(_x: AlanTuring<impl std::fmt::Debug>) {}
|
||||
| ^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
= note: see issue #93706 <https://github.com/rust-lang/rust/issues/93706> for more information
|
||||
= help: add `#![feature(const_fn_trait_bound)]` to the crate attributes to enable
|
||||
|
||||
error[E0493]: destructors cannot be evaluated at compile-time
|
||||
--> $DIR/min_const_fn.rs:126:19
|
||||
--> $DIR/min_const_fn.rs:122:19
|
||||
|
|
||||
LL | const fn no_apit2(_x: AlanTuring<impl std::fmt::Debug>) {}
|
||||
| ^^ - value is dropped here
|
||||
| |
|
||||
| constant functions cannot evaluate destructors
|
||||
|
||||
error[E0658]: trait bounds other than `Sized` on const fn parameters are unstable
|
||||
--> $DIR/min_const_fn.rs:129:22
|
||||
|
|
||||
LL | const fn no_apit(_x: impl std::fmt::Debug) {}
|
||||
| ^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
= note: see issue #93706 <https://github.com/rust-lang/rust/issues/93706> for more information
|
||||
= help: add `#![feature(const_fn_trait_bound)]` to the crate attributes to enable
|
||||
|
||||
error[E0493]: destructors cannot be evaluated at compile-time
|
||||
--> $DIR/min_const_fn.rs:129:18
|
||||
--> $DIR/min_const_fn.rs:124:18
|
||||
|
|
||||
LL | const fn no_apit(_x: impl std::fmt::Debug) {}
|
||||
| ^^ - value is dropped here
|
||||
| |
|
||||
| constant functions cannot evaluate destructors
|
||||
|
||||
error[E0658]: trait objects in const fn are unstable
|
||||
--> $DIR/min_const_fn.rs:132:23
|
||||
|
|
||||
LL | const fn no_dyn_trait(_x: &dyn std::fmt::Debug) {}
|
||||
| ^^
|
||||
|
|
||||
= note: see issue #93706 <https://github.com/rust-lang/rust/issues/93706> for more information
|
||||
= help: add `#![feature(const_fn_trait_bound)]` to the crate attributes to enable
|
||||
|
||||
error[E0658]: trait objects in const fn are unstable
|
||||
--> $DIR/min_const_fn.rs:134:32
|
||||
|
|
||||
LL | const fn no_dyn_trait_ret() -> &'static dyn std::fmt::Debug { &() }
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
= note: see issue #93706 <https://github.com/rust-lang/rust/issues/93706> for more information
|
||||
= help: add `#![feature(const_fn_trait_bound)]` to the crate attributes to enable
|
||||
|
||||
error[E0658]: trait objects in const fn are unstable
|
||||
--> $DIR/min_const_fn.rs:139:41
|
||||
|
|
||||
LL | const fn really_no_traits_i_mean_it() { (&() as &dyn std::fmt::Debug, ()).1 }
|
||||
| ------------------------------------- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
| |
|
||||
| function declared as const here
|
||||
|
|
||||
= note: see issue #93706 <https://github.com/rust-lang/rust/issues/93706> for more information
|
||||
= help: add `#![feature(const_fn_trait_bound)]` to the crate attributes to enable
|
||||
|
||||
error[E0658]: trait objects in const fn are unstable
|
||||
--> $DIR/min_const_fn.rs:139:42
|
||||
|
|
||||
LL | const fn really_no_traits_i_mean_it() { (&() as &dyn std::fmt::Debug, ()).1 }
|
||||
| ------------------------------------- ^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
| |
|
||||
| function declared as const here
|
||||
|
|
||||
= note: see issue #93706 <https://github.com/rust-lang/rust/issues/93706> for more information
|
||||
= help: add `#![feature(const_fn_trait_bound)]` to the crate attributes to enable
|
||||
|
||||
error[E0658]: trait objects in const fn are unstable
|
||||
--> $DIR/min_const_fn.rs:139:42
|
||||
|
|
||||
LL | const fn really_no_traits_i_mean_it() { (&() as &dyn std::fmt::Debug, ()).1 }
|
||||
| ------------------------------------- ^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
| |
|
||||
| function declared as const here
|
||||
|
|
||||
= note: see issue #93706 <https://github.com/rust-lang/rust/issues/93706> for more information
|
||||
= help: add `#![feature(const_fn_trait_bound)]` to the crate attributes to enable
|
||||
|
||||
error[E0658]: function pointers cannot appear in constant functions
|
||||
--> $DIR/min_const_fn.rs:144:21
|
||||
|
|
||||
LL | const fn no_fn_ptrs(_x: fn()) {}
|
||||
| ^^
|
||||
|
|
||||
= note: see issue #57563 <https://github.com/rust-lang/rust/issues/57563> for more information
|
||||
= help: add `#![feature(const_fn_fn_ptr_basics)]` to the crate attributes to enable
|
||||
|
||||
error[E0658]: function pointers cannot appear in constant functions
|
||||
--> $DIR/min_const_fn.rs:146:27
|
||||
|
|
||||
LL | const fn no_fn_ptrs2() -> fn() { fn foo() {} foo }
|
||||
| ^^^^
|
||||
|
|
||||
= note: see issue #57563 <https://github.com/rust-lang/rust/issues/57563> for more information
|
||||
= help: add `#![feature(const_fn_fn_ptr_basics)]` to the crate attributes to enable
|
||||
|
||||
error[E0658]: function pointer casts are not allowed in constant functions
|
||||
--> $DIR/min_const_fn.rs:146:46
|
||||
|
|
||||
LL | const fn no_fn_ptrs2() -> fn() { fn foo() {} foo }
|
||||
| ^^^
|
||||
|
|
||||
= note: see issue #57563 <https://github.com/rust-lang/rust/issues/57563> for more information
|
||||
= help: add `#![feature(const_fn_fn_ptr_basics)]` to the crate attributes to enable
|
||||
|
||||
error: aborting due to 39 previous errors
|
||||
error: aborting due to 24 previous errors
|
||||
|
||||
Some errors have detailed explanations: E0013, E0493, E0658.
|
||||
For more information about an error, try `rustc --explain E0013`.
|
||||
|
|
|
@ -1,3 +1,5 @@
|
|||
// check-pass
|
||||
|
||||
struct HasDyn {
|
||||
field: &'static dyn std::fmt::Debug,
|
||||
}
|
||||
|
@ -7,9 +9,7 @@ struct Hide(HasDyn);
|
|||
const fn no_inner_dyn_trait(_x: Hide) {}
|
||||
const fn no_inner_dyn_trait2(x: Hide) {
|
||||
x.0.field;
|
||||
//~^ ERROR trait objects in const fn are unstable
|
||||
}
|
||||
const fn no_inner_dyn_trait_ret() -> Hide { Hide(HasDyn { field: &0 }) }
|
||||
//~^ ERROR trait objects in const fn are unstable
|
||||
|
||||
fn main() {}
|
||||
|
|
|
@ -1,25 +0,0 @@
|
|||
error[E0658]: trait objects in const fn are unstable
|
||||
--> $DIR/min_const_fn_dyn.rs:9:5
|
||||
|
|
||||
LL | const fn no_inner_dyn_trait2(x: Hide) {
|
||||
| ------------------------------------- function declared as const here
|
||||
LL | x.0.field;
|
||||
| ^^^^^^^^^
|
||||
|
|
||||
= note: see issue #93706 <https://github.com/rust-lang/rust/issues/93706> for more information
|
||||
= help: add `#![feature(const_fn_trait_bound)]` to the crate attributes to enable
|
||||
|
||||
error[E0658]: trait objects in const fn are unstable
|
||||
--> $DIR/min_const_fn_dyn.rs:12:66
|
||||
|
|
||||
LL | const fn no_inner_dyn_trait_ret() -> Hide { Hide(HasDyn { field: &0 }) }
|
||||
| ----------------------------------------- ^^
|
||||
| |
|
||||
| function declared as const here
|
||||
|
|
||||
= note: see issue #93706 <https://github.com/rust-lang/rust/issues/93706> for more information
|
||||
= help: add `#![feature(const_fn_trait_bound)]` to the crate attributes to enable
|
||||
|
||||
error: aborting due to 2 previous errors
|
||||
|
||||
For more information about this error, try `rustc --explain E0658`.
|
|
@ -1,19 +0,0 @@
|
|||
// gate-test-const_fn_fn_ptr_basics
|
||||
|
||||
struct HasPtr {
|
||||
field: fn(),
|
||||
}
|
||||
|
||||
struct Hide(HasPtr);
|
||||
|
||||
fn field() {}
|
||||
|
||||
const fn no_inner_dyn_trait(_x: Hide) {}
|
||||
const fn no_inner_dyn_trait2(x: Hide) {
|
||||
x.0.field;
|
||||
//~^ ERROR function pointer
|
||||
}
|
||||
const fn no_inner_dyn_trait_ret() -> Hide { Hide(HasPtr { field }) }
|
||||
//~^ ERROR function pointer
|
||||
|
||||
fn main() {}
|
|
@ -1,21 +0,0 @@
|
|||
error[E0658]: function pointers cannot appear in constant functions
|
||||
--> $DIR/min_const_fn_fn_ptr.rs:13:5
|
||||
|
|
||||
LL | x.0.field;
|
||||
| ^^^^^^^^^
|
||||
|
|
||||
= note: see issue #57563 <https://github.com/rust-lang/rust/issues/57563> for more information
|
||||
= help: add `#![feature(const_fn_fn_ptr_basics)]` to the crate attributes to enable
|
||||
|
||||
error[E0658]: function pointer casts are not allowed in constant functions
|
||||
--> $DIR/min_const_fn_fn_ptr.rs:16:59
|
||||
|
|
||||
LL | const fn no_inner_dyn_trait_ret() -> Hide { Hide(HasPtr { field }) }
|
||||
| ^^^^^
|
||||
|
|
||||
= note: see issue #57563 <https://github.com/rust-lang/rust/issues/57563> for more information
|
||||
= help: add `#![feature(const_fn_fn_ptr_basics)]` to the crate attributes to enable
|
||||
|
||||
error: aborting due to 2 previous errors
|
||||
|
||||
For more information about this error, try `rustc --explain E0658`.
|
|
@ -12,16 +12,6 @@ LL | static VAL: () = call_rust_fn(unsafe { std::mem::transmute(c_fn as extern "
|
|||
|
||||
warning: skipping const checks
|
||||
|
|
||||
help: skipping check for `const_fn_fn_ptr_basics` feature
|
||||
--> $DIR/abi-mismatch.rs:9:23
|
||||
|
|
||||
LL | const fn call_rust_fn(my_fn: extern "Rust" fn()) {
|
||||
| ^^^^^
|
||||
help: skipping check for `const_fn_fn_ptr_basics` feature
|
||||
--> $DIR/abi-mismatch.rs:10:5
|
||||
|
|
||||
LL | my_fn();
|
||||
| ^^^^^
|
||||
help: skipping check that does not even have a feature gate
|
||||
--> $DIR/abi-mismatch.rs:10:5
|
||||
|
|
||||
|
|
|
@ -5,7 +5,6 @@
|
|||
|
||||
#![stable(feature = "core", since = "1.6.0")]
|
||||
#![feature(staged_api)]
|
||||
#![feature(const_fn_trait_bound)]
|
||||
|
||||
enum Opt<T> {
|
||||
Some(T),
|
||||
|
|
|
@ -1,8 +1,10 @@
|
|||
// Regression test for issue #55825
|
||||
// Tests that we don't emit a spurious warning in NLL mode
|
||||
|
||||
// check-pass
|
||||
|
||||
#![feature(nll)]
|
||||
|
||||
const fn no_dyn_trait_ret() -> &'static dyn std::fmt::Debug { &() } //~ ERROR const
|
||||
const fn no_dyn_trait_ret() -> &'static dyn std::fmt::Debug { &() }
|
||||
|
||||
fn main() { }
|
||||
|
|
|
@ -1,12 +0,0 @@
|
|||
error[E0658]: trait objects in const fn are unstable
|
||||
--> $DIR/issue-55825-const-fn.rs:6:32
|
||||
|
|
||||
LL | const fn no_dyn_trait_ret() -> &'static dyn std::fmt::Debug { &() }
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
= note: see issue #93706 <https://github.com/rust-lang/rust/issues/93706> for more information
|
||||
= help: add `#![feature(const_fn_trait_bound)]` to the crate attributes to enable
|
||||
|
||||
error: aborting due to previous error
|
||||
|
||||
For more information about this error, try `rustc --explain E0658`.
|
|
@ -1,27 +1,10 @@
|
|||
warning: skipping const checks
|
||||
|
|
||||
help: skipping check for `const_fn_fn_ptr_basics` feature
|
||||
--> $DIR/caller-location-fnptr-rt-ctfe-equiv.rs:20:9
|
||||
|
|
||||
LL | let ptr: fn() -> L = attributed;
|
||||
| ^^^
|
||||
help: skipping check for `const_fn_fn_ptr_basics` feature
|
||||
--> $DIR/caller-location-fnptr-rt-ctfe-equiv.rs:21:5
|
||||
|
|
||||
LL | ptr()
|
||||
| ^^^
|
||||
help: skipping check for `const_fn_fn_ptr_basics` feature
|
||||
--> $DIR/caller-location-fnptr-rt-ctfe-equiv.rs:20:26
|
||||
|
|
||||
LL | let ptr: fn() -> L = attributed;
|
||||
| ^^^^^^^^^^
|
||||
help: skipping check that does not even have a feature gate
|
||||
--> $DIR/caller-location-fnptr-rt-ctfe-equiv.rs:21:5
|
||||
|
|
||||
LL | ptr()
|
||||
| ^^^^^
|
||||
|
||||
error: `-Zunleash-the-miri-inside-of-you` may not be used to circumvent feature gates, except when testing error paths in the CTFE engine
|
||||
|
||||
error: aborting due to previous error; 1 warning emitted
|
||||
warning: 1 warning emitted
|
||||
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
#![feature(const_fn_trait_bound)]
|
||||
#![feature(const_trait_impl)]
|
||||
|
||||
pub trait MyTrait {
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
// check-pass
|
||||
#![feature(const_fn_trait_bound)]
|
||||
#![feature(const_trait_impl)]
|
||||
|
||||
trait MyPartialEq {
|
||||
|
|
|
@ -3,7 +3,6 @@
|
|||
// check-pass
|
||||
|
||||
#![feature(const_trait_impl)]
|
||||
#![feature(const_fn_trait_bound)]
|
||||
|
||||
struct S;
|
||||
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
// check-pass
|
||||
|
||||
#![feature(const_trait_impl)]
|
||||
#![feature(const_fn_trait_bound)]
|
||||
|
||||
struct S;
|
||||
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
#![feature(const_fn_trait_bound)]
|
||||
#![feature(const_trait_impl)]
|
||||
|
||||
pub const fn equals_self<T: PartialEq>(t: &T) -> bool {
|
||||
|
|
|
@ -1,17 +1,17 @@
|
|||
error[E0277]: can't compare `T` with `T` in const contexts
|
||||
--> $DIR/call-generic-method-fail.rs:5:5
|
||||
--> $DIR/call-generic-method-fail.rs:4:5
|
||||
|
|
||||
LL | *t == *t
|
||||
| ^^^^^^^^ no implementation for `T == T`
|
||||
|
|
||||
note: the trait `PartialEq` is implemented for `T`, but that implementation is not `const`
|
||||
--> $DIR/call-generic-method-fail.rs:5:5
|
||||
--> $DIR/call-generic-method-fail.rs:4:5
|
||||
|
|
||||
LL | *t == *t
|
||||
| ^^^^^^^^
|
||||
|
||||
error[E0015]: cannot call non-const operator in constant functions
|
||||
--> $DIR/call-generic-method-fail.rs:5:5
|
||||
--> $DIR/call-generic-method-fail.rs:4:5
|
||||
|
|
||||
LL | *t == *t
|
||||
| ^^^^^^^^
|
||||
|
|
|
@ -1,7 +1,5 @@
|
|||
// check-pass
|
||||
|
||||
#![feature(const_fn_trait_bound)]
|
||||
|
||||
struct S;
|
||||
|
||||
impl PartialEq for S {
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
#![feature(const_trait_impl)]
|
||||
#![feature(const_fn_trait_bound)]
|
||||
|
||||
struct S;
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
error[E0277]: can't compare `S` with `S` in const contexts
|
||||
--> $DIR/call-generic-method-nonconst.rs:19:34
|
||||
--> $DIR/call-generic-method-nonconst.rs:18:34
|
||||
|
|
||||
LL | pub const EQ: bool = equals_self(&S);
|
||||
| ----------- ^^ no implementation for `S == S`
|
||||
|
@ -8,12 +8,12 @@ LL | pub const EQ: bool = equals_self(&S);
|
|||
|
|
||||
= help: the trait `~const PartialEq` is not implemented for `S`
|
||||
note: the trait `PartialEq` is implemented for `S`, but that implementation is not `const`
|
||||
--> $DIR/call-generic-method-nonconst.rs:19:34
|
||||
--> $DIR/call-generic-method-nonconst.rs:18:34
|
||||
|
|
||||
LL | pub const EQ: bool = equals_self(&S);
|
||||
| ^^
|
||||
note: required by a bound in `equals_self`
|
||||
--> $DIR/call-generic-method-nonconst.rs:12:25
|
||||
--> $DIR/call-generic-method-nonconst.rs:11:25
|
||||
|
|
||||
LL | const fn equals_self<T: ~const PartialEq>(t: &T) -> bool {
|
||||
| ^^^^^^^^^^^^^^^^ required by this bound in `equals_self`
|
||||
|
|
|
@ -3,7 +3,6 @@
|
|||
// check-pass
|
||||
|
||||
#![feature(const_trait_impl)]
|
||||
#![feature(const_fn_trait_bound)]
|
||||
|
||||
struct S;
|
||||
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
// run-pass
|
||||
|
||||
#![feature(const_trait_impl)]
|
||||
#![feature(const_fn_trait_bound)]
|
||||
|
||||
const fn answer_p1<F>(f: &F) -> u8
|
||||
where
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
#![feature(const_trait_impl)]
|
||||
#![feature(const_fn_trait_bound)] // FIXME is this needed?
|
||||
|
||||
trait ConstDefaultFn: Sized {
|
||||
fn b(self);
|
||||
|
|
|
@ -1,17 +1,17 @@
|
|||
error[E0277]: the trait bound `NonConstImpl: ~const ConstDefaultFn` is not satisfied
|
||||
--> $DIR/const-default-method-bodies.rs:25:18
|
||||
--> $DIR/const-default-method-bodies.rs:24:18
|
||||
|
|
||||
LL | NonConstImpl.a();
|
||||
| ^^^ the trait `~const ConstDefaultFn` is not implemented for `NonConstImpl`
|
||||
|
|
||||
note: the trait `ConstDefaultFn` is implemented for `NonConstImpl`, but that implementation is not `const`
|
||||
--> $DIR/const-default-method-bodies.rs:25:18
|
||||
--> $DIR/const-default-method-bodies.rs:24:18
|
||||
|
|
||||
LL | NonConstImpl.a();
|
||||
| ^^^
|
||||
|
||||
error[E0015]: cannot call non-const fn `<NonConstImpl as ConstDefaultFn>::a` in constant functions
|
||||
--> $DIR/const-default-method-bodies.rs:25:18
|
||||
--> $DIR/const-default-method-bodies.rs:24:18
|
||||
|
|
||||
LL | NonConstImpl.a();
|
||||
| ^^^
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
// check-pass
|
||||
|
||||
#![feature(const_trait_impl)]
|
||||
#![feature(const_fn_trait_bound)]
|
||||
#![feature(const_precise_live_drops)]
|
||||
|
||||
const fn foo<T, E>(res: Result<T, E>) -> Option<T> where E: ~const Drop {
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
error[E0277]: the trait bound `NonTrivialDrop: ~const Drop` is not satisfied
|
||||
--> $DIR/const-drop-fail.rs:44:5
|
||||
--> $DIR/const-drop-fail.rs:43:5
|
||||
|
|
||||
LL | const _: () = check($exp);
|
||||
| ----- required by a bound introduced by this call
|
||||
|
@ -8,7 +8,7 @@ LL | NonTrivialDrop,
|
|||
| ^^^^^^^^^^^^^^ expected an implementor of trait `~const Drop`
|
||||
|
|
||||
note: required by a bound in `check`
|
||||
--> $DIR/const-drop-fail.rs:35:19
|
||||
--> $DIR/const-drop-fail.rs:34:19
|
||||
|
|
||||
LL | const fn check<T: ~const Drop>(_: T) {}
|
||||
| ^^^^^^^^^^^ required by this bound in `check`
|
||||
|
@ -20,7 +20,7 @@ LL | &mut NonTrivialDrop,
|
|||
| ++++
|
||||
|
||||
error[E0277]: the trait bound `NonTrivialDrop: ~const Drop` is not satisfied in `ConstImplWithDropGlue`
|
||||
--> $DIR/const-drop-fail.rs:46:5
|
||||
--> $DIR/const-drop-fail.rs:45:5
|
||||
|
|
||||
LL | const _: () = check($exp);
|
||||
| ----- required by a bound introduced by this call
|
||||
|
@ -29,23 +29,23 @@ LL | ConstImplWithDropGlue(NonTrivialDrop),
|
|||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ within `ConstImplWithDropGlue`, the trait `~const Drop` is not implemented for `NonTrivialDrop`
|
||||
|
|
||||
note: the trait `Drop` is implemented for `NonTrivialDrop`, but that implementation is not `const`
|
||||
--> $DIR/const-drop-fail.rs:46:5
|
||||
--> $DIR/const-drop-fail.rs:45:5
|
||||
|
|
||||
LL | ConstImplWithDropGlue(NonTrivialDrop),
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
note: required because it appears within the type `ConstImplWithDropGlue`
|
||||
--> $DIR/const-drop-fail.rs:17:8
|
||||
--> $DIR/const-drop-fail.rs:16:8
|
||||
|
|
||||
LL | struct ConstImplWithDropGlue(NonTrivialDrop);
|
||||
| ^^^^^^^^^^^^^^^^^^^^^
|
||||
note: required by a bound in `check`
|
||||
--> $DIR/const-drop-fail.rs:35:19
|
||||
--> $DIR/const-drop-fail.rs:34:19
|
||||
|
|
||||
LL | const fn check<T: ~const Drop>(_: T) {}
|
||||
| ^^^^^^^^^^^ required by this bound in `check`
|
||||
|
||||
error[E0277]: the trait bound `ConstDropImplWithBounds<NonTrivialDrop>: ~const Drop` is not satisfied
|
||||
--> $DIR/const-drop-fail.rs:48:5
|
||||
--> $DIR/const-drop-fail.rs:47:5
|
||||
|
|
||||
LL | const _: () = check($exp);
|
||||
| ----- required by a bound introduced by this call
|
||||
|
@ -54,12 +54,12 @@ LL | ConstDropImplWithBounds::<NonTrivialDrop>(PhantomData),
|
|||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected an implementor of trait `~const Drop`
|
||||
|
|
||||
note: required because of the requirements on the impl of `~const Drop` for `ConstDropImplWithBounds<NonTrivialDrop>`
|
||||
--> $DIR/const-drop-fail.rs:29:25
|
||||
--> $DIR/const-drop-fail.rs:28:25
|
||||
|
|
||||
LL | impl<T: ~const A> const Drop for ConstDropImplWithBounds<T> {
|
||||
| ^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
note: required by a bound in `check`
|
||||
--> $DIR/const-drop-fail.rs:35:19
|
||||
--> $DIR/const-drop-fail.rs:34:19
|
||||
|
|
||||
LL | const fn check<T: ~const Drop>(_: T) {}
|
||||
| ^^^^^^^^^^^ required by this bound in `check`
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
// revisions: stock precise
|
||||
#![feature(const_trait_impl)]
|
||||
#![feature(const_mut_refs)]
|
||||
#![feature(const_fn_trait_bound)]
|
||||
#![cfg_attr(precise, feature(const_precise_live_drops))]
|
||||
|
||||
use std::marker::PhantomData;
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
error[E0277]: the trait bound `NonTrivialDrop: ~const Drop` is not satisfied
|
||||
--> $DIR/const-drop-fail.rs:44:5
|
||||
--> $DIR/const-drop-fail.rs:43:5
|
||||
|
|
||||
LL | const _: () = check($exp);
|
||||
| ----- required by a bound introduced by this call
|
||||
|
@ -8,7 +8,7 @@ LL | NonTrivialDrop,
|
|||
| ^^^^^^^^^^^^^^ expected an implementor of trait `~const Drop`
|
||||
|
|
||||
note: required by a bound in `check`
|
||||
--> $DIR/const-drop-fail.rs:35:19
|
||||
--> $DIR/const-drop-fail.rs:34:19
|
||||
|
|
||||
LL | const fn check<T: ~const Drop>(_: T) {}
|
||||
| ^^^^^^^^^^^ required by this bound in `check`
|
||||
|
@ -20,7 +20,7 @@ LL | &mut NonTrivialDrop,
|
|||
| ++++
|
||||
|
||||
error[E0277]: the trait bound `NonTrivialDrop: ~const Drop` is not satisfied in `ConstImplWithDropGlue`
|
||||
--> $DIR/const-drop-fail.rs:46:5
|
||||
--> $DIR/const-drop-fail.rs:45:5
|
||||
|
|
||||
LL | const _: () = check($exp);
|
||||
| ----- required by a bound introduced by this call
|
||||
|
@ -29,23 +29,23 @@ LL | ConstImplWithDropGlue(NonTrivialDrop),
|
|||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ within `ConstImplWithDropGlue`, the trait `~const Drop` is not implemented for `NonTrivialDrop`
|
||||
|
|
||||
note: the trait `Drop` is implemented for `NonTrivialDrop`, but that implementation is not `const`
|
||||
--> $DIR/const-drop-fail.rs:46:5
|
||||
--> $DIR/const-drop-fail.rs:45:5
|
||||
|
|
||||
LL | ConstImplWithDropGlue(NonTrivialDrop),
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
note: required because it appears within the type `ConstImplWithDropGlue`
|
||||
--> $DIR/const-drop-fail.rs:17:8
|
||||
--> $DIR/const-drop-fail.rs:16:8
|
||||
|
|
||||
LL | struct ConstImplWithDropGlue(NonTrivialDrop);
|
||||
| ^^^^^^^^^^^^^^^^^^^^^
|
||||
note: required by a bound in `check`
|
||||
--> $DIR/const-drop-fail.rs:35:19
|
||||
--> $DIR/const-drop-fail.rs:34:19
|
||||
|
|
||||
LL | const fn check<T: ~const Drop>(_: T) {}
|
||||
| ^^^^^^^^^^^ required by this bound in `check`
|
||||
|
||||
error[E0277]: the trait bound `ConstDropImplWithBounds<NonTrivialDrop>: ~const Drop` is not satisfied
|
||||
--> $DIR/const-drop-fail.rs:48:5
|
||||
--> $DIR/const-drop-fail.rs:47:5
|
||||
|
|
||||
LL | const _: () = check($exp);
|
||||
| ----- required by a bound introduced by this call
|
||||
|
@ -54,12 +54,12 @@ LL | ConstDropImplWithBounds::<NonTrivialDrop>(PhantomData),
|
|||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected an implementor of trait `~const Drop`
|
||||
|
|
||||
note: required because of the requirements on the impl of `~const Drop` for `ConstDropImplWithBounds<NonTrivialDrop>`
|
||||
--> $DIR/const-drop-fail.rs:29:25
|
||||
--> $DIR/const-drop-fail.rs:28:25
|
||||
|
|
||||
LL | impl<T: ~const A> const Drop for ConstDropImplWithBounds<T> {
|
||||
| ^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
note: required by a bound in `check`
|
||||
--> $DIR/const-drop-fail.rs:35:19
|
||||
--> $DIR/const-drop-fail.rs:34:19
|
||||
|
|
||||
LL | const fn check<T: ~const Drop>(_: T) {}
|
||||
| ^^^^^^^^^^^ required by this bound in `check`
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
// run-pass
|
||||
// revisions: stock precise
|
||||
#![feature(const_trait_impl)]
|
||||
#![feature(const_fn_trait_bound)]
|
||||
#![feature(const_mut_refs)]
|
||||
#![feature(never_type)]
|
||||
#![cfg_attr(precise, feature(const_precise_live_drops))]
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
#![feature(const_fn_trait_bound)]
|
||||
#![feature(const_trait_impl)]
|
||||
|
||||
trait Tr {}
|
||||
|
|
|
@ -1,16 +1,16 @@
|
|||
error[E0277]: the trait bound `(): ~const Tr` is not satisfied
|
||||
--> $DIR/default-method-body-is-const-body-checking.rs:12:15
|
||||
--> $DIR/default-method-body-is-const-body-checking.rs:11:15
|
||||
|
|
||||
LL | foo::<()>();
|
||||
| ^^ the trait `~const Tr` is not implemented for `()`
|
||||
|
|
||||
note: the trait `Tr` is implemented for `()`, but that implementation is not `const`
|
||||
--> $DIR/default-method-body-is-const-body-checking.rs:12:15
|
||||
--> $DIR/default-method-body-is-const-body-checking.rs:11:15
|
||||
|
|
||||
LL | foo::<()>();
|
||||
| ^^
|
||||
note: required by a bound in `foo`
|
||||
--> $DIR/default-method-body-is-const-body-checking.rs:7:28
|
||||
--> $DIR/default-method-body-is-const-body-checking.rs:6:28
|
||||
|
|
||||
LL | const fn foo<T>() where T: ~const Tr {}
|
||||
| ^^^^^^^^^ required by this bound in `foo`
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
#![feature(const_fn_trait_bound)]
|
||||
#![feature(const_trait_impl)]
|
||||
|
||||
pub trait Tr {
|
||||
|
|
|
@ -1,17 +1,17 @@
|
|||
error[E0277]: the trait bound `(): ~const Tr` is not satisfied
|
||||
--> $DIR/default-method-body-is-const-same-trait-ck.rs:10:12
|
||||
--> $DIR/default-method-body-is-const-same-trait-ck.rs:9:12
|
||||
|
|
||||
LL | ().a()
|
||||
| ^^^ the trait `~const Tr` is not implemented for `()`
|
||||
|
|
||||
note: the trait `Tr` is implemented for `()`, but that implementation is not `const`
|
||||
--> $DIR/default-method-body-is-const-same-trait-ck.rs:10:12
|
||||
--> $DIR/default-method-body-is-const-same-trait-ck.rs:9:12
|
||||
|
|
||||
LL | ().a()
|
||||
| ^^^
|
||||
|
||||
error[E0015]: cannot call non-const fn `<() as Tr>::a` in constant functions
|
||||
--> $DIR/default-method-body-is-const-same-trait-ck.rs:10:12
|
||||
--> $DIR/default-method-body-is-const-same-trait-ck.rs:9:12
|
||||
|
|
||||
LL | ().a()
|
||||
| ^^^
|
||||
|
|
|
@ -7,7 +7,6 @@
|
|||
|
||||
#![feature(staged_api)]
|
||||
#![feature(const_trait_impl)]
|
||||
#![feature(const_fn_trait_bound)]
|
||||
#![stable(since = "1", feature = "foo")]
|
||||
|
||||
trait Tr {
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
// run-pass
|
||||
|
||||
#![feature(const_trait_impl)]
|
||||
#![feature(const_fn_trait_bound)]
|
||||
|
||||
use std::marker::PhantomData;
|
||||
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
#![feature(const_trait_impl)]
|
||||
#![feature(const_fn_trait_bound)]
|
||||
|
||||
trait Tr {
|
||||
fn req(&self);
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
error: const trait implementations may not use non-const default functions
|
||||
--> $DIR/impl-with-default-fn-fail.rs:18:1
|
||||
--> $DIR/impl-with-default-fn-fail.rs:17:1
|
||||
|
|
||||
LL | / impl const Tr for S {
|
||||
LL | | fn req(&self) {}
|
||||
|
@ -9,7 +9,7 @@ LL | | }
|
|||
= note: `prov` not implemented
|
||||
|
||||
error: const trait implementations may not use non-const default functions
|
||||
--> $DIR/impl-with-default-fn-fail.rs:28:1
|
||||
--> $DIR/impl-with-default-fn-fail.rs:27:1
|
||||
|
|
||||
LL | / impl const Tr for u32 {
|
||||
LL | | fn req(&self) {}
|
||||
|
@ -20,7 +20,7 @@ LL | | }
|
|||
= note: `prov` not implemented
|
||||
|
||||
error[E0046]: not all trait items implemented, missing: `req`
|
||||
--> $DIR/impl-with-default-fn-fail.rs:22:1
|
||||
--> $DIR/impl-with-default-fn-fail.rs:21:1
|
||||
|
|
||||
LL | fn req(&self);
|
||||
| -------------- `req` from trait
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
// check-pass
|
||||
|
||||
#![feature(const_trait_impl)]
|
||||
#![feature(const_fn_trait_bound)]
|
||||
|
||||
trait Tr {
|
||||
fn req(&self);
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
// check-pass
|
||||
#![feature(const_trait_impl)]
|
||||
#![feature(const_fn_trait_bound)]
|
||||
|
||||
struct S;
|
||||
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
#![feature(const_fn_trait_bound)]
|
||||
#![feature(const_trait_impl)]
|
||||
|
||||
pub trait A {
|
||||
|
|
|
@ -1,17 +1,17 @@
|
|||
error[E0277]: the trait bound `T: ~const A` is not satisfied
|
||||
--> $DIR/issue-88155.rs:9:5
|
||||
--> $DIR/issue-88155.rs:8:5
|
||||
|
|
||||
LL | T::assoc()
|
||||
| ^^^^^^^^^^ the trait `~const A` is not implemented for `T`
|
||||
|
|
||||
note: the trait `A` is implemented for `T`, but that implementation is not `const`
|
||||
--> $DIR/issue-88155.rs:9:5
|
||||
--> $DIR/issue-88155.rs:8:5
|
||||
|
|
||||
LL | T::assoc()
|
||||
| ^^^^^^^^^^
|
||||
|
||||
error[E0015]: cannot call non-const fn `<T as A>::assoc` in constant functions
|
||||
--> $DIR/issue-88155.rs:9:5
|
||||
--> $DIR/issue-88155.rs:8:5
|
||||
|
|
||||
LL | T::assoc()
|
||||
| ^^^^^^^^^^
|
||||
|
|
|
@ -10,7 +10,6 @@
|
|||
// check-pass
|
||||
|
||||
#![feature(const_trait_impl)]
|
||||
#![feature(const_fn_trait_bound)]
|
||||
|
||||
pub trait Tr {}
|
||||
|
||||
|
|
|
@ -2,7 +2,6 @@
|
|||
//
|
||||
// check-pass
|
||||
|
||||
#![feature(const_fn_trait_bound)]
|
||||
#![feature(const_trait_impl)]
|
||||
|
||||
pub trait Super {}
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
// check-pass
|
||||
|
||||
#![feature(const_trait_impl)]
|
||||
#![feature(const_fn_trait_bound)]
|
||||
|
||||
trait Convert<T> {
|
||||
fn to(self) -> T;
|
||||
|
|
|
@ -2,7 +2,6 @@
|
|||
|
||||
#![feature(staged_api)]
|
||||
#![feature(const_trait_impl)]
|
||||
#![feature(const_fn_trait_bound)]
|
||||
#![feature(const_t_try)]
|
||||
#![feature(const_try)]
|
||||
#![feature(try_trait_v2)]
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
// run-pass
|
||||
|
||||
#![feature(const_trait_impl)]
|
||||
#![feature(const_fn_trait_bound)]
|
||||
|
||||
trait Bar {
|
||||
fn bar() -> u8;
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
// check-pass
|
||||
|
||||
#![feature(const_trait_impl)]
|
||||
#![feature(const_fn_trait_bound)]
|
||||
|
||||
trait Foo {
|
||||
fn bar() where Self: ~const Foo;
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
#![feature(const_fn_trait_bound)]
|
||||
#![feature(const_trait_impl)]
|
||||
|
||||
trait Bar {}
|
||||
|
|
|
@ -1,16 +1,16 @@
|
|||
error[E0277]: the trait bound `T: ~const Bar` is not satisfied
|
||||
--> $DIR/trait-where-clause.rs:14:5
|
||||
--> $DIR/trait-where-clause.rs:13:5
|
||||
|
|
||||
LL | T::b();
|
||||
| ^^^^ the trait `~const Bar` is not implemented for `T`
|
||||
|
|
||||
note: the trait `Bar` is implemented for `T`, but that implementation is not `const`
|
||||
--> $DIR/trait-where-clause.rs:14:5
|
||||
--> $DIR/trait-where-clause.rs:13:5
|
||||
|
|
||||
LL | T::b();
|
||||
| ^^^^
|
||||
note: required by a bound in `Foo::b`
|
||||
--> $DIR/trait-where-clause.rs:8:24
|
||||
--> $DIR/trait-where-clause.rs:7:24
|
||||
|
|
||||
LL | fn b() where Self: ~const Bar;
|
||||
| ^^^^^^^^^^ required by this bound in `Foo::b`
|
||||
|
@ -20,18 +20,18 @@ LL | const fn test1<T: ~const Foo + Bar + ~const Bar>() {
|
|||
| ++++++++++++
|
||||
|
||||
error[E0277]: the trait bound `T: ~const Bar` is not satisfied
|
||||
--> $DIR/trait-where-clause.rs:16:5
|
||||
--> $DIR/trait-where-clause.rs:15:5
|
||||
|
|
||||
LL | T::c::<T>();
|
||||
| ^^^^^^^^^ the trait `~const Bar` is not implemented for `T`
|
||||
|
|
||||
note: the trait `Bar` is implemented for `T`, but that implementation is not `const`
|
||||
--> $DIR/trait-where-clause.rs:16:5
|
||||
--> $DIR/trait-where-clause.rs:15:5
|
||||
|
|
||||
LL | T::c::<T>();
|
||||
| ^^^^^^^^^
|
||||
note: required by a bound in `Foo::c`
|
||||
--> $DIR/trait-where-clause.rs:9:13
|
||||
--> $DIR/trait-where-clause.rs:8:13
|
||||
|
|
||||
LL | fn c<T: ~const Bar>();
|
||||
| ^^^^^^^^^^ required by this bound in `Foo::c`
|
||||
|
@ -41,13 +41,13 @@ LL | const fn test1<T: ~const Foo + Bar + ~const Bar>() {
|
|||
| ++++++++++++
|
||||
|
||||
error[E0277]: the trait bound `T: Bar` is not satisfied
|
||||
--> $DIR/trait-where-clause.rs:28:5
|
||||
--> $DIR/trait-where-clause.rs:27:5
|
||||
|
|
||||
LL | T::b();
|
||||
| ^^^^ the trait `Bar` is not implemented for `T`
|
||||
|
|
||||
note: required by a bound in `Foo::b`
|
||||
--> $DIR/trait-where-clause.rs:8:24
|
||||
--> $DIR/trait-where-clause.rs:7:24
|
||||
|
|
||||
LL | fn b() where Self: ~const Bar;
|
||||
| ^^^^^^^^^^ required by this bound in `Foo::b`
|
||||
|
@ -57,13 +57,13 @@ LL | fn test3<T: Foo + Bar>() {
|
|||
| +++++
|
||||
|
||||
error[E0277]: the trait bound `T: Bar` is not satisfied
|
||||
--> $DIR/trait-where-clause.rs:30:5
|
||||
--> $DIR/trait-where-clause.rs:29:5
|
||||
|
|
||||
LL | T::c::<T>();
|
||||
| ^^^^^^^^^ the trait `Bar` is not implemented for `T`
|
||||
|
|
||||
note: required by a bound in `Foo::c`
|
||||
--> $DIR/trait-where-clause.rs:9:13
|
||||
--> $DIR/trait-where-clause.rs:8:13
|
||||
|
|
||||
LL | fn c<T: ~const Bar>();
|
||||
| ^^^^^^^^^^ required by this bound in `Foo::c`
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
#![feature(const_impl_trait, const_fn_fn_ptr_basics, rustc_attrs)]
|
||||
#![feature(const_impl_trait, rustc_attrs)]
|
||||
#![feature(type_alias_impl_trait)]
|
||||
|
||||
type Foo = impl Fn() -> usize;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue