Commit graph

1048 commits

Author SHA1 Message Date
bors
f5eb33f4e5 Auto merge of #45200 - mikhail-m1:match-with-false-edges, r=nikomatsakis
MIR-borrowck: add false edges to match arms

basic fix for https://github.com/rust-lang/rust/issues/45043, should be modified with #45184
2017-10-15 02:20:13 +00:00
bors
9c5e9a500d Auto merge of #45167 - pnkfelix:migrate-remaining-ast-diagnostics, r=arielb1
MIR-borrowck: Migrate remaining ast diagnostics

This PR migrates all of the remaining diagnostics in `rustc_borrowck` over to `rustc_mir`, exposing them for use by both AST-borrowck and MIR-borrowck.

This should hopefully resolve all remaining cases of diagnostic messages emitted from borrowck under `-Z borrowck-mir` without an origin annotation.
2017-10-14 13:47:44 +00:00
Santiago Pastorino
9603e240d4 Add License to infer.rs 2017-10-13 08:43:27 -04:00
Santiago Pastorino
e99702f570 TODO -> FIXME 2017-10-13 08:43:27 -04:00
Santiago Pastorino
88b02ef857 Add allow_dead code directive to unused methods 2017-10-13 08:43:27 -04:00
Santiago Pastorino
50ac63b9b1 Do not move infcx, just borrow it 2017-10-13 08:43:27 -04:00
Santiago Pastorino
6c52275c2d borrow block_data instead of moving it 2017-10-13 08:43:27 -04:00
Santiago Pastorino
c0e6a15130 sup_def is a mutable reference 2017-10-13 08:43:27 -04:00
Santiago Pastorino
2720f635a3 inteference_context should be mut 2017-10-13 08:43:27 -04:00
Santiago Pastorino
25aa6eaf30 Mark Region as public 2017-10-13 08:43:27 -04:00
Santiago Pastorino
3372b899d8 Mark free regions handling as TODO 2017-10-13 08:42:54 -04:00
Paul Faria
cc2a1c7bd8 Initial attempt at implementation of inference layout for nll 2017-10-13 08:42:54 -04:00
bors
86e548747b Auto merge of #45025 - pnkfelix:mir-borrowck-moves-of-supporting-prefixes-invalidate-uses-too, r=arielb1
MIR-borrowck: moves of prefixes invalidate uses too

I overlooked the fact that when we check if a path is moved, we need to check for interference between the (shallow) prefixes and the use in question.

~~Long term, we may want to revise how this computation is done. For example, it might be better to represent the set of invalidated prefixes in the dataflow computation (the `maybe_uninitialized` dataflow), and thus avoid one of the loops in the code here.~~
 * Update: I was wrong in my original recollection of the dataflow code, which actually does the right thing, in terms of precisely tracking substructure initialization and movement.

Fix #44833

----

Update: The initial version of this PR's description (and the code as well) erroneously focused on supporting prefixes. ~~But the two main cases of interest are: 1. the *shallow* prefixes, and 2. the deref-free prefix built off a local (if the lvalue is indeed built off a local)~~

Update 2: The main cases of interest are in fact: 1. the nearest prefix with a MovePath, and 2. the suffixes.
2017-10-13 04:00:55 +00:00
bors
91eb6fe56d Auto merge of #45013 - chrisvittal:mir_pretty_printing_pr, r=nikomatsakis
Extend mir dump to dump each region

Building on #44878, implement the feature discussed in #44872.

Through discussions on the WG-nll-gitter, @nikomatsakis and I decided to implement this by extending `dump_mir` and all functions that it calls to take a callback of signature `FnMut(PassWhere, &mut Write) -> io::Result<()>` where `PassWhere` is an enum that represents possible locations that we may want to print out extra data in the process of dumping the MIR.

I'm not particularly wedded to the name `PassWhere`, but I felt that simply calling the enum `Where` wasn't the right thing to name it.

This work depends strongly on #44878, and should be rebased on the final version of that tree, whatever that may be.
2017-10-13 01:33:34 +00:00
bors
d27411494a Auto merge of #44985 - zilbuz:issue-44974, r=pnkfelix
MIR borrowck: print lvalues in error messages in the same way that the AST borrowck

