Commit graph

20008 commits

Author SHA1 Message Date
bors
a51e807136 Auto merge of #51723 - estebank:abolish-ice, r=oli-obk
Accept `TyError` in `analyze_closure` to avoid ICE

Fix #51714.
2018-06-23 11:00:43 +00:00
bors
56e8f29dbe Auto merge of #51580 - cramertj:async-await, r=eddyb
async/await

This PR implements `async`/`await` syntax for `async fn` in Rust 2015 and `async` closures and `async` blocks in Rust 2018 (tracking issue: https://github.com/rust-lang/rust/issues/50547). Limitations: non-`move` async closures with arguments are currently not supported, nor are `async fn` with multiple different input lifetimes. These limitations are not fundamental and will be removed in the future, however I'd like to go ahead and get this PR merged so we can start experimenting with this in combination with futures 0.3.

Based on https://github.com/rust-lang/rust/pull/51414.
cc @petrochenkov for parsing changes.
r? @eddyb
2018-06-23 09:02:45 +00:00
bors
2ea922a96d Auto merge of #51696 - estebank:fuzzy-ice-ice, r=oli-obk
Accept `TyError` in patterns to avoid ICE on bad input

Fix #50585.
2018-06-23 06:56:12 +00:00
bors
f9686334ac Auto merge of #51697 - estebank:once-used-lifetime-label, r=oli-obk
Add label to lint for lifetimes used once

```
error: lifetime parameter `'a` only used once
  --> $DIR/fn-types.rs:19:10
   |
LL |   a: for<'a> fn(&'a u32), //~ ERROR `'a` only used once
   |          ^^      -- ...is used only here
   |          |
   |          this lifetime...
```
2018-06-23 00:06:54 +00:00
Esteban Küber
8ddf9a3360 Accept TyError in analyze_closure to avoid ICE 2018-06-22 15:35:52 -07:00
bors
cbc4c8380f Auto merge of #51681 - varkor:rustc_deprecated-future-deprecation, r=petrochenkov
Support future deprecation for rustc_deprecated

Follow-up to #49179 to allow `since` parameters to be set to future versions of Rust and correspondingly to not be treated as deprecated until that version. This is required for #30459 to be completed (though we'll need to wait until this hits beta).
2018-06-22 19:55:30 +00:00
Taylor Cramer
ee51a3c10a Review nits and updates
Move future_from_generator out of raw
Update await to use $crate
Renumber errors
2018-06-22 11:36:01 -07:00
bors
8f024479d4 Auto merge of #51670 - estebank:issue-51634, r=oli-obk
Don't suggest incorrect syntax

Fix #51634.
2018-06-22 17:51:02 +00:00
Lamb
815765dade
Issue #50974: Fix compilation error and test 2018-06-22 11:38:38 +02:00
Lamb
6c962e3ec4
Issue #50974: Adding issue number in the test 2018-06-22 11:38:38 +02:00
Lamb
5c022af4a4
Issue #50974: Adding tests 2018-06-22 11:38:38 +02:00
bors
7dae5c0e06 Auto merge of #51686 - nikomatsakis:issue-51415-borrowck-match-default-bindings-bug, r=eddyb
yet another "old borrowck" bug around match default bindings

We were getting the type of the parameter from its pattern, but that didn't include adjustments. I did a `ripgrep` around and this seemed to be the only affected case.

The reason this didn't show up as an ICE earlier is that mem-categorization is lenient with respect to weird discrepancies. I am going to add more delay-span-bug calls shortly around that (I'll push onto the PR).

This example is an ICE, but I presume that there is a way to make a soundness example out of this -- it basically ignores borrows occuring inside match-default-bindings in a closure, though only if the implicit deref is at the top-level. It happens though that this occurs frequently in iterators, which often give a `&T` parameter.

Fixes #51415
Fixes #49534

r? @eddyb
2018-06-22 06:36:11 +00:00
Taylor Cramer
d814160d82 Fix test using ExprKind::Closure 2018-06-21 22:38:06 -07:00
Taylor Cramer
e4c89d7b50 Truncate errors to make tidy happy 2018-06-21 22:38:05 -07:00
Taylor Cramer
fb1e13b8e2 Fix parse-fail tests that now mention async 2018-06-21 22:38:05 -07:00
Taylor Cramer
b97ef26de1 Explicitly ban async in trait impls
This wouldn't compile before because the return type wouldn't match,
but now it's properly an error.
2018-06-21 22:38:05 -07:00
Taylor Cramer
d64e577fa3 Async methods 2018-06-21 22:38:05 -07:00
Taylor Cramer
09f6caabe5 Parse unsafe async fn instead of async unsafe fn 2018-06-21 22:37:17 -07:00
Taylor Cramer
cf844b547d async await desugaring and tests 2018-06-21 22:36:36 -07:00
bors
4b17d31f11 Auto merge of #51463 - estebank:error-codes, r=nikomatsakis
Various changes to existing diagnostics

* [Add code to `invalid ABI` error, add span label, move list to help to make message shorter](https://github.com/rust-lang/rust/pull/51463/commits/23ae5af274defa9ff884f593e44a2bbcaf814a02):
```
error[E0697]: invalid ABI: found `路濫狼á́́`
  --> $DIR/unicode.rs:11:8
   |
