27 Commits

Author SHA1 Message Date
Felix S. Klock II
39e126c001 Refactoring alpha-rename place (BorrowData field) to borrowed_place. 2017-12-13 13:50:40 -06:00
Felix S. Klock II
d4add5d52a Refactoring: pull bitvector initialization out from other parts of dataflow.
This is meant to ease development of multi-stage dataflow analyses
where the output from one analysis is used to initialize the state
for the next; in such a context, you cannot start with `bottom_value`
for all the bits.
2017-12-13 13:50:39 -06:00
David Wood
15b8fbdfb3
Added test for #46472 2017-12-11 20:26:06 +00:00
Ariel Ben-Yehuda
97c58ed66c avoid passing the gen/kill bits to start_block_effects
If the gen/kill bits are set there, the effects of `start_block_effects`
will not be seen when using `FlowAtLocation` etc. to go over the MIR.

EverInitializedLvals is the only pass that got this wrong, but this
fixes the footgun for everyone.
2017-12-10 17:46:31 +02:00
Ariel Ben-Yehuda
6b9fbb2ab8 fix borrows across loops, libcore *almost* compiles 2017-12-06 00:34:02 +02:00
Ariel Ben-Yehuda
243c5a5faa fix handling of CallScopeData
This fixes the tests for issue #29793
2017-12-06 00:34:01 +02: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
Paul Daniel Faria
a9cb25b23a inform constraint generation using maybe-init
In particular, if we see a variable is DROP-LIVE, but it is not
MAYBE-INIT, then we can ignore the drop. This leavess attempt to use
more complex refinements of the idea (e.g., for subpaths or subfields)
to future work.
2017-12-04 08:51:11 -05:00
Ariel Ben-Yehuda
25416c7081 don't track borrows for empty regions
Region inference can create borrows for an empty region if the borrow is
dead. In that case, there's no reason to track the borrow, but because
there's no such thing as an EndRegion(ReEmpty) these borrows used to live
for the entire function.

Fixes #46161.
2017-12-03 02:29:04 +02:00
Ariel Ben-Yehuda
af8c2339cf fix handling of borrows at a function's end 2017-12-03 02:21:13 +02:00
Eduard-Mihai Burtescu
473f044225 MIR: s/lv(al(ue)?)?/place in function/variable/module names. 2017-12-01 18:48:57 +02:00
Eduard-Mihai Burtescu
511743c438 MIR: s/Lvalue/Place in type names. 2017-12-01 18:47:36 +02: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
Ramana Venkata
fbb7df0f82 Fix MIR borrowck EndRegion not found
Updated tests

Fixes #45702
2017-11-11 04:40:23 +05:30
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
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
f700728a3b make end-point optional in the borrow check 2017-10-31 12:41:39 -04: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
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
Eduard-Mihai Burtescu
8bdfd8a003 rustc: rename CodeExtent to Scope and RegionMaps to ScopeTree. 2017-09-01 23:27:48 +03: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