Fix #44974

- Print fields with `.name` rather than `.<num>`
- Autoderef values if followed by a field or an index
- Output `[..]` when borrowing inside a slice
2017-10-12 03:40:10 +00:00
Felix S. Klock II
dcada26f5b MIR-borrowck: Big fix to fn check_if_path_is_moved.
Fix #44833 (a very specific instance of a very broad bug).

In `check_if_path_is_moved(L)`, check nearest prefix of L with
MovePath, and suffixes of L with MovePaths.

Over the course of review, ariel pointed out a number of issues that
led to this version of the commit:

1. Looking solely at supporting prefixes does not suffice: it
   overlooks checking if the path was ever actually initialized in the
   first place. So you need to be willing to consider non-supporting
   prefixes.  Once you are looking at all prefixes, you *could* just
   look at the local that forms the base of the projection, but to
   handle partial initialization (which still needs to be formally
   specified), this code instead looks at the nearest prefix of L that
   has an associated MovePath (which, in the limit, will end up being
   a local).

2. You also need to consider the suffixes of the given Lvalue, due to
   how dataflow is representing partial moves of individual fields out
   of struct values.

3. (There was originally a third search, but ariel pointed out that
   the first and third could be folded into one.)

Also includes some drive-by refactorings to simplify some method
signatures and prefer `for _ in _` over `loop { }` (at least when it
comes semi-naturally).
2017-10-11 22:35:02 +02:00
Your Name
8a28c676c8 MIR-borrowck: add false edges to match arms 2017-10-11 17:39:45 +03:00
Felix S. Klock II
5b68e1f8da Add Origin::Ast arguments to all of the migrated AST-borrowck diagnostics. 2017-10-10 13:12:00 +02:00
Felix S. Klock II
cf11ef436b Fixed client code for diagnostics migration, adding new methods to trait BorrowckErrors as necessary. 2017-10-10 13:12:00 +02:00
Felix S. Klock II
52cb6fc936 Moved remaining AST-borrowck diagnostic definitions to rustc_mir crate. 2017-10-10 13:12:00 +02: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
Basile Desloges
e32e81c9da mir-borrowck: Implement end-user output for field of subslice and slice type 2017-10-06 18:23:53 +02:00
Basile Desloges
8b8cdd984a mir-borrowck: Append _ or .. depending on the context if a local variable hasn't a name 2017-10-06 17:44:50 +02:00
Basile Desloges
ca5dc86c5a mir-borrowck: Implement end-user output for field of reference, pointer and array 2017-10-06 17:44:50 +02:00
Basile Desloges
9ce2f3af93 mir-borrowck: Implement end-user output for field of index projection 2017-10-06 17:44:50 +02:00
Basile Desloges
ce3b2e779e mir-borrowck: Implement end-user output for field of field projection 2017-10-06 17:44:50 +02:00
Basile Desloges
f35c4e3aa1 mir-borrowck: Implement end-user output for field of downcast projection 2017-10-06 17:44:50 +02:00
Basile Desloges
0241ea45b2 mir-borrowck: Replace all constant index and sublices output with [..] to match the AST borrowck output 2017-10-06 17:44:50 +02:00
Basile Desloges
ef2f42d04a mir-borrowck: Autoderef values followed by a constant index, and fix reported lvalue for constant index
Previously the constant index was reported as `[x of y]` or `[-x of y]` where
`x` was the offset and `y` the minimum length of the slice. The minus sign
wasn't in the right case since for `&[_, x, .., _, _]`, the error reported was
`[-1 of 4]`, and for `&[_, _, .., x, _]`, the error reported was `[2 of 4]`.
This commit fixes the sign so that the indexes 1 and -2 are reported, and
remove the ` of y` part of the message to make it more succinct.
2017-10-06 17:44:50 +02:00
Basile Desloges
456e12ec38 mir-borrowck: Panic when trying to print a field access on a non-box type that is neither Adt nor tuple 2017-10-06 17:44:50 +02:00
Basile Desloges
aa78919733 mir-borrowck: print values in error messages in the same way that the AST borrowck
- Print fields with `.name` rather than `.<num>`
- Autoderef values if followed by a field or an index
2017-10-06 17:44:50 +02:00
bors
4531131bf3 Auto merge of #44878 - Nashenas88:master, r=nikomatsakis
Store a new Region value every time we create a new region variable

