Commit graph

6286 commits

Author SHA1 Message Date
Mazdak Farrokhzad
d11cf775b7
Rollup merge of #63560 - Centril:mv-generator-test, r=petrochenkov
move test that shouldn't be in test/run-pass/

We no longer test `src/test/run-pass/`; the proper way now is `// run-pass` in `src/test/ui/`

r? @petrochenkov
2019-08-14 22:56:31 +02:00
Mazdak Farrokhzad
02e2a57f26
Rollup merge of #63509 - estebank:async-span, r=Centril
Point at the right enclosing scope when using `await` in non-async fn

Fix #63398.
2019-08-14 22:56:24 +02:00
Mazdak Farrokhzad
d2d49d238f
Rollup merge of #63507 - estebank:type-inference-error, r=Centril
When needing type annotations in local bindings, account for impl Trait and closures

Fix https://github.com/rust-lang/rust/issues/46680, fix https://github.com/rust-lang/rust/issues/63504, fix https://github.com/rust-lang/rust/issues/63506, fix #40014, cc https://github.com/rust-lang/rust/issues/63502.
2019-08-14 22:56:22 +02:00
Mazdak Farrokhzad
c358476c1b
Rollup merge of #63075 - RalfJung:deref-checks, r=oli-obk
Miri: Check that a ptr is aligned and inbounds already when evaluating `*`

This syncs Miri with what the Nomicon and the Reference say, and resolves https://github.com/rust-lang/miri/issues/447.

Also this would not have worked without https://github.com/rust-lang/rust/pull/62982 due to new cycles. ;)

r? @oli-obk
2019-08-14 22:56:20 +02:00
Mazdak Farrokhzad
7178cf5f97
Rollup merge of #62984 - nathanwhit:extra_semi_lint, r=varkor
Add lint for excess trailing semicolons

Closes #60876.
A caveat (not necessarily a negative, but something to consider) with this implementation is that excess semicolons after return/continue/break now also cause an 'unreachable statement' warning.

For the following example:
```
fn main() {
    extra_semis();
}
fn extra_semis() -> i32 {
    let mut sum = 0;;;
    for i in 0..10 {
        if i == 5 {
            continue;;
        } else if i == 9 {
            break;;
        } else {
            sum += i;;
        }
    }
    return sum;;
}
```
The output is:
```
warning: unnecessary trailing semicolons
 --> src/main.rs:5:21
  |
5 |     let mut sum = 0;;;
  |                     ^^ help: remove these semicolons
  |
  = note: `#[warn(redundant_semicolon)]` on by default

warning: unnecessary trailing semicolon
 --> src/main.rs:8:22
  |
8 |             continue;;
  |                      ^ help: remove this semicolon

warning: unnecessary trailing semicolon
  --> src/main.rs:10:19
   |
10 |             break;;
   |                   ^ help: remove this semicolon

warning: unnecessary trailing semicolon
  --> src/main.rs:12:22
   |
12 |             sum += i;;
   |                      ^ help: remove this semicolon

warning: unnecessary trailing semicolon
  --> src/main.rs:15:16
   |
15 |     return sum;;
   |                ^ help: remove this semicolon

warning: unreachable statement
 --> src/main.rs:8:22
  |
8 |             continue;;
  |                      ^
  |
  = note: `#[warn(unreachable_code)]` on by default

warning: unreachable statement
  --> src/main.rs:10:19
   |
10 |             break;;
   |                   ^

warning: unreachable statement
  --> src/main.rs:15:16
   |
15 |     return sum;;
   |                ^

```
2019-08-14 22:56:18 +02:00
Mazdak Farrokhzad
264640cde5 move test that shouldn't be in test/run-pass/ 2019-08-14 18:04:33 +02:00
Mazdak Farrokhzad
a8bb3756b6
Rollup merge of #63530 - ehuss:typo-statemement, r=centril
Fix typo in error message.
2019-08-14 04:18:57 +02:00
Mazdak Farrokhzad
43f4990fc4
Rollup merge of #63508 - estebank:compromice, r=petrochenkov
Do not ICE when synthesizing spans falling inside unicode chars

Fix https://github.com/rust-lang/rust/issues/61226.
2019-08-14 04:18:51 +02:00
Mazdak Farrokhzad
5741e29417
Rollup merge of #63501 - nikomatsakis:issue-63500-async-anon-impl-lifetime, r=cramertj
use `ParamName` to track in-scope lifetimes instead of Ident

Also, clear in-scope lifetimes when visiting nested items.

Fixes #63500.
Fixes #63225.
Fixes #52532.

r? @cramertj
2019-08-14 04:18:49 +02:00
Mazdak Farrokhzad
4134241bcf
Rollup merge of #63499 - nikomatsakis:issuee-63388-async-fn-elision-self-mut-self, r=cramertj
handle elision in async fn correctly

We now always make fresh lifetimne parameters for all elided
lifetimes, whether they are in the inputs or outputs. But then
we generate `'_` in the case of elided lifetimes from the outputs.

