//@ 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(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::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); }