306 Commits

Author SHA1 Message Date
Niko Matsakis
bfb1d959c3 normalize and prove predicates
Also include a test that was not working previously.
2018-10-19 09:34:27 -04:00
Niko Matsakis
121f3c8d19 normalize after substitution 2018-10-19 09:32:32 -04:00
Niko Matsakis
e94959b936 propagate user-type annotation for constants in expressions 2018-10-19 08:31:35 -04:00
bors
f7eb7fbbf6 Auto merge of #55134 - davidtwco:issue-55118, r=pnkfelix
NLL: change compare-mode=nll to use borrowck=migrate

Fixes #55118.

This PR is split into two parts:

The first commit is a minor change that fixes a flaw in the existing `borrowck=migrate` implementation whereby a lint that was promoted to an error in the AST borrow checker would result in the same lint from the NLL borrow checker being downgraded to a warning in migrate mode. This PR fixes this by ensuring lints are exempt from buffering in the NLL borrow checker.

The second commit updates `compiletest` to make the NLL compare mode use `-Z borrowck=migrate` rather than `-Z borrowck=mir`. The third commit shows all the test output changes that result from this.

r? @pnkfelix
2018-10-17 23:16:10 +00:00
bors
cbbd70d4f2 Auto merge of #54941 - pnkfelix:issue-21232-reject-partial-reinit, r=nikomatsakis
reject partial init and reinit of uninitialized data

Reject partial initialization of uninitialized structured types (i.e. structs and tuples) and also reject partial *reinitialization* of such types.

Fix #54986

Fix #54499

cc #21232
2018-10-17 09:13:51 +00:00
Felix S. Klock II
233fdb4b14 Some new tests I added. 2018-10-17 02:33:03 +02:00
David Wood
539404b77d
Update output for borrowck=migrate compare mode.
This commit updates the test output for the updated NLL compare mode
that uses `-Z borrowck=migrate` rather than `-Z borrowck=mir`. The
previous commit changes `compiletest` and this commit only updates
`.nll.stderr` files.
2018-10-17 00:57:32 +02:00
Niko Matsakis
b70b4a6814 add ~ERROR annotations 2018-10-16 18:11:55 -04:00
Felix S. Klock II
5b748434af updates to expected output for other ui tests. 2018-10-16 17:11:36 +02:00
Niko Matsakis
2e4e983356 update tests 2018-10-15 16:25:08 -04:00
bors
2c2e2c57dc Auto merge of #54942 - matthewjasper:wf-type-annotations, r=nikomatsakis
[NLL] Check user types are well-formed

Also contains a change of span for AscribeUserType.
I'm not quite sure if this was what @nikomatsakis was thinking.

Closes #54620

r? @nikomatsakis
2018-10-12 21:28:42 +00:00
bors
9746a2d40d Auto merge of #54848 - davidtwco:issue-52663-trait-object, r=nikomatsakis
Better Diagnostic for Trait Object Capture

Part of #52663.

This commit enhances `LaterUseKind` detection to identify when a borrow
is captured by a trait object which helps explain why there is a borrow
error.

r? @nikomatsakis
cc @pnkfelix
2018-10-11 03:32:12 +00:00
bors
e1041c6cd1 Auto merge of #54802 - davidtwco:issue-53040, r=pnkfelix
[nll] better error message when returning refs to upvars

Fixes #53040.

r? @nikomatsakis
2018-10-10 14:51:01 +00:00
Matthew Jasper
55ec104313 Use the span of the user type for AscribeUserType
Also change the order of the fake read for let and the AscribeUserType,
so that we use the better span and message from the fake read in errors.
2018-10-10 11:56:16 +01:00
David Wood
98633b458b
Improve message for closure returning a closure.
Now when a `FnMut` closure is returning a closure that contains a
reference to a captured variable, we provide an error that makes it more
clear what is happening.
2018-10-09 12:31:51 +02:00
David Wood
c65e119229
Improve errors for FnMut closures.
This commit improves the errors for `FnMut` closures where a reference
to a captured variable is escaping.
2018-10-09 12:31:47 +02:00
bors
e1643a8968 Auto merge of #54757 - nikomatsakis:nll-issue-54573-user-annot, r=pnkfelix
user annotations in patterns

Fixes https://github.com/rust-lang/rust/issues/54573

r? @pnkfelix
2018-10-09 10:15:44 +00:00
bors
607243b6f9 Auto merge of #54798 - matthewjasper:free-region-closure-errors, r=nikomatsakis
[NLL]  Improve closure region bound errors

