Contracts core intrinsics.
These are hooks to: 1. control whether contract checks are run 2. allow 3rd party tools to intercept and reintepret the results of running contracts.
This commit is contained in:
parent
534d79adf9
commit
bcb8565f30
30 changed files with 183 additions and 6 deletions
|
@ -119,6 +119,7 @@ pub(crate) fn disallow_cfgs(sess: &Session, user_cfgs: &Cfg) {
|
|||
(sym::overflow_checks, None) => disallow(cfg, "-C overflow-checks"),
|
||||
(sym::debug_assertions, None) => disallow(cfg, "-C debug-assertions"),
|
||||
(sym::ub_checks, None) => disallow(cfg, "-Z ub-checks"),
|
||||
(sym::contract_checks, None) => disallow(cfg, "-Z contract-checks"),
|
||||
(sym::sanitize, None | Some(_)) => disallow(cfg, "-Z sanitizer"),
|
||||
(
|
||||
sym::sanitizer_cfi_generalize_pointers | sym::sanitizer_cfi_normalize_integers,
|
||||
|
@ -300,6 +301,11 @@ pub(crate) fn default_configuration(sess: &Session) -> Cfg {
|
|||
if sess.is_nightly_build() && sess.opts.unstable_opts.emscripten_wasm_eh {
|
||||
ins_none!(sym::emscripten_wasm_eh);
|
||||
}
|
||||
|
||||
if sess.contract_checks() {
|
||||
ins_none!(sym::contract_checks);
|
||||
}
|
||||
|
||||
ret
|
||||
}
|
||||
|
||||
|
@ -464,6 +470,7 @@ impl CheckCfg {
|
|||
ins!(sym::target_thread_local, no_values);
|
||||
|
||||
ins!(sym::ub_checks, no_values);
|
||||
ins!(sym::contract_checks, no_values);
|
||||
|
||||
ins!(sym::unix, no_values);
|
||||
ins!(sym::windows, no_values);
|
||||
|
|
|
@ -2114,6 +2114,8 @@ options! {
|
|||
"the backend to use"),
|
||||
combine_cgu: bool = (false, parse_bool, [TRACKED],
|
||||
"combine CGUs into a single one"),
|
||||
contract_checks: Option<bool> = (None, parse_opt_bool, [TRACKED],
|
||||
"emit runtime checks for contract pre- and post-conditions (default: no)"),
|
||||
coverage_options: CoverageOptions = (CoverageOptions::default(), parse_coverage_options, [TRACKED],
|
||||
"control details of coverage instrumentation"),
|
||||
crate_attr: Vec<String> = (Vec::new(), parse_string_push, [TRACKED],
|
||||
|
|
|
@ -709,6 +709,10 @@ impl Session {
|
|||
self.opts.unstable_opts.ub_checks.unwrap_or(self.opts.debug_assertions)
|
||||
}
|
||||
|
||||
pub fn contract_checks(&self) -> bool {
|
||||
self.opts.unstable_opts.contract_checks.unwrap_or(false)
|
||||
}
|
||||
|
||||
pub fn relocation_model(&self) -> RelocModel {
|
||||
self.opts.cg.relocation_model.unwrap_or(self.target.relocation_model)
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue