Commit Graph

2401 Commits

Author SHA1 Message Date
Felix S. Klock II
a1b8a93f81 Expand long-live-borrows-in-boxes test to include simplier illustrative cases.
After talking about the PR with eddyb, I decided it was best to try to
have some test cases that simplify the problem down to its core, so
that people trying to understand what the issue is here will see those
core examples first.
2018-08-01 17:44:53 +02:00
Felix S. Klock II
469d6a819d Test for (previously uncaught) infinite loop identified by matthewjasper. 2018-08-01 17:44:53 +02:00
Felix S. Klock II
08b3a8e429 Regression tests. 2018-08-01 17:44:53 +02:00
Felix S. Klock II
88284baa0e minor fallout from the change.
(Presumably the place that borrow_check ends up reporting for the
error about is no longer the root `Local` itself, and thus the note
diagnostic here stops firing.)
2018-08-01 17:44:52 +02:00
Pietro Albini
14546cd501
Rollup merge of #52907 - pnkfelix:issue-52877-original-source-should-precede-suggestions, r=petrochenkov
NLL: On "cannot move out of type" error, print original before rewrite

NLL: On "cannot move out of type" error, print original source before rewrite.

 * Arguably this change is sometimes injecting noise into the output  (namely in the cases where the suggested rewrite is inline with the   suggestion and we end up highlighting the original source code).   I would not be opposed to something more aggressive/dynamic, like   revising the suggestion code to automatically print the original  source when necessary (e.g. when the error does not have a span   that includes the span of the suggestion).

 * Also, as another note on this change: The doc comment for `Diagnostic::span_suggestion`  says:
```rust
    /// The message
    ///
    /// * should not end in any punctuation (a `:` is added automatically)
    /// * should not be a question
    /// * should not contain any parts like "the following", "as shown"
```
  *  but the `:` is *not* added when the emitted line appears  out-of-line relative to the suggestion. I find that to be an  unfortunate UI experience.

----

As a drive-by fix, also changed code to combine multiple suggestions for a pattern into a single multipart suggestion (which vastly improves user experience IMO).

----

Includes the updates to expected NLL diagnostics.

Fix #52877
2018-08-01 10:13:06 +02:00
Pietro Albini
2d29c44a5e
Rollup merge of #52904 - pnkfelix:issue-51167-sort-by-span, r=petrochenkov
NLL: sort diagnostics by span

Sorting the output diagnostics by span is a long planned revision to the NLL diagnostics that we hope will yield a less surprising user experience in some case.

Once we got them buffered, it was trivial to implement. (The hard part is skimming the resulting changes to the diagnostics to make sure nothing broke... Note that I largely rubber-stamped the `#[rustc_regions]` output change.)

Fix #51167
2018-08-01 10:13:04 +02:00
Pietro Albini
a8ed6033a6
Rollup merge of #52888 - estebank:shell-sugg, r=oli-obk
Use suggestions for shell format arguments

Follow up to #52649.
2018-08-01 10:13:02 +02:00
Pietro Albini
312f18c2ea
Rollup merge of #52883 - estebank:nll-diag-mut, r=oli-obk
Include lifetime in mutability suggestion in NLL messages

Fix #52880.
2018-08-01 10:13:01 +02:00
Pietro Albini
9443dd519d
Rollup merge of #52878 - mikhail-m1:master, r=kennytm
Fix wrong issue number in the test name

I made a mistake in previous PR #52620, second issue number was wrong, changing from #52133 to #52113

r? @kennytm
2018-08-01 10:13:00 +02:00
Pietro Albini
333d8c456c
Rollup merge of #52810 - matthewjasper:more-immutablity, r=pnkfelix
[NLL] Don't make "fake" match variables mutable

These variables can't be mutated by the user, but since they have names the unused-mut lint thinks that it should check them.
2018-08-01 10:12:41 +02:00
Esteban Küber
75ff0ddb43 Use suggestions for shell format arguments 2018-07-31 14:16:36 -07:00
bors
e94df4acb4 Auto merge of #52234 - petrochenkov:macuse2, r=Mark-Simulacrum
resolve: Modularize crate-local `#[macro_export] macro_rules`

Based on https://github.com/rust-lang/rust/pull/50911, cc https://github.com/rust-lang/rust/pull/50911#issuecomment-401151270

`#[macro_export] macro_rules` items are collected from the whole crate and are planted into the root module as items, so the external view of the crate is symmetric with its internal view and something like `$crate::my_macro` where `my_macro` is `#[macro_export] macro_rules` works both locally and from other crates.

