Commit Graph

550 Commits

Author SHA1 Message Date
Patrick Walton
2e6a91812c librustc: Add a new nop statement to the MIR.
This is useful when passes want to remove statements without affecting
`Location`s.
2016-09-19 11:17:12 -07:00
Ariel Ben-Yehuda
eeedc144be fix dynamic drop for unions
Moving out of a union is now treated like moving out of its parent type.

Fixes #36246
2016-09-16 15:08:32 +03:00
Ariel Ben-Yehuda
7b25e88602 forbid moves out of slices
The wording of RFC #495 enables moves out of slices. Unfortuantely, non-zeroing
moves out of slices introduce a very annoying complication: as slices can
vary in their length, indexes from the start and end may or may not overlap
depending on the slice's exact length, which prevents assigning a particular
drop flag for each individual element.

For example, in the code

```Rust
fn foo<T>(a: Box<[Box<[T]>]>, c: bool) -> T {
    match (a, c) {
        (box [box [t, ..], ..], true) => t,
        (box [.., box [.., t]], false) => t,
        _ => panic!()
    }
}
```

If the condition is false, we have to drop the first element
of `a`, unless `a` has size 1 in which case we drop all the elements
of it but the last.

If someone comes with a nice way of handling it, we can always re-allow
moves out of slices.

This is a [breaking-change], but it is behind the `slice_patterns` feature
gate and was not allowed until recently.
2016-09-16 15:08:32 +03:00
Ariel Ben-Yehuda
eb19cd6575 groundwork refactoring of gather_moves 2016-09-16 15:08:32 +03:00
Vadim Petrochenkov
f2b672d556 Refactor TyStruct/TyEnum/TyUnion into TyAdt 2016-09-08 22:17:53 +03:00
Vadim Petrochenkov
e05e74ac83 Replace _, _ with .. 2016-09-04 12:30:33 +03:00
Vadim Petrochenkov
6f7e51e49b Replace _, _, _ with .. 2016-09-04 12:27:01 +03:00
Vadim Petrochenkov
93067ca089 Address comments and add requested tests 2016-09-03 13:39:35 +03:00
Vadim Petrochenkov
5f975e969b Support unions in borrow checker
Add some more tests
2016-09-03 13:39:35 +03:00
Vadim Petrochenkov
641d8e9e4c Some better support for unions through the compiler 2016-09-03 13:39:34 +03:00
Jonathan Turner
59c0ff6314 Rollup merge of #36171 - jonathandturner:temporary_value, r=nikomatsakis
Update lifetime errors to specifically note temporaries

This PR updates the error message we give in the case of a temporary value not living long enough.

Before:

<img width="497" alt="screen shot 2016-08-31 at 10 02 47 am" src="https://cloud.githubusercontent.com/assets/547158/18138551/27a06794-6f62-11e6-9ee2-bdf8bed75ca7.png">

Now:

<img width="488" alt="screen shot 2016-08-31 at 10 03 01 am" src="https://cloud.githubusercontent.com/assets/547158/18138557/2e5cf322-6f62-11e6-9047-4a78abf3d78c.png">

Specifically, it makes the following changes:

* Detects if a temporary is being used.  If so, it changes the labels to mention that a temporary value specifically is in question
* Simplifies wording of the existing labels to focus on lifetimes rather than values being valid
* Changes the help to a note, since the help+span wasn't as helpful (and sometimes more confusing) than just a note.

r? @nikomatsakis
2016-09-02 15:28:51 -07:00
Jonathan Turner
439afcd974 Update error message for lifetime of borrowed values 2016-08-31 17:48:26 -07:00
Jeffrey Seyfried
c14ff2884d Rollup merge of #35917 - jseyfried:remove_attr_ext_traits, r=nrc
syntax: Remove traits `AttrMetaMethods`, `AttributeMethods`, and `AttrNestedMetaItemMethods`
2016-08-28 10:40:04 +00:00
Jeffrey Seyfried
6303640e85 Rollup merge of #35850 - SergioBenitez:master, r=nrc
Implement RFC#1559: allow all literals in attributes

Implemented rust-lang/rfcs#1559, tracked by #34981.
2016-08-28 10:38:19 +00:00
Jonathan Turner
dc6ae4b669 Rollup merge of #35657 - ahmedcharles:e0389, r=jonathandturner
Update E0389 to the new format. #35630
2016-08-27 12:43:30 -07:00
bors
099b9fdb1a Auto merge of #36030 - Manishearth:rollup, r=Manishearth
Rollup of 7 pull requests

- Successful merges: #35124, #35877, #35953, #36002, #36004, #36005, #36014
- Failed merges:
2016-08-27 03:07:48 -07:00
Manish Goregaokar
933d481bdd Rollup merge of #36004 - petrochenkov:hashloan, r=arielb1
rustc_borrowck: Don't hash types in loan paths

1) Types for equal loan paths are not always equal, they can sometimes differ in lifetimes, making equal loan paths hash differently.

Example:
71bdeea561/src/libcollections/linked_list.rs (L835-L856)

