911 Commits

Author SHA1 Message Date
Eduard-Mihai Burtescu
ea6aca7726 rustc: take TyCtxt and RegionMaps in CodeMap::span. 2017-09-01 11:17:03 +03:00
bors
7eeac1b814 Auto merge of #43932 - eddyb:const-scoping, r=nikomatsakis
Forward-compatibly deny drops in constants if they *could* actually run.

This is part of #40036, specifically the checks for user-defined destructor invocations on locals which *may not* have been moved away, the motivating example being:
```rust
const FOO: i32 = (HasDrop {...}, 0).1;
```
The evaluation of constant MIR will continue to create `'static` slots for more locals than is necessary (if `Storage{Live,Dead}` statements are ignored), but it shouldn't be misusable.

r? @nikomatsakis
2017-08-30 20:12:25 +00:00
Vadim Petrochenkov
3da868dcb6 Make fields of Span private 2017-08-30 01:38:54 +03:00
Eduard-Mihai Burtescu
c76a024121 rustc: treat impl associated consts like const items for constness. 2017-08-28 09:27:58 +03:00
Eduard-Mihai Burtescu
9b61771ea8 rustc_mir: conservatively deny non-noop drops in constant contexts. 2017-08-28 09:27:05 +03:00
John Kåre Alsaker
d29af37999 Merge branch 'master' of https://github.com/rust-lang/rust into gen 2017-08-28 02:41:16 +02:00
bors
315e7022f3 Auto merge of #44082 - pnkfelix:issue-43457, r=eddyb
Fix destruction extent lookup during HIR -> HAIR translation

