mirror of
https://github.com/rust-lang/rust.git
synced 2025-04-30 12:07:40 +00:00
45 lines
1.2 KiB
Rust
45 lines
1.2 KiB
Rust
![]() |
//@ revisions: unchk_pass unchk_fail_pre unchk_fail_post chk_pass chk_fail_pre chk_fail_post
|
||
|
//
|
||
|
//@ [unchk_pass] run-pass
|
||
|
//@ [unchk_fail_pre] run-pass
|
||
|
//@ [unchk_fail_post] run-pass
|
||
|
//@ [chk_pass] run-pass
|
||
|
//
|
||
|
//@ [chk_fail_pre] run-fail
|
||
|
//@ [chk_fail_post] run-fail
|
||
|
//
|
||
|
//@ [unchk_pass] compile-flags: -Zcontract-checks=no
|
||
|
//@ [unchk_fail_pre] compile-flags: -Zcontract-checks=no
|
||
|
//@ [unchk_fail_post] compile-flags: -Zcontract-checks=no
|
||
|
//
|
||
|
//@ [chk_pass] compile-flags: -Zcontract-checks=yes
|
||
|
//@ [chk_fail_pre] compile-flags: -Zcontract-checks=yes
|
||
|
//@ [chk_fail_post] compile-flags: -Zcontract-checks=yes
|
||
|
|
||
|
#![feature(rustc_contracts)]
|
||
|
|
||
|
#[core::contracts::requires(x.baz > 0)]
|
||
|
#[core::contracts::ensures(|ret| *ret > 100)]
|
||
|
fn nest(x: Baz) -> i32
|
||
|
{
|
||
|
loop {
|
||
|
return x.baz + 50;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
struct Baz { baz: i32 }
|
||
|
|
||
|
const BAZ_PASS_PRE_POST: Baz = Baz { baz: 100 };
|
||
|
#[cfg(any(unchk_fail_post, chk_fail_post))]
|
||
|
const BAZ_FAIL_POST: Baz = Baz { baz: 10 };
|
||
|
#[cfg(any(unchk_fail_pre, chk_fail_pre))]
|
||
|
const BAZ_FAIL_PRE: Baz = Baz { baz: -10 };
|
||
|
|
||
|
fn main() {
|
||
|
assert_eq!(nest(BAZ_PASS_PRE_POST), 150);
|
||
|
#[cfg(any(unchk_fail_pre, chk_fail_pre))]
|
||
|
nest(BAZ_FAIL_PRE);
|
||
|
#[cfg(any(unchk_fail_post, chk_fail_post))]
|
||
|
nest(BAZ_FAIL_POST);
|
||
|
}
|