Commit graph

168 commits

Author SHA1 Message Date
Niko Matsakis
45d281d7fa remove -Znll -- borrowck=mir implies nll now 2018-04-15 07:13:42 -04:00
Vadim Petrochenkov
fcf48520a0 Add some new tests + Fix failing tests 2018-04-12 23:06:03 +03:00
Vadim Petrochenkov
1a2a23447e Stabilize attributes on generic parameters 2018-04-05 02:19:56 +03:00
Mark Mansi
7ce8191775 Stabilize i128_type 2018-03-26 08:36:50 -05:00
David Wood
03481f19ea
Updated MIR with UserAssertTy in mir-opt tests. 2018-03-23 11:34:06 +00:00
Niko Matsakis
94eebaa325 WIP fix mir-opt-end-region-8 2018-03-21 09:24:32 -04:00
Vadim Petrochenkov
7c90189e13 Stabilize slice patterns without ..
Merge `feature(advanced_slice_patterns)` into `feature(slice_patterns)`
2018-03-20 02:27:40 +03:00
Oliver Schneider
d98a2b90b2
Rebase fallout 2018-03-08 08:34:17 +01:00
Oliver Schneider
918b6d7633
Produce instead of pointers 2018-03-08 08:08:14 +01:00
Manish Goregaokar
f59ab8e96a
Rollup merge of #48355 - mikhail-m1:subslice_pattern_array_drop2, r=nikomatsakis
Fixes #47311.
r? @nrc
2018-02-28 15:09:22 -08:00
Mikhail Modin
12c7e27330 restore Subslice move out from array after elaborate drops and borrowck 2018-02-25 18:59:16 +03:00
Eduard-Mihai Burtescu
c9fcedeb4c rustc_mir: optimize the deaggregator's expansion of statements. 2018-02-20 02:50:26 +02:00
Eduard-Mihai Burtescu
d773d95880 rustc_mir: don't run the deaggregator on arrays for now. 2018-02-20 02:50:26 +02:00
Eduard-Mihai Burtescu
b88180f74c rustc_mir: handle all aggregate kinds in the deaggregator. 2018-02-20 02:50:26 +02:00
Matthias Krüger
4452446292 fix more typos found by codespell. 2018-02-17 17:38:49 +01:00
bors
b85bd51c94 Auto merge of #47926 - mikhail-m1:subslice_pattern_array_drop2, r=nikomatsakis
add transform for uniform array move out

reworked second step for fix #34708
previous try #46686
r? @nikomatsakis
2018-02-17 08:44:41 +00:00
bors
7f2baba121 Auto merge of #48092 - eddyb:discriminate-the-void, r=nikomatsakis
rustc_mir: insert a dummy access to places being matched on, when building MIR.

Fixes #47412 by adding a `_dummy = Discriminant(place)` before each `match place {...}`.

r? @nikomatsakis
2018-02-11 02:42:19 +00:00
Eduard-Mihai Burtescu
8af134e031 rustc_mir: insert a dummy access to places being matched on, when building MIR. 2018-02-09 23:25:10 +02:00
Mikhail Modin
31253d5557 add transform for uniform array move out 2018-02-08 14:27:55 +03:00
bobtwinkles
85dfa9d1a3 Fix tests for MIR loop lowering
Fixes the hash test to recognize that MirValidated can change when changing
around labels, and add a new test that makes sure we're lowering loop statements
correctly.
2018-02-07 20:00:54 -05:00
bobtwinkles
8e0c3f5c46 [ci skip] Generate false edges from loop_block
As opposed to using weirdness involving pretending the body block
is the loop block. This does not pass tests

This commit is [ci skip] because I know it doesn't pass tests yet.
Somehow this commit introduces nondeterminism into the handling of
loops.
2018-02-07 14:25:08 -05:00
bobtwinkles
eae1a35f55 mir: Add and fix tests for FalseUnwinds
Fix instructions on existing mir-opt tests after introducing false edges from
loops. Also, add a test for issue 46036: infinite loops.
2018-02-05 15:00:40 -05:00
Aaron Hill
b5f8cd5c20
Fix ref-to-ptr coercions not working with NLL in certain cases
Implicit coercions from references to pointers were lowered to slightly
different Mir than explicit casts (e.g. 'foo as *mut T'). This resulted
in certain uses of self-referential structs compiling correctly when an
explicit cast was used, but not when the implicit coercion was used.

To fix this, this commit adds an outer 'Use' expr when applying a
raw-ptr-borrow adjustment. This makes the lowered Mir for coercions
identical to that of explicit coercions, allowing the original code to
compile regardless of how the raw ptr cast occurs.