LL | extern "路濫狼á́́" fn foo() {} //~ ERROR invalid ABI
   |        ^^^^^^^^^ invalid ABI
   |
   = help: valid ABIs: cdecl, stdcall, fastcall, vectorcall, thiscall, aapcs, win64, sysv64, ptx-kernel, msp430-interrupt, x86-interrupt, Rust, C, system, rust-intrinsic, rust-call, platform-intrinsic, unadjusted
```
* [Add code to incorrect `pub` restriction error](https://github.com/rust-lang/rust/pull/51463/commits/e96fdea8a38f39f99f8b9a4000a689187a457e08)
* [Add message to `rustc_on_unimplemented` attributes in core to have them set a custom message _and_ label](https://github.com/rust-lang/rust/pull/51463/commits/2cc7e5ed307aee936c20479cfdc7409d6b52a464):
```
error[E0277]: `W` does not have a constant size known at compile-time
  --> $DIR/unsized-enum2.rs:33:8
   |
LL |     VA(W),
   |        ^ `W` does not have a constant size known at compile-time
   |
   = help: the trait `std::marker::Sized` is not implemented for `W`
   = help: consider adding a `where W: std::marker::Sized` bound
   = note: no field of an enum variant may have a dynamically sized type
```
```
error[E0277]: `Foo` cannot be sent between threads safely
  --> $DIR/E0277-2.rs:26:5
   |
LL |     is_send::<Foo>();
   |     ^^^^^^^^^^^^^^ `Foo` cannot be sent between threads safely
   |
   = help: the trait `std::marker::Send` is not implemented for `Foo`
```
```
error[E0277]: can't compare `{integer}` with `std::string::String`
  --> $DIR/binops.rs:16:7
   |
LL |     5 < String::new();
   |       ^ no implementation for `{integer} < std::string::String` and `{integer} > std::string::String`
   |
   = help: the trait `std::cmp::PartialOrd<std::string::String>` is not implemented for `{integer}`
```
```
error[E0277]: can't compare `{integer}` with `std::result::Result<{integer}, _>`
  --> $DIR/binops.rs:17:7
   |
LL |     6 == Ok(1);
   |       ^^ no implementation for `{integer} == std::result::Result<{integer}, _>`
   |
   = help: the trait `std::cmp::PartialEq<std::result::Result<{integer}, _>>` is not implemented for `{integer}`
```
```
error[E0277]: a collection of type `i32` cannot be built from an iterator over elements of type `i32`
  --> $DIR/type-check-defaults.rs:16:19
   |
LL | struct WellFormed<Z = Foo<i32, i32>>(Z);
   |                   ^ a collection of type `i32` cannot be built from `std::iter::Iterator<Item=i32>`
   |
   = help: the trait `std::iter::FromIterator<i32>` is not implemented for `i32`
note: required by `Foo`
  --> $DIR/type-check-defaults.rs:15:1
   |