Closes https://github.com/rust-lang/rust/issues/52726
2018-07-31 20:52:14 +00:00
Felix S. Klock II
a5a3f765eb NLL: On "cannot move out of type" error, print original source before rewrite.
* Arguably this change is sometimes injecting noise into the output
   (namely in the cases where the suggested rewrite is inline with the
   suggestion and we end up highlighting the original source code).
   I would not be opposed to something more aggressive/dynamic, like
   revising the suggestion code to automatically print the original
   source when necessary (e.g. when the error does not have a span
   that includes the span of the suggestion).

 * Also, as another note on this change: The doc comment for `Diagnostic::span_suggestion`
   says:
    /// The message
    ///
    /// * should not end in any punctuation (a `:` is added automatically)
    /// * should not be a question
    /// * should not contain any parts like "the following", "as shown"

   but the `:` is *not* added when the emitted line appears
   out-of-line relative to the suggestion. I find that to be an
   unfortunate UI experience.

----

As a drive-by fix, also changed code to combine multiple suggestions
for a pattern into a single multipart suggestion (which vastly
improves user experience IMO).

----

Includes the updates to expected NLL diagnostics.
2018-07-31 17:27:29 +02:00
Felix S. Klock II
faf841a9f6 Update the .nll.stderr files under new sorted-by-span scheme. 2018-07-31 14:51:36 +02:00
Felix S. Klock II
26776858cf Update tests that use -Z borrowck=compare or #[feature(nll)] to accmmodate diagnostic change. 2018-07-31 14:36:50 +02:00
Felix S. Klock II
6787e25c29 Blindly update the #[rustc_region] tests which got touched by the NLL diagnostic change. 2018-07-31 14:35:43 +02:00
Niko Matsakis
d42bc58b1d add regression test for #52057
Fixes #52057
2018-07-31 02:31:41 +02:00
Esteban Küber
c883edfbc6 Include lifetime in mutability suggestion in NLL messages 2018-07-30 15:41:39 -07:00
Mikhail Modin
b6b025bdaf Fix wrong issue number in the test name 2018-07-30 17:05:30 +01:00
bors
5ed2b5120b Auto merge of #52722 - alexcrichton:more-identifier-lints, r=oli-obk
Tweak the raw_identifiers lints in 2018

* Enable the `raw_identifiers` feature automatically in the 2018 preview
* Only emit lint warnings if the `raw_identifiers` feature is activated

cc rust-lang/cargo#5783
2018-07-30 08:25:36 +00:00
Oliver Schneider
3e8337eb3d Move a test that depends on the arch bitwidth to compile-fail 2018-07-29 20:24:26 +02:00
Oliver Schneider
9377041de9 Sanity-check all constants 2018-07-29 20:22:15 +02:00
Vadim Petrochenkov
44422409a4 resolve: Modularize crate-local #[macro_export] macro_rules 2018-07-29 19:30:13 +03:00
bors
75af9df71b Auto merge of #52620 - mikhail-m1:51351, r=nikomatsakis
fix simple case of issue #51351 and #52133

r? @nikomatsakis
2018-07-29 13:23:01 +00:00
Mikhail Modin
bb66d70b89 fix issues #51351 and #52133 2018-07-29 11:42:50 +01:00
Matthew Jasper
173c33019e Don't make "fake" match variables mutable 2018-07-28 21:18:34 +01:00
bors
5b465e309d Auto merge of #52761 - toidiu:ak-static-infer-fg, r=nikomatsakis
static infer feature gate

https://github.com/rust-lang/rust/issues/44493

r? @nikomatsakis
2018-07-28 11:37:41 +00:00
bors
cc224282de Auto merge of #52802 - kennytm:rollup, r=kennytm
Rollup of 11 pull requests

Successful merges:

 - #52702 (Suggest fix when encountering different mutability from impl to trait)
 - #52703 (Improve a few vectors - calculate capacity or build from iterators)
 - #52740 (Suggest underscore when using dashes in crate namet push fork)
 - #52759 (Impl Send & Sync for JoinHandle)
 - #52760 (rustc_metadata: test loading atoi instead of cos)
 - #52763 (Omit the vendor component in Fuchsia triple)
 - #52765 (Remove unused "-Zenable_nonzeroing_move_hints" flag)
 - #52769 (Incorporate a stray test)
 - #52777 (Fix doc comment for 'ptr::copy_to' method)
 - #52779 (revert accidental atty downgrade)
 - #52781 (Use a slice where a vector is not necessary)

Failed merges:

r? @ghost
2018-07-28 09:40:05 +00:00
kennytm
b584c3227d
Rollup merge of #52740 - estebank:crate-name, r=petrochenkov
Suggest underscore when using dashes in crate namet push fork

Fix #48437.
2018-07-28 16:24:58 +08:00
kennytm
80c798b982
Rollup merge of #52702 - csmoe:mut_diff, r=estebank
Suggest fix when encountering different mutability from impl to trait

Closes https://github.com/rust-lang/rust/issues/52412
r? @estebank
2018-07-28 16:24:55 +08:00
bors
0560747652 Auto merge of #52678 - matthewjasper:better-spans, r=nikomatsakis
[NLL] Use better spans in some errors

