]> git.lizzy.rs Git - rust.git/log
rust.git
3 years agoRollup merge of #80935 - pierwill:rustc_middle-levelandsource, r=petrochenkov
Dylan DPC [Wed, 13 Jan 2021 02:20:27 +0000 (03:20 +0100)]
Rollup merge of #80935 - pierwill:rustc_middle-levelandsource, r=petrochenkov

Rename `rustc_middle::lint::LevelSource` to `LevelAndSource`

This continues work in https://github.com/rust-lang/rust/pull/80274 to improve code readability.

This naming follows a pattern seen elsewhere in the compiler (e.g. [`rustc_middle::ty::TypeAndMut`](https://doc.rust-lang.org/nightly/nightly-rustc/rustc_middle/ty/struct.TypeAndMut.html)).

3 years agoRollup merge of #80924 - teryror:issue-80893-fix, r=jyn514
Dylan DPC [Wed, 13 Jan 2021 02:20:25 +0000 (03:20 +0100)]
Rollup merge of #80924 - teryror:issue-80893-fix, r=jyn514

Fix rustdoc --test-builder argument parsing

My suggested fix to issue #80893. I can actually hook Miri in there now.

I also fixed what I believe to be a typo in the option's help text.

3 years agoRollup merge of #80922 - spastorino:revert-inline-always-in-debug, r=wesleywiser
Dylan DPC [Wed, 13 Jan 2021 02:20:23 +0000 (03:20 +0100)]
Rollup merge of #80922 - spastorino:revert-inline-always-in-debug, r=wesleywiser

Revert "Auto merge of #76896 - spastorino:codegen-inline-fns2

This reverts commit ddf2cc7f8eb34f1a63b491d6a52e3e8208393c09, reversing
changes made to 937f629535f38c655267f1ed21ce6830f592f5df.

As `@alexcrichton` pointed out in https://github.com/rust-lang/rust/issues/80916 there's a problem with the taken approach.

3 years agoRollup merge of #80859 - jsgf:fix-pretty-remap, r=davidtwco
Dylan DPC [Wed, 13 Jan 2021 02:20:21 +0000 (03:20 +0100)]
Rollup merge of #80859 - jsgf:fix-pretty-remap, r=davidtwco

Fix --pretty=expanded with --remap-path-prefix

Per https://github.com/rust-lang/rust/issues/80832, using
--pretty=expanded and --remap-path-prefix results in an ICE.

This is becasue the session source files table is stored in remapped
form, whereas --pretty-expanded looks up unremapped files. This remaps
the path prefixes before lookup.

~~There don't appear to be any existing tests for --pretty=expanded; I'll look into
adding some.~~ Never mind, found the pretty tests.

Fixes #80832

3 years agoRollup merge of #80796 - cuviper:llvm-11.0.1, r=nikic
Dylan DPC [Wed, 13 Jan 2021 02:20:19 +0000 (03:20 +0100)]
Rollup merge of #80796 - cuviper:llvm-11.0.1, r=nikic

Update to LLVM 11.0.1

This updates to a new LLVM branch, rebased on the upstream `llvmorg-11.0.1`. All our patches applied cleanly except the fortanix unwind changes, which just needed a small adjustment in cmake files.

r? `@nikic`
Fixes https://github.com/rust-lang/rust/issues/73722

3 years agoRollup merge of #80736 - KodrAus:feat/lazy-resolve, r=dtolnay
Dylan DPC [Wed, 13 Jan 2021 02:20:17 +0000 (03:20 +0100)]
Rollup merge of #80736 - KodrAus:feat/lazy-resolve, r=dtolnay

use Once instead of Mutex to manage capture resolution

For #78299

This allows us to return borrows of the captured backtrace frames that are tied to a borrow of the Backtrace itself, instead of to some short-lived Mutex guard.

We could alternatively share `&Mutex<Capture>`s and lock on-demand, but then we could potentially forget to call `resolve()` before working with the capture. It also makes it semantically clearer what synchronization is needed on the capture.

cc `@seanchen1991` `@rust-lang/project-error-handling`

3 years agoRollup merge of #80662 - rxrbln:master, r=estebank
Dylan DPC [Wed, 13 Jan 2021 02:20:15 +0000 (03:20 +0100)]
Rollup merge of #80662 - rxrbln:master, r=estebank

Added support for i386-unknown-linux-gnu and i486-unknown-linux-gnu

Support for both can be useful when creating new firmware, boot loaders,
or embedded operating systems.

3 years agoRollup merge of #80232 - bugadani:roundtrip, r=estebank
Dylan DPC [Wed, 13 Jan 2021 02:20:13 +0000 (03:20 +0100)]
Rollup merge of #80232 - bugadani:roundtrip, r=estebank

Remove redundant def_id lookups

Simplify `DefId -> LocalDefId -> HirId -> LocalDefId -> DefId` chains.

3 years agoRollup merge of #79588 - estebank:issue-79187, r=oli-obk
Dylan DPC [Wed, 13 Jan 2021 02:20:11 +0000 (03:20 +0100)]
Rollup merge of #79588 - estebank:issue-79187, r=oli-obk

Provide more information for HRTB lifetime errors involving closures

3 years agoRollup merge of #78901 - arora-aman:fix_closure_coerce, r=estebank
Dylan DPC [Wed, 13 Jan 2021 02:20:09 +0000 (03:20 +0100)]
Rollup merge of #78901 - arora-aman:fix_closure_coerce, r=estebank

diagnostics: Note capturing closures can't be coerced to fns

Fixes #72457, fixes #71895

r? `@estebank`

3 years agoAuto merge of #79670 - Nadrieril:uninhabited-query, r=estebank
bors [Tue, 12 Jan 2021 22:58:42 +0000 (22:58 +0000)]
Auto merge of #79670 - Nadrieril:uninhabited-query, r=estebank

Turn type inhabitedness into a query to fix `exhaustive_patterns` perf

We measured in https://github.com/rust-lang/rust/pull/79394 that enabling the [`exhaustive_patterns` feature](https://github.com/rust-lang/rust/issues/51085) causes significant perf degradation. It was conjectured that the culprit is type inhabitedness checking, and [I hypothesized](https://github.com/rust-lang/rust/pull/79394#issuecomment-733861149) that turning this computation into a query would solve most of the problem.

This PR turns `tcx.is_ty_uninhabited_from` into a query, and I measured a 25% perf gain on the benchmark that stress-tests `exhaustiveness_patterns`. This more than compensates for the 30% perf hit I measured [when creating it](https://github.com/rust-lang/rustc-perf/pull/801). We'll have to measure enabling the feature again, but I suspect this fixes the perf regression entirely.
I'd like a perf run on this PR obviously.
I made small atomic commits to help reviewing. The first one is just me discovering the "revisions" feature of the testing framework.

I believe there's a push to move things out of `rustc_middle` because it's huge. I guess `inhabitedness/mod.rs` could be moved out, but it's quite small. `DefIdForest` might be movable somewhere too. I don't know what the policy is for that.

Ping `@camelid` since you were interested in following along
`@rustbot` modify labels: +A-exhaustiveness-checking

3 years agoProvide more information for HRTB lifetime errors involving closures
Esteban Küber [Tue, 1 Dec 2020 08:10:13 +0000 (00:10 -0800)]
Provide more information for HRTB lifetime errors involving closures

3 years agoMake `DefIdForest` cheaper to clone
Nadrieril [Thu, 3 Dec 2020 01:52:24 +0000 (01:52 +0000)]
Make `DefIdForest` cheaper to clone

Since `DefIdForest` contains 0 or 1 elements the large majority of the
time, by allocating only in the >1 case we avoid almost all allocations,
compared to `Arc<SmallVec<[DefId;1]>>`. This shaves off 0.2% on the
benchmark that stresses uninhabitedness checking.

3 years agoAuto merge of #80009 - jumbatm:issue79581-overeager-clashing-extern-decl, r=alexcrichton
bors [Tue, 12 Jan 2021 20:13:50 +0000 (20:13 +0000)]
Auto merge of #80009 - jumbatm:issue79581-overeager-clashing-extern-decl, r=alexcrichton

Use tcx.symbol_name when determining clashing extern declarations.

Fixes #79581.

r? `@alexcrichton`

3 years agoTurn type inhabitedness into a query
Nadrieril [Thu, 3 Dec 2020 00:25:04 +0000 (00:25 +0000)]
Turn type inhabitedness into a query

3 years agoAdd tests for uninhabited types
Nadrieril [Wed, 2 Dec 2020 23:11:29 +0000 (23:11 +0000)]
Add tests for uninhabited types

3 years agoDeduplicate some tests using revisions
Nadrieril [Wed, 2 Dec 2020 20:24:20 +0000 (20:24 +0000)]
Deduplicate some tests using revisions

3 years agoAuto merge of #78407 - oli-obk:ub_checkable_ctfe, r=RalfJung,pnkfelix
bors [Tue, 12 Jan 2021 17:26:56 +0000 (17:26 +0000)]
Auto merge of #78407 - oli-obk:ub_checkable_ctfe, r=RalfJung,pnkfelix

Make CTFE able to check for UB...

... by not doing any optimizations on the `const fn` MIR used in CTFE. This means we duplicate all `const fn`'s MIR now, once for CTFE, once for runtime. This PR is for checking the perf effect, so we have some data when talking about https://github.com/rust-lang/const-eval/blob/master/rfcs/0000-const-ub.md

To do this, we now have two queries for obtaining mir: `optimized_mir` and `mir_for_ctfe`. It is now illegal to invoke `optimized_mir` to obtain the MIR of a const/static item's initializer, an array length, an inline const expression or an enum discriminant initializer. For `const fn`, both `optimized_mir` and `mir_for_ctfe` work, the former returning the MIR that LLVM should use if the function is called at runtime. Similarly it is illegal to invoke `mir_for_ctfe` on regular functions.

This is all checked via appropriate assertions and I don't think it is easy to get wrong, as there should be no `mir_for_ctfe` calls outside the const evaluator or metadata encoding. Almost all rustc devs should keep using `optimized_mir` (or `instance_mir` for that matter).

3 years agoSimplify regression test
Tristan Dannenberg [Tue, 12 Jan 2021 17:18:10 +0000 (18:18 +0100)]
Simplify regression test

Co-authored-by: Joshua Nelson <joshua@yottadb.com>
3 years agoUpdate help message and add regression test
Tristan Dannenberg [Tue, 12 Jan 2021 16:29:47 +0000 (17:29 +0100)]
Update help message and add regression test

3 years agoFix rustdoc --test-builder argument parsing
Tristan Dannenberg [Mon, 11 Jan 2021 19:35:58 +0000 (20:35 +0100)]
Fix rustdoc --test-builder argument parsing

3 years agoCoverage computation needs access to the MIR, too
oli [Tue, 12 Jan 2021 15:12:03 +0000 (15:12 +0000)]
Coverage computation needs access to the MIR, too

3 years agoAuto merge of #80517 - wabain:issue-77880-infer-error-try-conversion-msg, r=davidtwco
bors [Tue, 12 Jan 2021 14:42:37 +0000 (14:42 +0000)]
Auto merge of #80517 - wabain:issue-77880-infer-error-try-conversion-msg, r=davidtwco

Enhance type inference errors involving the `?` operator

This patch adds a special-cased note on type inference errors when the error span points to a `?` return. It also makes the primary label for such errors "cannot infer type of `?` error" in cases where before we would have only said "cannot infer type".

One beneficiary of this change is async blocks, where we can't explicitly annotate the return type and so may not generate any other help (#77880); this lets us at least print the error type we're converting from and anything we know about the type we can't fully infer. More generally, it signposts that an implicit conversion is happening that may have impeded type inference the user was expecting. We already do something similar for [mismatched type errors](https://github.com/rust-lang/rust/blob/2987785df3d46d5ff144a5c67fbb8f5cca798d78/src/test/ui/try-block/try-block-bad-type.stderr#L7).

The check for a relevant `?` operator is built into the existing HIR traversal which looks for places that could be annotated to resolve the error. That means we could identify `?` uses anywhere in the function that output the type we can't infer, but this patch just sticks to adding the note if the primary span given for the error has the operator; if there are other expressions where the type occurs and one of them is selected for the error instead, it's more likely that the `?` operator's implicit conversion isn't the sole cause of the inference failure and that adding an additional diagnostic would just be noise. I added a ui test for one such case.

The data about the `?` conversion is passed around in a `UseDiagnostic` enum that in theory could be used to add more of this kind of note in the future. It was also just easier to pass around than something with a more specific name. There are some follow-up refactoring commits for the code that generates the error label, which was already pretty involved and made a bit more complicated by this change.

3 years agoAuto merge of #80499 - matthiaskrgr:red_clos, r=estebank
bors [Tue, 12 Jan 2021 11:20:47 +0000 (11:20 +0000)]
Auto merge of #80499 - matthiaskrgr:red_clos, r=estebank

remove redundant closures (clippy::redundant_closure)

3 years agoAuto merge of #80939 - JohnTitor:rollup-pymns4q, r=JohnTitor
bors [Tue, 12 Jan 2021 08:38:47 +0000 (08:38 +0000)]
Auto merge of #80939 - JohnTitor:rollup-pymns4q, r=JohnTitor

Rollup of 8 pull requests

Successful merges:

 - #79757 (Replace tabs earlier in diagnostics)
 - #80600 (Add `MaybeUninit` method `array_assume_init`)
 - #80880 (Move some tests to more reasonable directories)
 - #80897 (driver: Use `atty` instead of rolling our own)
 - #80898 (Add another test case for #79808)
 - #80917 (core/slice: remove doc comment about scoped borrow)
 - #80927 (Replace a simple `if let` with the `matches` macro)
 - #80930 (fix typo in trait method mutability mismatch help)

Failed merges:

r? `@ghost`
`@rustbot` modify labels: rollup

3 years agoRollup merge of #80930 - euclio:trait-method-mutability-help, r=estebank
Yuki Okushi [Tue, 12 Jan 2021 07:13:35 +0000 (16:13 +0900)]
Rollup merge of #80930 - euclio:trait-method-mutability-help, r=estebank

fix typo in trait method mutability mismatch help

3 years agoRollup merge of #80927 - LingMan:matches, r=estebank
Yuki Okushi [Tue, 12 Jan 2021 07:13:33 +0000 (16:13 +0900)]
Rollup merge of #80927 - LingMan:matches, r=estebank

Replace a simple `if let` with the `matches` macro

`@rustbot` modify labels +C-cleanup +T-compiler

3 years agoRollup merge of #80917 - epilys:patch-1, r=jyn514
Yuki Okushi [Tue, 12 Jan 2021 07:13:31 +0000 (16:13 +0900)]
Rollup merge of #80917 - epilys:patch-1, r=jyn514

core/slice: remove doc comment about scoped borrow

There's no need to scope the borrow in the doc example due to NLL.

[Playground link](https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&code=fn%20main()%20%7B%0A%20%20%20%20let%20mut%20v%20%3D%20%5B1%2C%200%2C%203%2C%200%2C%205%2C%206%5D%3B%0A%0A%20%20%20%20let%20(left%2C%20right)%20%3D%20v.split_at_mut(2)%3B%0A%20%20%20%20assert_eq!(left%2C%20%5B1%2C%200%5D)%3B%0A%20%20%20%20assert_eq!(right%2C%20%5B3%2C%200%2C%205%2C%206%5D)%3B%0A%20%20%20%20left%5B1%5D%20%3D%202%3B%0A%20%20%20%20right%5B1%5D%20%3D%204%3B%0A%0A%20%20%20%20assert_eq!(v%2C%20%5B1%2C%202%2C%203%2C%204%2C%205%2C%206%5D)%3B%0A%7D%0A) where changed code compiles

3 years agoRollup merge of #80898 - JohnTitor:vecdeque-another-case, r=lcnr
Yuki Okushi [Tue, 12 Jan 2021 07:13:29 +0000 (16:13 +0900)]
Rollup merge of #80898 - JohnTitor:vecdeque-another-case, r=lcnr

Add another test case for #79808

Taken from #80293.
Closes #80293

r? `@lcnr`

3 years agoRollup merge of #80897 - camelid:atty, r=jyn514
Yuki Okushi [Tue, 12 Jan 2021 07:13:28 +0000 (16:13 +0900)]
Rollup merge of #80897 - camelid:atty, r=jyn514

driver: Use `atty` instead of rolling our own

Fixes #80888.

Rationale:

- `atty` is widely used in the Rust ecosystem
- We already use it (in `rustc_errors` and other places)
- We shouldn't be rolling our own TTY detector when there's a
  widely-used, well-tested package that we can use

3 years agoRollup merge of #80880 - c410-f3r:tests-tests-tests, r=petrochenkov
Yuki Okushi [Tue, 12 Jan 2021 07:13:26 +0000 (16:13 +0900)]
Rollup merge of #80880 - c410-f3r:tests-tests-tests, r=petrochenkov

Move some tests to more reasonable directories

The idea is to move `issues`/`ui` tests in small batches

r? `@petrochenkov`

3 years agoRollup merge of #80600 - CoffeeBlend:maybe_uninit_array_assume_init, r=dtolnay
Yuki Okushi [Tue, 12 Jan 2021 07:13:24 +0000 (16:13 +0900)]
Rollup merge of #80600 - CoffeeBlend:maybe_uninit_array_assume_init, r=dtolnay

Add `MaybeUninit` method `array_assume_init`

When initialising an array element-by-element, the conversion to the initialised array is done through `mem::transmute`, which is both ugly and does not work with const generics (see #61956). This PR proposes the associated method `array_assume_init`, matching the style of `slice_assume_init_*`:

```rust
unsafe fn array_assume_init<T, const N: usize>(array: [MaybeUninit<T>; N]) -> [T; N];
```

Example:
```rust
let mut array: [MaybeUninit<i32>; 3] = MaybeUninit::uninit_array();
array[0].write(0);
array[1].write(1);
array[2].write(2);

// SAFETY: Now safe as we initialised all elements
let array: [i32; 3] = unsafe {
     MaybeUninit::array_assume_init(array)
};
```

Things I'm unsure about:
* Should this be a method of array instead?
* Should the function be const?

3 years agoRollup merge of #79757 - jryans:long-line-tab-handling-early-expand, r=estebank
Yuki Okushi [Tue, 12 Jan 2021 07:13:15 +0000 (16:13 +0900)]
Rollup merge of #79757 - jryans:long-line-tab-handling-early-expand, r=estebank

Replace tabs earlier in diagnostics

This replaces tabs earlier in the diagnostics emitting process, which allows various margin calculations to ignore the existence of tabs. It does add a string copy for the source lines that are emitted.

Fixes https://github.com/rust-lang/rust/issues/78438

r? `@estebank`

3 years agoAuto merge of #80463 - tgnottingham:incr_comp_serial_mem_usage, r=oli-obk
bors [Tue, 12 Jan 2021 05:51:40 +0000 (05:51 +0000)]
Auto merge of #80463 - tgnottingham:incr_comp_serial_mem_usage, r=oli-obk

Serialize incr comp structures to file via fixed-size buffer

Reduce a large memory spike that happens during serialization by writing
the incr comp structures to file by way of a fixed-size buffer, rather
than an unbounded vector.

Effort was made to keep the instruction count close to that of the
previous implementation. However, buffered writing to a file inherently
has more overhead than writing to a vector, because each write may
result in a handleable error. To reduce this overhead, arrangements are
made so that each LEB128-encoded integer can be written to the buffer
with only one capacity and error check. Higher-level optimizations in
which entire composite structures can be written with one capacity and
error check are possible, but would require much more work.

The performance is mostly on par with the previous implementation, with
small to moderate instruction count regressions. The memory reduction is
significant, however, so it seems like a worth-while trade-off.

3 years agodriver: Use `atty` instead of rolling our own
Camelid [Mon, 11 Jan 2021 02:07:05 +0000 (18:07 -0800)]
driver: Use `atty` instead of rolling our own

Rationale:

- `atty` is widely used in the Rust ecosystem
- We already use it (in `rustc_errors` and other places)
- We shouldn't be rolling our own TTY detector when there's a
  widely-used, well-tested package that we can use

3 years agoAuto merge of #76580 - rokob:iss76011, r=estebank
bors [Tue, 12 Jan 2021 02:56:51 +0000 (02:56 +0000)]
Auto merge of #76580 - rokob:iss76011, r=estebank

Suggest async {} for async || {}

Fixes #76011

This adds support for adding help diagnostics to the feature gating checks and
then uses it for the async_closure gate to add the extra bit of help
information as described in the issue.

3 years agoRename `rustc_middle::lint::LevelSource` to `LevelAndSource`
pierwill [Tue, 12 Jan 2021 02:02:09 +0000 (18:02 -0800)]
Rename `rustc_middle::lint::LevelSource` to `LevelAndSource`

3 years agoReplace a simple `if let` with the `matches` macro
LingMan [Mon, 11 Jan 2021 21:22:04 +0000 (22:22 +0100)]
Replace a simple `if let` with the `matches` macro

3 years agoFix implementation
CoffeeBlend [Tue, 12 Jan 2021 00:39:10 +0000 (01:39 +0100)]
Fix implementation

3 years agofix typo in trait method mutability mismatch help
Andy Russell [Tue, 12 Jan 2021 00:27:38 +0000 (19:27 -0500)]
fix typo in trait method mutability mismatch help

3 years agoAuto merge of #80928 - JohnTitor:rollup-sgerm3j, r=JohnTitor
bors [Tue, 12 Jan 2021 00:14:46 +0000 (00:14 +0000)]
Auto merge of #80928 - JohnTitor:rollup-sgerm3j, r=JohnTitor

Rollup of 9 pull requests

Successful merges:

 - #79997 (Emit a reactor for cdylib target on wasi)
 - #79998 (Use correct ABI for wasm32 by default)
 - #80042 (Split a func into cold/hot parts, reducing binary size)
 - #80324 (Explain method-call move errors in loops)
 - #80864 (std/core docs: fix wrong link in PartialEq)
 - #80870 (resolve: Simplify built-in macro table)
 - #80885 (rustdoc: Resolve `&str` as `str`)
 - #80904 (Fix small typo)
 - #80923 (Merge different function exits)

Failed merges:

r? `@ghost`
`@rustbot` modify labels: rollup

3 years agodifferentiate functions in extern-compare-with-return-type.rs
Josh Stone [Mon, 11 Jan 2021 23:13:26 +0000 (15:13 -0800)]
differentiate functions in extern-compare-with-return-type.rs

3 years agoRollup merge of #80923 - LingMan:exits, r=varkor
Yuki Okushi [Mon, 11 Jan 2021 22:59:18 +0000 (07:59 +0900)]
Rollup merge of #80923 - LingMan:exits, r=varkor

Merge different function exits

`@rustbot` modify labels +C-cleanup +T-compiler

3 years agoRollup merge of #80904 - camelid:fix-small-typo, r=jonas-schievink
Yuki Okushi [Mon, 11 Jan 2021 22:59:16 +0000 (07:59 +0900)]
Rollup merge of #80904 - camelid:fix-small-typo, r=jonas-schievink

Fix small typo

transmutting -> transmuting

3 years agoRollup merge of #80885 - camelid:intra-doc-str-ref, r=jyn514
Yuki Okushi [Mon, 11 Jan 2021 22:59:15 +0000 (07:59 +0900)]
Rollup merge of #80885 - camelid:intra-doc-str-ref, r=jyn514

rustdoc: Resolve `&str` as `str`

People almost always are referring to `&str`, not `str`, so this will
save a manual link resolve in many cases.

Note that we already accept `&` (resolves to `reference`) in intra-doc
links, so this shouldn't cause breakage.

r? `@jyn514`

3 years agoRollup merge of #80870 - petrochenkov:bmactable, r=oli-obk
Yuki Okushi [Mon, 11 Jan 2021 22:59:13 +0000 (07:59 +0900)]
Rollup merge of #80870 - petrochenkov:bmactable, r=oli-obk

resolve: Simplify built-in macro table

We don't use full `SyntaxExtension`s from the table, only `SyntaxExtensionKind`s, and `Ident` in `register_builtin_macro` always had dummy span. This PR removes unnecessary data from the table and related function signatures.

Noticed when reviewing #80850.

3 years agoRollup merge of #80864 - ericseppanen:master, r=jyn514
Yuki Okushi [Mon, 11 Jan 2021 22:59:11 +0000 (07:59 +0900)]
Rollup merge of #80864 - ericseppanen:master, r=jyn514

std/core docs: fix wrong link in PartialEq

PartialEq doc was attempting to link to ``[`Eq`]`` but instead we got a link to `` `eq` ``. Disambiguate with `trait@Eq`.

You can see the bad link [here](https://doc.rust-lang.org/std/cmp/trait.PartialEq.html) (Second sentence, "floating point types implement PartialEq but not Eq").

3 years agoRollup merge of #80324 - Aaron1011:loop-move-fn-self, r=oli-obk
Yuki Okushi [Mon, 11 Jan 2021 22:59:10 +0000 (07:59 +0900)]
Rollup merge of #80324 - Aaron1011:loop-move-fn-self, r=oli-obk

Explain method-call move errors in loops

PR #73708 added a more detailed explanation of move errors that occur
due to a call to a method that takes `self`. This PR extends that logic
to work when a move error occurs due to a method call in the previous
iteration of a loop.

3 years agoRollup merge of #80042 - sivadeilra:cold_bits, r=oli-obk
Yuki Okushi [Mon, 11 Jan 2021 22:59:08 +0000 (07:59 +0900)]
Rollup merge of #80042 - sivadeilra:cold_bits, r=oli-obk

Split a func into cold/hot parts, reducing binary size

I noticed that the Size::bits function is called in many places,
and is inlined into them. On x86_64-pc-windows-msvc, this function
is inlined 527 times, and compiled separately (non-inlined) 3 times.

Each of those inlined calls contains code that panics. This commit
moves the `panic!` call into a separate function and marks that
function with `#[cold]`.

This reduces binary size by 24 KB. Not much, but it's something.
Changes like this often reduce pressure on instruction-caches,
since it reduces the amount of code that is inlined into hot code
paths. Or more precisely, it removes cold code from hot cache lines.

3 years agoRollup merge of #79998 - devsnek:wasm32-bindgen-compat, r=alexcrichton
Yuki Okushi [Mon, 11 Jan 2021 22:59:06 +0000 (07:59 +0900)]
Rollup merge of #79998 - devsnek:wasm32-bindgen-compat, r=alexcrichton

Use correct ABI for wasm32 by default

Introduces `wasm32-unknown-bindgen` for those wishing to use the bindgen compat abi. `wasm32-*` now uses the correct abi by default.

Fixes https://github.com/rustwasm/team/issues/291

3 years agoRollup merge of #79997 - coolreader18:wasm-reactor, r=alexcrichton
Yuki Okushi [Mon, 11 Jan 2021 22:58:59 +0000 (07:58 +0900)]
Rollup merge of #79997 - coolreader18:wasm-reactor, r=alexcrichton

Emit a reactor for cdylib target on wasi

Fixes #79199, and relevant to #73432

Implements wasi reactors, as described in WebAssembly/WASI#13 and [`design/application-abi.md`](https://github.com/WebAssembly/WASI/blob/master/design/application-abi.md)

Empty `lib.rs`, `lib.crate-type = ["cdylib"]`:

```shell
$ cargo +reactor build --release --target wasm32-wasi
   Compiling wasm-reactor v0.1.0 (/home/coolreader18/wasm-reactor)
    Finished release [optimized] target(s) in 0.08s
$ wasm-dis target/wasm32-wasi/release/wasm_reactor.wasm >reactor.wat
```
`reactor.wat`:
```wat
(module
 (type $none_=>_none (func))
 (type $i32_=>_none (func (param i32)))
 (type $i32_i32_=>_i32 (func (param i32 i32) (result i32)))
 (type $i32_=>_i32 (func (param i32) (result i32)))
 (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32)))
 (import "wasi_snapshot_preview1" "fd_prestat_get" (func $__wasi_fd_prestat_get (param i32 i32) (result i32)))
 (import "wasi_snapshot_preview1" "fd_prestat_dir_name" (func $__wasi_fd_prestat_dir_name (param i32 i32 i32) (result i32)))
 (import "wasi_snapshot_preview1" "proc_exit" (func $__wasi_proc_exit (param i32)))
 (import "wasi_snapshot_preview1" "environ_sizes_get" (func $__wasi_environ_sizes_get (param i32 i32) (result i32)))
 (import "wasi_snapshot_preview1" "environ_get" (func $__wasi_environ_get (param i32 i32) (result i32)))
 (memory $0 17)
 (table $0 1 1 funcref)
 (global $global$0 (mut i32) (i32.const 1048576))
 (global $global$1 i32 (i32.const 1049096))
 (global $global$2 i32 (i32.const 1049096))
 (export "memory" (memory $0))
 (export "_initialize" (func $_initialize))
 (export "__data_end" (global $global$1))
 (export "__heap_base" (global $global$2))
 (func $__wasm_call_ctors
  (call $__wasilibc_initialize_environ_eagerly)
  (call $__wasilibc_populate_preopens)
 )
 (func $_initialize
  (call $__wasm_call_ctors)
 )
 (func $malloc (param $0 i32) (result i32)
  (call $dlmalloc
   (local.get $0)
  )
 )
 ;; lots of dlmalloc, memset/memcpy, & libpreopen code
)
```

I went with repurposing cdylib because I figured that it doesn't make much sense to have a wasi shared library that can't be initialized, and even if someone was using it adding an `_initialize` export is a very small change.

3 years agoMove some tests to more reasonable directories
Caio [Mon, 11 Jan 2021 22:49:51 +0000 (19:49 -0300)]
Move some tests to more reasonable directories

3 years agoSimplify array_assume_init
CoffeeBlend [Mon, 11 Jan 2021 22:32:03 +0000 (23:32 +0100)]
Simplify array_assume_init

3 years agoAuto merge of #79012 - tgnottingham:span_data_to_lines_and_cols, r=estebank
bors [Mon, 11 Jan 2021 21:32:50 +0000 (21:32 +0000)]
Auto merge of #79012 - tgnottingham:span_data_to_lines_and_cols, r=estebank

rustc_span: add span_data_to_lines_and_cols to caching source map view

3 years agosquash! fix wasi
Gus Caplan [Mon, 11 Jan 2021 21:31:52 +0000 (15:31 -0600)]
squash! fix wasi

3 years agonew target
Gus Caplan [Mon, 14 Dec 2020 16:33:35 +0000 (10:33 -0600)]
new target

3 years agoUse correct ABI for wasm32 by default
Gus Caplan [Sun, 13 Dec 2020 04:31:35 +0000 (22:31 -0600)]
Use correct ABI for wasm32 by default

Introduces `RUSTC_USE_WASM32_BINDGEN_COMPAT_ABI` env var to use the
compat ABI if need.

3 years agorustc_serialize: fix incorrect signed LEB128 decoding
Tyson Nottingham [Tue, 29 Dec 2020 23:14:33 +0000 (15:14 -0800)]
rustc_serialize: fix incorrect signed LEB128 decoding

The signed LEB128 decoding function used a hardcoded constant of 64
instead of the number of bits in the type of integer being decoded,
which resulted in incorrect results for some inputs. Fix this, make the
decoding more consistent with the unsigned version, and increase the
LEB128 encoding and decoding test coverage.

3 years agoSerialize incr comp structures to file via fixed-size buffer
Tyson Nottingham [Mon, 7 Dec 2020 01:30:55 +0000 (17:30 -0800)]
Serialize incr comp structures to file via fixed-size buffer

Reduce a large memory spike that happens during serialization by writing
the incr comp structures to file by way of a fixed-size buffer, rather
than an unbounded vector.

Effort was made to keep the instruction count close to that of the
previous implementation. However, buffered writing to a file inherently
has more overhead than writing to a vector, because each write may
result in a handleable error. To reduce this overhead, arrangements are
made so that each LEB128-encoded integer can be written to the buffer
with only one capacity and error check. Higher-level optimizations in
which entire composite structures can be written with one capacity and
error check are possible, but would require much more work.

The performance is mostly on par with the previous implementation, with
small to moderate instruction count regressions. The memory reduction is
significant, however, so it seems like a worth-while trade-off.

3 years agoRevert "Auto merge of #76896 - spastorino:codegen-inline-fns2, r=davidtwco,wesleywiser"
Santiago Pastorino [Mon, 11 Jan 2021 19:27:59 +0000 (16:27 -0300)]
Revert "Auto merge of #76896 - spastorino:codegen-inline-fns2, r=davidtwco,wesleywiser"

This reverts commit ddf2cc7f8eb34f1a63b491d6a52e3e8208393c09, reversing
changes made to 937f629535f38c655267f1ed21ce6830f592f5df.

3 years agoAuto merge of #75490 - LukasKalbertodt:add-basic-array-methods, r=dtolnay
bors [Mon, 11 Jan 2021 18:50:53 +0000 (18:50 +0000)]
Auto merge of #75490 - LukasKalbertodt:add-basic-array-methods, r=dtolnay

Add `[T; N]::each_ref` and `[T; N]::each_mut`

This PR adds the methods `each_ref` and `each_mut` to `[T; N]`. The ability to add methods to arrays was added in #75212. These two methods are particularly useful with `map` which was also added in that PR. Tracking issue: #76118

```rust
impl<T, const N: usize> [T; N] {
    pub fn each_ref(&self) -> [&T; N];
    pub fn each_mut(&mut self) -> [&mut T; N];
}
```

3 years agotest for issue 80832
Jeremy Fitzhardinge [Sun, 10 Jan 2021 02:45:19 +0000 (18:45 -0800)]
test for issue 80832

3 years agoAdd FIXME note about storing &'tcx str
jumbatm [Tue, 22 Dec 2020 14:34:26 +0000 (00:34 +1000)]
Add FIXME note about storing &'tcx str

3 years agoRemove unnecessary allocation.
jumbatm [Tue, 22 Dec 2020 14:26:04 +0000 (00:26 +1000)]
Remove unnecessary allocation.

3 years agoUse tcx.symbol_name to check for clashes.
jumbatm [Sun, 13 Dec 2020 13:02:32 +0000 (23:02 +1000)]
Use tcx.symbol_name to check for clashes.

3 years agoAdd test case for wasm non-clash.
jumbatm [Sat, 12 Dec 2020 03:26:43 +0000 (13:26 +1000)]
Add test case for wasm non-clash.

3 years ago--emit=mir now emits both `mir_for_ctfe` and `optimized_mir` for `const fn`
oli [Mon, 11 Jan 2021 17:24:41 +0000 (17:24 +0000)]
--emit=mir now emits both `mir_for_ctfe` and `optimized_mir` for `const fn`

3 years agocore/slice: remove doc comment about scoped borrow
Manos Pitsidianakis [Mon, 11 Jan 2021 16:55:35 +0000 (18:55 +0200)]
core/slice: remove doc comment about scoped borrow

There's no need to scope the borrow in the doc example due to NLL.

Playground link where changed code compiles
https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&code=fn%20main()%20%7B%0A%20%20%20%20let%20mut%20v%20%3D%20%5B1%2C%200%2C%203%2C%200%2C%205%2C%206%5D%3B%0A%0A%20%20%20%20let%20(left%2C%20right)%20%3D%20v.split_at_mut(2)%3B%0A%20%20%20%20assert_eq!(left%2C%20%5B1%2C%200%5D)%3B%0A%20%20%20%20assert_eq!(right%2C%20%5B3%2C%200%2C%205%2C%206%5D)%3B%0A%20%20%20%20left%5B1%5D%20%3D%202%3B%0A%20%20%20%20right%5B1%5D%20%3D%204%3B%0A%0A%20%20%20%20assert_eq!(v%2C%20%5B1%2C%202%2C%203%2C%204%2C%205%2C%206%5D)%3B%0A%7D%0A

3 years agoAuto merge of #80889 - cjgillot:asa, r=oli-obk
bors [Mon, 11 Jan 2021 14:54:52 +0000 (14:54 +0000)]
Auto merge of #80889 - cjgillot:asa, r=oli-obk

Do not query the HIR directly in `opt_associated_item`.

Papercut found by `@Aaron1011.`

3 years agoAdd `[T; N]::each_ref` and `[T; N]::each_mut`
Lukas Kalbertodt [Wed, 12 Aug 2020 22:19:53 +0000 (00:19 +0200)]
Add `[T; N]::each_ref` and `[T; N]::each_mut`

These methods work very similarly to `Option`'s methods `as_ref` and
`as_mut`. They are useful in several situation, particularly when
calling other array methods (like `map`) on the result. Unfortunately,
we can't easily call them `as_ref` and `as_mut` as that would shadow
those methods on slices, thus being a breaking change (that is likely
to affect a lot of code).

3 years agoAdd tracking issue for array_assume_init
CoffeeBlend [Mon, 11 Jan 2021 09:07:29 +0000 (10:07 +0100)]
Add tracking issue for array_assume_init

3 years agoAuto merge of #80905 - JohnTitor:rollup-tmmwmnb, r=JohnTitor
bors [Mon, 11 Jan 2021 06:09:50 +0000 (06:09 +0000)]
Auto merge of #80905 - JohnTitor:rollup-tmmwmnb, r=JohnTitor

Rollup of 6 pull requests

Successful merges:

 - #80809 (Use standard formatting for "rust-call" ABI message)
 - #80872 (Fix typo in source-based-code-coverage.md)
 - #80878 (Add ABI argument to `find_mir_or_eval_fn`)
 - #80881 ( Fix intra-doc links to `Self` and `crate` )
 - #80887 (log-color: Detect TTY based on stderr, not stdout)
 - #80892 (rustdoc: Remove `*` intra-doc alias for `pointer`)

Failed merges:

r? `@ghost`
`@rustbot` modify labels: rollup

3 years agoRollup merge of #80892 - camelid:intra-doc-remove-star, r=jyn514
Yuki Okushi [Mon, 11 Jan 2021 05:34:54 +0000 (14:34 +0900)]
Rollup merge of #80892 - camelid:intra-doc-remove-star, r=jyn514

rustdoc: Remove `*` intra-doc alias for `pointer`

It's not valid Rust code and it can easily be confused with a wildcard
glob pattern or something else. People can always use `pointer` instead,
so it's just removing an alias.

It hasn't hit stable yet (I think it's still on nightly), so it's okay
to remove it. (We can always add it back later if we change our mind
too.)

r? `@jyn514`
cc https://github.com/rust-lang/rust/pull/80885#discussion_r554622737

3 years agoRollup merge of #80887 - camelid:fix-log-color-auto, r=RalfJung
Yuki Okushi [Mon, 11 Jan 2021 05:34:52 +0000 (14:34 +0900)]
Rollup merge of #80887 - camelid:fix-log-color-auto, r=RalfJung

log-color: Detect TTY based on stderr, not stdout

Fixes #78435 (again).

Logging goes to stderr, not stdout, so we should base our automated
detection on stderr instead of stdout.

Thanks to Ralf Jung for noticing and reporting the bug!

r? `@oli-obk`
cc `@RalfJung`

3 years agoRollup merge of #80881 - jyn514:intra-doc-self, r=GuillaumeGomez
Yuki Okushi [Mon, 11 Jan 2021 05:34:51 +0000 (14:34 +0900)]
Rollup merge of #80881 - jyn514:intra-doc-self, r=GuillaumeGomez

 Fix intra-doc links to `Self` and `crate`

Closes https://github.com/rust-lang/rust/issues/77732.

3 years agoRollup merge of #80878 - unseddd:abi, r=RalfJung
Yuki Okushi [Mon, 11 Jan 2021 05:34:49 +0000 (14:34 +0900)]
Rollup merge of #80878 - unseddd:abi, r=RalfJung

Add ABI argument to `find_mir_or_eval_fn`

Add ABI argument for called function in `find_mir_or_eval_fn` and
`call_extra_fn`. Useful for comparing with expected ABI in interpreters.

Related to [miri/1631](https://github.com/rust-lang/miri/issues/1631)

r? `@RalfJung`

3 years agoRollup merge of #80872 - eltociear:patch-4, r=jonas-schievink
Yuki Okushi [Mon, 11 Jan 2021 05:34:47 +0000 (14:34 +0900)]
Rollup merge of #80872 - eltociear:patch-4, r=jonas-schievink

Fix typo in source-based-code-coverage.md

preceeding -> preceding

3 years agoRollup merge of #80809 - camelid:rust-call-abi-msg, r=lcnr
Yuki Okushi [Mon, 11 Jan 2021 05:34:40 +0000 (14:34 +0900)]
Rollup merge of #80809 - camelid:rust-call-abi-msg, r=lcnr

Use standard formatting for "rust-call" ABI message

Nearly all error messages start with a lowercase letter and don't use
articles - instead they refer to the plural case.

3 years agoFix small typo
Camelid [Mon, 11 Jan 2021 05:24:15 +0000 (21:24 -0800)]
Fix small typo

transmutting -> transmuting

3 years agoAuto merge of #80818 - 12101111:system-libunwind, r=Mark-Simulacrum
bors [Mon, 11 Jan 2021 03:24:14 +0000 (03:24 +0000)]
Auto merge of #80818 - 12101111:system-libunwind, r=Mark-Simulacrum

Don't build in-tree llvm-libunwind if system-llvm-libunwind is enable

When "system-llvm-libunwind" is enabled, some target eg. musl still build in-tree llvm-libunwind which is useless.

3 years agoAdd another test case for #79808
Yuki Okushi [Mon, 11 Jan 2021 03:10:16 +0000 (12:10 +0900)]
Add another test case for #79808

Taken from #80293.

3 years agoTweak `?` inference error messages
William Bain [Sun, 3 Jan 2021 00:10:52 +0000 (19:10 -0500)]
Tweak `?` inference error messages

3 years agoExtract parent def handling for infer failure err
William Bain [Tue, 29 Dec 2020 22:34:23 +0000 (17:34 -0500)]
Extract parent def handling for infer failure err

3 years agoRefactor `cannot infer ...` message rendering
William Bain [Tue, 29 Dec 2020 22:23:53 +0000 (17:23 -0500)]
Refactor `cannot infer ...` message rendering

3 years agoNote inference failures using `?` conversion
William Bain [Tue, 29 Dec 2020 05:10:13 +0000 (00:10 -0500)]
Note inference failures using `?` conversion

3 years agorustdoc: Remove `*` intra-doc alias for `pointer`
Camelid [Sun, 10 Jan 2021 23:40:20 +0000 (15:40 -0800)]
rustdoc: Remove `*` intra-doc alias for `pointer`

It's not valid Rust code and it can easily be confused with a wildcard
glob pattern or something else. People can always use `pointer` instead,
so it's just removing an alias.

It hasn't hit stable yet (I think it's still on nightly), so it's okay
to remove it. (We can always add it back later if we change our mind
too.)

3 years agoAuto merge of #80782 - petrochenkov:viscopes, r=matthewjasper
bors [Sun, 10 Jan 2021 23:36:33 +0000 (23:36 +0000)]
Auto merge of #80782 - petrochenkov:viscopes, r=matthewjasper

resolve: Scope visiting doesn't need an `Ident`

Resolution scope visitor (`fn visit_scopes`) currently takes an `Ident` parameter, but it doesn't need a full identifier, or even its span, it only needs the `SyntaxContext` part.
The `SyntaxContext` part is necessary because scope visitor has to jump to macro definition sites, so it has to be directed by macro expansion information somehow.

I think it's clearer to pass only the necessary part.
Yes, usually visiting happens as a part of an identifier resolution, but in cases like collecting traits in scope (#80765) or collecting typo suggestions that's not the case.

r? `@matthewjasper`

3 years agoDo not query the HIR in `opt_associated_item`.
Camille GILLOT [Sun, 10 Jan 2021 21:41:50 +0000 (22:41 +0100)]
Do not query the HIR in `opt_associated_item`.

3 years agolog-color: Detect TTY based on stderr, not stdout
Camelid [Sun, 10 Jan 2021 21:16:06 +0000 (13:16 -0800)]
log-color: Detect TTY based on stderr, not stdout

Logging goes to stderr, not stdout, so we should base our automated
detection on stderr instead of stdout.

Thanks to Ralf Jung for noticing and reporting the bug!

3 years agorustdoc: Resolve `&str` as `str`
Camelid [Sun, 10 Jan 2021 20:45:58 +0000 (12:45 -0800)]
rustdoc: Resolve `&str` as `str`

People almost always are referring to `&str`, not `str`, so this will
save a manual link resolve in many cases.

Note that we already accept `&` (resolves to `reference`) in intra-doc
links, so this shouldn't cause breakage.

3 years agoAuto merge of #79414 - sasurau4:feature/add-suggestion-for-pattern-in-fns-without...
bors [Sun, 10 Jan 2021 20:48:27 +0000 (20:48 +0000)]
Auto merge of #79414 - sasurau4:feature/add-suggestion-for-pattern-in-fns-without-body, r=matthewjasper

Add suggestion for PATTERNS_IN_FNS_WITHOUT_BODY

## Overview

Fix #78927

3 years agoUse standard formatting for "rust-call" ABI message
Camelid [Fri, 8 Jan 2021 05:21:21 +0000 (21:21 -0800)]
Use standard formatting for "rust-call" ABI message

Nearly all error messages start with a lowercase letter and don't use
articles - instead they refer to the plural case.

3 years agoAuto merge of #80789 - Aaron1011:fix/stmt-empty, r=petrochenkov
bors [Sun, 10 Jan 2021 17:58:38 +0000 (17:58 +0000)]
Auto merge of #80789 - Aaron1011:fix/stmt-empty, r=petrochenkov

Synthesize a `TokenStream` for `StmtKind::Empty`

Fixes #80760

3 years agoAdd ABI argument to `find_mir_or_eval_fn`
Nym Seddon [Sun, 10 Jan 2021 14:31:02 +0000 (14:31 +0000)]
Add ABI argument to `find_mir_or_eval_fn`

Add ABI argument for called function in `find_mir_or_eval_fn` and
`call_extra_fn`. Useful for comparing with expected ABI in interpreters.

Related to [miri/1631](https://github.com/rust-lang/miri/issues/1631)

3 years agoSmall cleanups
Joshua Nelson [Sun, 10 Jan 2021 15:00:41 +0000 (10:00 -0500)]
Small cleanups

3 years agoFix intra-doc links to `Self` and `crate`
Joshua Nelson [Sun, 10 Jan 2021 15:00:17 +0000 (10:00 -0500)]
Fix intra-doc links to `Self` and `crate`

3 years agoMerge different function exits
LingMan [Sun, 10 Jan 2021 13:38:14 +0000 (14:38 +0100)]
Merge different function exits

3 years agoFix typo in source-based-code-coverage.md
Ikko Ashimine [Sun, 10 Jan 2021 13:17:51 +0000 (22:17 +0900)]
Fix typo in source-based-code-coverage.md

preceeding -> preceding

3 years agoresolve: Simplify built-in macro table
Vadim Petrochenkov [Sun, 10 Jan 2021 11:36:30 +0000 (14:36 +0300)]
resolve: Simplify built-in macro table

3 years agoAuto merge of #80391 - ssomers:btree_cleanup_slices_3, r=Mark-Simulacrum
bors [Sun, 10 Jan 2021 10:48:55 +0000 (10:48 +0000)]
Auto merge of #80391 - ssomers:btree_cleanup_slices_3, r=Mark-Simulacrum

BTreeMap: tougher checking on most uses of copy_nonoverlapping

Miri checks pointer provenance and destination, but we can check it in debug builds already.
Also, we can let Miri confirm we don't mistake imprints of moved keys and values as genuine.
r? `@Mark-Simulacrum`