My method for finding the destruction extent, if any, from cbed41a174aad44e069bec09bf1e502591c132ae (in #39409), was buggy in that it sometimes failed to find an extent that was nonetheless present.

This fixes that, and is cleaner code to boot.

Fix #43457
2017-08-26 17:48:29 +00:00
bors
e7070dd019 Auto merge of #44071 - alexcrichton:no-cycles, r=nikomatsakis
rustc: Start moving toward "try_get is a bug" for incremental

This PR is an effort to burn down some of the work items on #42633. The basic change here was to leave the `try_get` function exposed but have it return a `DiagnosticBuilder` instead of a `CycleError`. This means that it should be a compiler bug to *not* handle the error as dropping a diagnostic should result in a complier panic.

After that change it was then necessary to update the compiler's callsites of `try_get` to handle the error coming out. These were handled as:

* The `sized_constraint` and `needs_drop_raw` checks take the diagnostic and defer it as a compiler bug. This was a new piece of functionality added to the error handling infrastructure, and the idea is that for both these checks a "real" compiler error should be emitted elsewhere, so it's only a bug if we don't actually emit the complier error elsewhere.
* MIR inlining was updated to just ignore the diagnostic. This is being tracked by https://github.com/rust-lang/rust/issues/43542 which sounded like it either already had some work underway or was planning to change regardless.
* The final case, `item_path`, is still sort of up for debate. At the time of this writing this PR simply removes the invocations of `try_get` there, assuming that the query will always succeed. This turns out to be true for the test suite anyway! It sounds like, though, that this logic was intended to assist in "weird" situations like `RUST_LOG` where debug implementations can trigger at any time. This PR would therefore, however, break those implementations.

I'm unfortunately sort of out of ideas on how to handle `item_path`, but other thoughts would be welcome!

Closes #42633
2017-08-26 08:25:44 +00:00
Alex Crichton
82bad957c0 rustc: Add a FIXME for try_get in MIR inlining
It sounds like this is being handled elsewhere, so for now just preserve the
existing behavior of ignoring th error.
2017-08-25 16:08:35 -07:00
Tamir Duberstein
b3f50caee0
*: remove crate_{name,type} attributes
Fixes #41701.
2017-08-25 16:18:21 -04:00
John Kåre Alsaker
c71153113b Add some comments and fix a typo 2017-08-25 19:19:42 +02:00
Alex Crichton
1917ffe314 Add some suggested comments around drops 2017-08-25 07:38:57 -07:00
Alex Crichton
74b93f35da Add a self_arg convenience 2017-08-25 07:19:40 -07:00
Alex Crichton
303a26406a Reorder slightly in visit_basic_block_data 2017-08-25 07:17:37 -07:00
Alex Crichton
b28aeeb04e Fix indentation 2017-08-25 07:16:24 -07:00
Alex Crichton
c872f47276 Merge remote-tracking branch 'origin/master' into gen 2017-08-25 07:15:12 -07:00
Felix S. Klock II
b8d8dc3c23 Fix #43457 (and avoid some unneeded lookups to boot, woo). 2017-08-25 16:08:03 +02:00
Felix S. Klock II
fbb099edca Fix logic error in test guarding prototype MIR borrowck code.
(This crept in during the shift from a transform to a query; I didn't
notice because my muscle memory was still always passing `-Z
mir-borrowck`, while my test cases *also* had the
`#[rustc_mir_borrowck]` attribute attached to them.)
2017-08-22 12:05:52 +02:00
Alex Crichton
c74ff320ee More merge conflicts 2017-08-21 22:09:50 -07:00
Alex Crichton
04c66c30a7 Merge remote-tracking branch 'origin/master' into gen 2017-08-21 21:47:07 -07:00
bors
942711e115 Auto merge of #43690 - scalexm:issue-28229, r=nikomatsakis
Generate builtin impls for `Clone`

This fixes a long-standing ICE and limitation where some builtin types implement `Copy` but not `Clone` (whereas `Clone` is a super trait of `Copy`).

However, this PR has a few side-effects:
* `Clone` is now marked as a lang item.
* `[T; N]` is now `Clone` if `T: Clone` (currently, only if `T: Copy` and for `N <= 32`).
* `fn foo<'a>() where &'a mut (): Clone { }` won't compile anymore because of how bounds for builtin traits are handled (e.g. same thing currently if you replace `Clone` by `Copy` in this example). Of course this function is unusable anyway, an error would pop as soon as it is called.

Hence, I'm wondering wether this PR would need an RFC...
Also, cc-ing @nikomatsakis, @arielb1.

Related issues: #28229, #24000.
2017-08-22 01:34:54 +00:00
Alex Crichton
5dc9d71521 Merge remote-tracking branch 'origin/master' into gen 2017-08-21 15:50:00 -07:00
Alex Crichton
35b8dbaef3 Merge remote-tracking branch 'origin/master' into gen 2017-08-21 15:45:40 -07:00
bors
4fdb4bedfd Auto merge of #44009 - pnkfelix:mir-borrowck-as-query, r=arielb1
Mir borrowck as query

Turn the `mir-borrowck` pass (aka "transform") into a query.

(If I had realized how relatively easy this was going to be, I would have made it part of #43108. `let hindsight = 20/20;`)
2017-08-21 20:16:21 +00:00
Alex Crichton
b31998ec93 Merge remote-tracking branch 'origin/master' into gen 2017-08-21 10:41:56 -07:00
bors
80be2f8697 Auto merge of #43971 - alexcrichton:lint-statements, r=michaelwoerister
rustc: Add `Local` to the HIR map of parents

When walking parents for lints we want to be sure to hit `let` statements which
can have attributes, so hook up these statements in the HIR map.

Closes #43910
2017-08-21 17:38:26 +00:00
Felix S. Klock II
224c6ca2ee Moved support code for rustc_mir::borrow_check query out of mod transform. 2017-08-21 13:10:13 +02:00
Felix S. Klock II
c280afcc1c Remove the rustc_mir::transform entry point for mir-borrowck. 2017-08-21 12:49:18 +02:00
Felix S. Klock II
4da2a88abc Expose mir-borrowck via a query.
(A followup commit removes the mir::transform based entry point.)
2017-08-21 12:49:18 +02:00
Vadim Petrochenkov
de4dbe5789 rustc: Remove some dead code 2017-08-19 13:27:16 +03:00
Alex Crichton
9b6f9d0bc4 rustc: Rename NodeLocal to NodeBinding 2017-08-17 23:00:57 -07:00
Alex Crichton
4b5f330c70 Merge remote-tracking branch 'origin/master' into gen 2017-08-17 13:23:20 -07:00
Corey Farwell
584dacf1f9 Rollup merge of #43920 - michael-zapata:cleanup/mir, r=arielb1
refactor(mir): remove unused argument

Small cleanup that shouldn't have any impact, as it's a small thing introduced in #43772
2017-08-17 10:44:13 -04:00
bors
dd39ecf368 Auto merge of #43902 - michaelwoerister:fix-mir-passes-promoted, r=arielb1
Run MIR passes on promoted temporaries again.

This seems to have been broken some time in the past (maybe here: 9c154a67bf (diff-2f8e8805126c84b2be3f0967ffa0af28L162)).

r? @arielb1
2017-08-17 10:58:12 +00:00
Michael Zapata
3ffe01f40a
refactor(mir): remove unused argument
Small cleanup that shouldn't have any impact
2017-08-17 19:01:59 +12:00
Alex Crichton
63477fdece Fix merge conflicts 2017-08-16 13:05:48 -07:00
Alex Crichton
5f4a99fa8b Merge remote-tracking branch 'origin/master' into gen 2017-08-16 11:33:10 -07:00
Alex Crichton
0697e4b17a Fix merge conflict 2017-08-16 10:27:20 -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
6d6280e00c Address review comment: StatementKind::StorageDead has an effect (running dtors) relevant to borrowck. 2017-08-16 16:08:39 +02: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
Felix S. Klock II
8e79fc72cb Move borrowck error msg construction to module in rustc_mir (for later reuse by mir borrowck).
post-rebase: Do not put "(Ast)" suffix in error msg unless passed `-Z borrowck-mir`.
(But unconditionally include "(Mir)" suffix for mir-borrowck errors.)
2017-08-16 15:52:45 +02:00