* Use the span of the discriminant and patterns for "fake" statements created to properly check matches. I plan to special case these soon, but this felt like a good first step
* Use the span of the statement, rather than the initialization, when reporting move errors for `let x = ...`, which avoids giving an unhelpful suggestion to use `&{ }`.

r? @nikomatsakis cc @pnkfelix
2018-07-28 07:42:13 +00:00
bors
b6cbc1e147 Auto merge of #52648 - davidtwco:issue-52533, r=nikomatsakis
[nll] improve the "fully elaborated type" case in region errors

Fixes #52533.

r? @nikomatsakis
2018-07-27 13:01:48 +00:00
David Wood
2e4224a998
Region inference error messages no longer start with 'free region' 2018-07-27 13:14:56 +02:00
bors
6998b369fa Auto merge of #52733 - pnkfelix:issue-51348-make-temp-for-each-candidate-in-arm, r=nikomatsakis
[NLL] make temp for each candidate in `match` arm

In NLL, `ref mut` patterns leverage the two-phase borrow infrastructure to allow the shared borrows within a guard before the "activation" of the mutable borrow when we begin execution of the match arm's body. (There is further discussion of this on PR #50783.)

To accommodate the restrictions we impose on two-phase borrows (namely that there is a one-to-one mapping between each activation and the original initialization), this PR is making separate temps for each candidate pattern. So in an arm like this:
```rust
PatA(_, ref mut ident) |
PatB(ref mut ident) |
PatC(_, _, ref mut ident) |
PatD(ref mut ident) if guard_stuff(ident) => ...
```

instead of 3 temps (two for the guard and one for the arm body), we now have 4 + 2 temps associated with `ident`: one for each candidate plus the actual temp that the guard uses directly, and then the sixth is the temp used in the arm body.

Fix #51348
2018-07-27 11:02:27 +00:00
David Wood
f44807ae1e
Improved mechanism for naming regions in non-annotated types. 2018-07-27 13:00:56 +02:00
David Wood
b377e7bbfb
Change label from closure to function where appropriate. 2018-07-27 12:48:47 +02:00
David Wood
055aaaf765
Fixed missing whitespace on some elaborated types. 2018-07-27 12:05:05 +02:00
David Wood
5282d7d060
Update affected tests. 2018-07-27 12:05:01 +02:00
David Wood
53dda8e915
Added fully elaborated type label for inferred arguments. 2018-07-27 11:18:11 +02:00
bors
b18b9edf00 Auto merge of #52681 - pnkfelix:z-borrowck-migrate, r=nikomatsakis
Add `-Z borrowck=migrate`

This adds `-Z borrowck=migrate`, which represents the way we want to migrate to NLL under Rust versions to come. It also hooks this new mode into `--edition 2018`, which means we're officially turning NLL on in the 2018 edition.

The basic idea of `-Z borrowck=migrate` that there are cases where NLL is fixing old soundness bugs in the borrow-checker, but in order to avoid just breaking code by immediately rejecting the programs that hit those soundness bugs, we instead use the following strategy:

If your code is accepted by NLL, then we accept it.
If your code is rejected by both NLL and the old AST-borrowck, then we reject it.
If your code is rejected by NLL but accepted by the old AST-borrowck, then we emit the new NLL errors as **warnings**.

These warnings will be turned into hard errors in the future, and they say so in these diagnostics.

Fix #46908
2018-07-27 09:10:07 +00:00
bors
7c2aeb9d97 Auto merge of #52650 - oli-obk:associated_existential_types, r=nikomatsakis
Implement associated existential types

r? @nikomatsakis

no idea if these work with generic traits. I'm going home for the day 🤣
2018-07-27 07:16:12 +00:00
toidiu
3bc6becf8b fix tidy 2018-07-27 00:02:58 -04:00
toidiu
0fd7fee5c6 fix test and add feature gate test 2018-07-26 22:58:03 -04:00
toidiu
429ae93c09 some comment about not infering static lifetimes test 2018-07-26 20:32:01 -04:00
toidiu
44df36567b feature gate for inferring 'static lifetimes 2018-07-26 20:25:27 -04:00
bors
419e60ee9d Auto merge of #52673 - oli-obk:mutable_promoted, r=nagisa,cramertj,estebank
Try to fix an ICE

might fix #52671
2018-07-26 22:20:17 +00:00
Alex Crichton
336cf9db5f Tweak the raw_identifiers lints in 2018
* Enable the `raw_identifiers` feature automatically in the 2018 preview
* Only emit lint warnings if the `raw_identifiers` feature is activated

cc rust-lang/cargo#5783
2018-07-26 14:14:10 -07:00
Matthew Jasper
b32caef1ad Use better spans for cannot-move errors 2018-07-26 22:06:12 +01:00
Matthew Jasper
71637c2937 Use better spans for dummy accesses used in matches 2018-07-26 22:06:12 +01:00
Esteban Küber
a3bf27b1db Suggest underscore when using dashes in crate namet push fork 2018-07-26 13:12:42 -07:00