Rename rustc_contract to contract

This has now been approved as a language feature and no longer needs
a `rustc_` prefix.

Also change the `contracts` feature to be marked as incomplete and
`contracts_internals` as internal.
This commit is contained in:
Celina G. Val 2025-01-30 17:06:09 -08:00
parent 2c4923e6bc
commit ddbf54b67d
65 changed files with 522 additions and 165 deletions

View File

@ -548,8 +548,8 @@ pub fn check_crate(krate: &ast::Crate, sess: &Session, features: &Features) {
gate_all!(pin_ergonomics, "pinned reference syntax is experimental"); gate_all!(pin_ergonomics, "pinned reference syntax is experimental");
gate_all!(unsafe_fields, "`unsafe` fields are experimental"); gate_all!(unsafe_fields, "`unsafe` fields are experimental");
gate_all!(unsafe_binders, "unsafe binder types are experimental"); gate_all!(unsafe_binders, "unsafe binder types are experimental");
gate_all!(rustc_contracts, "contracts are experimental"); gate_all!(contracts, "contracts are incomplete");
gate_all!(rustc_contracts_internals, "contract internal machinery is for internal use only"); gate_all!(contracts_internals, "contract internal machinery is for internal use only");
if !visitor.features.never_patterns() { if !visitor.features.never_patterns() {
if let Some(spans) = spans.get(&sym::never_patterns) { if let Some(spans) = spans.get(&sym::never_patterns) {

View File

@ -123,7 +123,7 @@ fn expand_contract_clause(
// Record the span as a contract attribute expansion. // Record the span as a contract attribute expansion.
// This is used later to stop users from using the extended syntax directly // This is used later to stop users from using the extended syntax directly
// which is gated via `rustc_contracts_internals`. // which is gated via `contracts_internals`.
ecx.psess().contract_attribute_spans.push(attr_span); ecx.psess().contract_attribute_spans.push(attr_span);
Ok(new_tts) Ok(new_tts)
@ -137,7 +137,7 @@ fn expand_requires_tts(
) -> Result<TokenStream, ErrorGuaranteed> { ) -> Result<TokenStream, ErrorGuaranteed> {
expand_contract_clause(_ecx, attr_span, annotated, |new_tts| { expand_contract_clause(_ecx, attr_span, annotated, |new_tts| {
new_tts.push_tree(TokenTree::Token( new_tts.push_tree(TokenTree::Token(
token::Token::from_ast_ident(Ident::new(kw::RustcContractRequires, attr_span)), token::Token::from_ast_ident(Ident::new(kw::ContractRequires, attr_span)),
Spacing::Joint, Spacing::Joint,
)); ));
new_tts.push_tree(TokenTree::Token( new_tts.push_tree(TokenTree::Token(
@ -162,7 +162,7 @@ fn expand_ensures_tts(
) -> Result<TokenStream, ErrorGuaranteed> { ) -> Result<TokenStream, ErrorGuaranteed> {
expand_contract_clause(_ecx, attr_span, annotated, |new_tts| { expand_contract_clause(_ecx, attr_span, annotated, |new_tts| {
new_tts.push_tree(TokenTree::Token( new_tts.push_tree(TokenTree::Token(
token::Token::from_ast_ident(Ident::new(kw::RustcContractEnsures, attr_span)), token::Token::from_ast_ident(Ident::new(kw::ContractEnsures, attr_span)),
Spacing::Joint, Spacing::Joint,
)); ));
new_tts.push_tree(TokenTree::Delimited( new_tts.push_tree(TokenTree::Delimited(

View File

@ -404,7 +404,7 @@ declare_features! (
/// Allows the use of `#[cfg(<true/false>)]`. /// Allows the use of `#[cfg(<true/false>)]`.
(unstable, cfg_boolean_literals, "1.83.0", Some(131204)), (unstable, cfg_boolean_literals, "1.83.0", Some(131204)),
/// Allows the use of `#[cfg(contract_checks)` to check if contract checks are enabled. /// Allows the use of `#[cfg(contract_checks)` to check if contract checks are enabled.
(unstable, cfg_contract_checks, "CURRENT_RUSTC_VERSION", Some(133866)), (unstable, cfg_contract_checks, "CURRENT_RUSTC_VERSION", Some(128044)),
/// Allows the use of `#[cfg(overflow_checks)` to check if integer overflow behaviour. /// Allows the use of `#[cfg(overflow_checks)` to check if integer overflow behaviour.
(unstable, cfg_overflow_checks, "1.71.0", Some(111466)), (unstable, cfg_overflow_checks, "1.71.0", Some(111466)),
/// Provides the relocation model information as cfg entry /// Provides the relocation model information as cfg entry
@ -447,6 +447,10 @@ declare_features! (
(unstable, const_trait_impl, "1.42.0", Some(67792)), (unstable, const_trait_impl, "1.42.0", Some(67792)),
/// Allows the `?` operator in const contexts. /// Allows the `?` operator in const contexts.
(unstable, const_try, "1.56.0", Some(74935)), (unstable, const_try, "1.56.0", Some(74935)),
/// Allows use of contracts attributes.
(incomplete, contracts, "CURRENT_RUSTC_VERSION", Some(128044)),
/// Allows access to internal machinery used to implement contracts.
(internal, contracts_internals, "CURRENT_RUSTC_VERSION", Some(128044)),
/// Allows coroutines to be cloned. /// Allows coroutines to be cloned.
(unstable, coroutine_clone, "1.65.0", Some(95360)), (unstable, coroutine_clone, "1.65.0", Some(95360)),
/// Allows defining coroutines. /// Allows defining coroutines.
@ -608,10 +612,6 @@ declare_features! (
(unstable, return_type_notation, "1.70.0", Some(109417)), (unstable, return_type_notation, "1.70.0", Some(109417)),
/// Allows `extern "rust-cold"`. /// Allows `extern "rust-cold"`.
(unstable, rust_cold_cc, "1.63.0", Some(97544)), (unstable, rust_cold_cc, "1.63.0", Some(97544)),
/// Allows use of contracts attributes.
(unstable, rustc_contracts, "CURRENT_RUSTC_VERSION", Some(133866)),
/// Allows access to internal machinery used to implement contracts.
(unstable, rustc_contracts_internals, "CURRENT_RUSTC_VERSION", Some(133866)),
/// Allows use of x86 SHA512, SM3 and SM4 target-features and intrinsics /// Allows use of x86 SHA512, SM3 and SM4 target-features and intrinsics
(unstable, sha512_sm_x86, "1.82.0", Some(126624)), (unstable, sha512_sm_x86, "1.82.0", Some(126624)),
/// Allows the use of SIMD types in functions declared in `extern` blocks. /// Allows the use of SIMD types in functions declared in `extern` blocks.

View File

@ -297,29 +297,29 @@ impl<'a> Parser<'a> {
}) })
} }
/// Parses a rustc-internal fn contract /// Parses an experimental fn contract
/// (`rustc_contract_requires(WWW) rustc_contract_ensures(ZZZ)`) /// (`contract_requires(WWW) contract_ensures(ZZZ)`)
pub(super) fn parse_contract( pub(super) fn parse_contract(
&mut self, &mut self,
) -> PResult<'a, Option<rustc_ast::ptr::P<ast::FnContract>>> { ) -> PResult<'a, Option<rustc_ast::ptr::P<ast::FnContract>>> {
let gate = |span| { let gate = |span| {
if self.psess.contract_attribute_spans.contains(span) { if self.psess.contract_attribute_spans.contains(span) {
// span was generated via a builtin contracts attribute, so gate as end-user visible // span was generated via a builtin contracts attribute, so gate as end-user visible
self.psess.gated_spans.gate(sym::rustc_contracts, span); self.psess.gated_spans.gate(sym::contracts, span);
} else { } else {
// span was not generated via a builtin contracts attribute, so gate as internal machinery // span was not generated via a builtin contracts attribute, so gate as internal machinery
self.psess.gated_spans.gate(sym::rustc_contracts_internals, span); self.psess.gated_spans.gate(sym::contracts_internals, span);
} }
}; };
let requires = if self.eat_keyword_noexpect(exp!(RustcContractRequires).kw) { let requires = if self.eat_keyword_noexpect(exp!(ContractRequires).kw) {
let precond = self.parse_expr()?; let precond = self.parse_expr()?;
gate(precond.span); gate(precond.span);
Some(precond) Some(precond)
} else { } else {
None None
}; };
let ensures = if self.eat_keyword_noexpect(exp!(RustcContractEnsures).kw) { let ensures = if self.eat_keyword_noexpect(exp!(ContractEnsures).kw) {
let postcond = self.parse_expr()?; let postcond = self.parse_expr()?;
gate(postcond.span); gate(postcond.span);
Some(postcond) Some(postcond)

View File

@ -83,6 +83,8 @@ pub enum TokenType {
KwCatch, KwCatch,
KwConst, KwConst,
KwContinue, KwContinue,
KwContractEnsures,
KwContractRequires,
KwCrate, KwCrate,
KwDefault, KwDefault,
KwDyn, KwDyn,
@ -108,8 +110,6 @@ pub enum TokenType {
KwRef, KwRef,
KwReturn, KwReturn,
KwReuse, KwReuse,
KwRustcContractEnsures,
KwRustcContractRequires,
KwSafe, KwSafe,
KwSelfUpper, KwSelfUpper,
KwStatic, KwStatic,
@ -219,6 +219,8 @@ impl TokenType {
KwCatch, KwCatch,
KwConst, KwConst,
KwContinue, KwContinue,
KwContractEnsures,
KwContractRequires,
KwCrate, KwCrate,
KwDefault, KwDefault,
KwDyn, KwDyn,
@ -244,8 +246,6 @@ impl TokenType {
KwRef, KwRef,
KwReturn, KwReturn,
KwReuse, KwReuse,
KwRustcContractEnsures,
KwRustcContractRequires,
KwSafe, KwSafe,
KwSelfUpper, KwSelfUpper,
KwStatic, KwStatic,
@ -293,6 +293,8 @@ impl TokenType {
TokenType::KwCatch => Some(kw::Catch), TokenType::KwCatch => Some(kw::Catch),
TokenType::KwConst => Some(kw::Const), TokenType::KwConst => Some(kw::Const),
TokenType::KwContinue => Some(kw::Continue), TokenType::KwContinue => Some(kw::Continue),
TokenType::KwContractEnsures => Some(kw::ContractEnsures),
TokenType::KwContractRequires => Some(kw::ContractRequires),
TokenType::KwCrate => Some(kw::Crate), TokenType::KwCrate => Some(kw::Crate),
TokenType::KwDefault => Some(kw::Default), TokenType::KwDefault => Some(kw::Default),
TokenType::KwDyn => Some(kw::Dyn), TokenType::KwDyn => Some(kw::Dyn),
@ -318,8 +320,6 @@ impl TokenType {
TokenType::KwRef => Some(kw::Ref), TokenType::KwRef => Some(kw::Ref),
TokenType::KwReturn => Some(kw::Return), TokenType::KwReturn => Some(kw::Return),
TokenType::KwReuse => Some(kw::Reuse), TokenType::KwReuse => Some(kw::Reuse),
TokenType::KwRustcContractEnsures => Some(kw::RustcContractEnsures),
TokenType::KwRustcContractRequires => Some(kw::RustcContractRequires),
TokenType::KwSafe => Some(kw::Safe), TokenType::KwSafe => Some(kw::Safe),
TokenType::KwSelfUpper => Some(kw::SelfUpper), TokenType::KwSelfUpper => Some(kw::SelfUpper),
TokenType::KwStatic => Some(kw::Static), TokenType::KwStatic => Some(kw::Static),
@ -525,6 +525,8 @@ macro_rules! exp {
(Catch) => { exp!(@kw, Catch, KwCatch) }; (Catch) => { exp!(@kw, Catch, KwCatch) };
(Const) => { exp!(@kw, Const, KwConst) }; (Const) => { exp!(@kw, Const, KwConst) };
(Continue) => { exp!(@kw, Continue, KwContinue) }; (Continue) => { exp!(@kw, Continue, KwContinue) };
(ContractEnsures) => { exp!(@kw, ContractEnsures, KwContractEnsures) };
(ContractRequires) => { exp!(@kw, ContractRequires, KwContractRequires) };
(Crate) => { exp!(@kw, Crate, KwCrate) }; (Crate) => { exp!(@kw, Crate, KwCrate) };
(Default) => { exp!(@kw, Default, KwDefault) }; (Default) => { exp!(@kw, Default, KwDefault) };
(Dyn) => { exp!(@kw, Dyn, KwDyn) }; (Dyn) => { exp!(@kw, Dyn, KwDyn) };
@ -550,8 +552,6 @@ macro_rules! exp {
(Ref) => { exp!(@kw, Ref, KwRef) }; (Ref) => { exp!(@kw, Ref, KwRef) };
(Return) => { exp!(@kw, Return, KwReturn) }; (Return) => { exp!(@kw, Return, KwReturn) };
(Reuse) => { exp!(@kw, Reuse, KwReuse) }; (Reuse) => { exp!(@kw, Reuse, KwReuse) };
(RustcContractEnsures) => { exp!(@kw, RustcContractEnsures, KwRustcContractEnsures) };
(RustcContractRequires) => { exp!(@kw, RustcContractRequires, KwRustcContractRequires) };
(Safe) => { exp!(@kw, Safe, KwSafe) }; (Safe) => { exp!(@kw, Safe, KwSafe) };
(SelfUpper) => { exp!(@kw, SelfUpper, KwSelfUpper) }; (SelfUpper) => { exp!(@kw, SelfUpper, KwSelfUpper) };
(Static) => { exp!(@kw, Static, KwStatic) }; (Static) => { exp!(@kw, Static, KwStatic) };

View File

@ -118,8 +118,8 @@ symbols! {
MacroRules: "macro_rules", MacroRules: "macro_rules",
Raw: "raw", Raw: "raw",
Reuse: "reuse", Reuse: "reuse",
RustcContractEnsures: "rustc_contract_ensures", ContractEnsures: "contract_ensures",
RustcContractRequires: "rustc_contract_requires", ContractRequires: "contract_requires",
Safe: "safe", Safe: "safe",
Union: "union", Union: "union",
Yeet: "yeet", Yeet: "yeet",
@ -682,7 +682,9 @@ symbols! {
contract_check_ensures, contract_check_ensures,
contract_check_requires, contract_check_requires,
contract_checks, contract_checks,
contracts,
contracts_ensures, contracts_ensures,
contracts_internals,
contracts_requires, contracts_requires,
convert_identity, convert_identity,
copy, copy,
@ -1716,8 +1718,6 @@ symbols! {
rustc_const_stable, rustc_const_stable,
rustc_const_stable_indirect, rustc_const_stable_indirect,
rustc_const_unstable, rustc_const_unstable,
rustc_contracts,
rustc_contracts_internals,
rustc_conversion_suggestion, rustc_conversion_suggestion,
rustc_deallocator, rustc_deallocator,
rustc_def_path, rustc_def_path,

View File

@ -6,7 +6,7 @@ pub use crate::macros::builtin::{contracts_ensures as ensures, contracts_require
/// Emitted by rustc as a desugaring of `#[ensures(PRED)] fn foo() -> R { ... [return R;] ... }` /// Emitted by rustc as a desugaring of `#[ensures(PRED)] fn foo() -> R { ... [return R;] ... }`
/// into: `fn foo() { let _check = build_check_ensures(|ret| PRED) ... [return _check(R);] ... }` /// into: `fn foo() { let _check = build_check_ensures(|ret| PRED) ... [return _check(R);] ... }`
/// (including the implicit return of the tail expression, if any). /// (including the implicit return of the tail expression, if any).
#[unstable(feature = "rustc_contracts_internals", issue = "133866" /* compiler-team#759 */)] #[unstable(feature = "contracts_internals", issue = "128044" /* compiler-team#759 */)]
#[lang = "contract_build_check_ensures"] #[lang = "contract_build_check_ensures"]
#[track_caller] #[track_caller]
pub fn build_check_ensures<Ret, C>(cond: C) -> impl (Fn(Ret) -> Ret) + Copy pub fn build_check_ensures<Ret, C>(cond: C) -> impl (Fn(Ret) -> Ret) + Copy

View File

@ -4051,8 +4051,8 @@ pub const unsafe fn const_deallocate(_ptr: *mut u8, _size: usize, _align: usize)
/// checking is turned on, so that we can specify contracts in libstd /// checking is turned on, so that we can specify contracts in libstd
/// and let an end user opt into turning them on. /// and let an end user opt into turning them on.
#[cfg(not(bootstrap))] #[cfg(not(bootstrap))]
#[rustc_const_unstable(feature = "rustc_contracts_internals", issue = "133866" /* compiler-team#759 */)] #[rustc_const_unstable(feature = "contracts_internals", issue = "128044" /* compiler-team#759 */)]
#[unstable(feature = "rustc_contracts_internals", issue = "133866" /* compiler-team#759 */)] #[unstable(feature = "contracts_internals", issue = "128044" /* compiler-team#759 */)]
#[inline(always)] #[inline(always)]
#[rustc_intrinsic] #[rustc_intrinsic]
pub const fn contract_checks() -> bool { pub const fn contract_checks() -> bool {
@ -4067,7 +4067,7 @@ pub const fn contract_checks() -> bool {
/// By default, if `contract_checks` is enabled, this will panic with no unwind if the condition /// By default, if `contract_checks` is enabled, this will panic with no unwind if the condition
/// returns false. /// returns false.
#[cfg(not(bootstrap))] #[cfg(not(bootstrap))]
#[unstable(feature = "rustc_contracts_internals", issue = "133866" /* compiler-team#759 */)] #[unstable(feature = "contracts_internals", issue = "128044" /* compiler-team#759 */)]
#[lang = "contract_check_requires"] #[lang = "contract_check_requires"]
#[rustc_intrinsic] #[rustc_intrinsic]
pub fn contract_check_requires<C: Fn() -> bool>(cond: C) { pub fn contract_check_requires<C: Fn() -> bool>(cond: C) {
@ -4082,7 +4082,7 @@ pub fn contract_check_requires<C: Fn() -> bool>(cond: C) {
/// By default, if `contract_checks` is enabled, this will panic with no unwind if the condition /// By default, if `contract_checks` is enabled, this will panic with no unwind if the condition
/// returns false. /// returns false.
#[cfg(not(bootstrap))] #[cfg(not(bootstrap))]
#[unstable(feature = "rustc_contracts_internals", issue = "133866" /* compiler-team#759 */)] #[unstable(feature = "contracts_internals", issue = "128044" /* compiler-team#759 */)]
#[rustc_intrinsic] #[rustc_intrinsic]
pub fn contract_check_ensures<'a, Ret, C: Fn(&'a Ret) -> bool>(ret: &'a Ret, cond: C) { pub fn contract_check_ensures<'a, Ret, C: Fn(&'a Ret) -> bool>(ret: &'a Ret, cond: C) {
if contract_checks() && !cond(ret) { if contract_checks() && !cond(ret) {

View File

@ -248,7 +248,7 @@ pub mod autodiff {
} }
#[cfg(not(bootstrap))] #[cfg(not(bootstrap))]
#[unstable(feature = "rustc_contracts", issue = "133866")] #[unstable(feature = "contracts", issue = "128044")]
pub mod contracts; pub mod contracts;
#[unstable(feature = "cfg_match", issue = "115585")] #[unstable(feature = "cfg_match", issue = "115585")]

View File

@ -1783,8 +1783,8 @@ pub(crate) mod builtin {
/// eventually parsed as a unary closure expression that is /// eventually parsed as a unary closure expression that is
/// invoked on a reference to the return value. /// invoked on a reference to the return value.
#[cfg(not(bootstrap))] #[cfg(not(bootstrap))]
#[unstable(feature = "rustc_contracts", issue = "133866")] #[unstable(feature = "contracts", issue = "128044")]
#[allow_internal_unstable(rustc_contracts_internals)] #[allow_internal_unstable(contracts_internals)]
#[rustc_builtin_macro] #[rustc_builtin_macro]
pub macro contracts_ensures($item:item) { pub macro contracts_ensures($item:item) {
/* compiler built-in */ /* compiler built-in */
@ -1796,8 +1796,8 @@ pub(crate) mod builtin {
/// eventually parsed as an boolean expression with access to the /// eventually parsed as an boolean expression with access to the
/// function's formal parameters /// function's formal parameters
#[cfg(not(bootstrap))] #[cfg(not(bootstrap))]
#[unstable(feature = "rustc_contracts", issue = "133866")] #[unstable(feature = "contracts", issue = "128044")]
#[allow_internal_unstable(rustc_contracts_internals)] #[allow_internal_unstable(contracts_internals)]
#[rustc_builtin_macro] #[rustc_builtin_macro]
pub macro contracts_requires($item:item) { pub macro contracts_requires($item:item) {
/* compiler built-in */ /* compiler built-in */

View File

@ -1,7 +1,8 @@
//! Test for some of the existing limitations and the current error messages. //! Test for some of the existing limitations and the current error messages.
//! Some of these limitations may be removed in the future. //! Some of these limitations may be removed in the future.
#![feature(rustc_contracts)] #![feature(contracts)]
//~^ WARN the feature `contracts` is incomplete and may not be safe to use and/or cause compiler crashes [incomplete_features]
#![allow(dead_code)] #![allow(dead_code)]
/// Represent a 5-star system. /// Represent a 5-star system.

View File

@ -1,14 +1,23 @@
error: contract annotations is only supported in functions with bodies error: contract annotations is only supported in functions with bodies
--> $DIR/contract-annotation-limitations.rs:17:5 --> $DIR/contract-annotation-limitations.rs:18:5
| |
LL | #[core::contracts::ensures(|ret| ret.is_none_or(Stars::is_valid))] LL | #[core::contracts::ensures(|ret| ret.is_none_or(Stars::is_valid))]
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
error: contract annotations is only supported in functions with bodies error: contract annotations is only supported in functions with bodies
--> $DIR/contract-annotation-limitations.rs:21:5 --> $DIR/contract-annotation-limitations.rs:22:5
| |
LL | #[core::contracts::ensures(|ret| ret.is_none_or(Stars::is_valid))] LL | #[core::contracts::ensures(|ret| ret.is_none_or(Stars::is_valid))]
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
error: aborting due to 2 previous errors warning: the feature `contracts` is incomplete and may not be safe to use and/or cause compiler crashes
--> $DIR/contract-annotation-limitations.rs:4:12
|
LL | #![feature(contracts)]
| ^^^^^^^^^
|
= note: see issue #128044 <https://github.com/rust-lang/rust/issues/128044> for more information
= note: `#[warn(incomplete_features)]` on by default
error: aborting due to 2 previous errors; 1 warning emitted

View File

@ -0,0 +1,11 @@
warning: the feature `contracts` is incomplete and may not be safe to use and/or cause compiler crashes
--> $DIR/contract-attributes-generics.rs:19:12
|
LL | #![feature(contracts)]
| ^^^^^^^^^
|
= note: see issue #128044 <https://github.com/rust-lang/rust/issues/128044> for more information
= note: `#[warn(incomplete_features)]` on by default
warning: 1 warning emitted

View File

@ -0,0 +1,11 @@
warning: the feature `contracts` is incomplete and may not be safe to use and/or cause compiler crashes
--> $DIR/contract-attributes-generics.rs:19:12
|
LL | #![feature(contracts)]
| ^^^^^^^^^
|
= note: see issue #128044 <https://github.com/rust-lang/rust/issues/128044> for more information
= note: `#[warn(incomplete_features)]` on by default
warning: 1 warning emitted

View File

@ -0,0 +1,11 @@
warning: the feature `contracts` is incomplete and may not be safe to use and/or cause compiler crashes
--> $DIR/contract-attributes-generics.rs:19:12
|
LL | #![feature(contracts)]
| ^^^^^^^^^
|
= note: see issue #128044 <https://github.com/rust-lang/rust/issues/128044> for more information
= note: `#[warn(incomplete_features)]` on by default
warning: 1 warning emitted

View File

@ -0,0 +1,11 @@
warning: the feature `contracts` is incomplete and may not be safe to use and/or cause compiler crashes
--> $DIR/contract-attributes-generics.rs:19:12
|
LL | #![feature(contracts)]
| ^^^^^^^^^
|
= note: see issue #128044 <https://github.com/rust-lang/rust/issues/128044> for more information
= note: `#[warn(incomplete_features)]` on by default
warning: 1 warning emitted

View File

@ -16,7 +16,8 @@
//@ [chk_fail_post] compile-flags: -Zcontract-checks=yes //@ [chk_fail_post] compile-flags: -Zcontract-checks=yes
//@ [chk_const_fail] compile-flags: -Zcontract-checks=yes //@ [chk_const_fail] compile-flags: -Zcontract-checks=yes
#![feature(rustc_contracts)] #![feature(contracts)]
//~^ WARN the feature `contracts` is incomplete and may not be safe to use and/or cause compiler crashes [incomplete_features]
use std::ops::Sub; use std::ops::Sub;

View File

@ -0,0 +1,11 @@
warning: the feature `contracts` is incomplete and may not be safe to use and/or cause compiler crashes
--> $DIR/contract-attributes-generics.rs:19:12
|
LL | #![feature(contracts)]
| ^^^^^^^^^
|
= note: see issue #128044 <https://github.com/rust-lang/rust/issues/128044> for more information
= note: `#[warn(incomplete_features)]` on by default
warning: 1 warning emitted

View File

@ -0,0 +1,11 @@
warning: the feature `contracts` is incomplete and may not be safe to use and/or cause compiler crashes
--> $DIR/contract-attributes-nest.rs:19:12
|
LL | #![feature(contracts)]
| ^^^^^^^^^
|
= note: see issue #128044 <https://github.com/rust-lang/rust/issues/128044> for more information
= note: `#[warn(incomplete_features)]` on by default
warning: 1 warning emitted

View File

@ -0,0 +1,11 @@
warning: the feature `contracts` is incomplete and may not be safe to use and/or cause compiler crashes
--> $DIR/contract-attributes-nest.rs:19:12
|
LL | #![feature(contracts)]
| ^^^^^^^^^
|
= note: see issue #128044 <https://github.com/rust-lang/rust/issues/128044> for more information
= note: `#[warn(incomplete_features)]` on by default
warning: 1 warning emitted

View File

@ -0,0 +1,11 @@
warning: the feature `contracts` is incomplete and may not be safe to use and/or cause compiler crashes
--> $DIR/contract-attributes-nest.rs:19:12
|
LL | #![feature(contracts)]
| ^^^^^^^^^
|
= note: see issue #128044 <https://github.com/rust-lang/rust/issues/128044> for more information
= note: `#[warn(incomplete_features)]` on by default
warning: 1 warning emitted

View File

@ -16,7 +16,8 @@
//@ [chk_fail_pre] compile-flags: -Zcontract-checks=yes //@ [chk_fail_pre] compile-flags: -Zcontract-checks=yes
//@ [chk_fail_post] compile-flags: -Zcontract-checks=yes //@ [chk_fail_post] compile-flags: -Zcontract-checks=yes
#![feature(rustc_contracts)] #![feature(contracts)]
//~^ WARN the feature `contracts` is incomplete and may not be safe to use and/or cause compiler crashes [incomplete_features]
#[core::contracts::requires(x.baz > 0)] #[core::contracts::requires(x.baz > 0)]
#[core::contracts::ensures(|ret| *ret > 100)] #[core::contracts::ensures(|ret| *ret > 100)]

View File

@ -0,0 +1,11 @@
warning: the feature `contracts` is incomplete and may not be safe to use and/or cause compiler crashes
--> $DIR/contract-attributes-nest.rs:19:12
|
LL | #![feature(contracts)]
| ^^^^^^^^^
|
= note: see issue #128044 <https://github.com/rust-lang/rust/issues/128044> for more information
= note: `#[warn(incomplete_features)]` on by default
warning: 1 warning emitted

View File

@ -0,0 +1,11 @@
warning: the feature `contracts` is incomplete and may not be safe to use and/or cause compiler crashes
--> $DIR/contract-attributes-nest.rs:19:12
|
LL | #![feature(contracts)]
| ^^^^^^^^^
|
= note: see issue #128044 <https://github.com/rust-lang/rust/issues/128044> for more information
= note: `#[warn(incomplete_features)]` on by default
warning: 1 warning emitted

View File

@ -0,0 +1,11 @@
warning: the feature `contracts` is incomplete and may not be safe to use and/or cause compiler crashes
--> $DIR/contract-attributes-nest.rs:19:12
|
LL | #![feature(contracts)]
| ^^^^^^^^^
|
= note: see issue #128044 <https://github.com/rust-lang/rust/issues/128044> for more information
= note: `#[warn(incomplete_features)]` on by default
warning: 1 warning emitted

View File

@ -0,0 +1,11 @@
warning: the feature `contracts` is incomplete and may not be safe to use and/or cause compiler crashes
--> $DIR/contract-attributes-tail.rs:19:12
|
LL | #![feature(contracts)]
| ^^^^^^^^^
|
= note: see issue #128044 <https://github.com/rust-lang/rust/issues/128044> for more information
= note: `#[warn(incomplete_features)]` on by default
warning: 1 warning emitted

View File

@ -0,0 +1,11 @@
warning: the feature `contracts` is incomplete and may not be safe to use and/or cause compiler crashes
--> $DIR/contract-attributes-tail.rs:19:12
|
LL | #![feature(contracts)]
| ^^^^^^^^^
|
= note: see issue #128044 <https://github.com/rust-lang/rust/issues/128044> for more information
= note: `#[warn(incomplete_features)]` on by default
warning: 1 warning emitted

View File

@ -0,0 +1,11 @@
warning: the feature `contracts` is incomplete and may not be safe to use and/or cause compiler crashes
--> $DIR/contract-attributes-tail.rs:19:12
|
LL | #![feature(contracts)]
| ^^^^^^^^^
|
= note: see issue #128044 <https://github.com/rust-lang/rust/issues/128044> for more information
= note: `#[warn(incomplete_features)]` on by default
warning: 1 warning emitted

View File

@ -16,7 +16,8 @@
//@ [chk_fail_pre] compile-flags: -Zcontract-checks=yes //@ [chk_fail_pre] compile-flags: -Zcontract-checks=yes
//@ [chk_fail_post] compile-flags: -Zcontract-checks=yes //@ [chk_fail_post] compile-flags: -Zcontract-checks=yes
#![feature(rustc_contracts)] #![feature(contracts)]
//~^ WARN the feature `contracts` is incomplete and may not be safe to use and/or cause compiler crashes [incomplete_features]
#[core::contracts::requires(x.baz > 0)] #[core::contracts::requires(x.baz > 0)]
#[core::contracts::ensures(|ret| *ret > 100)] #[core::contracts::ensures(|ret| *ret > 100)]

View File

@ -0,0 +1,11 @@
warning: the feature `contracts` is incomplete and may not be safe to use and/or cause compiler crashes
--> $DIR/contract-attributes-tail.rs:19:12
|
LL | #![feature(contracts)]
| ^^^^^^^^^
|
= note: see issue #128044 <https://github.com/rust-lang/rust/issues/128044> for more information
= note: `#[warn(incomplete_features)]` on by default
warning: 1 warning emitted

View File

@ -0,0 +1,11 @@
warning: the feature `contracts` is incomplete and may not be safe to use and/or cause compiler crashes
--> $DIR/contract-attributes-tail.rs:19:12
|
LL | #![feature(contracts)]
| ^^^^^^^^^
|
= note: see issue #128044 <https://github.com/rust-lang/rust/issues/128044> for more information
= note: `#[warn(incomplete_features)]` on by default
warning: 1 warning emitted

View File

@ -0,0 +1,11 @@
warning: the feature `contracts` is incomplete and may not be safe to use and/or cause compiler crashes
--> $DIR/contract-attributes-tail.rs:19:12
|
LL | #![feature(contracts)]
| ^^^^^^^^^
|
= note: see issue #128044 <https://github.com/rust-lang/rust/issues/128044> for more information
= note: `#[warn(incomplete_features)]` on by default
warning: 1 warning emitted

View File

@ -1,7 +1,8 @@
//@ run-fail //@ run-fail
//@ compile-flags: -Zcontract-checks=yes //@ compile-flags: -Zcontract-checks=yes
#![feature(rustc_contracts)] #![feature(contracts)]
//~^ WARN the feature `contracts` is incomplete and may not be safe to use and/or cause compiler crashes [incomplete_features]
struct Baz { struct Baz {
baz: i32 baz: i32

View File

@ -0,0 +1,11 @@
warning: the feature `contracts` is incomplete and may not be safe to use and/or cause compiler crashes
--> $DIR/contract-captures-via-closure-copy.rs:4:12
|
LL | #![feature(contracts)]
| ^^^^^^^^^
|
= note: see issue #128044 <https://github.com/rust-lang/rust/issues/128044> for more information
= note: `#[warn(incomplete_features)]` on by default
warning: 1 warning emitted

View File

@ -1,6 +1,7 @@
//@ compile-flags: -Zcontract-checks=yes //@ compile-flags: -Zcontract-checks=yes
#![feature(rustc_contracts)] #![feature(contracts)]
//~^ WARN the feature `contracts` is incomplete and may not be safe to use and/or cause compiler crashes [incomplete_features]
struct Baz { struct Baz {
baz: i32 baz: i32

View File

@ -1,16 +1,25 @@
error[E0277]: the trait bound `Baz: std::marker::Copy` is not satisfied in `{closure@$DIR/contract-captures-via-closure-noncopy.rs:11:42: 11:57}` warning: the feature `contracts` is incomplete and may not be safe to use and/or cause compiler crashes
--> $DIR/contract-captures-via-closure-noncopy.rs:11:1 --> $DIR/contract-captures-via-closure-noncopy.rs:3:12
|
LL | #![feature(contracts)]
| ^^^^^^^^^
|
= note: see issue #128044 <https://github.com/rust-lang/rust/issues/128044> for more information
= note: `#[warn(incomplete_features)]` on by default
error[E0277]: the trait bound `Baz: std::marker::Copy` is not satisfied in `{closure@$DIR/contract-captures-via-closure-noncopy.rs:12:42: 12:57}`
--> $DIR/contract-captures-via-closure-noncopy.rs:12:1
| |
LL | #[core::contracts::ensures({let old = x; move |ret:&Baz| ret.baz == old.baz*2 })] LL | #[core::contracts::ensures({let old = x; move |ret:&Baz| ret.baz == old.baz*2 })]
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^------------------------------------^^^^ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^------------------------------------^^^^
| | | | | |
| | within this `{closure@$DIR/contract-captures-via-closure-noncopy.rs:11:42: 11:57}` | | within this `{closure@$DIR/contract-captures-via-closure-noncopy.rs:12:42: 12:57}`
| | this tail expression is of type `{closure@contract-captures-via-closure-noncopy.rs:11:42}` | | this tail expression is of type `{closure@contract-captures-via-closure-noncopy.rs:12:42}`
| unsatisfied trait bound | unsatisfied trait bound
| |
= help: within `{closure@$DIR/contract-captures-via-closure-noncopy.rs:11:42: 11:57}`, the trait `std::marker::Copy` is not implemented for `Baz` = help: within `{closure@$DIR/contract-captures-via-closure-noncopy.rs:12:42: 12:57}`, the trait `std::marker::Copy` is not implemented for `Baz`
note: required because it's used within this closure note: required because it's used within this closure
--> $DIR/contract-captures-via-closure-noncopy.rs:11:42 --> $DIR/contract-captures-via-closure-noncopy.rs:12:42
| |
LL | #[core::contracts::ensures({let old = x; move |ret:&Baz| ret.baz == old.baz*2 })] LL | #[core::contracts::ensures({let old = x; move |ret:&Baz| ret.baz == old.baz*2 })]
| ^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^
@ -22,6 +31,6 @@ LL + #[derive(Copy)]
LL | struct Baz { LL | struct Baz {
| |
error: aborting due to 1 previous error error: aborting due to 1 previous error; 1 warning emitted
For more information about this error, try `rustc --explain E0277`. For more information about this error, try `rustc --explain E0277`.

View File

@ -0,0 +1,11 @@
warning: the feature `contracts` is incomplete and may not be safe to use and/or cause compiler crashes
--> $DIR/contracts-ensures-early-fn-exit.rs:16:12
|
LL | #![feature(contracts)]
| ^^^^^^^^^
|
= note: see issue #128044 <https://github.com/rust-lang/rust/issues/128044> for more information
= note: `#[warn(incomplete_features)]` on by default
warning: 1 warning emitted

View File

@ -0,0 +1,11 @@
warning: the feature `contracts` is incomplete and may not be safe to use and/or cause compiler crashes
--> $DIR/contracts-ensures-early-fn-exit.rs:16:12
|
LL | #![feature(contracts)]
| ^^^^^^^^^
|
= note: see issue #128044 <https://github.com/rust-lang/rust/issues/128044> for more information
= note: `#[warn(incomplete_features)]` on by default
warning: 1 warning emitted

View File

@ -0,0 +1,11 @@
warning: the feature `contracts` is incomplete and may not be safe to use and/or cause compiler crashes
--> $DIR/contracts-ensures-early-fn-exit.rs:16:12
|
LL | #![feature(contracts)]
| ^^^^^^^^^
|
= note: see issue #128044 <https://github.com/rust-lang/rust/issues/128044> for more information
= note: `#[warn(incomplete_features)]` on by default
warning: 1 warning emitted

View File

@ -0,0 +1,11 @@
warning: the feature `contracts` is incomplete and may not be safe to use and/or cause compiler crashes
--> $DIR/contracts-ensures-early-fn-exit.rs:16:12
|
LL | #![feature(contracts)]
| ^^^^^^^^^
|
= note: see issue #128044 <https://github.com/rust-lang/rust/issues/128044> for more information
= note: `#[warn(incomplete_features)]` on by default
warning: 1 warning emitted

View File

@ -13,7 +13,8 @@
//@ [chk_fail_yeet] compile-flags: -Zcontract-checks=yes //@ [chk_fail_yeet] compile-flags: -Zcontract-checks=yes
//! This test ensures that ensures clauses are checked for different return points of a function. //! This test ensures that ensures clauses are checked for different return points of a function.
#![feature(rustc_contracts)] #![feature(contracts)]
//~^ WARN the feature `contracts` is incomplete and may not be safe to use and/or cause compiler crashes [incomplete_features]
#![feature(yeet_expr)] #![feature(yeet_expr)]
/// This ensures will fail in different return points depending on the input. /// This ensures will fail in different return points depending on the input.

View File

@ -0,0 +1,11 @@
warning: the feature `contracts` is incomplete and may not be safe to use and/or cause compiler crashes
--> $DIR/contracts-ensures-early-fn-exit.rs:16:12
|
LL | #![feature(contracts)]
| ^^^^^^^^^
|
= note: see issue #128044 <https://github.com/rust-lang/rust/issues/128044> for more information
= note: `#[warn(incomplete_features)]` on by default
warning: 1 warning emitted

View File

@ -1,6 +1,7 @@
//@ run-pass //@ run-pass
//@ compile-flags: -Zcontract-checks=yes //@ compile-flags: -Zcontract-checks=yes
#![feature(rustc_contracts)] #![feature(contracts)]
//~^ WARN the feature `contracts` is incomplete and may not be safe to use and/or cause compiler crashes [incomplete_features]
#[core::contracts::ensures(|ret| *ret > 0)] #[core::contracts::ensures(|ret| *ret > 0)]
fn outer() -> i32 { fn outer() -> i32 {

View File

@ -0,0 +1,11 @@
warning: the feature `contracts` is incomplete and may not be safe to use and/or cause compiler crashes
--> $DIR/contracts-ensures-is-not-inherited-when-nesting.rs:3:12
|
LL | #![feature(contracts)]
| ^^^^^^^^^
|
= note: see issue #128044 <https://github.com/rust-lang/rust/issues/128044> for more information
= note: `#[warn(incomplete_features)]` on by default
warning: 1 warning emitted

View File

@ -1,6 +1,7 @@
//@ run-pass //@ run-pass
//@ compile-flags: -Zcontract-checks=yes //@ compile-flags: -Zcontract-checks=yes
#![feature(rustc_contracts)] #![feature(contracts)]
//~^ WARN the feature `contracts` is incomplete and may not be safe to use and/or cause compiler crashes [incomplete_features]
struct Outer { outer: std::cell::Cell<i32> } struct Outer { outer: std::cell::Cell<i32> }

View File

@ -0,0 +1,11 @@
warning: the feature `contracts` is incomplete and may not be safe to use and/or cause compiler crashes
--> $DIR/contracts-requires-is-not-inherited-when-nesting.rs:3:12
|
LL | #![feature(contracts)]
| ^^^^^^^^^
|
= note: see issue #128044 <https://github.com/rust-lang/rust/issues/128044> for more information
= note: `#[warn(incomplete_features)]` on by default
warning: 1 warning emitted

View File

@ -1,6 +1,7 @@
//! Checks for compilation errors related to adding contracts to non-function items. //! Checks for compilation errors related to adding contracts to non-function items.
#![feature(rustc_contracts)] #![feature(contracts)]
//~^ WARN the feature `contracts` is incomplete and may not be safe to use and/or cause compiler crashes [incomplete_features]
#![allow(dead_code)] #![allow(dead_code)]
#[core::contracts::requires(true)] #[core::contracts::requires(true)]

View File

@ -1,44 +1,53 @@
error: contract annotations can only be used on functions error: contract annotations can only be used on functions
--> $DIR/disallow-contract-annotation-on-non-fn.rs:6:1 --> $DIR/disallow-contract-annotation-on-non-fn.rs:7:1
| |
LL | #[core::contracts::requires(true)] LL | #[core::contracts::requires(true)]
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
error: contract annotations can only be used on functions error: contract annotations can only be used on functions
--> $DIR/disallow-contract-annotation-on-non-fn.rs:10:1 --> $DIR/disallow-contract-annotation-on-non-fn.rs:11:1
| |
LL | #[core::contracts::ensures(|v| v == 100)] LL | #[core::contracts::ensures(|v| v == 100)]
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
error: contract annotations is only supported in functions with bodies error: contract annotations is only supported in functions with bodies
--> $DIR/disallow-contract-annotation-on-non-fn.rs:15:1 --> $DIR/disallow-contract-annotation-on-non-fn.rs:16:1
| |
LL | #[core::contracts::ensures(|v| v == 100)] LL | #[core::contracts::ensures(|v| v == 100)]
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
error: contract annotations is only supported in functions with bodies error: contract annotations is only supported in functions with bodies
--> $DIR/disallow-contract-annotation-on-non-fn.rs:19:1 --> $DIR/disallow-contract-annotation-on-non-fn.rs:20:1
| |
LL | #[core::contracts::ensures(|v| v == 100)] LL | #[core::contracts::ensures(|v| v == 100)]
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
error: contract annotations can only be used on functions error: contract annotations can only be used on functions
--> $DIR/disallow-contract-annotation-on-non-fn.rs:23:1 --> $DIR/disallow-contract-annotation-on-non-fn.rs:24:1
| |
LL | #[core::contracts::requires(true)] LL | #[core::contracts::requires(true)]
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
error: contract annotations can only be used on functions error: contract annotations can only be used on functions
--> $DIR/disallow-contract-annotation-on-non-fn.rs:34:1 --> $DIR/disallow-contract-annotation-on-non-fn.rs:35:1
| |
LL | #[core::contracts::ensures(|dummy| dummy.0 > 0)] LL | #[core::contracts::ensures(|dummy| dummy.0 > 0)]
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
error: contract annotations can only be used on functions error: contract annotations can only be used on functions
--> $DIR/disallow-contract-annotation-on-non-fn.rs:45:1 --> $DIR/disallow-contract-annotation-on-non-fn.rs:46:1
| |
LL | #[core::contracts::requires(true)] LL | #[core::contracts::requires(true)]
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
error: aborting due to 7 previous errors warning: the feature `contracts` is incomplete and may not be safe to use and/or cause compiler crashes
--> $DIR/disallow-contract-annotation-on-non-fn.rs:3:12
|
LL | #![feature(contracts)]
| ^^^^^^^^^
|
= note: see issue #128044 <https://github.com/rust-lang/rust/issues/128044> for more information
= note: `#[warn(incomplete_features)]` on by default
error: aborting due to 7 previous errors; 1 warning emitted

View File

@ -16,11 +16,11 @@
//@ [chk_fail_pre] compile-flags: -Zcontract-checks=yes //@ [chk_fail_pre] compile-flags: -Zcontract-checks=yes
//@ [chk_fail_post] compile-flags: -Zcontract-checks=yes //@ [chk_fail_post] compile-flags: -Zcontract-checks=yes
#![feature(rustc_contracts_internals)] #![feature(contracts_internals)]
fn nest(x: Baz) -> i32 fn nest(x: Baz) -> i32
rustc_contract_requires(|| x.baz > 0) contract_requires(|| x.baz > 0)
rustc_contract_ensures(|ret| *ret > 100) contract_ensures(|ret| *ret > 100)
{ {
loop { loop {
return x.baz + 50; return x.baz + 50;

View File

@ -16,11 +16,11 @@
//@ [chk_fail_pre] compile-flags: -Zcontract-checks=yes //@ [chk_fail_pre] compile-flags: -Zcontract-checks=yes
//@ [chk_fail_post] compile-flags: -Zcontract-checks=yes //@ [chk_fail_post] compile-flags: -Zcontract-checks=yes
#![feature(rustc_contracts_internals)] #![feature(contracts_internals)]
fn tail(x: Baz) -> i32 fn tail(x: Baz) -> i32
rustc_contract_requires(|| x.baz > 0) contract_requires(|| x.baz > 0)
rustc_contract_ensures(|ret| *ret > 100) contract_ensures(|ret| *ret > 100)
{ {
x.baz + 50 x.baz + 50
} }

View File

@ -10,7 +10,7 @@
//@ [chk_pass] compile-flags: -Zcontract-checks=yes //@ [chk_pass] compile-flags: -Zcontract-checks=yes
//@ [chk_fail_requires] compile-flags: -Zcontract-checks=yes //@ [chk_fail_requires] compile-flags: -Zcontract-checks=yes
//@ [chk_fail_ensures] compile-flags: -Zcontract-checks=yes //@ [chk_fail_ensures] compile-flags: -Zcontract-checks=yes
#![feature(cfg_contract_checks, rustc_contracts_internals, core_intrinsics)] #![feature(cfg_contract_checks, contracts_internals, core_intrinsics)]
fn main() { fn main() {
#[cfg(any(default, unchk_pass))] // default: disabled #[cfg(any(default, unchk_pass))] // default: disabled

View File

@ -0,0 +1,11 @@
warning: the feature `contracts` is incomplete and may not be safe to use and/or cause compiler crashes
--> $DIR/contract-lang-items.rs:15:12
|
LL | #![feature(contracts)] // to access core::contracts
| ^^^^^^^^^
|
= note: see issue #128044 <https://github.com/rust-lang/rust/issues/128044> for more information
= note: `#[warn(incomplete_features)]` on by default
warning: 1 warning emitted

View File

@ -0,0 +1,11 @@
warning: the feature `contracts` is incomplete and may not be safe to use and/or cause compiler crashes
--> $DIR/contract-lang-items.rs:15:12
|
LL | #![feature(contracts)] // to access core::contracts
| ^^^^^^^^^
|
= note: see issue #128044 <https://github.com/rust-lang/rust/issues/128044> for more information
= note: `#[warn(incomplete_features)]` on by default
warning: 1 warning emitted

View File

@ -12,8 +12,9 @@
//@ [chk_pass] compile-flags: -Zcontract-checks=yes //@ [chk_pass] compile-flags: -Zcontract-checks=yes
//@ [chk_fail_post] compile-flags: -Zcontract-checks=yes //@ [chk_fail_post] compile-flags: -Zcontract-checks=yes
#![feature(rustc_contracts)] // to access core::contracts #![feature(contracts)] // to access core::contracts
#![feature(rustc_contracts_internals)] // to access check_requires lang item //~^ WARN the feature `contracts` is incomplete and may not be safe to use and/or cause compiler crashes [incomplete_features]
#![feature(contracts_internals)] // to access check_requires lang item
fn foo(x: Baz) -> i32 { fn foo(x: Baz) -> i32 {
let injected_checker = { let injected_checker = {

View File

@ -0,0 +1,11 @@
warning: the feature `contracts` is incomplete and may not be safe to use and/or cause compiler crashes
--> $DIR/contract-lang-items.rs:15:12
|
LL | #![feature(contracts)] // to access core::contracts
| ^^^^^^^^^
|
= note: see issue #128044 <https://github.com/rust-lang/rust/issues/128044> for more information
= note: `#[warn(incomplete_features)]` on by default
warning: 1 warning emitted

View File

@ -0,0 +1,11 @@
warning: the feature `contracts` is incomplete and may not be safe to use and/or cause compiler crashes
--> $DIR/contract-lang-items.rs:15:12
|
LL | #![feature(contracts)] // to access core::contracts
| ^^^^^^^^^
|
= note: see issue #128044 <https://github.com/rust-lang/rust/issues/128044> for more information
= note: `#[warn(incomplete_features)]` on by default
warning: 1 warning emitted

View File

@ -1,9 +1,9 @@
//@ run-pass //@ run-pass
//@ compile-flags: -Zcontract-checks=yes //@ compile-flags: -Zcontract-checks=yes
#![feature(rustc_contracts_internals)] #![feature(contracts_internals)]
fn outer() -> i32 fn outer() -> i32
rustc_contract_ensures(|ret| *ret > 0) contract_ensures(|ret| *ret > 0)
{ {
let inner_closure = || -> i32 { 0 }; let inner_closure = || -> i32 { 0 };
inner_closure(); inner_closure();

View File

@ -1,11 +1,11 @@
//@ run-pass //@ run-pass
//@ compile-flags: -Zcontract-checks=yes //@ compile-flags: -Zcontract-checks=yes
#![feature(rustc_contracts_internals)] #![feature(contracts_internals)]
struct Outer { outer: std::cell::Cell<i32> } struct Outer { outer: std::cell::Cell<i32> }
fn outer(x: Outer) fn outer(x: Outer)
rustc_contract_requires(|| x.outer.get() > 0) contract_requires(|| x.outer.get() > 0)
{ {
let inner_closure = || { }; let inner_closure = || { };
x.outer.set(0); x.outer.set(0);

View File

@ -1,20 +1,20 @@
// gate-test-rustc_contracts_internals // gate-test-contracts_internals
fn main() { fn main() {
// intrinsics are guarded by rustc_contracts_internals feature gate. // intrinsics are guarded by contracts_internals feature gate.
core::intrinsics::contract_checks(); core::intrinsics::contract_checks();
//~^ ERROR use of unstable library feature `rustc_contracts_internals` //~^ ERROR use of unstable library feature `contracts_internals`
core::intrinsics::contract_check_requires(|| true); core::intrinsics::contract_check_requires(|| true);
//~^ ERROR use of unstable library feature `rustc_contracts_internals` //~^ ERROR use of unstable library feature `contracts_internals`
core::intrinsics::contract_check_ensures(&1, |_|true); core::intrinsics::contract_check_ensures(&1, |_|true);
//~^ ERROR use of unstable library feature `rustc_contracts_internals` //~^ ERROR use of unstable library feature `contracts_internals`
core::contracts::build_check_ensures(|_: &()| true); core::contracts::build_check_ensures(|_: &()| true);
//~^ ERROR use of unstable library feature `rustc_contracts_internals` //~^ ERROR use of unstable library feature `contracts_internals`
// ast extensions are guarded by rustc_contracts_internals feature gate // ast extensions are guarded by contracts_internals feature gate
fn identity_1() -> i32 rustc_contract_requires(|| true) { 10 } fn identity_1() -> i32 contract_requires(|| true) { 10 }
//~^ ERROR contract internal machinery is for internal use only //~^ ERROR contract internal machinery is for internal use only
fn identity_2() -> i32 rustc_contract_ensures(|_| true) { 10 } fn identity_2() -> i32 contract_ensures(|_| true) { 10 }
//~^ ERROR contract internal machinery is for internal use only //~^ ERROR contract internal machinery is for internal use only
} }

View File

@ -1,61 +1,61 @@
error[E0658]: contract internal machinery is for internal use only error[E0658]: contract internal machinery is for internal use only
--> $DIR/internal-feature-gating.rs:16:51 --> $DIR/internal-feature-gating.rs:16:45
| |
LL | fn identity_1() -> i32 rustc_contract_requires(|| true) { 10 } LL | fn identity_1() -> i32 contract_requires(|| true) { 10 }
| ^^^^^^^^^ | ^^^^^^^^^
| |
= note: see issue #133866 <https://github.com/rust-lang/rust/issues/133866> for more information = note: see issue #128044 <https://github.com/rust-lang/rust/issues/128044> for more information
= help: add `#![feature(rustc_contracts_internals)]` to the crate attributes to enable = help: add `#![feature(contracts_internals)]` to the crate attributes to enable
= note: this compiler was built on YYYY-MM-DD; consider upgrading it if it is out of date = note: this compiler was built on YYYY-MM-DD; consider upgrading it if it is out of date
error[E0658]: contract internal machinery is for internal use only error[E0658]: contract internal machinery is for internal use only
--> $DIR/internal-feature-gating.rs:18:50 --> $DIR/internal-feature-gating.rs:18:44
| |
LL | fn identity_2() -> i32 rustc_contract_ensures(|_| true) { 10 } LL | fn identity_2() -> i32 contract_ensures(|_| true) { 10 }
| ^^^^^^^^^^ | ^^^^^^^^^^
| |
= note: see issue #133866 <https://github.com/rust-lang/rust/issues/133866> for more information = note: see issue #128044 <https://github.com/rust-lang/rust/issues/128044> for more information
= help: add `#![feature(rustc_contracts_internals)]` to the crate attributes to enable = help: add `#![feature(contracts_internals)]` to the crate attributes to enable
= note: this compiler was built on YYYY-MM-DD; consider upgrading it if it is out of date = note: this compiler was built on YYYY-MM-DD; consider upgrading it if it is out of date
error[E0658]: use of unstable library feature `rustc_contracts_internals` error[E0658]: use of unstable library feature `contracts_internals`
--> $DIR/internal-feature-gating.rs:5:5 --> $DIR/internal-feature-gating.rs:5:5
| |
LL | core::intrinsics::contract_checks(); LL | core::intrinsics::contract_checks();
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
| |
= note: see issue #133866 <https://github.com/rust-lang/rust/issues/133866> for more information = note: see issue #128044 <https://github.com/rust-lang/rust/issues/128044> for more information
= help: add `#![feature(rustc_contracts_internals)]` to the crate attributes to enable = help: add `#![feature(contracts_internals)]` to the crate attributes to enable
= note: this compiler was built on YYYY-MM-DD; consider upgrading it if it is out of date = note: this compiler was built on YYYY-MM-DD; consider upgrading it if it is out of date
error[E0658]: use of unstable library feature `rustc_contracts_internals` error[E0658]: use of unstable library feature `contracts_internals`
--> $DIR/internal-feature-gating.rs:7:5 --> $DIR/internal-feature-gating.rs:7:5
| |
LL | core::intrinsics::contract_check_requires(|| true); LL | core::intrinsics::contract_check_requires(|| true);
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
| |
= note: see issue #133866 <https://github.com/rust-lang/rust/issues/133866> for more information = note: see issue #128044 <https://github.com/rust-lang/rust/issues/128044> for more information
= help: add `#![feature(rustc_contracts_internals)]` to the crate attributes to enable = help: add `#![feature(contracts_internals)]` to the crate attributes to enable
= note: this compiler was built on YYYY-MM-DD; consider upgrading it if it is out of date = note: this compiler was built on YYYY-MM-DD; consider upgrading it if it is out of date
error[E0658]: use of unstable library feature `rustc_contracts_internals` error[E0658]: use of unstable library feature `contracts_internals`
--> $DIR/internal-feature-gating.rs:9:5 --> $DIR/internal-feature-gating.rs:9:5
| |
LL | core::intrinsics::contract_check_ensures(&1, |_|true); LL | core::intrinsics::contract_check_ensures(&1, |_|true);
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
| |
= note: see issue #133866 <https://github.com/rust-lang/rust/issues/133866> for more information = note: see issue #128044 <https://github.com/rust-lang/rust/issues/128044> for more information
= help: add `#![feature(rustc_contracts_internals)]` to the crate attributes to enable = help: add `#![feature(contracts_internals)]` to the crate attributes to enable
= note: this compiler was built on YYYY-MM-DD; consider upgrading it if it is out of date = note: this compiler was built on YYYY-MM-DD; consider upgrading it if it is out of date
error[E0658]: use of unstable library feature `rustc_contracts_internals` error[E0658]: use of unstable library feature `contracts_internals`
--> $DIR/internal-feature-gating.rs:12:5 --> $DIR/internal-feature-gating.rs:12:5
| |
LL | core::contracts::build_check_ensures(|_: &()| true); LL | core::contracts::build_check_ensures(|_: &()| true);
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
| |
= note: see issue #133866 <https://github.com/rust-lang/rust/issues/133866> for more information = note: see issue #128044 <https://github.com/rust-lang/rust/issues/128044> for more information
= help: add `#![feature(rustc_contracts_internals)]` to the crate attributes to enable = help: add `#![feature(contracts_internals)]` to the crate attributes to enable
= note: this compiler was built on YYYY-MM-DD; consider upgrading it if it is out of date = note: this compiler was built on YYYY-MM-DD; consider upgrading it if it is out of date
error: aborting due to 6 previous errors error: aborting due to 6 previous errors

View File

@ -4,7 +4,7 @@ error[E0658]: `cfg(contract_checks)` is experimental and subject to change
LL | cfg!(contract_checks) LL | cfg!(contract_checks)
| ^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^
| |
= note: see issue #133866 <https://github.com/rust-lang/rust/issues/133866> for more information = note: see issue #128044 <https://github.com/rust-lang/rust/issues/128044> for more information
= help: add `#![feature(cfg_contract_checks)]` to the crate attributes to enable = help: add `#![feature(cfg_contract_checks)]` to the crate attributes to enable
= note: this compiler was built on YYYY-MM-DD; consider upgrading it if it is out of date = note: this compiler was built on YYYY-MM-DD; consider upgrading it if it is out of date

View File

@ -0,0 +1,11 @@
#![crate_type = "lib"]
#[core::contracts::requires(x > 0)]
pub fn requires_needs_it(x: i32) { }
//~^^ ERROR use of unstable library feature `contracts`
//~^^^ ERROR contracts are incomplete
#[core::contracts::ensures(|ret| *ret > 0)]
pub fn ensures_needs_it() -> i32 { 10 }
//~^^ ERROR use of unstable library feature `contracts`
//~^^^ ERROR contracts are incomplete

View File

@ -0,0 +1,43 @@
error[E0658]: use of unstable library feature `contracts`
--> $DIR/feature-gate-contracts.rs:3:3
|
LL | #[core::contracts::requires(x > 0)]
| ^^^^^^^^^^^^^^^^^^^^^^^^^
|
= note: see issue #128044 <https://github.com/rust-lang/rust/issues/128044> for more information
= help: add `#![feature(contracts)]` to the crate attributes to enable
= note: this compiler was built on YYYY-MM-DD; consider upgrading it if it is out of date
error[E0658]: use of unstable library feature `contracts`
--> $DIR/feature-gate-contracts.rs:8:3
|
LL | #[core::contracts::ensures(|ret| *ret > 0)]
| ^^^^^^^^^^^^^^^^^^^^^^^^
|
= note: see issue #128044 <https://github.com/rust-lang/rust/issues/128044> for more information
= help: add `#![feature(contracts)]` to the crate attributes to enable
= note: this compiler was built on YYYY-MM-DD; consider upgrading it if it is out of date
error[E0658]: contracts are incomplete
--> $DIR/feature-gate-contracts.rs:3:1
|
LL | #[core::contracts::requires(x > 0)]
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
= note: see issue #128044 <https://github.com/rust-lang/rust/issues/128044> for more information
= help: add `#![feature(contracts)]` to the crate attributes to enable
= note: this compiler was built on YYYY-MM-DD; consider upgrading it if it is out of date
error[E0658]: contracts are incomplete
--> $DIR/feature-gate-contracts.rs:8:1
|
LL | #[core::contracts::ensures(|ret| *ret > 0)]
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
= note: see issue #128044 <https://github.com/rust-lang/rust/issues/128044> for more information
= help: add `#![feature(contracts)]` to the crate attributes to enable
= note: this compiler was built on YYYY-MM-DD; consider upgrading it if it is out of date
error: aborting due to 4 previous errors
For more information about this error, try `rustc --explain E0658`.

View File

@ -1,11 +0,0 @@
#![crate_type = "lib"]
#[core::contracts::requires(x > 0)]
pub fn requires_needs_it(x: i32) { }
//~^^ ERROR use of unstable library feature `rustc_contracts`
//~^^^ ERROR contracts are experimental
#[core::contracts::ensures(|ret| *ret > 0)]
pub fn ensures_needs_it() -> i32 { 10 }
//~^^ ERROR use of unstable library feature `rustc_contracts`
//~^^^ ERROR contracts are experimental

View File

@ -1,43 +0,0 @@
error[E0658]: use of unstable library feature `rustc_contracts`
--> $DIR/feature-gate-rustc-contracts.rs:3:3
|
LL | #[core::contracts::requires(x > 0)]
| ^^^^^^^^^^^^^^^^^^^^^^^^^
|
= note: see issue #133866 <https://github.com/rust-lang/rust/issues/133866> for more information
= help: add `#![feature(rustc_contracts)]` to the crate attributes to enable
= note: this compiler was built on YYYY-MM-DD; consider upgrading it if it is out of date
error[E0658]: use of unstable library feature `rustc_contracts`
--> $DIR/feature-gate-rustc-contracts.rs:8:3
|
LL | #[core::contracts::ensures(|ret| *ret > 0)]
| ^^^^^^^^^^^^^^^^^^^^^^^^
|
= note: see issue #133866 <https://github.com/rust-lang/rust/issues/133866> for more information
= help: add `#![feature(rustc_contracts)]` to the crate attributes to enable
= note: this compiler was built on YYYY-MM-DD; consider upgrading it if it is out of date
error[E0658]: contracts are experimental
--> $DIR/feature-gate-rustc-contracts.rs:3:1
|
LL | #[core::contracts::requires(x > 0)]
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
= note: see issue #133866 <https://github.com/rust-lang/rust/issues/133866> for more information
= help: add `#![feature(rustc_contracts)]` to the crate attributes to enable
= note: this compiler was built on YYYY-MM-DD; consider upgrading it if it is out of date
error[E0658]: contracts are experimental
--> $DIR/feature-gate-rustc-contracts.rs:8:1
|
LL | #[core::contracts::ensures(|ret| *ret > 0)]
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
= note: see issue #133866 <https://github.com/rust-lang/rust/issues/133866> for more information
= help: add `#![feature(rustc_contracts)]` to the crate attributes to enable
= note: this compiler was built on YYYY-MM-DD; consider upgrading it if it is out of date
error: aborting due to 4 previous errors
For more information about this error, try `rustc --explain E0658`.