One of `self.list`s has type
```
&ReFree(CodeExtent(15013/CallSiteScope { fn_id: 18907, body_id: 18912 }), BrNamed(0:DefIndex(3066), 'a(397), WontChange)) mut linked_list::LinkedList<T>
```
and other has type
```
&ReScope(CodeExtent(15018/Remainder(BlockRemainder { block: 18912, first_statement_index: 0 }))) mut linked_list::LinkedList<T>
```
(... but I'm not sure it's not a bug actually.)

2) Not hashing types is faster than hashing types.

r? @arielb1
2016-08-27 09:31:15 +05:30
bors
b7e2157dba Auto merge of #35542 - scottcarr:visitor_refactor, r=nikomatsakis
[MIR] track Location in MirVisitor, combine Location

All the users of MirVisitor::visit_statement implement their own statement index tracking.  This PR move the tracking into MirVisitor itself.

Also, there were 2 separate implementations of Location that were identical.  This PR eliminates one of them.
2016-08-26 19:05:11 -07:00
Eduard Burtescu
7a8d4822d8 rustc: use Vec<Kind> in Substs, where Kind is a &TyS | &Region tagged pointer. 2016-08-27 01:15:07 +03:00
Eduard Burtescu
dffd238f8b rustc: pass ty::Region behind an interned 'tcx reference. 2016-08-27 01:15:06 +03:00
Vadim Petrochenkov
14b4d72e01 rustc_borrowck: Don't hash types in loan paths 2016-08-26 01:15:45 +03:00
Jeffrey Seyfried
bfb01bbb26 Refactor away AttrMetaMethods. 2016-08-25 20:41:40 +00:00
Jeffrey Seyfried
4eb08bb2ab Refactor away AttrNestedMetaItemMethods. 2016-08-25 20:41:32 +00:00
Sergio Benitez
8250a26b5b Implement RFC#1559: allow all literals in attributes. 2016-08-25 13:25:22 -07:00
Ahmed Charles
f39700514d Update E0389 to the new format. #35630 2016-08-22 17:08:21 -07:00
Jonathan Turner
40f40e6cd9 Rollup merge of #35817 - wesleywiser:fix_35703, r=jonathandturner
Update E0503 to the new format

Fixes #35703
Part of #35233

r? @jonathandturner
2016-08-22 15:34:19 -07:00
Jonathan Turner
ab734210f0 Rollup merge of #35360 - medzin:E0388, r=jonathandturner
Updated error message E0388

Fixes #35339 as part of #35233.

r? @GuillaumeGomez
2016-08-22 15:34:18 -07:00
Adam Medziński
bfbdff0e2d Updated error message E0388 2016-08-22 23:22:40 +02:00
Wesley Wiser
9bb8b65bdd Update E0503 to the new format
Fixes #35703
Part of #35233
2016-08-20 21:07:19 -04:00
Scott A Carr
61c4f5b610 port to new Location 2016-08-18 16:54:20 -04:00
Scott A Carr
0ff128228f track Location in visitor, combine Location 2016-08-18 14:57:42 -04:00
bors
43c090ed69 Auto merge of #35732 - jonathandturner:region_error_labels, r=nikomatsakis
Move 'doesn't live long enough' errors to labels

This patch moves the "doesn't live long enough" region-style errors to instead use labels.

An example follows.

Before:

```
error: `x` does not live long enough
  --> src/test/compile-fail/send-is-not-static-ensures-scoping.rs:26:18
   |
26 |         let y = &x;
   |                  ^
   |
note: reference must be valid for the block at 23:10...
  --> src/test/compile-fail/send-is-not-static-ensures-scoping.rs:23:11
   |
23 | fn main() {
   |           ^
note: ...but borrowed value is only valid for the block suffix following statement 0 at 25:18
  --> src/test/compile-fail/send-is-not-static-ensures-scoping.rs:25:19
   |
25 |         let x = 1;
   |                   ^
```

After:

```
error: `x` does not live long enough
  --> src/test/compile-fail/send-is-not-static-ensures-scoping.rs:26:18
   |
26 |         let y = &x;
   |                  ^ does not live long enough
...
32 |     };
   |     - borrowed value only valid until here
...
35 | }
   | - borrowed value must be valid until here
```

r? @nikomatsakis
2016-08-18 05:39:11 -07:00
Jonathan Turner
864b3efd33 Fix tidy and nits 2016-08-17 15:53:10 -07:00
Jonathan Turner
70ce90c320 Move 'doesn't live long enough' errors to labels 2016-08-17 15:24:42 -07:00
Eduard Burtescu
9453d9b8ad rustc: remove ParamSpace from Substs. 2016-08-17 06:32:00 +03:00
Eduard Burtescu
c1cfd58cbd rustc: remove SelfSpace from ParamSpace. 2016-08-17 05:50:57 +03:00
Eduard Burtescu
4158673ad7 rustc: reduce Substs and Generics to a simple immutable API. 2016-08-17 05:50:57 +03:00
bors
e25542cb02 Auto merge of #35162 - canndrew:bang_type_coerced, r=nikomatsakis
Implement the `!` type

