diff options
| author | Eduard Burtescu <edy.burt@gmail.com> | 2016-03-09 22:46:00 +0200 |
|---|---|---|
| committer | Eduard Burtescu <edy.burt@gmail.com> | 2016-03-17 21:51:55 +0200 |
| commit | 835e2bdf7d370ec5f3a7777c7273d48be0bf5c56 (patch) | |
| tree | 995f42f13a54784f600eb34437e2cc60aefe794a /src | |
| parent | 856185dbb2f4a57dc865c6dc3c856268c7efa79a (diff) | |
| download | rust-835e2bdf7d370ec5f3a7777c7273d48be0bf5c56.tar.gz rust-835e2bdf7d370ec5f3a7777c7273d48be0bf5c56.zip | |
Add -Z orbit for forcing MIR for everything, unless #[rustc_no_mir] is used.
Diffstat (limited to 'src')
| -rw-r--r-- | src/librustc/session/config.rs | 2 | ||||
| -rw-r--r-- | src/librustc_trans/trans/base.rs | 6 | ||||
| -rw-r--r-- | src/libsyntax/feature_gate.rs | 12 |
3 files changed, 14 insertions, 6 deletions
diff --git a/src/librustc/session/config.rs b/src/librustc/session/config.rs index 9f097215a8a..17f70b2d8dc 100644 --- a/src/librustc/session/config.rs +++ b/src/librustc/session/config.rs @@ -663,6 +663,8 @@ options! {DebuggingOptions, DebuggingSetter, basic_debugging_options, "print the result of the translation item collection pass"), mir_opt_level: Option<usize> = (None, parse_opt_uint, "set the MIR optimization level (0-3)"), + orbit: bool = (false, parse_bool, + "get MIR where it belongs - everywhere; most importantly, in orbit"), } pub fn default_lib_output() -> CrateType { diff --git a/src/librustc_trans/trans/base.rs b/src/librustc_trans/trans/base.rs index 6add4fee567..93ca306f0b0 100644 --- a/src/librustc_trans/trans/base.rs +++ b/src/librustc_trans/trans/base.rs @@ -1431,7 +1431,9 @@ impl<'blk, 'tcx> FunctionContext<'blk, 'tcx> { }; let check_attrs = |attrs: &[ast::Attribute]| { - attrs.iter().any(|item| item.check_name("rustc_mir")) + let default_to_mir = ccx.sess().opts.debugging_opts.orbit; + let invert = if default_to_mir { "rustc_no_mir" } else { "rustc_mir" }; + default_to_mir ^ attrs.iter().any(|item| item.check_name(invert)) }; let use_mir = if let Some(id) = local_id { @@ -1449,13 +1451,13 @@ impl<'blk, 'tcx> FunctionContext<'blk, 'tcx> { }; FunctionContext { + needs_ret_allocas: nested_returns && mir.is_none(), mir: mir, llfn: llfndecl, llretslotptr: Cell::new(None), param_env: ccx.tcx().empty_parameter_environment(), alloca_insert_pt: Cell::new(None), llreturn: Cell::new(None), - needs_ret_allocas: nested_returns, landingpad_alloca: Cell::new(None), lllocals: RefCell::new(NodeMap()), llupvars: RefCell::new(NodeMap()), diff --git a/src/libsyntax/feature_gate.rs b/src/libsyntax/feature_gate.rs index fbaf28332c4..a017e62d546 100644 --- a/src/libsyntax/feature_gate.rs +++ b/src/libsyntax/feature_gate.rs @@ -350,10 +350,14 @@ pub const KNOWN_ATTRIBUTES: &'static [(&'static str, AttributeType, AttributeGat "the `#[rustc_move_fragments]` attribute \ is just used for rustc unit tests \ and will never be stable")), - ("rustc_mir", Normal, Gated("rustc_attrs", - "the `#[rustc_mir]` attribute \ - is just used for rustc unit tests \ - and will never be stable")), + ("rustc_mir", Whitelisted, Gated("rustc_attrs", + "the `#[rustc_mir]` attribute \ + is just used for rustc unit tests \ + and will never be stable")), + ("rustc_no_mir", Whitelisted, Gated("rustc_attrs", + "the `#[rustc_no_mir]` attribute \ + is just used to make tests pass \ + and will never be stable")), ("allow_internal_unstable", Normal, Gated("allow_internal_unstable", EXPLAIN_ALLOW_INTERNAL_UNSTABLE)), |