LL | struct Foo<T, U: FromIterator<T>>(T, U);
   | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
```
* [Add link to book for `Sized` errors](https://github.com/rust-lang/rust/pull/51463/commits/1244dc7c283323aea1a3457a4458d590a3e160c8):
```
error[E0277]: `std::fmt::Debug + std::marker::Sync + 'static` does not have a constant size known at compile-time
  --> $DIR/const-unsized.rs:13:29
   |
LL | const CONST_0: Debug+Sync = *(&0 as &(Debug+Sync));
   |                             ^^^^^^^^^^^^^^^^^^^^^^ `std::fmt::Debug + std::marker::Sync + 'static` does not have a constant size known at compile-time
   |
   = help: the trait `std::marker::Sized` is not implemented for `std::fmt::Debug + std::marker::Sync + 'static`
   = note: to learn more, visit <https://doc.rust-lang.org/book/second-edition/ch19-04-advanced-types.html#dynamically-sized-types--sized>
   = note: constant expressions must have a statically known size
```
* [Point to previous line for single expected token not found](https://github.com/rust-lang/rust/pull/51463/commits/48165168fb0f059d8536cd4a2276b609d4a7f721) (if the current token is in a different line)
2018-06-22 03:24:36 +00:00
Esteban Küber
973baaa5b2 Add label to lint for lifetimes used once 2018-06-21 18:21:49 -07:00
Esteban Küber
fe5710a25e Accept TyError in patterns to avoid ICE on bad input 2018-06-21 18:18:39 -07:00
bors
0b8d817404 Auto merge of #51433 - scalexm:finish-rules, r=nikomatsakis
[chalkify] Small refactoring and WF/FromEnv rules for types

r? @nikomatsakis
2018-06-22 01:17:52 +00:00
bors
ec60dd81f9 Auto merge of #51690 - nikomatsakis:issue-51683-existential-fail, r=oli-obk
do not ICE when existing type info is incomplete

Apparently master is kinda ICE-y right now, but only for some people (sadly that set includes me).

I'm not crazy about this PR, because it seems to regress diagnostics a lot, but it *does* fix the problems. I think probably fixing the diagnostics should be done by doing a better job of suppressing errors?

Mitigates  #51683

r? @oli-obk
2018-06-21 23:08:32 +00:00
bors
662c70a59f Auto merge of #48149 - varkor:generics-generalisation, r=petrochenkov
The Great Generics Generalisation: HIR Edition

This is essentially a followup to https://github.com/rust-lang/rust/pull/45930, consolidating the use of separate lifetime and type vectors into single kinds vectors wherever possible. This is intended to provide more of the groundwork for const generics (https://github.com/rust-lang/rust/issues/44580).

r? @eddyb
cc @yodaldevoid
2018-06-21 20:58:51 +00:00
Niko Matsakis
e3fa2d5803 tolerate existential types whose concrete expansion is not known 2018-06-21 16:38:35 -04:00
Niko Matsakis
a2a019a28a do not introduce *false* results from lifetime resolution 2018-06-21 16:38:35 -04:00
Esteban Küber
096fbbbe44 Account for bindings with types and in crate macros 2018-06-21 12:10:53 -07:00
Niko Matsakis
8289bf2994 use pat_ty_adjusted from expr_use_visitor to type of arguments 2018-06-21 14:32:52 -04:00
varkor
09310947be Support future deprecation for rustc_deprecated 2018-06-21 16:00:32 +01:00
Esteban Küber
70c88e500c Don't suggest incorrect syntax 2018-06-20 16:55:52 -07:00
bors
637fd2e048 Auto merge of #51651 - spastorino:fix_var_name_in_e0502, r=nikomatsakis
Fix variable name in E0502 double borrow error

Closes #51268

r? @nikomatsakis
2018-06-20 12:46:15 +00:00
Santiago Pastorino
3d31e5ffa6
Fix variable name in E0502 double borrow error 2018-06-20 09:04:52 -03:00
varkor
a5328bc17b Simply joint lifetime/type iteration 2018-06-20 12:21:52 +01:00
varkor
f9d0968906 Make method and variable names more consistent 2018-06-20 12:19:04 +01:00
varkor
3e89753283 Rename PathParameter(s) to GenericArg(s) 2018-06-20 12:19:04 +01:00
bors
7d313eaeb6 Auto merge of #51638 - spastorino:diagnostic-suggest-drop-in-reverse, r=nikomatsakis
Diagnostic suggest drop in reverse

Closes #51195
2018-06-20 09:30:02 +00:00
Esteban Küber
28cea50a46 Update error code numbers 2018-06-19 17:33:14 -07:00
Esteban Küber
d4bfae1319 Update message for !Sized types 2018-06-19 17:32:33 -07:00
Santiago Pastorino
f4fc43cb20
Suggest that values are dropped in the opposite order they are defined 2018-06-19 21:21:50 -03:00
bors
ac8d1f7623 Auto merge of #51639 - SimonSapin:missing-alloc, r=rkruppe
Update the error message for a missing global allocator

Don’t mention `#[default_lib_allocator]` (which is an implementation detail irrelevant to most users) and  instead suggest using `#[global_allocator]`, which is often the correct fix.
2018-06-19 23:37:09 +00:00
Esteban Küber
76a49524bd Add test for updated parser error 2018-06-19 15:52:03 -07:00
Esteban Küber
317258c1ce Fix tidy and remove unused method 2018-06-19 15:19:20 -07:00
Esteban Küber
f1dee43887 Add link to book for Sized errors 2018-06-19 15:19:15 -07:00
Esteban Küber
776544f011 Add message to rustc_on_unimplemented attributes in core 2018-06-19 15:19:13 -07:00
bors
f28c7aef7f Auto merge of #51275 - pnkfelix:nll-diagnostics-revise-check-access-permissions, r=nikomatsakis
NLL diagnostics: revise `fn check_access_permissions`

