Commit graph

26102 commits

Author SHA1 Message Date
bors
dfd43f0fdd Auto merge of #63870 - estebank:async-fn-call, r=oli-obk
Suggest call fn ctor passed as arg to fn with type param bounds

_Reviewer note: the relevant changes are in the second commit, the first is simple and mechanical, but verbose._

When forgetting to call a fn in an argument position to an fn that has a generic bound:

```rust
async fn foo() {}

fn bar(f: impl Future<Output=()>) {}

fn main() {
    bar(foo); // <- should be `bar(foo());`
}
```

suggest calling it:

```
error[E0277]: the trait bound `fn() -> impl std::future::Future {foo}: std::future::Future` is not satisfied
  --> $DIR/async-fn-ctor-passed-as-arg-where-it-should-have-been-called.rs:9:5
   |
LL | fn bar(f: impl Future<Output=()>) {}
   | --------------------------------- required by `bar`
...
LL |     bar(foo);
   |     ^^^ the trait `std::future::Future` is not implemented for `fn() -> impl std::future::Future {foo}`
   |
   = help: it looks like you forgot to use parentheses to call the function: `foo()`
```

Fix #63100. Follow up to #63833 and #63337.
2019-09-01 18:04:49 +00:00
Esteban Küber
e553051950 review comment 2019-09-01 02:22:03 -07:00
bors
d0677b9abc Auto merge of #64036 - matthewjasper:kill-borrows-on-self-assign, r=estebank
Kill borrows from assignments after generating new borrows

Closes #63719
2019-09-01 08:15:04 +00:00
Esteban Küber
aee6cd937a Fix nll tests 2019-08-31 13:40:20 -07:00
bors
59cc53e6e7 Auto merge of #63703 - tommilligan:warn-empty-doctest, r=ollie27
rustdoc: warn on empty doc test

Closes #60319.

A doc test that only contains whitespace should result in a warning.

This PR adds detection of empty doc tests to `check-code-block-syntax`, as having an invalid doc test is mutually exclusive with an empty doc test.
2019-08-31 20:10:20 +00:00
Matthew Jasper
c621919deb Kill borrows from assignments after generating new borrows 2019-08-31 15:35:20 +01:00
Esteban Küber
5384d5584f Suggest call fn ctor passed as arg to fn with type param bounds 2019-08-31 00:14:23 -07:00
Esteban Küber
444bc3ca66 Use span label instead of note for cause in E0631 2019-08-31 00:14:23 -07:00
bors
b3146549ab Auto merge of #63991 - Centril:unique-improper-ctype, r=rkruppe
`improper_ctypes`: guard against accidental change to `Unique<T>`

r? @eddyb
2019-08-31 06:38:46 +00:00
Mazdak Farrokhzad
960ecdce7c improper_ctypes: guard against accidental change to Unique<T>. 2019-08-31 02:42:28 +02:00
bors
fd68d023f4 Auto merge of #64026 - Centril:rollup-le667lp, r=Centril
Rollup of 7 pull requests

Successful merges:

 - #62957 (Match the loop examples)
 - #63600 (Merge oli-obk mail addresses)
 - #63684 (Constify LinkedList new function)
 - #63847 ([rustdoc] Fix system theme detection)
 - #63999 (Add missing links on AsRef trait)
 - #64014 ( miri: detect too large dynamically sized objects )
 - #64015 (some const-eval test tweaks)

Failed merges:

r? @ghost
2019-08-30 21:31:01 +00:00
Mazdak Farrokhzad
d997596445
Rollup merge of #64015 - RalfJung:const-tests, r=oli-obk
some const-eval test tweaks

Best reviewed commit-by-commit.

r? @oli-obk
2019-08-30 23:08:07 +02:00
Mazdak Farrokhzad
1dc8b2304f
Rollup merge of #64014 - RalfJung:miri-slice, r=oli-obk
miri: detect too large dynamically sized objects

Needed to make https://github.com/rust-lang/miri/pull/929 pass.

r? @oli-obk
2019-08-30 23:08:06 +02:00
bors
4295eea903 Auto merge of #63982 - sam09:fix-63976, r=estebank
When accessing private field of union, do not misidentify it as a struct

Fix incorrect error message when accessing private field of union.

