mirror of
https://github.com/rust-lang/rust.git
synced 2025-05-14 02:49:40 +00:00
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:
parent
2c4923e6bc
commit
ddbf54b67d
@ -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) {
|
||||||
|
@ -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(
|
||||||
|
@ -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.
|
||||||
|
@ -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)
|
||||||
|
@ -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) };
|
||||||
|
@ -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,
|
||||||
|
@ -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
|
||||||
|
@ -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) {
|
||||||
|
@ -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")]
|
||||||
|
@ -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 */
|
||||||
|
@ -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.
|
||||||
|
@ -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
|
||||||
|
|
||||||
|
@ -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
|
||||||
|
|
@ -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
|
||||||
|
|
@ -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
|
||||||
|
|
@ -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
|
||||||
|
|
@ -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;
|
||||||
|
|
||||||
|
@ -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
|
||||||
|
|
@ -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
|
||||||
|
|
@ -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
|
||||||
|
|
11
tests/ui/contracts/contract-attributes-nest.chk_pass.stderr
Normal file
11
tests/ui/contracts/contract-attributes-nest.chk_pass.stderr
Normal 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
|
||||||
|
|
@ -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)]
|
||||||
|
@ -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
|
||||||
|
|
@ -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
|
||||||
|
|
@ -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
|
||||||
|
|
@ -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
|
||||||
|
|
@ -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
|
||||||
|
|
11
tests/ui/contracts/contract-attributes-tail.chk_pass.stderr
Normal file
11
tests/ui/contracts/contract-attributes-tail.chk_pass.stderr
Normal 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
|
||||||
|
|
@ -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)]
|
||||||
|
@ -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
|
||||||
|
|
@ -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
|
||||||
|
|
@ -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
|
||||||
|
|
@ -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
|
||||||
|
11
tests/ui/contracts/contract-captures-via-closure-copy.stderr
Normal file
11
tests/ui/contracts/contract-captures-via-closure-copy.stderr
Normal 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
|
||||||
|
|
@ -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
|
||||||
|
@ -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`.
|
||||||
|
@ -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
|
||||||
|
|
@ -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
|
||||||
|
|
@ -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
|
||||||
|
|
@ -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
|
||||||
|
|
@ -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.
|
||||||
|
@ -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
|
||||||
|
|
@ -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 {
|
||||||
|
@ -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
|
||||||
|
|
@ -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> }
|
||||||
|
|
||||||
|
@ -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
|
||||||
|
|
@ -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)]
|
||||||
|
@ -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
|
||||||
|
|
||||||
|
@ -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;
|
||||||
|
@ -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
|
||||||
}
|
}
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
|
@ -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
|
||||||
|
|
@ -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 = {
|
||||||
|
@ -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
|
||||||
|
|
@ -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
|
||||||
|
|
@ -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();
|
||||||
|
@ -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);
|
||||||
|
@ -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
|
||||||
}
|
}
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
|
||||||
|
11
tests/ui/feature-gates/feature-gate-contracts.rs
Normal file
11
tests/ui/feature-gates/feature-gate-contracts.rs
Normal 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
|
43
tests/ui/feature-gates/feature-gate-contracts.stderr
Normal file
43
tests/ui/feature-gates/feature-gate-contracts.stderr
Normal 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`.
|
@ -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
|
|
@ -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`.
|
|
Loading…
Reference in New Issue
Block a user