NLL: revise `fn check_access_permissions` so that its (still branchy) shares more code paths between the different cases, and also provide more diagnostics in more cases (though the added diagnostics still do not always meet the quality bar established by AST-borrowck)

----

Transcribing "checklist" suggested by Niko, except I am rendering it as a table to make it clear that I do not regard every item in the list to be a "must have" for landing this PR.

goal | does this PR do it?
-----|------------------------------
no suggestions for `ref mut` |  yes
suggestions for direct local assignment (`{ let x = 3; x = 4; }`) | yes (see commits at end)
suggestions for direct field assignment (`{ let x = (3, 4); x.0 = 5; }` | yes (see commits at end)
suggestions for upvars (`let x = 3; let c = \|\| { &mut x; }`) | yes

Note that I added support for a couple of rows via changes that are not strictly part of `fn check_access_permissions`. If desired I can remove those commits from this PR and leave them for a later PR.

Fix #51031
Fix #51032
(bug #51191 needs a little more investigation before closing.)
Fix #51578
2018-06-19 21:31:36 +00:00
bors
d692ab406e Auto merge of #51543 - SimonSapin:oom, r=SimonSapin
Rename OOM to allocation error

The acronym is not descriptive unless one has seen it before.

* Rename the `oom` function to `handle_alloc_error`. It was **stabilized in 1.28**, so if we do this at all we need to land it this cycle.
* Rename `set_oom_hook` to `set_alloc_error_hook`
* Rename `take_oom_hook` to `take_alloc_error_hook`

Bikeshed: `on` v.s. `for`, `alloc` v.s. `allocator`, `error` v.s. `failure`
2018-06-19 19:22:12 +00:00
Esteban Küber
b3a1d56ebe Add code to incorrect pub restriction error 2018-06-19 11:37:33 -07:00
Esteban Küber
09e42bcb10 Add code to invalid ABI error 2018-06-19 11:37:33 -07:00
Simon Sapin
d2fe6c4527 Update the error message for a missing global allocator
Don’t mention `#[default_lib_allocator]` (which is an implementation detail
irrelevant to most users) and instead suggest using `#[global_allocator]`,
which is often the correct fix.
2018-06-19 20:16:43 +02:00