]> git.lizzy.rs Git - rust.git/log
rust.git
3 years agoRollup merge of #85770 - Bobo1239:set_locale_for_sort, r=jyn514
Guillaume Gomez [Sun, 30 May 2021 19:06:46 +0000 (21:06 +0200)]
Rollup merge of #85770 - Bobo1239:set_locale_for_sort, r=jyn514

Remove `--print unversioned-files` from rustdoc

This flag isn't needed anymore. See #83784.

3 years agoRollup merge of #85762 - mati865:disable-zlib-on-windows, r=Mark-Simulacrum
Guillaume Gomez [Sun, 30 May 2021 19:06:45 +0000 (21:06 +0200)]
Rollup merge of #85762 - mati865:disable-zlib-on-windows, r=Mark-Simulacrum

Do not try to build LLVM with Zlib on Windows

Fixes https://github.com/rust-lang/rust/issues/85422
Fixes https://github.com/rust-lang/rust/issues/85624

We do not install Zlib on the CI but recent builds somehow started picking it's shared version.
To avoid relying on CI binaries so let's explicitly disable it.

3 years agoRollup merge of #85709 - Aaron1011:fix-pat-crate-edition, r=petrochenkov
Guillaume Gomez [Sun, 30 May 2021 19:06:44 +0000 (21:06 +0200)]
Rollup merge of #85709 - Aaron1011:fix-pat-crate-edition, r=petrochenkov

Use correct edition when parsing `:pat` matchers

As described in issue #85708, we currently do not properly decode
`SyntaxContext::root()` and `ExpnId::root()` from foreign crates. As a
result, when we decode a span from a foreign crate with
`SyntaxContext::root()`, we end up up considering it to have the edition
of the *current* crate, instead of the foreign crate where it was
originally created.

A full fix for this issue will be a fairly significant undertaking.
Fortunately, it's possible to implement a partial fix, which gives us
the correct edition-dependent behavior for `:pat` matchers when the
macro is loaded from another crate. Since we have the edition of the
macro's defining crate available, we can 'recover' from seeing a
`SyntaxContext::root()` and use the edition of the macro's defining
crate.

Any solution to issue #85708 must reproduce the behavior of this
targeted fix - properly preserving a foreign `SyntaxContext::root()`
means (among other things) preserving its edition, which by definition
is the edition of the foreign crate itself. Therefore, this fix moves us
closer to the correct overall solution, and does not expose any new
incorrect behavior to macros.

3 years agoRollup merge of #85285 - GuillaumeGomez:eslint-check, r=jsha,Mark-Simulacrum
Guillaume Gomez [Sun, 30 May 2021 19:06:43 +0000 (21:06 +0200)]
Rollup merge of #85285 - GuillaumeGomez:eslint-check, r=jsha,Mark-Simulacrum

Add eslint checks to CI

It also allowed me to fix some potential issues that went unnoticed. Having this process automated will hopefully prevent us to add more errors. :)

cc `@Mark-Simulacrum` (for the add in the CI).
r? `@jsha`

3 years agoFix eslint error in sidebar-items.js
Guillaume Gomez [Sun, 30 May 2021 18:20:59 +0000 (20:20 +0200)]
Fix eslint error in sidebar-items.js

3 years agoAdd eslint checks in CI
Guillaume Gomez [Fri, 14 May 2021 11:41:19 +0000 (13:41 +0200)]
Add eslint checks in CI

3 years agoAuto merge of #85804 - bjorn3:merge_crate_disambiguator, r=cjgillot
bors [Sun, 30 May 2021 14:48:26 +0000 (14:48 +0000)]
Auto merge of #85804 - bjorn3:merge_crate_disambiguator, r=cjgillot

Merge CrateDisambiguator into StableCrateId

This simplifies the code and potentially improves performance by reducing the amount of hashed data.

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

3 years agoAuto merge of #84586 - GuillaumeGomez:enforce-rustdoc-gui-test-suite-run, r=Mark...
bors [Sun, 30 May 2021 12:32:41 +0000 (12:32 +0000)]
Auto merge of #84586 - GuillaumeGomez:enforce-rustdoc-gui-test-suite-run, r=Mark-Simulacrum

Enforce rustdoc-gui test-suite run

Part of https://github.com/rust-lang/rust/issues/84550

3 years agoUpdate mir opt tests
bjorn3 [Sat, 29 May 2021 16:36:54 +0000 (18:36 +0200)]
Update mir opt tests

3 years agoUpdate tests
bjorn3 [Sat, 29 May 2021 12:16:49 +0000 (14:16 +0200)]
Update tests

3 years agoFix test
bjorn3 [Sat, 29 May 2021 10:22:19 +0000 (12:22 +0200)]
Fix test

3 years agoMerge CrateDisambiguator into StableCrateId
bjorn3 [Sat, 29 May 2021 10:09:23 +0000 (12:09 +0200)]
Merge CrateDisambiguator into StableCrateId

3 years agoAuto merge of #85319 - cjgillot:query-simp, r=Mark-Simulacrum
bors [Sun, 30 May 2021 10:11:23 +0000 (10:11 +0000)]
Auto merge of #85319 - cjgillot:query-simp, r=Mark-Simulacrum

Simplification of query forcing

Extracted from #78780

3 years agoAuto merge of #85786 - GuillaumeGomez:error-code-checker-improvement, r=Mark-Simulacrum
bors [Sun, 30 May 2021 07:25:38 +0000 (07:25 +0000)]
Auto merge of #85786 - GuillaumeGomez:error-code-checker-improvement, r=Mark-Simulacrum

Error code checker improvement

Just realized that some error codes shouldn't be ignored anymore. So I updated the script to ensure that if an error code is tested and ignored, it will trigger an error.

3 years agoAuto merge of #85754 - the8472:revert-83770, r=Mark-Simulacrum
bors [Sun, 30 May 2021 04:12:44 +0000 (04:12 +0000)]
Auto merge of #85754 - the8472:revert-83770, r=Mark-Simulacrum

Revert "Auto merge of #83770 - the8472:tra-extend, r=Mark-Simulacrum"