Fixes #63976.
2019-08-30 17:54:55 +00:00
Ralf Jung
bb3474994b add test 2019-08-30 15:04:12 +02:00
Ralf Jung
6d86163ffb const-eval tests: make all unions repr(C) 2019-08-30 09:35:33 +02:00
Ralf Jung
e7fed140a4 explain why REF_AS_USIZE is important 2019-08-30 09:35:33 +02:00
Ralf Jung
cf574091fb tweak const-valid test 2019-08-30 09:35:33 +02:00
Ralf Jung
38f6b96aae make unions repr(C) 2019-08-30 09:30:07 +02:00
bors
19a38de68a Auto merge of #63402 - estebank:strip-margin, r=oli-obk
Strip code to the left and right in diagnostics for long lines

Fix #62999.
2019-08-30 06:49:15 +00:00
Ralf Jung
235ee34a15 better variable names 2019-08-30 07:44:54 +02:00
Oliver Scherer
6978b9482b Update tests 2019-08-30 02:46:25 +02:00
Oliver Scherer
26e9990198 Add a "diagnostic item" scheme
This allows lints and other diagnostics to refer to items
by a unique ID instead of relying on whacky path
resolution schemes that may break when items are
relocated.
2019-08-30 01:00:55 +02:00
Sam Radhakrishan
378c32bc90 Fix test. 2019-08-30 00:57:20 +05:30
Mazdak Farrokhzad
137564d825
Rollup merge of #63956 - alexcrichton:fix-lto-all-cached, r=michaelwoerister
rustc: Handle modules in "fat" LTO more robustly

When performing a "fat" LTO the compiler has a whole mess of codegen
units that it links together. To do this it needs to select one module
as a "base" module and then link everything else into this module.
Previously LTO passes assume that there's at least one module in-memory
to link into, but nowadays that's not always true! With incremental
compilation modules may actually largely be cached and it may be
possible that there's no in-memory modules to work with.

This commit updates the logic of the LTO backend to handle modules a bit
more uniformly during a fat LTO. This commit immediately splits them
into two lists, one serialized and one in-memory. The in-memory list is
then searched for the largest module and failing that we simply
deserialize the first serialized module and link into that. This
refactoring avoids juggling three lists, two of which are serialized
modules and one of which is half serialized and half in-memory.

Closes #63349
2019-08-29 17:14:01 +02:00
Mazdak Farrokhzad
1ea8fc587c
Rollup merge of #62734 - GuillaumeGomez:hide-default-methods, r=Mark-Simulacrum
Hide trait default methods

Fixes #62499.

However, the question remains: do we want to extend it to this point or not?

r? @QuietMisdreavus
2019-08-29 17:13:57 +02:00
Mazdak Farrokhzad
3f05cf6776
Rollup merge of #63992 - lzutao:integer-ord, r=nagisa
Small improvement for Ord implementation of integers

Godbolt link: https://godbolt.org/z/tuTDOg

### Before

**asm**
```asm
example::cmp:
  mov eax, dword ptr [rdi]
  xor ecx, ecx
  cmp eax, dword ptr [rsi]
  seta cl
  mov eax, 255
  cmovae eax, ecx
  ret
```

**llvm-mca**
```
Iterations:        100
Instructions:      700
Total Cycles:      217
Total uOps:        1100

Dispatch Width:    6
uOps Per Cycle:    5.07
IPC:               3.23
Block RThroughput: 1.8
```

### After

**asm**
```asm
example::cmp:
  mov eax, dword ptr [rdi]
  xor ecx, ecx
  cmp eax, dword ptr [rsi]
  setne cl
  mov eax, 255
  cmovae eax, ecx
  ret
```

**llvm-mca**
```
Iterations:        100
Instructions:      700
Total Cycles:      209
Total uOps:        1000

Dispatch Width:    6
uOps Per Cycle:    4.78
IPC:               3.35
Block RThroughput: 1.7
```

r? @nagisa
2019-08-29 13:18:01 +02:00
Mazdak Farrokhzad
d2ba571850
Rollup merge of #63880 - RalfJung:miri-meta, r=oli-obk
Validation: check raw wide pointer metadata

While I was at it, I also added a missing check for slices not to be too big.

r? @oli-obk
Fixes https://github.com/rust-lang/miri/issues/918
2019-08-29 13:17:53 +02:00
Mazdak Farrokhzad
e4e6b01ca1
Rollup merge of #63867 - petrochenkov:dhelpers, r=matthewjasper
resolve: Block expansion of a derive container until all its derives are resolved

