blob: ad88ebfe22e3b09c17c524857bf051f26f84e032 [file] [log] [blame]
//@ revisions: unchk_pass chk_pass chk_fail_post
//
//@ [unchk_pass] run-pass
//@ [chk_pass] run-pass
//
//@ [chk_fail_post] run-crash
#![feature(contracts)] // to access core::contracts
//~^ 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
#![feature(core_intrinsics)]
fn foo(x: Baz) -> i32 {
let injected_checker = Some(core::contracts::build_check_ensures(|ret| *ret > 100));
let ret = x.baz + 50;
core::intrinsics::contract_check_ensures(injected_checker, ret)
}
struct Baz { baz: i32 }
const BAZ_PASS_PRE_POST: Baz = Baz { baz: 100 };
#[cfg(chk_fail_post)]
const BAZ_FAIL_POST: Baz = Baz { baz: 10 };
fn main() {
assert_eq!(foo(BAZ_PASS_PRE_POST), 150);
#[cfg(chk_fail_post)]
foo(BAZ_FAIL_POST);
}