Paired with @spastorino to walk through this and implement #44870.
2017-10-05 17:14:12 +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
Christopher Vittal
54d63a0d33 Expand mir dump in order to handle NLL pass
Extend `dump_mir` and functions it calls in order to allow callers to
add custom information. We do this by adding an enum `PassWhere` and
an extra argument of type `FnMut(PassWhere, &mut Write) ->
io::Result<()>`.  This callback is responsible for printing the extra
information when MIR is dumped at various stages.

For the "nll" pass, use the new mechanism to dump the `Region`
information after the header, but before the control flow graph for
every function.

In the interest of keeping the output somewhat concise, implement
a custom Debug impl for `Region`

Open Questions:

    * What should we call what has been called `PassWhere` so far?
2017-10-04 23:45:09 -04:00
Santiago Pastorino
271a492cb2 Generate ScopeId using newtype_index macro 2017-10-04 23:51:43 -03:00
Santiago Pastorino
b5a5556dd4 Generate DepNodeIndexNew using newtype_index macro 2017-10-04 23:51:43 -03:00
Santiago Pastorino
3502bec032 Make newtype_index get debug_name using reflection 2017-10-04 23:50:53 -03:00
Santiago Pastorino
9af7426b47 Make newtype_index macro use full path to resolve constants 2017-10-04 23:50:53 -03:00
Santiago Pastorino
c8549a1586 Generate Idx in nll using newtype_index! 2017-10-04 23:50:53 -03:00
Santiago Pastorino
f5cef21569 Convert regions to IndexVec 2017-10-04 23:50:53 -03:00
Paul Faria
0c5de8633c Store a new Region value every time we create a new region variable 2017-10-04 23:50:53 -03:00
bors
d7e73e4b1a Auto merge of #44901 - michaelwoerister:on-demand-eval, r=nikomatsakis
incr.comp.: Switch to red/green change tracking, remove legacy system.

This PR finally switches incremental compilation to [red/green tracking](https://github.com/rust-lang/rust/issues/42293) and completely removes the legacy dependency graph implementation -- which includes a few quite costly passes that are simply not needed with the new system anymore.

There's still some documentation to be done and there's certainly still lots of optimizing and tuning ahead -- but the foundation for red/green is in place with this PR. This has been in the making for a long time `:)`

r? @nikomatsakis
cc @alexcrichton, @rust-lang/compiler
2017-10-04 19:14:41 +00: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
117586e6e9 Add method to Mir that maps a Location to its SourceInfo. 2017-10-04 12:48:28 +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
Felix S. Klock II
fdd7d13c24 Move E0509 diagnostic into mod borrowck_errors shared between ast- and mir-borrowck. 2017-10-04 12:47:53 +02:00
Felix S. Klock II
a995b56a5e Move E0508 diagnostic into mod borrowck_errors shared between ast- and mir-borrowck. 2017-10-04 12:47:46 +02:00
Felix S. Klock II
a12cefb497 Move E0507 diagnostic into mod borrowck_errors shared between ast- and mir-borrowck.
(Had to modify signature of `report_cannot_move_out_of` slightly to
satisfy requirements of newly added `fn cannot_move_out_of` method.)
2017-10-04 12:47:40 +02:00
Mikhail Modin
c68b10f5ee add notes to report_conflicting_borrow MIR borrowck 2017-10-04 10:35:42 +03:00
bors
f1938cf13b Auto merge of #44999 - pnkfelix:mir-borrowck-fix-assert-left-right, r=nikomatsakis
Overlapping borrows can point to different lvalues.

Overlapping borrows can point to different lvalues.

There's always a basis for the overlap, so instead of removing the assert entirely, I instead pass in the prefix that we found and check that it actually is a prefix of both lvalues.

Fix #44829
2017-10-04 03:28:24 +00:00