So, it turns out there's one more reason to block expansion of a `#[derive]` container until all the derives inside it are resolved, beside `Copy` (https://github.com/rust-lang/rust/pull/63248).

The set of derive helper attributes registered by derives in the container also has to be known before the derives themselves are expanded, otherwise it may be too late (see https://github.com/rust-lang/rust/pull/63468#issuecomment-524550872 and the `#[stable_hasher]`-related test failures in https://github.com/rust-lang/rust/pull/63468).

So, we stop our attempts to unblock the container earlier, as soon as the `Copy` status is known, and just block until all its derives are resolved.
After all the derives are resolved we immediately go and process their helper attributes in the item, without delaying it until expansion of the individual derives.

Unblocks https://github.com/rust-lang/rust/pull/63468
r? @matthewjasper (as a reviewer of https://github.com/rust-lang/rust/pull/63248)
cc @c410-f3r
2019-08-29 13:17:52 +02:00
bors
85ed538d69 Auto merge of #63990 - Centril:rollup-q1nt0b0, r=Centril
Rollup of 11 pull requests

Successful merges:

 - #63811 (Correctly suggest adding bounds to `impl Trait` argument)
 - #63933 (Resolve some small issues related to #63580)
 - #63938 (or-pattern: fix typo in error message)
 - #63945 (Recover `mut $pat` and other improvements)
 - #63958 (const_prop: only call error_to_const_error if we are actually showing something)
 - #63961 (Add Option<Span> to `require_lang_item`)
 - #63963 (remove the reference to __cxa_thread_atexit_impl)
 - #63965 (Prevent syntax error in LD linker version script)
 - #63968 (rustc_apfloat: make the crate #![no_std] explicitly.)
 - #63970 (Notify me (flip1995) when Clippy toolstate changes)
 - #63980 (add missing `#[repr(C)]` on the Slices union)

Failed merges:

 - #63989 (Add Yaah to clippy toolstain notification list)

r? @ghost
2019-08-29 05:05:17 +00:00
Lzu Tao
ade191c70a Small improvement for Ord implementation of integers 2019-08-29 03:52:18 +00:00
Mazdak Farrokhzad
d4757d5bbf
Rollup merge of #63961 - JohnTitor:improve-require-lang-item, r=estebank
Add Option<Span> to `require_lang_item`

Fixes #63954

I'm not sure where to take `Some(span)` or something so I use `None` in many places.
r? @estebank
2019-08-29 05:32:51 +02:00
Mazdak Farrokhzad
52c3846d51
Rollup merge of #63945 - Centril:recover-mut-pat, r=estebank
Recover `mut $pat` and other improvements

- Recover on e.g. `mut Foo(x, y)` and suggest `Foo(mut x, mut y)`. Fixes https://github.com/rust-lang/rust/issues/63764.
- Recover on e.g. `let mut mut x;`
- Recover on e.g. `let keyword` and `let keyword(...)`.
- Cleanups in `token.rs` with `fn is_non_raw_ident_where` and friends.
2019-08-29 05:32:48 +02:00
Mazdak Farrokhzad
eb4ac32c59
Rollup merge of #63938 - tshepang:typo, r=Centril
or-pattern: fix typo in error message

cc https://github.com/rust-lang/rust/issues/54883.
2019-08-29 05:32:46 +02:00
Mazdak Farrokhzad
4cae33a176
Rollup merge of #63811 - estebank:impl-trait-arg, r=cramertj
Correctly suggest adding bounds to `impl Trait` argument

Fix #63706.
2019-08-29 05:32:43 +02:00
bors
347654324d Auto merge of #62855 - Aaron1011:feature/rustdoc-reexport-final, r=petrochenkov
Improve Rustdoc's handling of procedural macros

Fixes #58700
Fixes #58696
Fixes #49553
Fixes #52210

This commit removes the special rustdoc handling for proc macros, as we can now
retrieve their span and attributes just like any other item.

A new command-line option is added to rustdoc: `--crate-type`. This takes the same options as rustc's `--crate-type` option. However, all values other than `proc-macro` are treated the same. This allows Rustdoc to enable 'proc macro mode' when handling a proc macro crate.

In compiletest, a new 'rustdoc-flags' option is added. This allows us to
pass in the '--proc-macro-crate' flag in the absence of Cargo.

I've opened [an additional PR to Cargo](https://github.com/rust-lang/cargo/pull/7159) to support passing in this flag.
These two PRS can be merged in any order - the Cargo changes will not
take effect until the 'cargo' submodule is updated in this repository.
2019-08-29 01:22:11 +00:00
bors
17e73e801a Auto merge of #63875 - philipc:issue-57822, r=michaelwoerister
debuginfo: give unique names to closure and generator types

Closure types have been moved to the namespace where they
are defined, and both closure and generator type names now
include the disambiguator.

This fixes an exception when lldb prints nested closures.

Fixes #57822

I haven't included the `DW_AT_artificial` changes discussed in #57822 because they make the output worse IMO, but I can easily add these if still required. For example, for the new test case the output is now:
```
(lldb) p g
(issue_57822::main::closure-1) $1 = closure-1(closure(1))
```
but adding `DW_AT_artificial` changes this to:
```
(lldb) p g
(issue_57822::main::closure-1) $0 = closure-1 {

}
```

Note that nested generators didn't cause the exception. I haven't determined why, but I think it makes sense to add the disambiguator for them too. It feels like we still don't really understand why closures were causing an error though.

r? @michaelwoerister
2019-08-28 17:49:37 +00:00
bors
c4223726c3 Auto merge of #63853 - matthewjasper:test-ast-serialization, r=estebank
Add default serialization for `Ident`s

Also add tests for `-Zast-json` and `-Zast-json-noexpand`

closes #63728
2019-08-28 13:43:05 +00:00
bors
ac21131f78 Auto merge of #63820 - oli-obk:eager_const_eval, r=nikomatsakis
Simplify eager normalization of constants

r? @nikomatsakis
2019-08-28 07:29:07 +00:00
bors
bbd48e6f16 Auto merge of #63127 - kper:pr, r=nikomatsakis
Cleanup: Consistently use `Param` instead of `Arg` #62426

Fixes #62426
2019-08-28 03:42:00 +00:00
Tshepang Lekhonkhobe
6f67bbc445 or-pattern: fix typo in error message 2019-08-28 02:23:58 +02:00
Yuki Okushi
ede7a777c0 Remove sized spans 2019-08-28 07:32:25 +09:00
Yuki Okushi
8c921beebb Apply review comments 2019-08-28 07:11:12 +09:00
Yuki Okushi
82f2b37635 Add Option<Span> to require_lang_item 2019-08-28 07:11:12 +09:00
Matthew Jasper
3d718037dc Add default serialization for Idents
Add tests for -Zast-json and -Zast-json-noexpand, which need this impl.
2019-08-27 23:02:22 +01:00
Mazdak Farrokhzad
42e895d4d9 Improve 'mut ' diagnostic. 2019-08-27 23:44:44 +02:00
Alex Crichton
1a4330d2a2 rustc: Handle modules in "fat" LTO more robustly
When performing a "fat" LTO the compiler has a whole mess of codegen
units that it links together. To do this it needs to select one module
as a "base" module and then link everything else into this module.
Previously LTO passes assume that there's at least one module in-memory
to link into, but nowadays that's not always true! With incremental
compilation modules may actually largely be cached and it may be
possible that there's no in-memory modules to work with.

This commit updates the logic of the LTO backend to handle modules a bit
more uniformly during a fat LTO. This commit immediately splits them
into two lists, one serialized and one in-memory. The in-memory list is
then searched for the largest module and failing that we simply
deserialize the first serialized module and link into that. This
refactoring avoids juggling three lists, two of which are serialized
modules and one of which is half serialized and half in-memory.

Closes #63349
2019-08-27 13:51:14 -07:00
Mazdak Farrokhzad
dbbe3363c9 Ensure 'let mut ;' where ':pat' is banned. 2019-08-27 19:51:21 +02:00
Kevin Per
97319b2b95 Changing error messages and renaming tests #63127
`async-await/no-args-non-move-async-closure`
`generator/no-arguments-on-generators`
2019-08-27 17:31:57 +02:00
Kevin Per
e0ce9f8c0a Cleanup: Consistently use Param instead of Arg #62426 2019-08-27 14:07:41 +02:00