This implements the never type (`!`) and hides it behind the feature gate `#[feature(never_type)]`. With the feature gate off, things should build as normal (although some error messages may be different). With the gate on, `!` is usable as a type and diverging type variables (ie. types that are unconstrained by anything in the code) will default to `!` instead of `()`.
2016-08-16 00:12:12 -07:00
Eduard Burtescu
02aec40dc9 [MIR] Add Storage{Live,Dead} statements to emit llvm.lifetime.{start,end}. 2016-08-14 06:34:14 +03:00
Andrew Cann
ed02344fbc Remove obsolete divergence related stuff
Replace FnOutput with Ty
Replace FnConverging(ty) with ty
Purge FnDiverging, FunctionRetTy::NoReturn and FunctionRetTy::None
2016-08-13 21:37:09 +08:00
bors
e64f68817d Auto merge of #35348 - scottcarr:discriminant2, r=nikomatsakis
[MIR] Add explicit SetDiscriminant StatementKind for deaggregating enums

cc #35186

To deaggregate enums, we need to be able to explicitly set the discriminant.  This PR implements a new StatementKind that does that.

I think some of the places that have `panics!` now could maybe do something smarter.
2016-08-13 01:20:46 -07:00
bors
1deb02ea69 Auto merge of #35431 - GuillaumeGomez:err_codes, r=jonathandturner
Err codes

r? @jonathandturner
2016-08-12 08:58:55 -07:00
bors
8787a12334 Auto merge of #35592 - jonathandturner:rollup, r=jonathandturner
Rollup of 23 pull requests

- Successful merges: #35279, #35331, #35358, #35375, #35445, #35448, #35482, #35486, #35505, #35528, #35530, #35532, #35536, #35537, #35541, #35552, #35554, #35555, #35557, #35562, #35565, #35569, #35576
- Failed merges: #35395, #35415, #35563
2016-08-11 13:14:28 -07:00
Scott A Carr
d77a136437 add SetDiscriminant StatementKind to enable deaggregation of enums 2016-08-11 11:51:20 -07:00
Jonathan Turner
b758688505 Rollup merge of #35552 - theypsilon:master, r=jonathandturner
Update error message E0384 to new format

Part of #35233
Fixes #35184

r? @jonathandturner
2016-08-11 06:34:00 -07:00
bors
42001edc99 Auto merge of #35403 - scottcarr:lvalue_refactor, r=nikomatsakis
refactor lvalue_ty to be method of lvalue

Currently `Mir` (and `MirContext`) implement a method `lvalue_ty` (and actually many more `foo_ty`).  But this should be a method of `Lvalue`.

If you have an `lvalue` and you want to get its type, the natural thing to write is:

```
lvalue.ty()
```

Of course it needs context, but still:

```
lvalue.ty(mir, tcx)
```

Makes more sense than

```
mir.lvalue_ty(lvalue, tcx)
```

I actually think we should go a step farther and have traits so we could get the type of some value generically, but that's up for debate.  The thing I'm running into a lot in the compiler is I have a value of type `Foo` and I know that there is some related type `Bar` which I can get through some combination of method calls, but it's often not as direct as I would imagine.  Unless you already know the code, its not clear why you would look in `Mir` for a method to get the type of an `Lvalue`.
2016-08-11 05:04:41 -07:00
José manuel Barroso Galindo
0e8ec4333c Update error message E0384 to new format
Part of #35233
Fixes #35184
2016-08-10 00:07:42 +07:00
bors
e1d2bc2916 Auto merge of #35166 - nikomatsakis:incr-comp-ice-34991-2, r=mw
Address ICEs running w/ incremental compilation and building glium

Fixes for various ICEs I encountered trying to build glium with incremental compilation enabled. Building glium now works. Of the 4 ICEs, I have test cases for 3 of them -- I didn't isolate a test for the last commit and kind of want to go do other things -- most notably, figuring out why incremental isn't saving much *effort*.

But if it seems worthwhile and I can come back and try to narrow down the problem.

r? @michaelwoerister

Fixes #34991
Fixes #32015
2016-08-09 10:00:54 -07:00
Niko Matsakis
8fdc72f830 track MIR through the dep-graph
Per the discussion on #34765, we make one `DepNode::Mir` variant and use
it to represent both the MIR tracking map as well as passes that operate
on MIR. We also track loads of cached MIR (which naturally comes from
metadata).

