mirror of
https://github.com/rust-lang/rust.git
synced 2025-12-02 20:37:58 +00:00
Contract variables can be declared in the `requires` clause and can be referenced both in `requires` and `ensures`, subject to usual borrow checking rules. This allows any setup common to both the `requires` and `ensures` clauses to only be done once.
20 lines
528 B
Rust
20 lines
528 B
Rust
//@ run-pass
|
|
//@ compile-flags: -Zcontract-checks=yes
|
|
#![feature(contracts)]
|
|
//~^ WARN the feature `contracts` is incomplete and may not be safe to use and/or cause compiler crashes [incomplete_features]
|
|
|
|
extern crate core;
|
|
use core::contracts::{ensures, requires};
|
|
|
|
// checks that variable declarations are lowered properly, with the ability to
|
|
// refer to them *both* in requires and ensures
|
|
#[requires(let y = 2 * x; y > 0)]
|
|
#[ensures(move |ret| { *ret == y })]
|
|
fn foo(x: u32) -> u32 {
|
|
x * 2
|
|
}
|
|
|
|
fn main() {
|
|
foo(1);
|
|
}
|