Commit Graph

3137 Commits

Author SHA1 Message Date
bors
9653f79033 Auto merge of #54660 - kennytm:rollup, r=kennytm
Rollup of 8 pull requests

Successful merges:

 - #54564 (Add 1.29.1 release notes)
 - #54567 (Include path in stamp hash for debuginfo tests)
 - #54577 (rustdoc: give proc-macros their own pages)
 - #54590 (std: Don't let `rust_panic` get inlined)
 - #54598 (Remove useless lifetimes from `Pin` `impl`s.)
 - #54604 (Added help message for `self_in_typedefs` feature gate)
 - #54635 (Improve docs for std::io::Seek)
 - #54645 (Compute Android gdb version in compiletest)
2018-09-29 12:35:39 +00:00
kennytm
9b56c8700c
Rollup merge of #54604 - alexreg:self_in_typedefs-help, r=estebank
Added help message for `self_in_typedefs` feature gate

Fixes #54563.

CC @Centril @estebank @leonardo-m
2018-09-29 16:43:39 +08:00
Ralf Jung
e37d6d37e7 Revert "Auto merge of #53508 - japaric:maybe-uninit, r=RalfJung"
This reverts commit c6e3d7fa31, reversing
changes made to 4591a245c7.
2018-09-29 09:50:50 +02:00
Eduard-Mihai Burtescu
7020326bea rustc: keep a Span for each predicate in ty::GenericPredicates. 2018-09-28 17:19:35 +03: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
Alexander Regueiro
6bf1aa6ff2 Added help message for feature gate. 2018-09-27 04:19:31 +01:00
bors
441519536c Auto merge of #54526 - nnethercote:shrink-StatementKind, r=nagisa
Shrink `StatementKind`

`StatementKind` occurs in significant amounts in Massif profiles.
2018-09-26 23:22:48 +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
0b4791e60b make NLL handle IfEq bounds by using SCC normalization 2018-09-26 09:38:26 -04:00
Niko Matsakis
0f5dae0322 switch to use VerifyBound instead of RegionTest 2018-09-26 09:38:26 -04:00
Niko Matsakis
2392a09397 region_infer: rustfmt 2018-09-26 09:38:26 -04:00
Niko Matsakis
7f8c42d7f0 refactor away AnyRegions and AllRegions
It's a bit cleaner to just have `AnyBound` and `AllBound`, after all.
2018-09-26 09:38:26 -04:00
Niko Matsakis
18b86e9406 introduce VerifyBound::IfEq (presently unused) 2018-09-26 09:38:26 -04:00
Niko Matsakis
582a369bc3 encapsulate infcx too into the delegate 2018-09-26 09:38:26 -04:00
Niko Matsakis
c6f4513804 extract out NLL-specific code from relate-tys into a delegate
No functional change.
2018-09-26 09:38:26 -04:00
Niko Matsakis
a4955d1b2c refactor NLL relate_tys to use Region internally, not RegionVid
No functional change.
2018-09-26 09:38:26 -04:00
Niko Matsakis
9e305a8a23 type_check/mod.rs: rustfmt 2018-09-26 09:38:24 -04:00
Niko Matsakis
2f31698c26 use RegionBoundPairs type alias 2018-09-26 09:37:02 -04:00
bors
0b2eae72af Auto merge of #54164 - mikhail-m1:54131, r=pnkfelix
add "temporary value borrowed for too long" error

Issue #54131

r? @nikomatsakis
2018-09-26 01:16:22 +00:00
bors
4141a4079e Auto merge of #53542 - alexreg:impl-trait-in-bindings, r=cramertj
`impl trait` in bindings (feature: impl-trait-existential-types)

This PR enables `impl Trait` syntax (opaque types) to be used in bindings, e.g.

* `let foo: impl Clone = 1;`
* `static foo: impl Clone = 2;`
* `const foo: impl Clone = 3;`

