rust/mk
bors 1ec22171e6 Auto merge of #33130 - eddyb:mir-const, r=nikomatsakis
Implement constant support in MIR.

All of the intended features in `trans::consts` are now supported by `mir::constant`.
The implementation is considered a temporary measure until `miri` replaces it.

A `-Z orbit` bootstrap build will only translate LLVM IR from AST for `#[rustc_no_mir]` functions.

Furthermore, almost all checks of constant expressions have been moved to MIR.
In non-`const` functions, trees of temporaries are promoted, as per RFC 1414 (rvalue promotion).
Promotion before MIR borrowck would allow reasoning about promoted values' lifetimes.

The improved checking comes at the cost of four `[breaking-change]`s:
* repeat counts must contain a constant expression, e.g.:
`let arr = [0; { println!("foo"); 5 }];` used to be allowed (it behaved like `let arr = [0; 5];`)
* dereference of a reference to a `static` cannot be used in another `static`, e.g.:
`static X: [u8; 1] = [1]; static Y: u8 = (&X)[0];` was unintentionally allowed before
* the type of a `static` *must* be `Sync`, irrespective of the initializer, e.g.
`static FOO: *const T = &BAR;` worked as `&T` is `Sync`, but it shouldn't because `*const T` isn't
* a `static` cannot wrap `UnsafeCell` around a type that *may* need drop, e.g.
`static X: MakeSync<UnsafeCell<Option<String>>> = MakeSync(UnsafeCell::new(None));`
was previously allowed based on the fact `None` alone doesn't need drop, but in `UnsafeCell`
it can be later changed to `Some(String)` which *does* need dropping

The drop restrictions are relaxed by RFC 1440 (#33156), which is implemented, but feature-gated.
However, creating `UnsafeCell` from constants is unstable, so users can just enable the feature gate.
2016-05-08 00:31:40 -07:00
..
cfg test: Move run-make tests into compiletest 2016-04-28 21:46:40 -07:00
clean.mk
crates.mk mir: qualify and promote constants. 2016-05-07 19:14:28 +03:00
ctags.mk Add TAGS.rustc.emacs/TAGS.rustc.vi make targets, (re-)including rustc source. 2016-04-28 15:01:47 +02:00
debuggers.mk Distribute both rust-lldb and rust-gdb everywhere except win-msvc 2016-05-06 03:09:48 +00:00
dist.mk mk: Bootstrap from stable instead of snapshots 2016-04-19 10:56:49 -07:00
docs.mk mk: Move disable-jemalloc logic into makefiles 2016-02-25 21:05:59 -08:00
grammar.mk Revert "mk: fix some undefined variable warnings" 2016-02-01 23:27:04 -08:00
host.mk mk: Move disable-jemalloc logic into makefiles 2016-02-25 21:05:59 -08:00
install.mk mk: Move disable-jemalloc logic into makefiles 2016-02-25 21:05:59 -08:00
llvm.mk rustc_llvm: Tweak how initialization is performed 2016-02-11 11:12:33 -08:00
main.mk Distribute both rust-lldb and rust-gdb everywhere except win-msvc 2016-05-06 03:09:48 +00:00
platform.mk mk: Fix building with --enable-ccache 2016-05-05 09:12:24 -07:00
prepare.mk mk: Move disable-jemalloc logic into makefiles 2016-02-25 21:05:59 -08:00
reconfig.mk mk: Bootstrap from stable instead of snapshots 2016-04-19 10:56:49 -07:00
rt.mk Rollup merge of #32686 - mneumann:dragonfly_jemalloc_prefix, r=alexcrichton 2016-04-05 16:43:21 +05:30
rustllvm.mk Implement feature extraction from TargetMachine 2016-04-09 00:39:04 +02:00
stage0.mk mk: Bootstrap from stable instead of snapshots 2016-04-19 10:56:49 -07:00
target.mk mk: Bootstrap from stable instead of snapshots 2016-04-19 10:56:49 -07:00
tests.mk Rollup merge of #33314 - alexcrichton:fix-enable-ccache, r=pnkfelix 2016-05-07 15:35:16 -04:00
util.mk