Fixes #47722
2018-01-29 23:25:54 -05:00
kennytm
4daaee900f
Add trailing newlines to files which have no trailing newlines. 2017-12-30 15:50:52 +08:00
bors
fdfb007109 Auto merge of #46862 - nikomatsakis:nll-master, r=arielb1
NLL feature complete (adds `feature(nll)`)!

This is the final PR for the nll-master branch; it brings over all remaining content.

The contents of the branch include:

- track causal information and use it to report extended errors
- handle `impl Trait` in NLL code
- improve printing of outlives errors
- add `#![feature(nll)]` and some more sample tests

The commits should for the most part build independently.

r? @pnkfelix (and/or @arielb1)
2017-12-20 23:26:20 +00:00
Niko Matsakis
3f490ca4bd convert region-liveness-drop{-,-no-}may-dangle.rs into ui tests
The "match exact bits of CFG" approach was fragile and uninformative.
2017-12-20 14:38:13 -05:00
bors
7eb64b86ce Auto merge of #46583 - scottmcm:fix-static-i128-lower, r=eddyb
Fix -Z lower_128bit_ops handling of statics

Avoids ICEs such as the following:
>  error: internal compiler error: src\librustc_metadata\cstore_impl.rs:131:
>  get_optimized_mir: missing MIR for `DefId(8/0:40 ~
>  compiler_builtins[9532]::int[0]::addsub[0]::rust_i128_addo[0])`

r? @nagisa

cc #45676 @est31
2017-12-20 17:34:17 +00:00
Scott McMurray
4b95ca8db2 Fix -Z lower_128bit_ops handling of statics
Avoids ICEs such as the following:
 error: internal compiler error: src\librustc_metadata\cstore_impl.rs:131:
 get_optimized_mir: missing MIR for `DefId(8/0:40 ~
 compiler_builtins[9532]::int[0]::addsub[0]::rust_i128_addo[0])`
2017-12-19 15:08:17 -05:00
Niko Matsakis
0f8ef0ca1a more concise debug output when dumping the value of a region 2017-12-15 10:27:54 -05:00
Niko Matsakis
e9824c50ed impose inputs/ouputs on MIR after the fact
The input/output types found in `UniversalRegions` are not normalized.
The old code used to assign them directly into the MIR, which would
lead to errors when there was a projection in a argument or return
type. This also led to some special cases in the `renumber` code.

We now renumber uniformly but then pass the input/output types into
the MIR type-checker, which equates them with the types found in MIR.
This allows us to normalize at the same time.
2017-12-15 10:27:53 -05:00
Niko Matsakis
c7cfa2367b thread through an implicit region body of the fn body 2017-12-15 10:27:50 -05:00
Niko Matsakis
77663a677d refactor region value bitmatrix 2017-12-13 12:20:27 -05:00
Niko Matsakis
05441abd2b add closure requirement tests, improve debugging output
The overall format is now easier to read. Also, There is now graphviz
output, as well as a `#[rustc_regions]` annotation that dumps internal
state.
2017-12-07 05:28:00 -05:00
bors
8503b3ff82 Auto merge of #46319 - nikomatsakis:nll-master-to-rust-master-2, r=pnkfelix
NLL: improve inference with flow results, represent regions with bitsets, and more

This PR begins with a number of edits to the NLL code and then includes a large number of smaller refactorings (these refactorings ought not to change behavior). There are a lot of commits here, but each is individually simple. The goal is to land everything up to but not including the changes to how we handle closures, which are conceptually more complex.

The NLL specific changes are as follows (in order of appearance):