Example:

```rust
async fn foo<'a>(x: &'a u32) -> &u32 { .. }
```

becomes

```rust
type Foo<'a, 'b> = impl Future<Output = &'b u32>;
fn foo<'a>(x: &'a u32) -> Foo<'a, '_>
```

Fixes #63388
2019-08-14 04:18:48 +02:00
Mazdak Farrokhzad
c824839471
Rollup merge of #63475 - iluuu1994:issue-62632, r=Centril
Bring back suggestion for splitting `<-` into `< -`

Closes #62632
2019-08-14 04:18:42 +02:00
Mazdak Farrokhzad
76bd7d62d6
Rollup merge of #63459 - eddyb:issue-63430, r=petrochenkov
syntax: account for CVarArgs being in the argument list.

Fixes #63430 by testing for `1` argument (the `CVarArgs` itself) instead of `0`.

Note that the error has basically been impossible to trigger since the change that caused #63430, so perhaps we need an audit of untested errors.

Also, this check probably belongs in AST validation/HIR lowering, but I'd rather fix it in place for now.

r? @petrochenkov cc @dlrobertson
2019-08-14 04:18:40 +02:00
Mazdak Farrokhzad
3d5387d39b
Rollup merge of #63383 - Centril:async-lifetime-elision-tests, r=nikomatsakis
`async fn` lifetime elision tests

Add `async fn` version of the tests in https://github.com/rust-lang/rust/pull/61207 per the first checkbox in https://github.com/rust-lang/rust/issues/62121#issuecomment-506884048.
Works towards resolving blockers in https://github.com/rust-lang/rust/pull/63209.

r? @nikomatsakis
cc @cramertj
2019-08-14 04:18:37 +02:00
Esteban Küber
806476c840 Suggest giving return type to closures on E0282 2019-08-13 16:41:43 -07:00
Eric Huss
643ddfaaa8
Apply Centril's suggestion
Co-Authored-By: Mazdak Farrokhzad <twingoow@gmail.com>
2019-08-13 15:09:11 -07:00
Esteban Küber
25d507f497 review comment: move test 2019-08-13 11:29:33 -07:00
Esteban Küber
939c1cb349 review comments 2019-08-13 11:24:08 -07:00
Eric Huss
ea1a9a0e2b Fix typo in error message. 2019-08-13 11:21:09 -07:00
Esteban Küber
105b3a0b02 review comment: remove unecessary error in test 2019-08-13 09:01:56 -07:00
Niko Matsakis
18d69c8ebe bless tests with compare-mode=nll 2019-08-13 09:13:50 -04:00
Esteban Küber
13fd4666b0 Point at the right enclosing scope when using await in non-async fn 2019-08-13 00:52:07 -07:00
Esteban Küber
d824edfc2c Do not ICE when synthesizing spans falling inside unicode chars 2019-08-12 23:31:13 -07:00
Esteban Küber
fb2511c3c5 Suggest Box::new when appropriate
When encountering a boxed value as expected and a stack allocated value
that could be boxed to fulfill the expectation, like in the following
snippet, suggest `Box::new` wrapping.
2019-08-12 20:24:30 -07:00
Esteban Küber
1e6f753762 Fix tidy 2019-08-12 20:24:26 -07:00
Niko Matsakis
d7c7c52dbc bless tests 2019-08-12 21:13:59 -04:00
Esteban Küber
3b6d46c640 Resolve types when suggesting boxed closure 2019-08-12 18:12:19 -07:00
Niko Matsakis
e4756e6b07 clear in-scope lifetimes for nested items in HIR lowering
This was causing us to incorrectly think the lifetimes were
already declared on the scope for the nested item, when in fact
they are not inherited.
2019-08-12 21:08:32 -04:00
Esteban Küber
b8708e2c9a When needing type annotations in local bindings, account for impl Trait and closures
Do not suggest nonsensical types when the type inference is failing on
`impl Trait` or anonymous closures.
2019-08-12 16:50:46 -07:00
Niko Matsakis
ad214fe470 fix README.md 2019-08-12 19:23:21 -04:00
Niko Matsakis
a02a171e6a add edition to regression test 2019-08-12 18:33:53 -04:00
Niko Matsakis
03e7b96281 revamp how we handle elision in async fn
We now always make fresh lifetimne parameters for all elided
lifetimes, whether they are in the inputs or outputs. But then
we generate `'_` in the case of elided lifetimes from the outputs.

Example:

```rust
async fn foo<'a>(x: &'a u32) -> &u32 { .. }
```

becomes