Due to a performance regression that didn't show up in the original perf run
this reverts commit 9111b8ae9793f18179a1336417618fc07a9cac85 (#83770), reversing
changes made to 9a700d2947f2d7f97a2c0dfca3117a8dcc255bdd.

Since since is expected to have the inverse impact it should probably be rollup=never.

r? `@Mark-Simulacrum`

3 years agoAuto merge of #83772 - jhpratt:revamp-step-trait, r=Mark-Simulacrum
bors [Sun, 30 May 2021 01:21:39 +0000 (01:21 +0000)]
Auto merge of #83772 - jhpratt:revamp-step-trait, r=Mark-Simulacrum

Make `Step` trait safe to implement

This PR makes a few modifications to the `Step` trait that I believe better position it for stabilization in the short term. In particular,

1. `unsafe trait TrustedStep` is introduced, indicating that the implementation of `Step` for a given type upholds all stated invariants (which have remained unchanged). This is gated behind a new `trusted_step` feature, as stabilization is realistically blocked on min_specialization.
2. The `Step` trait is internally specialized on the `TrustedStep` trait, which avoids a serious performance regression.
3. `TrustedLen` is implemented for `T: TrustedStep` as the latter's invariants subsume the former's.
4. The `Step` trait is no longer `unsafe`, as the invariants must not be relied upon by unsafe code (unless the type implements `TrustedStep`).
5. `TrustedStep` is implemented for all types that implement `Step` in the standard library and compiler.
6. The `step_trait_ext` feature is merged into the `step_trait` feature. I was unable to find any reasoning for the features being split; the `_unchecked` methods need not necessarily be stabilized at the same time, but I think it is useful to have them under the same feature flag.

All existing implementations of `Step` will be broken, as it is not possible to `unsafe impl` a safe trait. Given this trait only exists on nightly, I feel this breakage is acceptable. The blanket `impl<T: Step> TrustedLen for T` will likely cause some minor breakage, but this should be covered by the equivalent impl for `TrustedStep`.

Hopefully these changes are sufficient to place `Step` in decent position for stabilization, which would allow user-defined types to be used with `a..b` syntax.

3 years agoAuto merge of #85390 - Mark-Simulacrum:fast-bridge, r=petrochenkov
bors [Sat, 29 May 2021 22:55:40 +0000 (22:55 +0000)]
Auto merge of #85390 - Mark-Simulacrum:fast-bridge, r=petrochenkov

Optimize proc macro bridge

This optimizes the proc macro bridge code for a win of 0.7% instruction counts on the diesel-check benchmark (non-incr, full). These wins are small, but hopefully not limited to just the diesel benchmark; the code is also not seriously impacted by the changes here.

3 years agoMove reconstruct test inwards.
Camille GILLOT [Sat, 29 May 2021 20:38:51 +0000 (22:38 +0200)]
Move reconstruct test inwards.

3 years agoAuto merge of #85698 - ehuss:incremental-session-panic, r=estebank
bors [Sat, 29 May 2021 19:27:53 +0000 (19:27 +0000)]
Auto merge of #85698 - ehuss:incremental-session-panic, r=estebank

Don't panic when failing to initialize incremental directory.

This removes a panic when rustc fails to initialize the incremental directory. This can commonly happen on various filesystems that don't support locking (often various network filesystems). Panics can be confusing and scary, and there are already plenty of issues reporting this.

This has been panicking since 1.22 due to I think #44502 which was a major rework of how things work. Previously, things were simpler and the [`load_dep_graph`](https://github.com/rust-lang/rust/blob/1.21.0/src/librustc_incremental/persist/load.rs#L43-L65) function would emit an error and then continue on without panicking. With 1.22, [`load_dep_graph`](https://github.com/rust-lang/rust/blob/1.22.0/src/librustc_incremental/persist/load.rs#L44) was changed so that it assumes it can load the data without errors. Today, the problem is that it calls [`prepare_session_directory`](https://github.com/rust-lang/rust/blob/fbf1b1a7193cda17008ab590e06ad28d9924023b/compiler/rustc_interface/src/passes.rs#L175-L179) and then immediately calls `garbage_collect_session_directories` which will panic since the session is `IncrCompSession::NotInitialized`.

The solution here is to have `prepare_session_directory` return an error that must be handled so that compilation stops if it fails.

Some other options:

* Ignore directory lock failures.
* Print a warning on directory lock failure, but otherwise continue with incremental enabled.
* Print a warning on directory lock failure, and disable incremental.
* Provide a different locking mechanism.

Cargo ignores lock errors if locking is not supported, so that would be a precedent for the first option. These options would require quite a bit more changes, but I'm happy to entertain any of them, as I think they all have valid justifications.

There is more discussion on the many issues where this is reported: #49773, #59224, #66513, #76251. I'm not sure if this can be considered closing any of those, though, since I think there is some value in discussing if there is a way to avoid the error altogether. But I think it would make sense to at least close all but one to consolidate them.

3 years agoUse correct edition when parsing `:pat` matchers
Aaron Hill [Wed, 26 May 2021 03:58:42 +0000 (22:58 -0500)]
Use correct edition when parsing `:pat` matchers

As described in issue #85708, we currently do not properly decode
`SyntaxContext::root()` and `ExpnId::root()` from foreign crates. As a
result, when we decode a span from a foreign crate with
`SyntaxContext::root()`, we end up up considering it to have the edition
of the *current* crate, instead of the foreign crate where it was
originally created.

A full fix for this issue will be a fairly significant undertaking.
Fortunately, it's possible to implement a partial fix, which gives us
the correct edition-dependent behavior for `:pat` matchers when the
macro is loaded from another crate. Since we have the edition of the
macro's defining crate available, we can 'recover' from seeing a
`SyntaxContext::root()` and use the edition of the macro's defining
crate.

Any solution to issue #85708 must reproduce the behavior of this
targeted fix - properly preserving a foreign `SyntaxContext::root()`
means (among other things) preserving its edition, which by definition
is the edition of the foreign crate itself. Therefore, this fix moves us
closer to the correct overall solution, and does not expose any new
incorrect behavior to macros.

3 years agoWrite primitive types via array buffers
Mark Rousskov [Sun, 16 May 2021 01:39:45 +0000 (21:39 -0400)]
Write primitive types via array buffers

This allows a more efficient implementation (avoiding a fallback to memmove,
which is not optimal for short writes).

This saves 0.29% on diesel.

3 years agoSwitch to reserve over extend_from_slice
Mark Rousskov [Sat, 15 May 2021 23:49:54 +0000 (19:49 -0400)]
Switch to reserve over extend_from_slice

This is a 0.15% win on diesel.

3 years agoSpecialize single-element writes to buffer
Mark Rousskov [Sat, 15 May 2021 22:54:57 +0000 (18:54 -0400)]
Specialize single-element writes to buffer

copy_from_slice generally falls back to memcpy/memmove, which is much more expensive
than we need to write a single element in.

This saves 0.26% instructions on the diesel benchmark.

3 years agoAuto merge of #85540 - GuillaumeGomez:better-result-dom-generation, r=jsha
bors [Sat, 29 May 2021 16:27:14 +0000 (16:27 +0000)]
Auto merge of #85540 - GuillaumeGomez:better-result-dom-generation, r=jsha

Better result dom generation

First commit is from https://github.com/rust-lang/rust/pull/85506.

We realized in https://github.com/rust-lang/rust/pull/85506#issuecomment-844984162 thanks to `@dns2utf8` that in some cases, the generated search result DOM was invalid. This was not strict enough and the DOM was inserted as a big string, which wasn't great.

r? `@jsha`

3 years agoFix incremental-session-fail to work when run as root.
Eric Huss [Sat, 29 May 2021 15:54:51 +0000 (08:54 -0700)]
Fix incremental-session-fail to work when run as root.

3 years agoAuto merge of #85767 - lqd:stackless_span_stacks, r=oli-obk
bors [Sat, 29 May 2021 13:34:20 +0000 (13:34 +0000)]
Auto merge of #85767 - lqd:stackless_span_stacks, r=oli-obk

A bit more polish on const eval errors

This PR adds a bit more polish to the const eval errors:
- a slight improvement to the PME messages from #85633: I mentioned there that the erroneous item's paths were dependent on the environment, and could be displayed fully qualified or not. This can obscure the items when they come from a dependency. This PR uses the pretty-printing code ensuring the items' paths are not trimmed.
- whenever there are generics involved in an item where const evaluation errors out, the error message now displays the instance and its const arguments, so that we can see which instantiated item and compile-time values lead to the error.

So we get this slight improvement for our beloved `stdarch` example, on nightly:
```
error[E0080]: evaluation of constant value failed
 --> ./stdarch/crates/core_arch/src/macros.rs:8:9
  |
8 |         assert!(IMM >= MIN && IMM <= MAX, "IMM value not in expected range");
  |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the evaluated program panicked at 'IMM value not in expected range', /rustc/9111b8ae9793f18179a1336417618fc07a9cac85/library/core/src/../../stdarch/crates/core_arch/src/macros.rs:8:9
  |
```

to this PR's:

```
error[E0080]: evaluation of `core::core_arch::macros::ValidateConstImm::<51_i32, 0_i32, 15_i32>::VALID` failed
 --> ./stdarch/crates/core_arch/src/macros.rs:8:9
  |
8 |         assert!(IMM >= MIN && IMM <= MAX, "IMM value not in expected range");
  |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the evaluated program panicked at 'IMM value not in expected range', ./stdarch/crates/core_arch/src/macros.rs:8:9
  |
```

with this PR.

Of course this is an idea from Oli, so maybe r? `@oli-obk` if they have the time.

3 years agoAuto merge of #85798 - hyd-dev:miri, r=RalfJung
bors [Sat, 29 May 2021 09:07:33 +0000 (09:07 +0000)]
Auto merge of #85798 - hyd-dev:miri, r=RalfJung

Update Miri

Fixes #85780.

3 years agoAuto merge of #85703 - clarfonthey:unchecked_shift, r=scottmcm
bors [Sat, 29 May 2021 05:16:09 +0000 (05:16 +0000)]
Auto merge of #85703 - clarfonthey:unchecked_shift, r=scottmcm

Add inherent unchecked_shl, unchecked_shr to integers

Tracking issue: #85122.

Adding more of these methods, since these are missing.

3 years agoAdd inherent unchecked_shl, unchecked_shr to integers
ltdk [Wed, 26 May 2021 01:46:07 +0000 (21:46 -0400)]
Add inherent unchecked_shl, unchecked_shr to integers

3 years agoAuto merge of #85790 - ehuss:nvptx-no-std, r=nagisa
bors [Sat, 29 May 2021 01:01:13 +0000 (01:01 +0000)]
Auto merge of #85790 - ehuss:nvptx-no-std, r=nagisa

Fix typo on nvptx support

I made a minor mistake in https://github.com/rust-lang/rust-forge/pull/356 setting nvptx as std instead of no-std.

3 years agoUpdate Miri
hyd-dev [Sat, 29 May 2021 00:52:58 +0000 (08:52 +0800)]
Update Miri

3 years agoAdd specific help for *how* to fix an incremental lock error.
Eric Huss [Fri, 28 May 2021 23:40:22 +0000 (16:40 -0700)]
Add specific help for *how* to fix an incremental lock error.

3 years agoAuto merge of #85607 - LeSeulArtichaut:thir-unsafeck-closures, r=nikomatsakis
bors [Fri, 28 May 2021 20:26:00 +0000 (20:26 +0000)]
Auto merge of #85607 - LeSeulArtichaut:thir-unsafeck-closures, r=nikomatsakis

Make closures inherit their parent's "safety context"

Fixes rust-lang/project-thir-unsafeck#9, ~~blocked on #85273~~.
r? `@nikomatsakis`

3 years agoRemove `--print unversioned-files` from rustdoc
Boris-Chengbiao Zhou [Fri, 28 May 2021 19:23:39 +0000 (21:23 +0200)]
Remove `--print unversioned-files` from rustdoc

This flag isn't needed anymore. See #83784.

3 years agoAuto merge of #85789 - ptrojahn:generator_typo, r=nagisa
bors [Fri, 28 May 2021 17:44:47 +0000 (17:44 +0000)]
Auto merge of #85789 - ptrojahn:generator_typo, r=nagisa

Fix typo

3 years agoFix typo on nvptx support
Eric Huss [Fri, 28 May 2021 17:14:56 +0000 (10:14 -0700)]
Fix typo on nvptx support

3 years agoClean up error codes from being ignored
Guillaume Gomez [Fri, 28 May 2021 15:14:53 +0000 (17:14 +0200)]
Clean up error codes from being ignored

3 years agoAdd checks to ensure the error_codes checker is "clean"
Guillaume Gomez [Fri, 28 May 2021 15:12:58 +0000 (17:12 +0200)]
Add checks to ensure the error_codes checker is "clean"

3 years agoAuto merge of #85700 - Bobo1239:dso_local_ppc64, r=nagisa
bors [Fri, 28 May 2021 15:03:52 +0000 (15:03 +0000)]
Auto merge of #85700 - Bobo1239:dso_local_ppc64, r=nagisa

Fix static relocation model for PowerPC64

We now also use `should_assume_dso_local()` for declarations and port two
additional cases from clang:
- Exclude PPC64 [1]
- Exclude thread-local variables [2]

[1]: https://github.com/llvm/llvm-project/blob/033138ea452f5f493fb5095e5963419905ad12e1/clang/lib/CodeGen/CodeGenModule.cpp#L1038-L1040
[2]: https://github.com/llvm/llvm-project/blob/033138ea452f5f493fb5095e5963419905ad12e1/clang/lib/CodeGen/CodeGenModule.cpp#L1048-L1050

Tbh I don't know enough about PowerPC(64) to explain why the TOC (table of contents; like the GOT in x86?) is still needed even with the static relocation model. But with these changes [Rust-For-Linux](https://github.com/Rust-for-Linux/linux) runs again on ppc64le. (instead of [getting loaded successfully but crashing](https://github.com/Bobo1239/linux/runs/2646478783?check_suite_focus=true#step:47:358))

r? `@nagisa`

3 years agoAuto merge of #85546 - hyd-dev:unwind, r=RalfJung
bors [Fri, 28 May 2021 08:49:48 +0000 (08:49 +0000)]
Auto merge of #85546 - hyd-dev:unwind, r=RalfJung

const-eval: disallow unwinding across functions that `!fn_can_unwind()`

Following https://github.com/rust-lang/miri/pull/1776#discussion_r633074343, so r? `@RalfJung`

This PR turns `unwind` in `StackPopCleanup::Goto` into a new enum `StackPopUnwind`, with a `NotAllowed` variant to indicate that unwinding is not allowed. This variant is chosen based on `rustc_middle::ty::layout::fn_can_unwind()` in `eval_fn_call()` when pushing the frame. A check is added in `unwind_to_block()` to report UB if unwinding happens across a `StackPopUnwind::NotAllowed` frame.

Tested with Miri `HEAD` with [minor changes](https://github.com/rust-lang/miri/compare/HEAD..9cf3c7f0d86325a586fbcbf2acdc9232b861f1d8) and the rust-lang/miri#1776 branch with [these changes](https://github.com/rust-lang/miri/compare/d866c1c52f48bf562720383455b75c257bb1ad92..626638fbfe2fff34648dda29a34d59db498a6e52).

3 years agoAuto merge of #85745 - veber-alex:panic_any, r=m-ou-se
bors [Fri, 28 May 2021 06:08:58 +0000 (06:08 +0000)]
Auto merge of #85745 - veber-alex:panic_any, r=m-ou-se

Add #[track_caller] to panic_any

Report the panic location from the user code.

```rust
use std::panic;
use std::panic::panic_any;

fn main() {
    panic::set_hook(Box::new(|panic_info| {
        if let Some(location) = panic_info.location() {
            println!(
                "panic occurred in file '{}' at line {}",
                location.file(),
                location.line(),
            );
        } else {
            println!("panic occurred but can't get location information...");
        }
    }));

    panic_any(42);
}
````

Before:
`panic occurred in file '/rustc/ff2c947c00f867b9f012e28ba88cecfbe556f904/library/std/src/panic.rs' at line 59`

After:
`panic occurred in file 'src/main.rs' at line 17`

3 years agoAuto merge of #84968 - FabianWolff:master, r=estebank
bors [Fri, 28 May 2021 03:38:28 +0000 (03:38 +0000)]
Auto merge of #84968 - FabianWolff:master, r=estebank

Fix incorrect suggestions for E0605

Fixes #84598. Here is a simplified version of the problem presented in issue #84598:

```Rust
#![allow(unused_variables)]
#![allow(dead_code)]

trait T { fn t(&self) -> i32; }

unsafe fn foo(t: *mut dyn T) {
    (t as &dyn T).t();
}

fn main() {}
```

The current output is:
```
error[E0605]: non-primitive cast: `*mut (dyn T + 'static)` as `&dyn T`
 --> src/main.rs:7:5
  |
7 |     (t as &dyn T).t();
  |     ^^^^^^^^^^^^^ invalid cast
  |
help: borrow the value for the cast to be valid
  |
7 |     (&t as &dyn T).t();
  |      ^
```

This is incorrect, though: The cast will _not_ be valid when writing `&t` instead of `t`:
```
error[E0277]: the trait bound `*mut (dyn T + 'static): T` is not satisfied
 --> t4.rs:7:6
  |
7 |     (&t as &dyn T).t();
  |      ^^ the trait `T` is not implemented for `*mut (dyn T + 'static)`
  |
  = note: required for the cast to the object type `dyn T`
```

The correct suggestion is `&*t`, which I have implemented in this pull request. Of course, this suggestion will always require an unsafe block, but arguably, that's what the user really wants if they're trying to cast a pointer to a reference.

In any case, claiming that the cast will be valid after implementing the suggestion is overly optimistic, as the coercion logic doesn't seem to resolve all nested obligations, i.e. the cast may still be invalid after implementing the suggestion. I have therefore rephrased the suggestion slightly ("consider borrowing the value" instead of "borrow the value for the cast to be valid").

Additionally, I have fixed another incorrect suggestion not mentioned in #84598, which relates to casting immutable references to mutable ones:

```rust
fn main() {
    let mut x = 0;
    let m = &x as &mut i32;
}
```
currently leads to
```
error[E0605]: non-primitive cast: `&i32` as `&mut i32`
 --> t5.rs:3:13
  |
3 |     let m = &x as &mut i32;
  |             ^^^^^^^^^^^^^^ invalid cast
  |
help: borrow the value for the cast to be valid
  |
3 |     let m = &mut &x as &mut i32;
  |             ^^^^
```
which is obviously incorrect:
```
error[E0596]: cannot borrow data in a `&` reference as mutable
 --> t5.rs:3:13
  |
3 |     let m = &mut &x as &mut i32;
  |             ^^^^^^^ cannot borrow as mutable
```
I've changed the suggestion to a note explaining the problem:
```
error[E0605]: non-primitive cast: `&i32` as `&mut i32`
 --> t5.rs:3:13
  |
3 |     let m = &x as &mut i32;
  |             ^^^^^^^^^^^^^^ invalid cast
  |
note: this reference is immutable
 --> t5.rs:3:13
  |
3 |     let m = &x as &mut i32;
  |             ^^
note: trying to cast to a mutable reference type
 --> t5.rs:3:19
  |
3 |     let m = &x as &mut i32;
  |                   ^^^^^^^^
```
In this example, it would have been even nicer to suggest replacing `&x` with `&mut x`, but this would be much more complex because we would have to take apart the expression to be cast (currently, we only look at its type), and `&x` could be stored in a variable, where such a suggestion would not even be directly applicable:
```rust
fn main() {
    let mut x = 0;
    let r = &x;
    let m = r as &mut i32;
}
```
My solution covers this case, too.

3 years agoFix static relocation model for PowerPC64
Boris-Chengbiao Zhou [Tue, 25 May 2021 21:54:07 +0000 (23:54 +0200)]
Fix static relocation model for PowerPC64

We now also use `should_assume_dso_local()` for declarations and port two
additional cases from clang:
- Exclude PPC64 [1]
- Exclude thread-local variables [2]

[1]: https://github.com/llvm/llvm-project/blob/033138ea452f5f493fb5095e5963419905ad12e1/clang/lib/CodeGen/CodeGenModule.cpp#L1038-L1040
[2]: https://github.com/llvm/llvm-project/blob/033138ea452f5f493fb5095e5963419905ad12e1/clang/lib/CodeGen/CodeGenModule.cpp#L1048-L1050

3 years agoRewrite to a `match`
hyd-dev [Fri, 28 May 2021 01:20:43 +0000 (09:20 +0800)]
Rewrite to a `match`

3 years ago"a frame" -> "a stack frame"
hyd-dev [Fri, 28 May 2021 01:18:18 +0000 (09:18 +0800)]
"a frame" -> "a stack frame"

3 years agoAuto merge of #85743 - bjorn3:sync_cg_clif-2021-05-27, r=bjorn3
bors [Fri, 28 May 2021 00:57:39 +0000 (00:57 +0000)]
Auto merge of #85743 - bjorn3:sync_cg_clif-2021-05-27, r=bjorn3

Sync rustc_codegen_cranelift

The main highlight this sync is the removal of several dependencies, making compilation of cg_clif itself faster. There have also been a couple of new features like `#[link_section]` now supporting different segments for Mach-O binaries (thanks `@eggyal!)` and the `imported_main` feature, which is currently unstable.

r? `@ghost`

`@rustbot` label +A-codegen +A-cranelift +T-compiler

3 years agoconst eval errors: display the current item instance if there are generics involved
Rémy Rakic [Thu, 27 May 2021 20:42:07 +0000 (22:42 +0200)]
const eval errors: display the current item instance if there are generics involved

3 years agoDo not try to build LLVM with Zlib on Windows
Mateusz Mikuła [Thu, 27 May 2021 21:12:15 +0000 (23:12 +0200)]
Do not try to build LLVM with Zlib on Windows

We do not install Zlib on the CI but recent builds somehow started picking it's shared version.
To avoid relying on CI binaries so let's explicitly disable it.

3 years agoAuto merge of #84568 - andoriyu:libtest/junit_formatter, r=yaahc
bors [Thu, 27 May 2021 21:14:55 +0000 (21:14 +0000)]
Auto merge of #84568 - andoriyu:libtest/junit_formatter, r=yaahc

feat(libtest): Add JUnit formatter

tracking issue: https://github.com/rust-lang/rust/issues/85563

Add an alternative formatter to `libtest`. Formatter produces valid xml that later can be interpreted as JUnit report.

Caveats:

- `timestamp` is required by schema, but every viewer/parser ignores it. Attribute is not set to avoid depending on chrono;
- Running all "suits" (unit tests, doc-tests and integration tests) will produce a mess;
- I couldn't find a way to get integration test binary name, so it's just goes by "integration";

Sample output for unit tests (pretty printed by 3rd party tool):
```
<?xml version="1.0" encoding="UTF-8"?>
<testsuites>
  <testsuite name="test" package="test" id="0" errors="0" failures="0" tests="13" skipped="1">
    <testcase classname="results::tests" name="test_completed_bad" time="0"/>
    <testcase classname="results::tests" name="suite_started" time="0"/>
    <testcase classname="results::tests" name="suite_ended_ok" time="0"/>
    <testcase classname="results::tests" name="suite_ended_bad" time="0"/>
    <testcase classname="junit::tests" name="test_failed_output" time="0"/>
    <testcase classname="junit::tests" name="test_simple_output" time="0"/>
    <testcase classname="junit::tests" name="test_multiple_outputs" time="0"/>
    <testcase classname="results::tests" name="test_completed_ok" time="0"/>
    <testcase classname="results::tests" name="test_stared" time="0"/>
    <testcase classname="junit::tests" name="test_generate_xml_no_error_single_testsuite" time="0"/>
    <testcase classname="results::tests" name="test_simple_output" time="0"/>
    <testcase classname="test" name="should_panic" time="0"/>
    <system-out/>
    <system-err/>
  </testsuite>
</testsuites>
```

Sample output for integration tests (pretty printed by 3rd party tool):

```
<?xml version="1.0" encoding="UTF-8"?>
<testsuites>
  <testsuite name="test" package="test" id="0" errors="0" failures="0" tests="1" skipped="0">
    <testcase classname="integration" name="test_add" time="0"/>
    <system-out/>
    <system-err/>
  </testsuite>
</testsuites>
```

Sample output for Doc-tests (pretty printed by 3rd party tool):

```
<?xml version="1.0" encoding="UTF-8"?>
<testsuites>
  <testsuite name="test" package="test" id="0" errors="0" failures="0" tests="1" skipped="0">
    <testcase classname="src/lib.rs" name="(line 2)" time="0"/>
    <system-out/>
    <system-err/>
  </testsuite>
</testsuites>
```

3 years agodon't trim paths in collector PME message
Rémy Rakic [Thu, 27 May 2021 20:28:04 +0000 (22:28 +0200)]
don't trim paths in collector PME message

3 years agoTest THIR unsafeck for unsafe ops in closures
LeSeulArtichaut [Thu, 27 May 2021 18:37:49 +0000 (20:37 +0200)]
Test THIR unsafeck for unsafe ops in closures

3 years agoAuto merge of #85757 - GuillaumeGomez:rollup-k8hfhp8, r=GuillaumeGomez
bors [Thu, 27 May 2021 18:33:43 +0000 (18:33 +0000)]
Auto merge of #85757 - GuillaumeGomez:rollup-k8hfhp8, r=GuillaumeGomez

Rollup of 3 pull requests

Successful merges:

 - #85722 (Fix trait methods' toggle)
 - #85730 (Mention workaround for floats in Iterator::{min, max})
 - #85738 (Rename opensbd to openbsd)

Failed merges:

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

3 years agoRollup merge of #85738 - 370417:opensbd, r=m-ou-se
Guillaume Gomez [Thu, 27 May 2021 18:08:24 +0000 (20:08 +0200)]
Rollup merge of #85738 - 370417:opensbd, r=m-ou-se

Rename opensbd to openbsd

OpenBsd was sometimes spelled "opensbd" in the standard library.

3 years agoRollup merge of #85730 - Smittyvb:iter-min-max-floats, r=m-ou-se
Guillaume Gomez [Thu, 27 May 2021 18:08:21 +0000 (20:08 +0200)]
Rollup merge of #85730 - Smittyvb:iter-min-max-floats, r=m-ou-se

Mention workaround for floats in Iterator::{min, max}

`Iterator::{min, max}` can't be used with iterators of floats due to NaN issues. This suggests a workaround in the documentation of those functions.

3 years agoRollup merge of #85722 - GuillaumeGomez:trait-toggle, r=jsha
Guillaume Gomez [Thu, 27 May 2021 18:08:17 +0000 (20:08 +0200)]
Rollup merge of #85722 - GuillaumeGomez:trait-toggle, r=jsha

Fix trait methods' toggle

A `<details>` tag wasn't closed on trait methods, which created broken DOM. I also used this occasion to only generate the toggle in case there is documentation on the method.

r? `@jsha`

3 years agoRevert "Auto merge of #83770 - the8472:tra-extend, r=Mark-Simulacrum"
The8472 [Thu, 27 May 2021 16:17:09 +0000 (18:17 +0200)]
Revert "Auto merge of #83770 - the8472:tra-extend, r=Mark-Simulacrum"

Due to a performance regression that didn't show up in the original perf run
this reverts commit 9111b8ae9793f18179a1336417618fc07a9cac85, reversing
changes made to 9a700d2947f2d7f97a2c0dfca3117a8dcc255bdd.

3 years agoAuto merge of #85729 - LeSeulArtichaut:thir-no-hash, r=nikomatsakis
bors [Thu, 27 May 2021 15:46:48 +0000 (15:46 +0000)]
Auto merge of #85729 - LeSeulArtichaut:thir-no-hash, r=nikomatsakis

Don't hash `thir_body`

Experiment to see if/how much this helps negate the perf impact of #85273.
r? `@ghost`

3 years agoMake closures inherit their parent's "safety context"
LeSeulArtichaut [Sun, 23 May 2021 16:10:32 +0000 (18:10 +0200)]
Make closures inherit their parent's "safety context"

3 years agoUpdate compiler/rustc_middle/src/query/mod.rs
Niko Matsakis [Thu, 27 May 2021 14:31:47 +0000 (10:31 -0400)]
Update compiler/rustc_middle/src/query/mod.rs

Co-authored-by: Léo Lanteri Thauvin <leseulartichaut@gmail.com>
3 years agoAuto merge of #85737 - scottmcm:vec-calloc-option-nonzero, r=m-ou-se
bors [Thu, 27 May 2021 13:05:57 +0000 (13:05 +0000)]
Auto merge of #85737 - scottmcm:vec-calloc-option-nonzero, r=m-ou-se

Enable Vec's calloc optimization for Option<NonZero>

Someone on discord noticed that `vec![None::<NonZeroU32>; N]` wasn't getting the optimization, so here's a PR 🙃

We can certainly do this in the standard library because we know for sure this is ok, but I think it's also a necessary consequence of documented guarantees like those in https://doc.rust-lang.org/std/option/#representation and https://doc.rust-lang.org/core/num/struct.NonZeroU32.html

It feels weird to do this without adding a test, but I wasn't sure where that would belong.  Is it worth adding codegen tests for these?

3 years agoRemove unused tidy dep exceptions
bjorn3 [Thu, 27 May 2021 11:23:32 +0000 (13:23 +0200)]
Remove unused tidy dep exceptions

3 years agoAdd #[track_caller] to panic_any
Alex Veber [Thu, 27 May 2021 11:19:47 +0000 (14:19 +0300)]
Add #[track_caller] to panic_any

3 years agoMerge commit '40dd3e2b7089b5e96714e064b731f6dbf17c61a9' into sync_cg_clif-2021-05-27
bjorn3 [Thu, 27 May 2021 11:08:14 +0000 (13:08 +0200)]
Merge commit '40dd3e2b7089b5e96714e064b731f6dbf17c61a9' into sync_cg_clif-2021-05-27

3 years agoAuto merge of #85732 - Smittyvb:trait-alias-camelcase-lint, r=varkor
bors [Thu, 27 May 2021 10:42:01 +0000 (10:42 +0000)]
Auto merge of #85732 - Smittyvb:trait-alias-camelcase-lint, r=varkor

Lint against non-CamelCase trait alias names

Type aliases are linted as such, so (unstable) trait aliases should be treated the same way.

3 years agoRustfmt
bjorn3 [Thu, 27 May 2021 10:40:08 +0000 (12:40 +0200)]
Rustfmt

3 years agoRustup to rustc 1.54.0-nightly (ff2c947c0 2021-05-25)
bjorn3 [Thu, 27 May 2021 10:39:40 +0000 (12:39 +0200)]
Rustup to rustc 1.54.0-nightly (ff2c947c0 2021-05-25)

3 years agoEnable Vec's calloc optimization for Option<NonZero>
Scott McMurray [Thu, 27 May 2021 06:19:35 +0000 (23:19 -0700)]
Enable Vec's calloc optimization for Option<NonZero>

3 years agoRename opensbd to openbsd
Albert Ford [Thu, 27 May 2021 06:17:13 +0000 (23:17 -0700)]
Rename opensbd to openbsd

3 years agoAuto merge of #84124 - 12101111:libunwind, r=petrochenkov
bors [Thu, 27 May 2021 04:08:20 +0000 (04:08 +0000)]
Auto merge of #84124 - 12101111:libunwind, r=petrochenkov

libunwind fix and cleanup

Fix:

1. "system-llvm-libunwind" now only skip build-script for linux target
2. workaround from https://github.com/rust-lang/rust/pull/65972 is not needed, upstream fix it in https://github.com/llvm/llvm-project/commit/68c50708d1f2b9aee3f10ec710df0b1387f701e5 ( LLVM 11 )
3. remove code for MSCV and Apple in `compile()`, as they are not used
4. fix https://github.com/rust-lang/rust/issues/69222 , compile c files and cpp files in different config
5. fix conditional compilation for musl target.
6. fix that x86_64-fortanix-unknown-sgx don't link libunwind built in build-script into rlib

3 years agoAuto merge of #85734 - Dylan-DPC:rollup-q6iiees, r=Dylan-DPC
bors [Thu, 27 May 2021 01:43:20 +0000 (01:43 +0000)]
Auto merge of #85734 - Dylan-DPC:rollup-q6iiees, r=Dylan-DPC

Rollup of 8 pull requests

Successful merges:

 - #84221 (E0599 suggestions and elision of generic argument if no canditate is found)
 - #84701 (stabilize member constraints)
 - #85564 ( readd capture disjoint fields gate)
 - #85583 (Get rid of PreviousDepGraph.)
 - #85649 (Update cc)
 - #85689 (Remove Iterator #[rustc_on_unimplemented]s that no longer apply.)
 - #85719 (Add inline attr to CString::into_inner so it can optimize out NonNull checks)
 - #85725 (Remove unneeded workaround)

Failed merges:

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

3 years agoAdd test to check behavior when incremental session init fails.
Eric Huss [Thu, 27 May 2021 00:44:03 +0000 (17:44 -0700)]
Add test to check behavior when incremental session init fails.

3 years agoRollup merge of #85725 - Smittyvb:rm-24159-workaround, r=RalfJung
Dylan DPC [Thu, 27 May 2021 01:02:12 +0000 (03:02 +0200)]
Rollup merge of #85725 - Smittyvb:rm-24159-workaround, r=RalfJung

Remove unneeded workaround

This removes a workaround for #24159, which has been fixed.

3 years agoRollup merge of #85719 - elichai:cstring-into_inner-inline, r=m-ou-se
Dylan DPC [Thu, 27 May 2021 01:02:11 +0000 (03:02 +0200)]
Rollup merge of #85719 - elichai:cstring-into_inner-inline, r=m-ou-se

Add inline attr to CString::into_inner so it can optimize out NonNull checks

It seems that currently if you convert any of the standard library's container to a pointer and then to a NonNull pointer, all will optimize out the NULL check except `CString`(https://godbolt.org/z/YPKW9G5xn),
because for some reason `CString::into_inner` isn't inlined even though it's a private function that should compile into a simple `mov` instruction.

Adding a simple `#[inline]` attribute solves this, code example:
```rust
use std::ffi::CString;
use std::ptr::NonNull;

pub fn cstring_nonull(mut n: CString) -> NonNull<i8> {
    NonNull::new(CString::into_raw(n)).unwrap()
}
```

assembly before:
```asm
__ZN3wat14cstring_nonull17h371c755bcad76294E:
.cfi_startproc
pushq %rbp
.cfi_def_cfa_offset 16
.cfi_offset %rbp, -16
movq %rsp, %rbp
.cfi_def_cfa_register %rbp
callq __ZN3std3ffi5c_str7CString10into_inner17h28ece07b276e2878E
testq %rax, %rax
je LBB0_2
popq %rbp
retq
LBB0_2:
leaq l___unnamed_1(%rip), %rdi
leaq l___unnamed_2(%rip), %rdx
movl $43, %esi
callq __ZN4core9panicking5panic17h92a83fa9085a8f73E
.cfi_endproc

.section __TEXT,__const
l___unnamed_1:
.ascii "called `Option::unwrap()` on a `None` value"

l___unnamed_3:
.ascii "wat.rs"

.section __DATA,__const
.p2align 3
l___unnamed_2:
.quad l___unnamed_3
.asciz "\006\000\000\000\000\000\000\000\006\000\000\000(\000\000"
```

Assembly after:
```asm
__ZN3wat14cstring_nonull17h9645eb9341fb25d7E:
.cfi_startproc
pushq %rbp
.cfi_def_cfa_offset 16
.cfi_offset %rbp, -16
movq %rsp, %rbp
.cfi_def_cfa_register %rbp
movq %rdi, %rax
popq %rbp
retq
.cfi_endproc
```

(Related discussion on zulip: https://rust-lang.zulipchat.com/#narrow/stream/219381-t-libs/topic/NonNull.20From.3CBox.3CT.3E.3E)

3 years agoRollup merge of #85689 - m-ou-se:array-intoiter-3, r=estebank
Dylan DPC [Thu, 27 May 2021 01:02:10 +0000 (03:02 +0200)]
Rollup merge of #85689 - m-ou-se:array-intoiter-3, r=estebank

Remove Iterator #[rustc_on_unimplemented]s that no longer apply.

Now that `IntoIterator` is implemented for arrays, all the `rustc_on_unimplemented` for arrays of ranges (e.g. `for _ in [1..3] {}`) no longer apply, since they are now valid Rust.

Separated these from #85670, because we should discuss a potential new (clippy?) lint for these.

Until Rust 1.52, `for _ in [1..3] {}` produced:

```
error[E0277]: `[std::ops::Range<{integer}>; 1]` is not an iterator
 --> src/main.rs:2:14
  |
2 |     for _ in [1..3] {}
  |              ^^^^^^ if you meant to iterate between two values, remove the square brackets
  |
  = help: the trait `std::iter::Iterator` is not implemented for `[std::ops::Range<{integer}>; 1]`
  = note: `[start..end]` is an array of one `Range`; you might have meant to have a `Range` without the brackets: `start..end`
  = note: required by `std::iter::IntoIterator::into_iter`
```

But in Rust 1.53 and later, it compiles fine. It iterates over the array by value, for one iteration with the element `1..3`.

This is probably a mistake, which is no longer caught. Should we have a lint for it? Should Clippy have a lint for it?

cc ```@estebank``` ```@flip1995```

cc https://github.com/rust-lang/rust/issues/84513

3 years agoRollup merge of #85649 - ChrisDenton:update-cc, r=matthewjasper
Dylan DPC [Thu, 27 May 2021 01:02:09 +0000 (03:02 +0200)]
Rollup merge of #85649 - ChrisDenton:update-cc, r=matthewjasper

Update cc

Recent commits have improved `cc`'s finding of MSVC tools on Windows. In particular it should help to address these issues: #83043 and #43468

3 years agoRollup merge of #85583 - cjgillot:no-previous-dg, r=petrochenkov
Dylan DPC [Thu, 27 May 2021 01:02:09 +0000 (03:02 +0200)]
Rollup merge of #85583 - cjgillot:no-previous-dg, r=petrochenkov

Get rid of PreviousDepGraph.

Its only role is to access the `SerializedDepGraph`.

3 years agoRollup merge of #85564 - pnkfelix:issue-85435-readd-capture-disjoint-fields-gate...
Dylan DPC [Thu, 27 May 2021 01:02:08 +0000 (03:02 +0200)]
Rollup merge of #85564 - pnkfelix:issue-85435-readd-capture-disjoint-fields-gate, r=nikomatsakis

 readd capture disjoint fields gate

This readds a feature gate guard that was added in PR #83521. (Basically, there were unintended consequences to the code exposed by removing the feature gate guard.)

The root bug still remains to be resolved, as discussed in issue #85561. This is just a band-aid suitable for a beta backport.

Cc issue #85435

Note that the latter issue is unfixed until we backport this (or another fix) to 1.53 beta

3 years agoRollup merge of #84701 - nikomatsakis:stabilize-member-constraints-61997, r=jackh726
Dylan DPC [Thu, 27 May 2021 01:02:07 +0000 (03:02 +0200)]
Rollup merge of #84701 - nikomatsakis:stabilize-member-constraints-61997, r=jackh726

stabilize member constraints

Stabilizes the use of "member constraints" in solving `impl Trait` bindings. This is a step towards stabilizing a "MVP" of "named impl Trait".

# Member constraint stabilization report

| Info | |
| --- | --- |
| Tracking issue | [rust-lang/rust#61997](https://github.com/rust-lang/rust/issues/61997) |
| Implementation history | [rust-lang/rust#61775] |
| rustc-dev-guide coverage | [link](https://rustc-dev-guide.rust-lang.org/borrow_check/region_inference/member_constraints.html) |
| Complications | [rust-lang/rust#61773] |

[rust-lang/rust#61775]: https://github.com/rust-lang/rust/pull/61775
[rust-lang/rust#61773]: https://github.com/rust-lang/rust/issues/61773

## Background

Member constraints are an extension to our region solver that was introduced to make async fn region solving tractable. There are used in situations like the following:

```rust
fn foo<'a, 'b>(...) -> impl Trait<'a, 'b> { .. }
```

The problem here is that every region R in the hidden type must be equal to *either* `'a` *or* `'b` (or `'static`). This cannot be expressed simply via 'outlives constriants' like `R: 'a`. Therefore, we introduce a 'member constraint' `R member of ['a, 'b]`.

These constraints were introduced in [rust-lang/rust#61775]. At the time, we kept them feature gated and used them only for `impl Trait` return types that are derived from `async fn`. The intention, however, was always to support them in other contexts once we had time to gain more experience with them.

**In the time since their introduction, we have encountered no surprises or bugs due to these member constraints.** They are tested extensively as part of every async function that involves multiple unrelated lifetimes in its arguments.

## Tests

The behavior of member constraints is covered by the following tests:

* [`src/test/ui/async-await/multiple-lifetimes`](https://github.com/rust-lang/rust/tree/20e032e65007ff1376e8480c1fbdb0a5068028fa/src/test/ui/async-await/multiple-lifetimes) -- tests using the async await, which are mostly already stabilized
* [`src/test/ui/impl-trait/multiple-lifetimes.rs`](https://github.com/rust-lang/rust/blob/20e032e65007ff1376e8480c1fbdb0a5068028fa/src/test/ui/impl-trait/multiple-lifetimes.rs)
* [`src/test/ui/impl-trait/multiple-lifetimes/ordinary-bounds-unsuited.rs`](https://github.com/rust-lang/rust/blob/20e032e65007ff1376e8480c1fbdb0a5068028fa/src/test/ui/impl-trait/multiple-lifetimes/ordinary-bounds-unsuited.rs)
* [`src/test/ui/async-await/multiple-lifetimes/ret-impl-trait-fg.rs`](https://github.com/rust-lang/rust/blob/20e032e65007ff1376e8480c1fbdb0a5068028fa/src/test/ui/async-await/multiple-lifetimes/ret-impl-trait-fg.rs)
* [`src/test/ui/async-await/multiple-lifetimes/ret-impl-trait-one.rs`](https://github.com/rust-lang/rust/blob/20e032e65007ff1376e8480c1fbdb0a5068028fa/src/test/ui/async-await/multiple-lifetimes/ret-impl-trait-one.rs)

These tests cover a number of scenarios:

* `-> implTrait<'a, 'b>` with unrelated lifetimes `'a` and `'b`, as described above
* `async fn` that returns an `impl Trait` like the previous case, which desugars to a kind of "nested" impl trait like `impl Future<Output = impl Trait<'a, 'b>>`

## Potential concerns

There is a potential interaction with `impl Trait` on local variables, described in [rust-lang/rust#61773]. The challenge is that if you have a program like:

```rust=
trait Foo<'_> { }
impl Foo<'_> for &u32 { }

fn bar() {
  let x: impl Foo<'_> = &44; // let's call the region variable for `'_` `'1`
}
```

then we would wind up with `'0 member of ['1, 'static]`, where `'0` is the region variable in the hidden type (`&'0 u32`) and `'1` is the region variable in the bounds `Foo<'1>`. This is tricky because both `'0` and `'1` are being inferred -- so making them equal may have other repercussions.

That said, `impl Trait` in bindings are not stable, and the implementation is pretty far from stabilization. Moreover, the difficulty highlighted here is not due to the presence of member constraints -- it's inherent to the design of the language. In other words, stabilizing member constraints does not actually cause us to accept anything that would make this problem any harder.

So I don't see this as a blocker to stabilization of member constraints; it is potentially a blocker to stablization of `impl trait` in let bindings.

3 years agoRollup merge of #84221 - ABouttefeux:generic-arg-elision, r=estebank
Dylan DPC [Thu, 27 May 2021 01:02:03 +0000 (03:02 +0200)]
Rollup merge of #84221 - ABouttefeux:generic-arg-elision, r=estebank

E0599 suggestions and elision of generic argument if no canditate is found

fixes #81576
changes: In error E0599 (method not found) generic argument are eluded if the method was not found anywhere. If the method was found in another inherent implementation suggest that it was found elsewhere.

Example
```rust

struct Wrapper<T>(T);

struct Wrapper2<T> {
    x: T,
}

impl Wrapper2<i8> {
    fn method(&self) {}
}

fn main() {
    let wrapper = Wrapper(i32);
    wrapper.method();
    let wrapper2 = Wrapper2{x: i32};
    wrapper2.method();
}
```

```
Error[E0599]: no method named `method` found for struct `Wrapper<_>` in the current scope
....
error[E0599]: no method named `method` found for struct `Wrapper2<i32>` in the current scope
...
   = note: The method was found for Wrapper2<i8>.

```
I am not very happy with the ```no method named `test` found for struct `Vec<_, _>` in the current scope```. I think it might be better to show only one generic argument `Vec<_>` if there is a default one. But I haven't yet found a way to do that,

3 years agodon't use unneeded closure
Smittyvb [Thu, 27 May 2021 00:38:50 +0000 (20:38 -0400)]
don't use unneeded closure

Co-authored-by: Alphyr <47725341+a1phyr@users.noreply.github.com>
3 years agodon't use unneeded closure
Smittyvb [Thu, 27 May 2021 00:38:43 +0000 (20:38 -0400)]
don't use unneeded closure

Co-authored-by: Alphyr <47725341+a1phyr@users.noreply.github.com>
3 years agoLint against non-camelCase trait alias names
Smitty [Wed, 26 May 2021 23:55:27 +0000 (19:55 -0400)]
Lint against non-camelCase trait alias names

Type aliases are linted as such, so (unstable) trait aliases should be
treated the same way.

3 years agoAuto merge of #85652 - ehuss:linkchecker-perf, r=Mark-Simulacrum
bors [Wed, 26 May 2021 23:13:15 +0000 (23:13 +0000)]
Auto merge of #85652 - ehuss:linkchecker-perf, r=Mark-Simulacrum

Optimize linkchecker and add report.

This makes three changes to the linkchecker:

* Adds a report displayed after it finishes.
* Improves the performance by caching all filesystem access. The linkchecker can take over a minute to run on some systems, and this should make it about 2-3 times faster.
* Added a few tests.

3 years agoBless test output
Jacob Pratt [Fri, 2 Apr 2021 21:25:16 +0000 (17:25 -0400)]
Bless test output

3 years agoUnify feature flags as `step_trait`
Jacob Pratt [Fri, 2 Apr 2021 05:05:43 +0000 (01:05 -0400)]
Unify feature flags as `step_trait`

While stdlib implementations of the unchecked methods require unchecked
math, there is no reason to gate it behind this for external users. The
reasoning for a separate `step_trait_ext` feature is unclear, and as
such has been merged as well.

3 years agoSpecialize implementations
Jacob Pratt [Fri, 2 Apr 2021 04:58:45 +0000 (00:58 -0400)]
Specialize implementations

Implementations in stdlib are now optimized as they were before.

3 years agoMention float workaround in Iterator::{min,max}
Smitty [Wed, 26 May 2021 21:15:54 +0000 (17:15 -0400)]
Mention float workaround in Iterator::{min,max}

3 years agoDon't hash `thir_body`
LeSeulArtichaut [Wed, 26 May 2021 20:34:42 +0000 (22:34 +0200)]
Don't hash `thir_body`

3 years agoAuto merge of #83770 - the8472:tra-extend, r=Mark-Simulacrum
bors [Wed, 26 May 2021 19:22:31 +0000 (19:22 +0000)]
Auto merge of #83770 - the8472:tra-extend, r=Mark-Simulacrum

Add `TrustedRandomAccess` specialization for `Vec::extend()`

This should do roughly the same as the `TrustedLen` specialization but result in less IR by using `__iterator_get_unchecked`
instead of `Iterator::for_each`

Conflicting specializations are manually prioritized by grouping them under yet another helper trait.

3 years agoFix typo
Paul Trojahn [Wed, 26 May 2021 17:19:47 +0000 (19:19 +0200)]
Fix typo

3 years agoRemove unneeded workaround
Smitty [Wed, 26 May 2021 17:16:26 +0000 (13:16 -0400)]
Remove unneeded workaround

This removes a workaround for #24159, which has been fixed.

3 years agoAuto merge of #85721 - Xanewok:update-rls, r=Xanewok
bors [Wed, 26 May 2021 16:35:45 +0000 (16:35 +0000)]
Auto merge of #85721 - Xanewok:update-rls, r=Xanewok

Update RLS

Closes #85453

r? `@ghost`

3 years agobless compare-mode=nll output
Niko Matsakis [Wed, 26 May 2021 16:05:34 +0000 (12:05 -0400)]
bless compare-mode=nll output

3 years agoAuto merge of #85720 - Dylan-DPC:rollup-in5917x, r=Dylan-DPC
bors [Wed, 26 May 2021 13:51:30 +0000 (13:51 +0000)]
Auto merge of #85720 - Dylan-DPC:rollup-in5917x, r=Dylan-DPC

Rollup of 8 pull requests

Successful merges:

 - #85478 (Disallow shadowing const parameters)
 - #85625 (Prevent double drop in `Vec::dedup_by` if a destructor panics)
 - #85627 (Fix a few details in THIR unsafeck)
 - #85633 (Post-monomorphization errors traces MVP)
 - #85670 (Remove arrays/IntoIterator message from Iterator trait.)
 - #85678 (fix `matches!` and `assert_matches!` on edition 2021)
 - #85679 (Remove num_as_ne_bytes feature)
 - #85712 (Fix typo in core::array::IntoIter comment)

Failed merges:

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

3 years agoUpdate trait toggle test
Guillaume Gomez [Wed, 26 May 2021 12:36:58 +0000 (14:36 +0200)]
Update trait toggle test

3 years ago* Fix bug where some <details> tags were not closed.
Guillaume Gomez [Wed, 26 May 2021 12:35:39 +0000 (14:35 +0200)]
* Fix bug where some <details> tags were not closed.
* Don't generate a <details> if there is no documentation

3 years agoUpdate RLS
Igor Matuszewski [Wed, 26 May 2021 12:02:26 +0000 (14:02 +0200)]
Update RLS

3 years agoSync from rust 1969c2e312303faa458cf19dad9783165e3c72c8
bjorn3 [Wed, 26 May 2021 12:01:50 +0000 (14:01 +0200)]
Sync from rust 1969c2e312303faa458cf19dad9783165e3c72c8

3 years agoAllow switching the regalloc algorithm from the commandline
bjorn3 [Wed, 26 May 2021 12:00:58 +0000 (14:00 +0200)]
Allow switching the regalloc algorithm from the commandline

3 years agoRollup merge of #85712 - BlackHoleFox:fix-iter-typo, r=jyn514
Dylan DPC [Wed, 26 May 2021 11:32:12 +0000 (13:32 +0200)]
Rollup merge of #85712 - BlackHoleFox:fix-iter-typo, r=jyn514

Fix typo in core::array::IntoIter comment

Saw a small typo reading some internal comments and decided to just throw this up to fix it for future readers.