Note that the "HAIR" pass adds a read of TypeckItemBody because it uses
a myriad of tables that are not individually tracked.
2016-08-08 18:44:24 -04:00
Guillaume Gomez
4da9bdc563 Update librustc_borrowck error codes check 2016-08-07 20:16:02 +02:00
Guillaume Gomez
574fbbf92c Add E0388 error explanation 2016-08-06 21:45:27 +02:00
Scott A Carr
28abc0a6aa refactor lvalue_ty to be method of lvalue 2016-08-05 15:59:51 -07:00
trixnz
7eca647e5a Update error format for E0373 2016-08-05 19:53:14 +02:00
Michael Woerister
415fde498a intravisit: Fold functionality of IdVisitor into the regular Visitor. 2016-07-29 04:55:31 -04:00
Zack M. Davis
d37edef9dd prefer if let to match with None => {} arm in some places
This is a spiritual succesor to #34268/8531d581, in which we replaced a
number of matches of None to the unit value with `if let` conditionals
where it was judged that this made for clearer/simpler code (as would be
recommended by Manishearth/rust-clippy's `single_match` lint). The same
rationale applies to matches of None to the empty block.
2016-07-03 16:27:02 -07:00
Jeffrey Seyfried
542ba8c5f7 Fix Cargo.tomls 2016-06-27 18:30:46 +00:00
Jonathan Turner
6ae3502134 Move errors from libsyntax to its own crate 2016-06-23 08:07:35 -04:00
bors
a479a6a7a6 Auto merge of #34290 - arielb1:short-ladder, r=eddyb
don't generate drop ladder steps for fields that don't need dropping

cc @eddyb

This should help with #34166
2016-06-16 01:01:26 -07:00
Ariel Ben-Yehuda
2960bc8246 don't generate drop ladder steps for fields that don't need dropping 2016-06-16 00:48:02 +03:00
Zack M. Davis
8531d58104 prefer if let to match with None => () arm in some places
Casual grepping revealed some places in the codebase (some of which
antedated `if let`'s December 2014 stabilization in c200ae5a) where we
were using a match with a `None => ()` arm where (in the present
author's opinion) an `if let` conditional would be more readable. (Other
places where matching to the unit value did seem to better express the
intent were left alone.)

It's likely that we don't care about making such trivial,
non-functional, sheerly æsthetic changes.

But if we do, this is a patch.
2016-06-15 08:13:10 -07:00
bors
51d2d3da80 Auto merge of #34133 - m-decoster:master, r=GuillaumeGomez
Add explanations for E0503 and E0508.

(cannot use `..` because it was mutably borrowed, cannot move out of type `..`, a non-copy fixed-size array)

Part of #32777.
2016-06-12 15:35:32 -07:00
Mathieu De Coster
e06fbe159c Add explanation for E0503 2016-06-12 10:32:55 +02:00
Mathieu De Coster
81cd752264 Add explanation for E0508 2016-06-12 10:31:54 +02:00
kennytm
ae75593864
Fix markdown formatting error of E0277, E0284, E0310, E0502. 2016-06-12 16:09:44 +08:00
bors
ee00760a14 Auto merge of #34149 - arielb1:remove-remove-dead-blocks, r=nikomatsakis
MIR cleanups and predecessor cache

This PR cleans up a few things in MIR and adds a predecessor cache to allow graph algorithms to be run easily.

r? @nikomatsakis
2016-06-09 12:07:38 -07:00
Ariel Ben-Yehuda
f5b1ba6e90 use the type name as the pass name 2016-06-09 15:24:46 +03:00
Ariel Ben-Yehuda
2ee00e6d9d add hook infrastructure for automatically dumping MIR on every pass 2016-06-09 15:21:43 +03:00
Ariel Ben-Yehuda
798be90648 introduce an unreachable terminator
Use it instead of a `panic` for inexhaustive matches and correct the
comment. I think we trust our match-generation algorithm enough to
generate these blocks, and not generating an `unreachable` means that
LLVM won't optimize `match void() {}` to an `unreachable`.
2016-06-09 15:16:15 +03:00
Ariel Ben-Yehuda
e3af9fa490 make the basic_blocks field private 2016-06-09 14:55:19 +03:00
Ariel Ben-Yehuda
bc1eb67721 introduce the type-safe IdxVec and use it instead of loose indexes 2016-06-09 14:26:08 +03:00
bors
33c8992b80 Auto merge of #34109 - pnkfelix:fix-issue-34101, r=arielb1
Fix issue #34101

Fix issue #34101: do not track subcontent of type with dtor nor gather flags for untracked content.

(Includes a regression test, which needed to go into `compile-fail/`
due to weaknesses when combining `#[deny(warnings)]` with
`tcx.sess.span_warn(..)`)
2016-06-09 04:24:50 -07:00
Ariel Ben-Yehuda
5c717a6fc2 implement RFC495 semantics for slice patterns
non-MIR translation is still not supported for these and will happily ICE.

This is a [breaking-change] for many uses of slice_patterns.
2016-06-09 00:38:38 +03:00
Eduard Burtescu
0c5930ef25 mir: group span + visibility scope under a new SourceInfo type. 2016-06-07 19:21:56 +03:00
Felix S. Klock II
4b6a68e447 Fix issue #34101: do not track subcontent of type with dtor nor gather flags for untracked content.
(Includes a regression test, which needed to go into `compile-fail/`
due to weaknesses when combining `#[deny(warnings)]` with
`tcx.sess.span_warn(..)`)

(updated with review feedback from arielb1.)
2016-06-07 10:19:38 +02:00
bors
f35255038b Auto merge of #34012 - eddyb:tick-erased, r=nikomatsakis
rustc: add ReErased to be used by trait selection, MIR and trans.

`ReErased` replaces `ReStatic` (i.e. `'static`) for erasing regions.
Using a distinct lifetime helps prevent accidental mix-ups between the two.
It also allows cleaner type printing (see test changes), including in symbol names:
```rust
str..pattern..CharSearcher$LT$$u27$static$GT$::drop.30560::h840c2f2afc03bbea // before
str..pattern..CharSearcher::drop.30561::h6bd31d2af614377a // after
```
Not that we should be producing symbols this way, but it's still better.
2016-06-07 00:04:53 -07:00
Eduard Burtescu
156b1fb9e1 Add a new Assert terminator to MIR for bounds & arithmetic checks. 2016-06-05 14:41:02 +03:00
James Miller
73f3054288 Check arithmetic in the MIR
Add, Sub, Mul, Shl, and Shr are checked using a new Rvalue:
CheckedBinaryOp, while Div, Rem and Neg are handled with explicit checks
in the MIR.
2016-06-05 14:02:24 +03:00
Eduard Burtescu
bcec7a5848 rustc: add ReErased to be used by trait selection, MIR and trans. 2016-06-05 13:58:51 +03:00
Ariel Ben-Yehuda
4106ab24d7 break critical edges only when needed
the *only* place where critical edges need to be broken is on Call
instructions, so only break them there.
2016-06-05 09:27:26 +03:00
Ariel Ben-Yehuda
1ae7ae0c1c fix translation of terminators in MSVC cleanup blocks
MSVC requires unwinding code to be split to a tree of *funclets*, where each funclet
can only branch to itself or to to its parent.

Luckily, the code we generates matches this pattern. Recover that structure in
an analyze pass and translate according to that.
2016-06-04 13:26:32 +03:00
Ariel Ben-Yehuda
506086ef96 jump to the cleanup block in the unwind path for open_drop_for_box
silly bug. Hopefully the last one.
2016-06-04 13:25:10 +03:00
Ariel Ben-Yehuda
8d6d646203 address review comments 2016-06-03 16:11:18 +03:00
Ariel Ben-Yehuda
a091cfd4f3 implement drop elaboration
Fixes #30380
2016-06-03 16:11:18 +03:00
Ariel Ben-Yehuda
de7cb0fdd6 introduce DropAndReplace for translating assignments
this introduces a DropAndReplace terminator as a fix to #30380. That terminator
is suppsoed to be translated by desugaring during drop elaboration, which is
not implemented in this commit, so this breaks `-Z orbit` temporarily.
2016-06-03 16:11:18 +03:00
Manish Goregaokar
10e1e6a7a2 Rollup merge of #33793 - GuillaumeGomez:compile_fail, r=GuillaumeGomez
Fix compile_fail tag

Fixes #33780

r? @steveklabnik
2016-05-30 15:18:59 +05:30
bors
bf9c60c9a6 Auto merge of #33929 - petrochenkov:pathir, r=eddyb
Separate bindings from other patterns in HIR

Now when name resolution is done on AST, we can avoid dumping everything that looks like an identifier into `PatKind::Ident` in HIR.
`hir::PatKind::Ident` is removed, fresh bindings are now called `hir::PatKind::Binding`, everything else goes to `hir::PatKind::Path`.

I intend to do something with `PatKind::Path`/`PatKind::QPath` as well using resolution results, but it requires some audit and maybe some deeper refactoring of relevant resolution/type checking code to do it properly.
I'm submitting this part of the patch earlier to notify interested parties that I'm working on this.

cc @jseyfried
r? @eddyb
2016-05-29 21:28:50 -07:00
Manish Goregaokar
fe19b473d2 Rollup merge of #33820 - jonathandturner:format_readability_updates, r=nikomatsakis
Increase spacing in error format for readability.

Two small tweaks that seem to help readability quite a bit:
* Add spacing header<->snippet, but use the |> on the side for visual consistency
* Fix #33819
* Fix #33763
* Move format-sensitive test (issue-26480 in cfail) to ui test

r? @nikomatsakis
2016-05-28 19:52:15 +05:30
Vadim Petrochenkov
216f5fba04 Separate bindings from other patterns in HIR 2016-05-28 00:54:29 +03:00
Guillaume Gomez
abe9961283 * Fix compile_fail tag (in some cases, it compiled whereas it wasn't expected to and was still considered 'ok')
* Fix error explanations tests/tags
2016-05-27 00:39:57 +02:00
bors
34fd686681 Auto merge of #33667 - pnkfelix:fixes-to-mir-dataflow, r=arielb1
Fixes to mir dataflow

Fixes to mir dataflow

This collects a bunch of changes to `rustc_borrowck::borrowck::dataflow` (which others have pointed out should probably migrate to some crate that isn't tied to the borrow-checker -- but I have not attempted that here, especially since there are competing approaches to dataflow that we should also evaluate).

These changes:
 1. Provide a family of related analyses: MovingOutStatements (which is what the old AST-based dataflo computed), as well as MaybeInitialized, MaybeUninitalized, and DefinitelyInitialized.
   * (The last two are actually inverses of each other; we should pick one and drop the other.)
 2. Fix bugs in the pre-existing analysis implementation, which was untested and thus some obvious bugs went unnoticed, which brings us to the third point:
 3. Add a unit test infrastructure for the MIR dataflow analysis.
   * The tests work by adding a new intrinsic that is able to query the analysis state for a particular expression (technically, a particular L-value).
   * See the examples in compile-fail/mir-dataflow/inits-1.rs and compile-fail/mir-dataflow/uninits-1.rs
   * These tests are only checking the results for MaybeInitialized, MaybeUninitalized, and DefinitelyInitialized; I am not sure if it will be feasible to generalize this testing strategy to the MovingOutStatements dataflow operator.
2016-05-25 12:34:39 -07:00
Felix S. Klock II
df5c116250 Alpha rename OwnIdxSet to IdxSetBuf. 2016-05-25 15:55:46 +02:00
Felix S. Klock II
ad0e6adbb1 fixes to indexed_set: add comments and fix PhantomData def'n. 2016-05-25 15:53:59 +02:00
Felix S. Klock II
a28771cc97 remove indexed_set::Indexed trait. 2016-05-25 15:41:57 +02:00
Felix S. Klock II
58f1a4949d remove unnecessary use of indexed_set::Indexed trait. 2016-05-25 15:41:49 +02:00
Felix S. Klock II
25f37fd651 Add notes that data-structures should potentially move to different crate. 2016-05-25 14:54:31 +02:00
Felix S. Klock II
d9680f5b36 Fix some comments. 2016-05-25 14:52:40 +02:00
Felix S. Klock II
fe49b41f83 placate tidy in mir::gather_moves. 2016-05-24 23:08:24 +02:00
Felix S. Klock II
ac6ea44549 placate tidy in mir::dataflow. 2016-05-24 23:08:16 +02:00
Felix S. Klock II
a82676eefa placate tidy in mir::dataflow::graphviz. 2016-05-24 23:08:07 +02:00
Felix S. Klock II
ad1294dbe7 threaded a ty::ParameterEnvironment for the current node id via the associated Ctxt item.
used this to address a long-standing wart/bug in how filtering-out of
values with type impl'ing `Copy` was done.
2016-05-24 23:03:52 +02:00
Felix S. Klock II
fdf80bc60c Removed type Bit and fn interpret items from trait BitDenotation.
Also got rid of the `trait HasMoveData`, since I am now just imposing
the constraint that `BitDenotation<Ctxt=MoveData<'tcx>>` where
necessary instead.
2016-05-24 16:46:19 +02:00
Felix S. Klock II
0cf5f1023e Replaced use of interpret method in mir::dataflow::graphviz with a client-provided closure. 2016-05-24 16:16:42 +02:00
Felix S. Klock II
221cce915a move the tcx and mir parts of associated Ctxt onto each BitDenotation impl. 2016-05-24 15:01:48 +02:00
Felix S. Klock II
ae09c5e36e Moved the four impls of BitDenotation to their own module, mod impls. 2016-05-24 13:26:54 +02:00
Felix S. Klock II
ede29581d2 mir::dataflow::sanity_check: extract an fn each_block to simplify presentation.
As a drive-by: unified pair of match arms that flowed to `bug!`, and
replaced `bug!` invocation with a diagnostic `span_err` invocation.
2016-05-24 12:56:02 +02:00
Felix S. Klock II
b8c6d1c708 Fix comment within sanity_check. 2016-05-24 12:37:39 +02:00
Felix S. Klock II
c48650d14e bug fix to borrowck::indexed_set: wanted bit-count not byte-count. 2016-05-24 12:35:35 +02:00
Jonathan Turner
428099233a Fix #33819 and update ui test 2016-05-23 14:48:11 -04:00
Felix S. Klock II
71af40bb9d revised mir-dataflow so bitvectors carry a phantom type for their index domain.
As some drive-by's:

 * moved bitwise operators into `mod bitslice`

 * factored out `fn gen` and `fn kill` methods on `BlockSets` type

 * removed outdated comment about `fn propagate_call_return`
2016-05-23 18:26:52 +02:00
Felix S. Klock II
0796ee77ba add indexed_set mod for typed wrappers around bitarrays representing sets.
It provides an `Idx` trait for usize wrappers used to represent the
elements of such sets.
2016-05-23 14:31:52 +02:00
Felix S. Klock II
f18bafdbe1 Refactor bitslice: distinguish usize for indexing vs word type being indexed. 2016-05-20 17:40:22 +02:00
Guillaume Gomez
f22c5aab1e Rollup merge of #33676 - rkruppe:e0509-exact-words, r=sanxiyn
Reword the short diagnostic for E0509

Saying that a type *implements* a trait is much more idiomatic than saying it *defines* the trait.
2016-05-20 15:49:52 +02:00
Felix S. Klock II
59008cbd71 review feedback: fix some index-mismatch bugs pointed out by arielb1. 2016-05-20 15:44:30 +02:00
Felix S. Klock II
581195090a Review feedback.
Removed `BitDenotation: DataflowOperator` relationship.

Alpha-renamed `fn initial_value` to `fn bottom_value`.
2016-05-20 14:14:18 +02:00
Felix S. Klock II
a7e3204ac8 mir::dataflow arielb1 review feedback
* removed `on_all_children_bits`, rewriting calls to use `super::on_all_children_bits`

 * moved `fn path` helper routine out of `impl MirBorrowckCtxtPreDataflow`
2016-05-20 13:40:52 +02:00
Felix S. Klock II
9c468f4b65 Added comment pointing out somewhat subtle initialization in fn start_block_effect. 2016-05-20 13:20:33 +02:00
Felix S. Klock II
011c37d59e borrowck::mir: alpha-renamed DropFlagState variant names. 2016-05-20 13:20:00 +02:00
Felix S. Klock II
9fcbe2a2f9 fix comment in impl DataflowOperator for MaybeUninitializedLvals. 2016-05-20 13:18:27 +02:00
Felix S. Klock II
aaad8a209a mir::dataflow::sanity_check: Factor out fn is_rustc_peek helper routine. 2016-05-20 13:18:03 +02:00
Manish Goregaokar
c9ca735a7b Rollup merge of #33353 - timothy-mcroy:E0502, r=sanxiyn
Add error explanation for E0502

I am questioning the order of presentation on the suggested code fixes, but I'm not sure what would be best.  Thoughts?

r? @GuillaumeGomez
2016-05-19 21:21:05 +05:30
Robin Kruppe
e575d19acc Reword the short diagnostic for E0509
Saying that a type *implements* a trait is much more idiomatic than saying it *defines* the trait.
2016-05-19 11:02:41 +02:00
bors
0c5d651d0b Auto merge of #33688 - jonathandturner:fix_old_school, r=nikomatsakis
Fix for old school error issues, improvements to new school

This PR:
* Fixes some old school error issues, specifically #33559, #33543, #33366
* Improves wording borrowck errors with match patterns
* De-emphasize multi-line spans, so we don't color the single source character when we're trying to say "span starts here"
* Rollup of #33392 (which should help fix #33390)

r? @nikomatsakis
2016-05-18 21:19:07 -07:00
bors
9743c661b0 Auto merge of #33710 - Manishearth:rollup, r=Manishearth
Rollup of 5 pull requests

- Successful merges: #33656, #33666, #33673, #33675, #33695
- Failed merges:
2016-05-18 05:04:26 -07:00
Timothy McRoy
acfe199c02 Add descriptive error explanation for E0502 2016-05-17 21:13:02 -05:00
Jonathan Turner
175ecfefd5 Improve a few errors and fix #33366 2016-05-17 06:46:08 -04:00
Felix S. Klock II
8999e877ed mir::dataflow::sanity_check: removed hackish tmp = val propagation code.
(it was an artifact of an earlier design of the `rustc_peek` API, but
its totally unnecessary now.)
2016-05-17 09:06:18 +02:00
Felix S. Klock II
b0b1f4da60 Fix comments in mir::dataflow::sanity_check. 2016-05-17 08:41:41 +02:00
Andrew Paseltiner
f3c63d21c1 Add missing code fence to diagnostics.rs
Closes #33662
2016-05-16 16:57:33 -04:00
Vadim Petrochenkov
aad347c4f7 Remove hir::Ident 2016-05-16 22:25:08 +03:00
Felix S. Klock II
ee44f7ed27 DefinitelyInitializedLvals dataflow op (goal: move away from MaybeUninitializedLvals) 2016-05-16 13:34:33 +02:00
Felix S. Klock II
8956789c35 Little unit tests for MIR dataflow analysis.
These use new `rustc_peek` (whose semantics is driven by attribute
attached to fn).
2016-05-16 13:34:33 +02:00
Felix S. Klock II
5839e6bb10 Add ability to unit-test dataflow results via rustc_peek intrinsic.
(The static semantics of `rustc_peek` is derived from attributes
attached to the function being compiled; in this case,
`rustc_peek(&expr)` observes the dataflow state for the l-value
`expr`.)
2016-05-16 13:34:33 +02:00
Felix S. Klock II
c73f3517a2 Revised mir-dataflow.
Incorporates many fixes contributed by arielb1.

----

revise borrowck::mir::dataflow code to allow varying domain for bitvectors.

This particular code implements the `BitDenotation` trait for three
analyses:

 * `MovingOutStatements`, which, like `borrowck::move_data`, maps each
   bit-index to a move instruction, and a 1 means "the effect of this
   move reaches this point" (and the assigned l-value, if a scoped
   declaration, is still in scope).

 * `MaybeInitializedLvals`, which maps each bit-index to an l-value.
   A 1 means "there exists a control flow path to this point that
   initializes the associated l-value."

 * `MaybeUninitializedLvals`, which maps each bit-index to an l-value
   A 1 means "there exists a control flow path to this point that
   de-initializes the associated l-value."

----

Revised `graphviz` dataflow-rendering support in `borrowck::mir`.

One big difference is that this code is now parameterized over the
`BitDenotation`, so that it can be used to render dataflow results
independent of how the dataflow bitvectors are interpreted; see where
reference to `MoveOut` is replaced by the type parameter `D`.

----

Factor out routine to query subattributes in `#[rustc_mir(..)]`.

(Later commits build upon this for some unit testing and instrumentation.)

----

thread through a tcx so that I can query types of lvalues as part of analysis.

----

Revised `BitDenotation::Ctxt`, allowing variation beyond `MoveData`.

The main motivation is to ease threading through a `TyCtxt`.

(In hindsight it might have been better to instead attach the `TyCtxt`
to each of the different dataflow implementations, but that would
require e.g. switching away from having a `Default` impl, so I am
leaving that experiment for another time.)
2016-05-16 13:34:25 +02:00
Felix S. Klock II
6c72c5fa88 borrowck::mir::gather_moves: create MovePaths for lvalues even if unreferenced.
includes misc bug fixes and removal of useless code.
2016-05-16 10:00:35 +02:00
Felix S. Klock II
d03b341e6b Unit struct defns for 3 dataflow analyses for borrowck::mir::dataflow. 2016-05-16 09:13:42 +02:00
Felix S. Klock II
79ab85544b Remove &self parameter from DataflowOperator::initial_value. 2016-05-16 09:13:42 +02:00
Felix S. Klock II
b4972b00c9 Add helper method for getting the dataflow results at exit from a basic block. 2016-05-16 09:13:42 +02:00
Felix S. Klock II
bfe789c044 fixes to librustc_borrowck::bitslice::bits_to_string, used for graphviz printing. 2016-05-16 09:13:42 +02:00
Felix S. Klock II
cd81b60a4a fix bug in debug! output from rustc::middle::dataflow
(bug was cut/pasted into `rustc_borrowck::bitslice`, so I fixed it
there as well.)
2016-05-16 09:13:42 +02:00
bors
5ebe41835f Auto merge of #33619 - jonathandturner:improve_structured_errors, r=nikomatsakis
Batch of improvements to errors for new error format

This is a batch of improvements to existing errors to help get the most out of the new error format.

* Added labels to primary spans (^^^) for a set of errors that didn't currently have them
* Highlight the source blue under the secondary notes for better readability
* Move some of the "Note:" into secondary spans+labels
* Fix span_label to take &mut instead, which makes it work the same as other methods in that set
2016-05-15 15:08:46 -07:00
Jonathan Turner
65cb5f7378 Add space after equals 2016-05-15 11:57:50 -07:00
Manish Goregaokar
0f4f51b173 Rollup merge of #33533 - GuillaumeGomez:add_E0500, r=steveklabnik
Add E0500 error explanation

r? @Manishearth

Part of #32777.
2016-05-15 20:13:41 +05:30
Manish Goregaokar
7003253b34 Rollup merge of #33475 - billyevans:master, r=guillaumegomez
Add detailed error explanation for E0505

Part of #32777
2016-05-15 20:13:40 +05:30
Jonathan Turner
1b6afd1e42 Update errors to use new error format 2016-05-12 16:48:59 -07:00
Jonathan Turner
f3054ce18c Set of fixes to improve borrowcks that weren't updated 2016-05-12 16:39:19 -07:00
bors
4ec5ce5e44 Auto merge of #33282 - alexcrichton:rustbuild-crate-tests, r=brson
rustbuild: Add support for crate tests + doctests

This commit adds support to rustbuild to run crate unit tests (those defined by
`#[test]`) as well as documentation tests. All tests are powered by `cargo test`
under the hood.

Each step requires the `libtest` library is built for that corresponding stage.
Ideally the `test` crate would be a dev-dependency, but for now it's just easier
to ensure that we sequence everything in the right order.

Currently no filtering is implemented, so there's not actually a method of
testing *only* libstd or *only* libcore, but rather entire swaths of crates are
tested all at once.

A few points of note here are:

* The `coretest` and `collectionstest` crates are just listed as `[[test]]`
  entires for `cargo test` to naturally pick up. This mean that `cargo test -p
  core` actually runs all the tests for libcore.
* Libraries that aren't tested all mention `test = false` in their `Cargo.toml`
* Crates aren't currently allowed to have dev-dependencies due to
  rust-lang/cargo#860, but we can likely alleviate this restriction once
  workspaces are implemented.

cc #31590
2016-05-12 14:31:54 -07:00
Alex Crichton
bb9062a296 rustbuild: Add support for crate tests + doctests
This commit adds support to rustbuild to run crate unit tests (those defined by
`#[test]`) as well as documentation tests. All tests are powered by `cargo test`
under the hood.

Each step requires the `libtest` library is built for that corresponding stage.
Ideally the `test` crate would be a dev-dependency, but for now it's just easier
to ensure that we sequence everything in the right order.

Currently no filtering is implemented, so there's not actually a method of
testing *only* libstd or *only* libcore, but rather entire swaths of crates are
tested all at once.

A few points of note here are:

* The `coretest` and `collectionstest` crates are just listed as `[[test]]`
  entires for `cargo test` to naturally pick up. This mean that `cargo test -p
  core` actually runs all the tests for libcore.
* Libraries that aren't tested all mention `test = false` in their `Cargo.toml`
* Crates aren't currently allowed to have dev-dependencies due to
  rust-lang/cargo#860, but we can likely alleviate this restriction once
  workspaces are implemented.

cc #31590
2016-05-12 08:52:20 -07:00
billyevans
bf09a9eda0 Add detailed error explanation for E0505
Part of #32777
2016-05-11 20:58:19 +01:00
Steve Klabnik
4fe787134a Rollup merge of #33386 - cramertj:E0504, r=steveklabnik
Add detailed error explanation for E0504

Part of #32777
2016-05-11 09:27:43 -04:00
ggomez
7a9f4c22ff Add E0500 error explanation 2016-05-11 08:03:34 +02:00