**Modify the region inferencer's approach to free regions.** Previously, for each free region (lifetime parameter) `'a`, it would compute the set of other free regions that `'a` outlives (e.g., if we have `where 'a: 'b`, then this set would be `{'a, 'b}`). Then it would mark those free regions as "constants" and report an error if inference tried to extend `'a` to include any other region (e.g., `'c`) that is not in that outlives set. In this way, the value of `'a` would never grow beyond the maximum that could type check. The new approach is to allow `'a` to grow larger. Then, after the fact, we check over the value of `'a` and see what other free regions it is required to outlive, and we check that those outlives relationships are justified by the where clauses in scope etc.

**Modify constraint generation to consider maybe-init.** When we have a "drop-live" variable `x` (i.e., a variable that will be dropped but will not be otherwise used), we now consider whether `x` is "maybe initialized" at that point. If not, then we know the drop is a no-op, and we can allow its regions to be dead. Due to limitations in the fragment code, this currently only works at the level of entire variables.

**Change representation of regions to use a `BitMatrix`.** We used to use a `BTreeSet`, which was rather silly. We now use a MxN matrix of bits, where `M` is the number of variables and `N` is the number of possible elements in each set (size of the CFG + number of free regions).

The remaining commits (starting from
extract the `implied_bounds` code into a helper function ") are all "no-op" refactorings, I believe.

~~One concern I have is with the commit "with -Zverbose, print all details of closure substs"; this commit seems to include some "internal" stuff in the mir-dump files, such as internal interner numbers, that I fear may vary by platform. Annoying. I guess we will see.~~ (I removed this commit.)

As for reviewer, @arielb1 has been reviewing the PRs, and they are certainly welcome to review this one too. But I figured it'd maybe be good to have more people taking a look and being familiar with this code, so I'll "nominate" @pnkfelix .

r? @pnkfelix
2017-12-04 19:07:52 +00:00
Niko Matsakis
49d2274cfe constraint_generation: create liveness constraints more thoroughly
We now visit just the stuff in the CFG, and we add liveness
constraints for all the random types, regions etc that appear within
rvalues and statements.
2017-12-04 09:14:35 -05:00
Niko Matsakis
a96b0cf86d replace constant regions with a post-inference check
Rather than declaring some region variables to be constant, and
reporting errors when they would have to change, we instead populate
each free region X with a minimal set of points (the CFG plus end(X)),
and then we let inference do its thing. This may add other `end(Y)`
points into X; we can then check after the fact that indeed `X: Y`
holds.

This requires a bit of "blame" detection to find where the bad
constraint came from: we are currently using a pretty dumb
algorithm. Good place for later expansion.
2017-12-04 08:25:21 -05:00
Scott McMurray
1bc402fd80 Add an i128_lowering flag in TargetOptions
Not actually enabled by default anywhere yet.
2017-12-03 21:53:48 -08:00
Corey Farwell
94dbbacd45 Rollup merge of #46462 - sinkuu:copyprop_reg2, r=arielb1
Fix CopyPropagation regression (2)

Remaining part of MIR copyprop regression by (I think) #45380, which I missed in #45753.

```rust
fn foo(mut x: i32) -> i32 {
    let y = x;
    x = 123; // `x` is assigned only once in MIR, but cannot be propagated to `y`
    y
}
```

So any assignment to an argument cannot be propagated.
2017-12-03 17:43:48 -05:00
bors
9da2112238 Auto merge of #46320 - arielb1:always-resume, r=nikomatsakis
Always unwind through a Resume and other fixes

Should fix most of the small MIR borrowck issues.

r? @nikomatsakis
2017-12-03 13:01:47 +00:00
Ariel Ben-Yehuda
ff0b84df58 fix tests in wasm 2017-12-03 14:50:47 +02:00
Shotaro Yamada
17d6631c02 Fix MIR CopyPropagation regression 2017-12-03 17:42:52 +09:00
Scott McMurray
c0654ce815 Add ignore-emscripten too 2017-12-02 23:24:11 -08:00
Scott McMurray
ad2a8e8356 Ignore the lower_128bit tests on asmjs 2017-12-02 20:21:50 -08:00
Scott McMurray
49ee16131e Remove the unneeded #![feature(lang_items)]s 2017-12-02 20:16:44 -08:00
Scott McMurray
d775d79a01 Update compiler-builtins and use it the 128-bit lowering MIR test 2017-12-02 20:16:44 -08:00
Ariel Ben-Yehuda
6594799b2d add and unignore tests 2017-12-03 02:47:44 +02:00
Ariel Ben-Yehuda
9dc396747b funnel all unwind paths through a single Resume block
This simplifies analysis and borrow-checking because liveness at the
resume point can always be simply propagated.

Later on, the "dead" Resumes are removed.
2017-12-03 02:47:44 +02:00
Ariel Ben-Yehuda
a6e24fc31f initialize the destination in unit statements
Fixes #46159.
2017-12-03 02:21:13 +02:00
Alex Crichton
73970bf6f2 ci: Start running wasm32 tests on Travis
This commit allocates a builder to running wasm32 tests on Travis. Not all test
suites pass right now so this is starting out with just the run-pass and the
libcore test suites. This'll hopefully give us a pretty broad set of coverage
for integration in rustc itself as well as a somewhat broad coverage of the llvm
backend itself through integration/unit tests.
2017-11-28 09:27:35 -08:00
Eduard-Mihai Burtescu
919ed409b0 tests: update to include move annotations in MIR. 2017-11-28 04:18:32 +02:00