```rust
type Foo<'a, 'b> = impl Future<Output = &'b u32>;
fn foo<'a>(x: &'a u32) -> Foo<'a, '_>
```
2019-08-12 17:18:26 -04:00
Niko Matsakis
18e54539ca use ParamName to track in-scope lifetimes instead of Ident
This allows us to record "fresh" lifetime names for cases like `impl
Foo<'_>`.
2019-08-12 15:19:30 -04:00
David Wood
861d1bb365
typeck: Prohibit RPIT types that inherit lifetimes
This commit prohibits return position `impl Trait` types that "inherit
lifetimes" from the parent scope. The intent is to forbid cases that are
challenging until they can be addressed properly.
2019-08-12 19:04:11 +01:00
Nathan
76a1345242 Update tests for excess semicolon lint 2019-08-12 10:14:07 -04:00
bors
60960a260f Auto merge of #63483 - RalfJung:invalid-value, r=Centril
Improve invalid_value lint message

The lint now explains which type is involved and why it cannot be initialized this way. It also points at the innermost struct/enum field that has an offending type, if any.

See https://github.com/erlepereira/x11-rs/issues/99#issuecomment-520311911 for how this helps in some real-world code hitting this lint.
2019-08-12 12:43:33 +00:00
Eduard-Mihai Burtescu
34dcca20e5 syntax: account for CVarArgs being in the argument list. 2019-08-12 15:28:10 +03:00
Ralf Jung
0499923b18 more informative error message from invalid_value lint 2019-08-12 11:23:56 +02:00
Mazdak Farrokhzad
7bdff66d35
Rollup merge of #63474 - adamAndMath:master, r=Centril
Add tests for issue #53598 and #57700

Closes #53598 and #57700
2019-08-12 10:58:22 +02:00
Mazdak Farrokhzad
58ac2b2b6b
Rollup merge of #63473 - adrian-budau:master, r=Centril
Regression test for #56870

Closes #56870.
2019-08-12 10:58:21 +02:00
Mazdak Farrokhzad
ab2d7e9a50
Rollup merge of #63406 - jakubadamw:resolve-inconsistent-names-suggest-qualified-path, r=petrochenkov
Suggest using a qualified path in patterns with inconsistent bindings

A program like the following one:

```rust
enum E { A, B, C }
fn f(x: E) -> bool {
    match x {
        A | B => false,
        C => true
    }
}
```

is rejected by the compiler due to `E` variant paths not being in scope.
In this case `A`, `B` are resolved as pattern bindings and consequently
the pattern is considered invalid as the inner or-patterns do not bind
to the same set of identifiers.

This is expected but the compiler errors that follow could be surprising
or confusing to some users. This commit adds a help note explaining that
if the user desired to match against variants or consts, they should use
a qualified path. The help note is restricted to cases where the identifier
starts with an upper-case sequence so as to reduce the false negatives.

Since this happens during resolution, there's no clean way to check what
it is the patterns match against. The syntactic criterium, however, is in line
with the convention that's assumed by the `non-camel-case-types` lint.

Fixes #50831.
2019-08-12 10:58:15 +02:00
Ilija Tovilo
91af5c2daf
Bring back suggestion for splitting <- into < -
Closes #62632
2019-08-12 10:46:34 +02:00
Adam
5981dfffba Move tests into type-alias-impl-trait 2019-08-11 22:30:21 +02:00
Adam
6ed4a42fcf Add test for issue 53598 and 57700 2019-08-11 22:17:28 +02:00
Adrian Budau
75d2db97fe
Regression test for #56870 2019-08-11 23:02:47 +03:00
Mark Rousskov
24a83374b6
Rollup merge of #63433 - RalfJung:miri-call, r=oli-obk
Miri shouldn't look at types

r? @oli-obk

Fixes https://github.com/rust-lang/rust/issues/62137
2019-08-11 15:18:41 -04:00
Mark Rousskov
061245e2b1
Rollup merge of #63346 - RalfJung:zeroed-lint, r=eddyb
Lint on some incorrect uses of mem::zeroed / mem::uninitialized

Cc https://github.com/rust-lang/rust/issues/62825 and https://internals.rust-lang.org/t/make-mem-uninitialized-and-mem-zeroed-panic-for-some-types-where-0-is-a-niche/10605

This does not yet handle `NonNull`/`NonZero*`, but it is a start.

I also improved some doc issues I hit on the way, and added a useful helper to `TyS`.

EDIT: I added the relnotes label mostly as a proposal -- I think this is worth mentioning, but leave the decision up to the release team.
2019-08-11 15:18:40 -04:00
Ralf Jung
ca1e94b131 warn for more cases 2019-08-11 12:04:49 +02:00
Ralf Jung
da6fbb1895 add basic lint testing for misuse of mem::zeroed and mem::uninitialized 2019-08-11 12:04:49 +02:00
bors
2b78e10ac1 Auto merge of #63343 - ishitatsuyuki:revert-62150, r=RalfJung
Back out #62150

Ref: #62825

cc @RalfJung
2019-08-11 09:58:01 +00:00
Jakub Adam Wieczorek
30db4ebdc2 Apply suggestions from code review
Co-Authored-By: Mazdak Farrokhzad <twingoow@gmail.com>
2019-08-10 21:09:53 +00:00