This is part of [RFC 2071](https://github.com/rust-lang/rfcs/blob/master/text/2071-impl-trait-existential-types.md) ([tracking issue](https://github.com/rust-lang/rust/issues/34511)), but exists behind the separate feature gate `impl_trait_in_bindings`.

CC @cramertj @oli-obk @eddyb @Centril @varkor
2018-09-25 20:02:14 +00: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
Alexander Regueiro
8d5de0b1f8 Handle locals in closures properly. 2018-09-25 03:08:07 +01:00
Matthew Jasper
218189536d Handle impl trait in MIR type checked for assignments. 2018-09-25 03:05:55 +01:00
Alexander Regueiro
cf915849f0 Lower impl Trait types in locals. 2018-09-25 03:05:55 +01:00
bors
3a2190a9cd Auto merge of #53438 - matthewjasper:permissive-match-access, r=pnkfelix
[NLL] Be more permissive when checking access due to Match

Partially addresses #53114. notably, we should now have parity with AST borrowck. Matching on uninitialized values is still forbidden.

* ~~Give fake borrows for match their own `BorrowKind`~~
* ~~Allow borrows with this kind to happen on values that are already mutably borrowed.~~
* ~~Track borrows with this type even behind shared reference dereferences and consider all accesses to be deep when checking for conflicts with this borrow type. See [src/test/ui/issues/issue-27282-mutate-before-diverging-arm-3.rs](cb5c989598 (diff-a2126cd3263a1f5342e2ecd5e699fbc6)) for an example soundness issue this fixes (a case of #27282 that wasn't handled correctly).~~
* Create a new `BorrowKind`: `Shallow` (name can be bike-shed)
* `Shallow` borrows differ from shared borrows in that
  * When we check for access we treat them as a `Shallow(Some(_))` read
  * When we check for conflicts with them, if the borrow place is a strict prefix of the access place then we don't consider that a conflict.
    * For example, a `Shallow` borrow of `x` does not conflict with any access or borrow of `x.0` or `*x`
* Remove the current fake borrow in matches.
* When building matches, we take a `Shallow` borrow of any `Place` that we switch on or bind in a match, and any prefix of those places. (There are some optimizations where we do fewer borrows, but this shouldn't change semantics)
  * `match x { &Some(1) => (),  _ => (), }` would `Shallow` borrow `x`, `*x` and `(*x as Some).0` (the `*x` borrow is unnecessary, but I'm not sure how easy it would be to remove.)
* Replace the fake discriminant read with a `ReadForMatch`.
* Change ReadForMatch to only check for initializedness (to prevent `let x: !; match x {}`), but not conflicting borrows. It is still considered a use for liveness and `unsafe` checking.
* Give special cased error messages for this kind of borrow.

Table from the above issue after this PR

| Thing | AST | MIR | Want | Example |
| --- | --- | --- | --- |---|
| `let _ = <unsafe-field>` | 💚  | 💚  |  |  [playground](https://play.rust-lang.org/?gist=bb7843e42fa5318c1043d04bd72abfe4&version=nightly&mode=debug&edition=2015) |
| `match <unsafe_field> { _ => () }` |   |  |  | [playground](https://play.rust-lang.org/?gist=3e3af05fbf1fae28fab2aaf9412fb2ea&version=nightly&mode=debug&edition=2015) |
| `let _ = <moved>` | 💚  | 💚 | 💚 | [playground](https://play.rust-lang.org/?gist=91a6efde8288558e584aaeee0a50558b&version=nightly&mode=debug&edition=2015) |
| `match <moved> { _ => () }` |  |   | 💚 | [playground](https://play.rust-lang.org/?gist=804f8185040b2fe131f2c4a64b3048ca&version=nightly&mode=debug&edition=2015) |
| `let _ = <borrowed>` | 💚  | 💚 | 💚 | [playground](https://play.rust-lang.org/?gist=0e487c2893b89cb772ec2f2b7c5da876&version=nightly&mode=debug&edition=2015) |
| `match <borrowed> { _ => () }` | 💚  | 💚 | 💚 | [playground](https://play.rust-lang.org/?gist=0e487c2893b89cb772ec2f2b7c5da876&version=nightly&mode=debug&edition=2015) |

r? @nikomatsakis
2018-09-25 01:04:12 +00:00
Matthew Jasper
a830732090 Rename places_conflict to borrow_conflicts_with_place
This name better reflects the asymmetry of this function.
2018-09-24 23:33:13 +01:00
Matthew Jasper
f71f733d48 Add a MIR transform to remove fake reads
As we are now creating borrows of places that may not be valid for
borrow checking matches, these have to be removed to avoid generating
broken code.
2018-09-24 23:33:13 +01:00
Matthew Jasper
46e247bcec Don't check for conflicting borrows of ReadForMatches 2018-09-24 23:33:13 +01:00
Matthew Jasper
a6fad3f620 Add more fake borrows to matches 2018-09-24 23:33:13 +01:00
Matthew Jasper
b55bb2e918 Better messages for errors from Shallow borrows 2018-09-24 23:33:13 +01:00
Matthew Jasper
ced5c2d08a Add "Shallow" borrow kind
This allows treating the "fake" match borrows differently from shared
borrows.
2018-09-24 23:33:13 +01:00
bors
5c875d9385 Auto merge of #54416 - christianpoveda:master, r=wesleywiser
Extend MIR inlining to all operand variants

This fixes https://github.com/rust-lang/rust/issues/54193
r? @eddyb
2018-09-24 20:07:44 +00:00
Nicholas Nethercote
e221b24cb6 Shrink StatementKind::InlineAsm.
This shrinks StatementKind from 64 bytes to 48 bytes on 64-bit.
2018-09-24 18:45:49 +10:00
Nicholas Nethercote
a577f900a9 Shrink StatementKind::Assign.
This shrinks StatementKind from 80 bytes to 64 bytes on 64-bit.
2018-09-24 18:45:37 +10: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
Matthew Jasper
d3f9af8891 Remove irrelevant message about drop order
When dropping a self-borrowing struct we shouldn't add a "values in a
scope are dropped in the opposite order they are defined" message,
since there is only one value being dropped.
2018-09-23 20:27:41 +01:00
bors
f49f6e73a8 Auto merge of #54229 - davidtwco:issue-52534, r=pnkfelix
[nll] borrows that must be valid for a free lifetime should explain why

Fixes #52534.

r? @nikomatsakis
2018-09-23 15:00:53 +00:00
bors
be91c35f34 Auto merge of #54380 - RalfJung:miri-snapshot, r=eddyb
move CTFE engine snapshot state out of miri engine into CTFE machine instance

It still lives in the `interpret` module as it needs access to all sorts of private stuff. Also rename a thing to make @eddyb happy :D

The goal was not to change any behavior.
2018-09-23 12:33:54 +00:00
David Wood
b342f00179
Only annotate if borrow is returned.
Error now correctly checks whether the borrow that does not live
long enough is being returned before annotating the error with the
arguments and return type from the signature - as this would not be
relevant if the borrow was not being returned.
2018-09-23 14:18:35 +02:00
David Wood
ef10e94993
Correctly handle named lifetimes.
Enhances annotation logic to properly consider named lifetimes where
lifetime elision rules that were previously implemented would not apply.

Further, adds new help and note messages to diagnostics and highlights
only lifetime when dealing with named lifetimes.
2018-09-23 14:18:35 +02:00
David Wood
0eabba8c4c
Renamed ppaux highlight region hook.
Changed `highlight_region_with_region` function(s) to
`highlight_region_with_bound_region` to be more specific and less
ambigious.
2018-09-23 14:18:34 +02:00
David Wood
350ed4200c
Added note about dangling references.
This error can only occur within a function when a borrow of data owned
within the function is returned; and when there are arguments that could
have been returned instead. Therefore, it is always applicable to add a
specific note that links to the relevant rust documentation about
dangling references.
2018-09-23 14:18:34 +02:00
David Wood
876774bf71
Improve 'dropped here' note.
Start mentioning function name that the variable is valid within in
notes to provide context.
2018-09-23 14:18:34 +02:00
David Wood
9eb8d1179c
Improve borrow errors for closures.
Adds improved messages for closures where returned type
does not match the inferred return lifetime of the closure.
2018-09-23 14:18:27 +02:00
David Wood
22e49e248d
Improve non-closure, reference in-and-out errors.
For cases where there are references in the parameters and in the the
outputs that do not match, and where no closures are involved, this
commit introduces an improved error that mentions (or synthesizes)
a name for the regions involved to better illustrate why the borrow
does not live long enough.
2018-09-23 13:50:22 +02:00
David Wood
650a61c484
Refactor MirBorrowckCtxt to take infcx instead of tcx. 2018-09-23 13:50:22 +02:00
David Wood
9e3889e2ea
Refactor region naming for control of diagnostics.
Previously, region naming would always highlight the source of the
region name it found. Now, region naming returns the name as part
of a larger structure that encodes the source of the region naming
such that a region name can be optionally added to the diagnostic.
2018-09-23 13:50:11 +02:00
David Wood
10af6a2b37
Refactor explain_borrow to return explanation.
Previously, explain_borrow would emit an error with the explanation of
the a borrow. Now, it returns a enum with what the explanation for the
borrow is and any relevant spans or information such that the calling
code can choose to emit the same note/suggestion as before by calling
the emit method on the new enum.
2018-09-23 13:32:18 +02:00
bors
7714c430ae Auto merge of #54310 - pnkfelix:issue-52059-report-borrow-drop-conflict, r=nikomatsakis
Report when borrow could cause `&mut` aliasing during Drop

We were already issuing an error for the cases where this cropped up, so this is not fixing any soundness holes. The previous diagnostic just wasn't accurately describing the problem in the user's code.

Fix #52059
2018-09-23 04:06:15 +00:00