Previously, we would report free region errors that originate from closure with the span of the closure and a "closure body requires ..." message. This is now updated to use a reason and span from inside the closure.
2018-10-09 07:22:14 +00:00
Niko Matsakis
40ab41fd18 add pattern type ascriptions for tuple/brace structs/enums 2018-10-08 19:20:37 -04:00
David Wood
72911fbbd0
Update logic to search for casts.
This commit updates the captured trait object search logic to look for
unsized casts to boxed types rather than for functions that returned
trait objects.
2018-10-07 16:14:22 +02:00
bors
dbecb7a644 Auto merge of #54782 - pnkfelix:issue-54556-semi-on-tail-diagnostic, r=nikomatsakis
NLL: temps in block tail expression diagnostic

This change adds a diagnostic that explains when temporaries in a block tail expression live longer than block local variables that they borrow, and attempts to suggest turning the tail expresion into a statement (either by adding a semicolon at the end, when its result value is clearly unused, or by introducing a `let`-binding for the result value and then returning that).

Fix #54556
2018-10-07 00:28:26 +00:00
Matthew Jasper
825810734b Improve closure region bound errors
Now use the category and span that are associated to the most
interesting bound that led to the closure bound.
2018-10-06 10:00:26 +01:00
Pietro Albini
08af25fb27
Rollup merge of #54812 - pnkfelix:issue-32382-index-assoc-type-with-lifetime, r=nikomatsakis
Regression test for #32382.
2018-10-05 22:33:16 +02:00
Felix S. Klock II
056cfffd1b Unit tests for issue #54556. Some were also taken from issues #21114, #46413. 2018-10-05 12:04:53 +02:00
Felix S. Klock II
37f1003121 Updates to .stderr output in ui tests from earlier changes. 2018-10-05 12:04:53 +02:00
bors
61f5ca7d64 Auto merge of #54703 - davidtwco:issue-52086, r=nikomatsakis
error message when trying to move from an Rc or Arc is ungreat

Fixes #52086.

r? @nikomatsakis
2018-10-05 07:40:36 +00:00
bors
a57f1c9c95 Auto merge of #54666 - matthewjasper:mir-function-spans, r=pnkfelix
[NLL] Improve "borrow later used here" messages

* In the case of two conflicting borrows, the later used message says which borrow it's referring to
* If the later use is a function call (from the users point of view) say that the later use is for the call. Point just to the function.

r? @pnkfelix
Closes #48643
2018-10-04 16:34:27 +00:00
Felix S. Klock II
594655bafa Regression test for #32382. 2018-10-04 13:03:24 +02:00
bors
d0787284da Auto merge of #54447 - KiChjang:issue-54331, r=nikomatsakis
Lower type ascriptions to HAIR and MIR

Fixes #54331.

r? @nikomatsakis
2018-10-04 00:26:00 +00:00
Matthew Jasper
bc4f9b848d Clearer later use messages for calls
Give a special message when the later use is from a call. Use the span
of the callee instead of the whole expression. For conflicting borrow
messages say that the later use is of the first borrow.
2018-10-03 20:32:38 +01:00
bors
6ddab3e078 Auto merge of #54720 - davidtwco:issue-51191, r=nikomatsakis
NLL fails to suggest "try removing `&mut` here"

Fixes #51191.

This PR adds ``try removing `&mut` here`` suggestions to functions where a mutable borrow is being taken of a `&mut self` or a `self: &mut Self`. This PR also enables the suggestion for adding a `mut` pattern to by-value implicit self arguments without `mut` patterns already.

r? @nikomatsakis
2018-10-03 10:49:27 +00:00
bors
2bd5993ca2 Auto merge of #54343 - blitzerr:master, r=nikomatsakis
First shot at #54015

Closes #54015
2018-10-02 20:46:49 +00:00
David Wood
2be306939d
Improve mutability error suggestions.
This commit improves mutability error suggestions by suggesting the
removal of `&mut` where a mutable borrow is being taken of a `&mut self`
or a `self: &mut Self`.
2018-10-02 00:35:15 +02:00
David Wood
43b5d725d0
Improve implicit self mutability suggestions.
This commit adds an `ImplicitSelfKind` to the HIR and the MIR that keeps
track of whether a implicit self argument is immutable by-value, mutable
by-value, immutable reference or mutable reference so that the addition
of the `mut` keyword can be suggested for the immutable by-value case.
2018-10-02 00:35:15 +02:00
David Wood
8c6d08b71f
Add special cases for move from Rc/Arc errors.
This commit special cases the move out of borrowed content error,
previously:

