61 Commits

Author SHA1 Message Date
Eduard-Mihai Burtescu
c42a118188 MIR: split Operand::Consume into Copy and Move. 2017-11-28 04:18:32 +02:00
Matthew Jasper
d409dbf983 Add initialization info to MoveData
* Used for new dataflow to track if a variable has every been initialized
* Used for other dataflows that need to be updated for initializations
2017-11-27 08:06:36 +00:00
Keith Yeung
0996bb0901 Kill the storage for all locals on returning terminators 2017-11-24 12:00:59 -08:00
bors
b1409af73d Auto merge of #46032 - KiChjang:ignore-borrowck-statics, r=nikomatsakis
Ignore borrowck for static lvalues and allow assignment to static muts

Fixes #45129.
Fixes #45641.
2017-11-18 17:30:26 +00:00
Keith Yeung
c9d1db7bc5 Do not registor borrows for unsafe lvalues 2017-11-17 14:16:37 -08:00
Niko Matsakis
72675d82d7 replace RegionIndex with RegionVid (which now impls Idx) 2017-11-16 05:57:45 -05:00
Mikhail Modin
34be1516aa fix comment, remove redundant code 2017-11-15 11:21:05 +03:00
Mikhail Modin
830d65c1ff add StorageDead handling 2017-11-15 11:21:05 +03:00
bors
f93a4928c2 Auto merge of #45922 - vramana:fix-45702, r=nikomatsakis
Fix MIR borrowck EndRegion not found

Fixes #45702

- [x] Add Tests
2017-11-15 04:48:16 +00:00
matthewjasper
a6824f18b8 Use the correct type for cannot move error 2017-11-13 22:40:22 +00:00
Ramana Venkata
fbb7df0f82 Fix MIR borrowck EndRegion not found
Updated tests

Fixes #45702
2017-11-11 04:40:23 +05:30
Mikhail Modin
3ccb567b90 Add TerminatorKind::DropAndReplace handling 2017-11-09 11:55:23 +03:00
Mikhail Modin
e48691a578 restore move out dataflow, add report of move out errors 2017-11-08 22:04:56 +03:00
bors
785643a5eb Auto merge of #45668 - nikomatsakis:nll-free-region, r=arielb1
extend NLL with preliminary support for free regions on functions

This PR extends https://github.com/rust-lang/rust/pull/45538 with support for free regions. This is pretty preliminary and will no doubt want to change in various ways, particularly as we add support for closures, but it's enough to get the basic idea in place:

- We now create specific regions to represent each named lifetime declared on the function.
- Region values can contain references to these regions (represented for now as a `BTreeSet<RegionIndex>`).
- If we wind up trying to infer that `'a: 'b` must hold, but no such relationship was declared, we report an error.

It also does a number of drive-by refactorings.

r? @arielb1

cc @spastorino
2017-11-06 23:30:57 +00:00
Niko Matsakis
b772827350 encapsulate the Region struct within region inference 2017-11-02 04:40:50 -04:00
Niko Matsakis
cafbd99c38 extend NLL regions to include free region indices and add outlives 2017-11-02 04:40:50 -04:00
Mikhail Modin
2d71c5f10c add TerminatorKind::FalseEdges and use it in matches 2017-11-02 09:43:36 +03:00
Niko Matsakis
a94b01a0e2 connect MIR borrowck with NLL 2017-10-31 12:41:40 -04:00
Niko Matsakis
81449174f3 make the dataflow / mir-borrowck types carry a 'tcx lifetime
Also, factor out `do_mir_borrowck`, which is the code that actually
performs the MIR borrowck from within the scope of an inference context.

This change should be a pure refactoring.
2017-10-31 12:41:40 -04:00
Niko Matsakis
82b287a8c8 test "needs drop" on region-erased, lifted types
This will be important in next commit, since the input types will be
tagged not with `'gcx` but rather `'tcx`. Also, using the region-erased,
lifted types enables better caching.
2017-10-31 12:41:40 -04:00
Niko Matsakis
f700728a3b make end-point optional in the borrow check 2017-10-31 12:41:39 -04:00
bors
650b1b1f3a Auto merge of #45016 - pnkfelix:mir-borrowck-gather-and-signal-move-errors, r=nikomatsakis
MIR-borrowck: gather and signal any move errors

When building up the `MoveData` structure for a given MIR, also accumulate any erroneous actions, and then report all of those errors when the construction is complete.

This PR adds a host of move-related error constructor methods to `trait BorrowckErrors`. I think I got the notes right; but we should plan to audit all of the notes before turning MIR-borrowck on by default.

Fix #44830
2017-10-08 18:12:26 +00:00
kennytm
9a43c28e6b Rollup merge of #44987 - pnkfelix:mir-borrowck-fix-borrowindexes-ice, r=arielb1
`EndRegion` do not always correspond to borrow-data entries

Remove assertion that the argument to every `EndRegion` correspond to some dataflow-tracked borrow-data entry.

Fix #44828

(The comment thread on the aforementioned issue discusses why its best to just remove this assertion.)
2017-10-05 20:22:34 +08:00
Felix S. Klock II
5a16ef4936 Made move_paths::MoveError take span param in cannot_move_out_of ctor.
Implicitly threaded `Location` through MoveData construction via a
`Gatherer` struct (so that we could look up the span corresponding to
the location when we need to signal an error).
2017-10-04 12:48:36 +02:00
Felix S. Klock II
43fb82d2fa mir-borrowck: Gather move errors during MoveData construction and report them.
Currently is using DUMMY_SP as the associated span; a follow-up commit
will pass in appropriate spans when constructing the errors.
2017-10-04 12:48:20 +02:00
Mikhail Modin
c68b10f5ee add notes to report_conflicting_borrow MIR borrowck 2017-10-04 10:35:42 +03:00
Felix S. Klock II
17f6b6810b Remove assertion that the argument to every EndRegion correspond to
some dataflow-tracked borrow-data entry.

Fix #44828

(The comment thread on the aforementioned issue discusses why its best
to just remove this assertion.)
2017-10-02 22:40:51 +02:00
John Kåre Alsaker
efc7d46188 Analyse storage liveness and preserve it during generator transformation 2017-09-13 23:28:10 +02:00
Eduard-Mihai Burtescu
2f42cd8489 rustc_mir: use Local in ProjectionElem::Index. 2017-09-03 21:55:41 +03:00
Eduard-Mihai Burtescu
8bdfd8a003 rustc: rename CodeExtent to Scope and RegionMaps to ScopeTree. 2017-09-01 23:27:48 +03:00
Alex Crichton
b31998ec93 Merge remote-tracking branch 'origin/master' into gen 2017-08-21 10:41:56 -07:00
Vadim Petrochenkov
de4dbe5789 rustc: Remove some dead code 2017-08-19 13:27:16 +03:00
Alex Crichton
5f4a99fa8b Merge remote-tracking branch 'origin/master' into gen 2017-08-16 11:33:10 -07:00
Alex Crichton
1210ebff43 Merge remote-tracking branch 'origin/master' into gen 2017-08-16 10:03:47 -07:00
Felix S. Klock II
b6528f073f Cleanup: Every BitDenotation is a DataflowOperator, so build that in.
Post-rebase: ariel confirmed `SetDiscriminant` should indeed be a mutate.
2017-08-16 16:08:39 +02:00
Felix S. Klock II
15c411d7c1 Added some documentation for the struct BlockSets in rustc_mir::dataflow. 2017-08-16 16:08:39 +02:00
Felix S. Klock II
018784afc9 MIR based borrow check (opt-in).
One can either use `-Z borrowck-mir` or add the `#[rustc_mir_borrowck]` attribute
to opt into MIR based borrow checking.

Note that regardless of whether one opts in or not, AST-based borrow
check will still run as well.  The errors emitted from AST-based
borrow check will include a "(Ast)" suffix in their error message,
while the errors emitted from MIR-based borrow check will include a
"(Mir)" suffix.

post-rebase: removed check for intra-statement mutual conflict;
replaced with assertion checking that at most one borrow is generated
per statement.

post-rebase: removed dead code: `IdxSet::pairs` and supporting stuff.
2017-08-16 16:08:28 +02:00
Felix S. Klock II
869f05a521 Factored MoveData construction code into builder submodule. 2017-08-16 15:53:27 +02:00
Felix S. Klock II
9b8b8c6aeb Move DataFlowState::{each_bit,interpret_set} method definitions to parent module.
Refactored `each_bit`, which traverses a `IdxSet`, so that the bulk of
its implementation lives in `rustc_data_structures`.
2017-08-16 15:53:27 +02:00
Felix S. Klock II
3ef1afcf6b remove now unnecessary constraint on BitDenotation for fn do_dataflow. 2017-08-16 15:53:27 +02:00
Felix S. Klock II
e8ebc902e8 Migrated some code out of dataflow::drop_flag_effects and into its parent module.
(This code is more general purpose than just supporting drop flag elaboration.)
2017-08-16 15:53:27 +02:00
Felix S. Klock II
9f6ef669d6 Added dataflow analysis for Borrows.
post-rebase: addressed review comment: rename `loc_map`/`location_map` and `rgn_map`/`region_map`.

post-rebase: remove now unnecessary `mut` decl.

post-rebase: address comments: bind iterator expr, and alpha-rename `loc`/`location` and `idx`/`index`.
2017-08-16 15:53:27 +02:00
Felix S. Klock II
cff060b960 Refactor trait BitDenotation to take Location instead of BasicBlock/usize argument pairs. 2017-08-16 15:53:27 +02:00
Zack M. Davis
1b6c9605e4 use field init shorthand EVERYWHERE
Like #43008 (f668999), but _much more aggressive_.
2017-08-15 15:29:17 -07:00
Alex Crichton
1413253a41 Merge remote-tracking branch 'origin/master' into gen 2017-08-14 19:36:13 -07:00
Bastien Orivel
3ab86fbab2 Fix some typos 2017-08-12 14:01:11 +02:00
bors
bffc973da8 Auto merge of #43794 - Eijebong:fix_typos, r=lukaramu,steveklanik,imperio
Fix some typos

I wrote a really naive script and found those typos in the documentation.
2017-08-12 05:52:19 +00:00
John Kåre Alsaker
d020ff0c68 Merge branch 'master' of https://github.com/rust-lang/rust into gen
# Conflicts:
#	src/librustc_mir/build/scope.rs
2017-08-12 07:11:19 +02:00
Bastien Orivel
47cb3c5bc2 Fix some typos 2017-08-11 00:16:18 +02:00
Ariel Ben-Yehuda
17d2bcd162 For box expressions, use NZ drop instead of a free block
This falls naturally out of making drop elaboration work with `box`
expressions, which is probably required for sane MIR borrow-checking.
This is a pure refactoring with no intentional functional effects.
2017-08-10 15:57:28 +03:00