```
error[E0507]: cannot move out of borrowed content
 --> src/main.rs:7:10
  |
7 |     drop(x.field);
  |          ^ cannot move out of borrowed content
```

to instead mention that it is a move out of a `Rc`/`Arc` which is more
helpful:

```
error[E0507]: cannot move out of an `Rc`
 --> src/main.rs:7:10
  |
7 |     drop(x.field);
  |          ^ cannot move out of an `Rc`
```
2018-10-01 13:50:22 +02:00
Keith Yeung
8380b25d13 Add UI test for preserving user types in type ascriptions 2018-09-29 10:34:36 -07:00
Rusty Blitzerr
44b3674d8e Test fixes for the change of error message for issue #54015 2018-09-28 09:25:14 -07:00
Felix S. Klock II
f9ff7b7336 Prefer #![feature(bind_by_move_pattern_guards)] over -Z disable_ast_check_for_mutation_in_guard 2018-09-28 15:40:10 +02:00
bors
8876906867 Auto merge of #54468 - matthewjasper:fix-polonius, r=nikomatsakis
[NLL] Get Polonius borrow check to work in simple cases

* Restores the generation of outlives facts from subtyping.
* Restore liveness facts.
* Generate invalidates facts at the start point of each location,
  where we check for errors.
* Add a small test for simple cases (previously these cases have compiled, and more recently ICEd).

Closes #54212
cc #53142 (will need test)

### Known limitations

* Two phase borrows aren't implemented for Polonius yet
* Invalidation facts haven't been updated for some of the recent changes to make `Drop` terminators access fewer things.
* Fact generation is not as optimized as it could be.
* Around 30 tests fail in compare mode, often tests that are ignored in nll compare mode

r? @nikomatsakis
2018-09-27 19:26:59 +00:00
bors
c9865b1c37 Auto merge of #54355 - pnkfelix:issue-22323-regression-test, r=davidtwco
NLL: regression test for "dropck: track order of destruction for r-value temporaries"

Once this lands, we can remove the E-needstest from #22323.

(We shouldn't close the bug itself, however, because we are leaving the NLL-fixed-by-NLL bugs open until NLL is turned on by default.)
2018-09-27 12:35:36 +00:00
Matthew Jasper
610903fb11 Get Polonius borrow check to work in simple cases
* Restores the generation of outlives facts from subtyping.
* Restore liveness facts.
* Generate invalidates facts at the start point of each location,
  where we check for errors.
* Add a small test for simple cases.
2018-09-26 22:03:56 +01:00
Niko Matsakis
e2deef32d4 pacify the mercilous tidy. 2018-09-26 09:38:26 -04:00
Niko Matsakis
f87189dd3c update tests and add stderr files 2018-09-26 09:38:26 -04:00
Niko Matsakis
0b4791e60b make NLL handle IfEq bounds by using SCC normalization 2018-09-26 09:38:26 -04:00
Niko Matsakis
689b791422 use approx. bounds to decide whether to add outlives obligations
Before, if we had a projection like `<T as Foo<'0>>::Bar: 'x` and a
where clause like `<T as Foo<'a>>::Bar: 'a`, we considered those to
have nothing to do with one another. Therefore, we would use the
"overconstrained" path of adding `T: 'x` and `'0: 'x` requirements. We
now do a "fuzzy" match where we erase regions first and hence we see
the env bound `'a`.
2018-09-26 09:38:26 -04:00
Felix S. Klock II
ea4d934c32 Change the diagnostic number from 714 to 716. 2018-09-25 15:23:57 +01:00
Mikhail Modin
5fc0b743d7 add "temporary value dropped while borrowed" error
Issue #54131
2018-09-25 15:23:56 +01:00
Matthew Jasper
1a6ed0271e Update ui tests 2018-09-24 23:33:13 +01:00
Matthew Jasper
c5047cb494 Add tests for new match borrows 2018-09-24 23:33:13 +01:00
Matthew Jasper
4603fb8862 Rework checking for borrows conflicting with drops
Previously, we would split the drop access into multiple checks for each
field of a struct/tuple/closure and through `Box` dereferences. This
changes this to check if the borrow is accessed by the drop in
places_conflict.

This also allows us to handle enums in a simpler way, since we don't
have to construct any new places.
2018-09-23 20:27:41 +01:00