]> git.lizzy.rs Git - rust.git/log
rust.git
20 months agoRollup merge of #102623 - davidtwco:translation-eager, r=compiler-errors
Dylan DPC [Wed, 12 Oct 2022 16:43:23 +0000 (22:13 +0530)]
Rollup merge of #102623 - davidtwco:translation-eager, r=compiler-errors

translation: eager translation

Part of #100717. See [Zulip thread](https://rust-lang.zulipchat.com/#narrow/stream/336883-i18n/topic/.23100717.20lists!/near/295010720) for additional context.

- **Store diagnostic arguments in a `HashMap`**: Eager translation will enable subdiagnostics to be translated multiple times with different arguments - this requires the ability to replace the value of one argument with a new value, which is better suited to a `HashMap` than the previous storage, a `Vec`.
- **Add `AddToDiagnostic::add_to_diagnostic_with`**: `AddToDiagnostic::add_to_diagnostic_with` is similar to the previous `AddToDiagnostic::add_to_diagnostic` but takes a function that can be used by the caller to modify diagnostic messages originating from the subdiagnostic (such as performing translation eagerly). `add_to_diagnostic` now just calls `add_to_diagnostic_with` with an empty closure.
- **Add `DiagnosticMessage::Eager`**: Add variant of `DiagnosticMessage` for eagerly translated messages
(messages in the target language which don't need translated by the emitter during emission). Also adds `eager_subdiagnostic` function which is intended to be invoked by the diagnostic derive for subdiagnostic fields which are marked as needing eager translation.
- **Support `#[subdiagnostic(eager)]`**: Add support for `eager` argument to the `subdiagnostic` attribute which generates a call to `eager_subdiagnostic`.
- **Finish migrating `rustc_query_system`**: Using eager translation, migrate the remaining repeated cycle stack diagnostic.
- **Split formatting initialization and use in diagnostic derives**: Diagnostic derives have previously had to take special care when ordering the generated code so that fields were not used after a move.

  This is unlikely for most fields because a field is either annotated with a subdiagnostic attribute and is thus likely a `Span` and copiable, or is a argument, in which case it is only used once by `set_arg`
anyway.

  However, format strings for code in suggestions can result in fields being used after being moved if not ordered carefully. As a result, the derive currently puts `set_arg` calls last (just before emission), such as:

      let diag = { /* create diagnostic */ };

      diag.span_suggestion_with_style(
          span,
          fluent::crate::slug,
          format!("{}", __binding_0),
          Applicability::Unknown,
          SuggestionStyle::ShowAlways
      );
      /* + other subdiagnostic additions */

      diag.set_arg("foo", __binding_0);
      /* + other `set_arg` calls */

      diag.emit();

  For eager translation, this doesn't work, as the message being translated eagerly can assume that all arguments are available - so arguments _must_ be set first.

  Format strings for suggestion code are now separated into two parts - an initialization line that performs the formatting into a variable, and a usage in the subdiagnostic addition.

  By separating these parts, the initialization can happen before arguments are set, preserving the desired order so that code compiles, while still enabling arguments to be set before subdiagnostics are added.

      let diag = { /* create diagnostic */ };

      let __code_0 = format!("{}", __binding_0);
      /* + other formatting */

      diag.set_arg("foo", __binding_0);
      /* + other `set_arg` calls */

      diag.span_suggestion_with_style(
          span,
          fluent::crate::slug,
          __code_0,
          Applicability::Unknown,
          SuggestionStyle::ShowAlways
      );
      /* + other subdiagnostic additions */

      diag.emit();

- **Remove field ordering logic in diagnostic derive:** Following the approach taken in earlier commits to separate formatting initialization from use in the subdiagnostic derive, simplify the diagnostic derive by removing the field-ordering logic that previously solved this problem.

r? ```@compiler-errors```

20 months agoAuto merge of #102460 - flba-eb:fix_85261_prevent_alloc_after_fork, r=thomcc
bors [Wed, 12 Oct 2022 10:51:31 +0000 (10:51 +0000)]
Auto merge of #102460 - flba-eb:fix_85261_prevent_alloc_after_fork, r=thomcc

Prevent UB in child process after calling libc::fork

After calling libc::fork, the child process tried to access a TLS variable when processing a panic. This caused a memory allocation which is UB in the child.
To prevent this from happening, the panic handler will not access the TLS variable in case `panic::always_abort` was called before.

Fixes #85261 (not only on Android systems, but also on Linux/QNX with TLS disabled, see issue for more details)

Main drawbacks of this fix:
* Panic messages can incorrectly omit `core::panic::PanicInfo` struct in case several panics (of multiple threads) occur at the same time. The handler cannot distinguish between multiple panics in different threads or recursive ones in the same thread, but the message will contain a hint about the uncertainty.
* `panic_count::increase()` will be a bit slower as it has an additional `if`, but this should be irrelevant as it is only called in case of a panic.

20 months agoAuto merge of #102948 - Dylan-DPC:rollup-j8h74rb, r=Dylan-DPC
bors [Wed, 12 Oct 2022 06:57:24 +0000 (06:57 +0000)]
Auto merge of #102948 - Dylan-DPC:rollup-j8h74rb, r=Dylan-DPC

Rollup of 8 pull requests

Successful merges:

 - #102110 (Migrate rustc_passes diagnostics)
 - #102187 (Use correct location for type tests in promoted constants)
 - #102239 (Move style guide to rust-lang/rust)
 - #102578 (Panic for invalid arguments of `{integer primitive}::ilog{,2,10}` in all modes)
 - #102811 (Use memset to initialize readbuf)
 - #102890 (Check representability in adt_sized_constraint)
 - #102913 (unify `IsPattern` and `IsImport` enum in `show_candidates`)
 - #102924 (rustdoc: remove unused classes from sidebar links)

Failed merges:

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

20 months agoRollup merge of #102924 - notriddle:notriddle/sidebar-link-class, r=GuillaumeGomez
Dylan DPC [Wed, 12 Oct 2022 05:41:27 +0000 (11:11 +0530)]
Rollup merge of #102924 - notriddle:notriddle/sidebar-link-class, r=GuillaumeGomez

rustdoc: remove unused classes from sidebar links

Since https://github.com/rust-lang/rust/commit/98f05a0282625a5fda6e90ebf3b05a4bd7608f65 removed separate colors from the currently-selected item, there's no need to have item classes on sidebar links.

Preview: https://notriddle.com/notriddle-rustdoc-demos/sidebar-link-class/std/vec/struct.Vec.html

While cleaning up the CSS to remove unneeded `.content` selectors, this PR changes the `h1.fqn a` CSS selector to just be `h1 a`, so that the header link color selector is less specific than the typed link at the end. Since https://github.com/rust-lang/rust/pull/89506 made docblocks start at `h2`, the main page link header should be the only h1 in the page now.

20 months agoRollup merge of #102913 - SparrowLii:import-candidate, r=compiler-errors
Dylan DPC [Wed, 12 Oct 2022 05:41:26 +0000 (11:11 +0530)]
Rollup merge of #102913 - SparrowLii:import-candidate, r=compiler-errors

unify `IsPattern` and `IsImport` enum in `show_candidates`

Follow-up of #102876
A binding cannot appear in both pattern and import at the same time, so it makes sense to unify them
r? `@compiler-errors`

20 months agoRollup merge of #102890 - camsteffen:adt-sized-representability, r=cjgillot
Dylan DPC [Wed, 12 Oct 2022 05:41:26 +0000 (11:11 +0530)]
Rollup merge of #102890 - camsteffen:adt-sized-representability, r=cjgillot

Check representability in adt_sized_constraint

Now that representability is a query, we can use it to preemptively avoid a cycle in `adt_sized_constraint`.

I moved the representability check into `check_mod_type_wf` to avoid a scenario where rustc quits before checking all the types for representability. This also removes the check from rustdoc, which is alright AFAIK.

r? ``@cjgillot``

20 months agoRollup merge of #102811 - the8472:bufread-memset, r=m-ou-se
Dylan DPC [Wed, 12 Oct 2022 05:41:25 +0000 (11:11 +0530)]
Rollup merge of #102811 - the8472:bufread-memset, r=m-ou-se

Use memset to initialize readbuf

The write loop was found to be slow in #102727

The proper fix is in #102760 but this might still help debug builds and code running under miri by using the write_bytes intrinsic instead of writing one byte at a time.

20 months agoRollup merge of #102578 - lukas-code:ilog-panic, r=m-ou-se
Dylan DPC [Wed, 12 Oct 2022 05:41:25 +0000 (11:11 +0530)]
Rollup merge of #102578 - lukas-code:ilog-panic, r=m-ou-se

Panic for invalid arguments of `{integer primitive}::ilog{,2,10}` in all modes

Decision made in https://github.com/rust-lang/rust/issues/100422#issuecomment-1245864700

resolves https://github.com/rust-lang/rust/issues/100422

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

r? `@m-ou-se`

20 months agoRollup merge of #102239 - joshtriplett:style-guide, r=calebcartwright
Dylan DPC [Wed, 12 Oct 2022 05:41:24 +0000 (11:11 +0530)]
Rollup merge of #102239 - joshtriplett:style-guide, r=calebcartwright

Move style guide to rust-lang/rust

Per [RFC 3309](https://rust-lang.github.io/rfcs/3309-style-team.html).

20 months agoRollup merge of #102187 - b-naber:inline-const-source-info, r=eholk
Dylan DPC [Wed, 12 Oct 2022 05:41:24 +0000 (11:11 +0530)]
Rollup merge of #102187 - b-naber:inline-const-source-info, r=eholk

Use correct location for type tests in promoted constants

Previously we forgot to remap the location in a type test collected when visiting the body of a promoted constant back to the usage location, causing an ICE when trying to get span information for that type test.

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

20 months agoRollup merge of #102110 - CleanCut:migrate_rustc_passes_diagnostics, r=davidtwco
Dylan DPC [Wed, 12 Oct 2022 05:41:23 +0000 (11:11 +0530)]
Rollup merge of #102110 - CleanCut:migrate_rustc_passes_diagnostics, r=davidtwco

Migrate rustc_passes diagnostics

Picks up abandoned work from https://github.com/rust-lang/rust/pull/100870

I would like to do this collaboratively, as there is a lot of work! Here's the process:

- Comment below that you are willing to help and I will add you as a collaborator to my `rust` fork (that gives you write access)
- Indicate which file/task you would like to work on (so we don't duplicate work) from the list below
- Do the work, push up a commit, comment that you're done with that file/task
- Repeat until done 😄

### Files to Migrate (in `compiler/rustc_passes/src/`)

- [x] check_attr.rs ``@CleanCut``
- [x] check_const.rs ``@CleanCut``
- [x] dead.rs ``@CleanCut``
- [x] debugger_visualizer.rs ``@CleanCut``
- [x] diagnostic_items.rs ``@CleanCut``
- [x] entry.rs ``@CleanCut``
- [x] lang_items.rs ``@CleanCut``
- [x] layout_test.rs ``@CleanCut``
- [x] lib_features.rs ``@CleanCut``
- [x] ~liveness.rs~ ``@CleanCut`` Nothing to do
- [x] loops.rs ``@CleanCut``
- [x] naked_functions.rs ``@CleanCut``
- [x] stability.rs ``@CleanCut``
- [x] weak_lang_items.rs ``@CleanCut``

### Tasks

- [x] Rebase on current `master` ``@CleanCut``
- [x] Review work from [the earlier PR](https://github.com/rust-lang/rust/pull/100870) and make sure it all looks good
  - [x] compiler/rustc_error_messages/locales/en-US/passes.ftl ``@CleanCut``
  - [x] compiler/rustc_passes/src/check_attr.rs ``@CleanCut``
  - [x] compiler/rustc_passes/src/errors.rs ``@CleanCut``
  - [x] compiler/rustc_passes/src/lang_items.rs ``@CleanCut``
  - [x] compiler/rustc_passes/src/lib.rs ``@CleanCut``
  - [x] compiler/rustc_passes/src/weak_lang_items.rs ``@CleanCut``

20 months agoAuto merge of #102692 - nnethercote:TokenStreamBuilder, r=Aaron1011
bors [Wed, 12 Oct 2022 03:46:16 +0000 (03:46 +0000)]
Auto merge of #102692 - nnethercote:TokenStreamBuilder, r=Aaron1011

Remove `TokenStreamBuilder`

`TokenStreamBuilder` is used to combine multiple token streams. It can be removed, leaving the code a little simpler and a little faster.

r? `@Aaron1011`

20 months agoAuto merge of #102934 - weihanglo:update-cargo, r=ehuss
bors [Wed, 12 Oct 2022 00:56:14 +0000 (00:56 +0000)]
Auto merge of #102934 - weihanglo:update-cargo, r=ehuss

Update cargo

9 commits in 3cdf1ab25dc4fe56f890e8c7330d53a23ad905d3..b8f30cb23c4e5f20854a4f683325782b7cff9837 2022-10-07 17:34:03 +0000 to 2022-10-10 19:16:06 +0000

- Add more doc comments for three modules (rust-lang/cargo#11207)
- docs: fix (rust-lang/cargo#11208)
- Add completions for `cargo remove` (rust-lang/cargo#11204)
- Config file loaded via CLI takes priority over env vars (rust-lang/cargo#11077)
- Use `#[default]` when possible (rust-lang/cargo#11197)
- Implement RFC 3289: source replacement ambiguity (rust-lang/cargo#10907)
- Use correct version of cargo in test (rust-lang/cargo#11193)
- Check empty input for login (rust-lang/cargo#11145)
- Add retry support to sparse registries (rust-lang/cargo#11069)

20 months agounify `IsPattern` and `IsImport` enum
SparrowLii [Wed, 12 Oct 2022 00:46:52 +0000 (08:46 +0800)]
unify `IsPattern` and `IsImport` enum

21 months agoUpdate cargo
Weihang Lo [Tue, 11 Oct 2022 20:52:56 +0000 (21:52 +0100)]
Update cargo

9 commits in 3cdf1ab25dc4fe56f890e8c7330d53a23ad905d3..b8f30cb23c4e5f20854a4f683325782b7cff9837
2022-10-07 17:34:03 +0000 to 2022-10-10 19:16:06 +0000

- Add more doc comments for three modules (rust-lang/cargo#11207)
- docs: fix (rust-lang/cargo#11208)
- Add completions for `cargo remove` (rust-lang/cargo#11204)
- Config file loaded via CLI takes priority over env vars (rust-lang/cargo#11077)
- Use `#[default]` when possible (rust-lang/cargo#11197)
- Implement RFC 3289: source replacement ambiguity (rust-lang/cargo#10907)
- Use correct version of cargo in test (rust-lang/cargo#11193)
- Check empty input for login (rust-lang/cargo#11145)
- Add retry support to sparse registries (rust-lang/cargo#11069)

21 months agoAuto merge of #102926 - matthiaskrgr:rollup-oe2cdzj, r=matthiaskrgr
bors [Tue, 11 Oct 2022 17:20:48 +0000 (17:20 +0000)]
Auto merge of #102926 - matthiaskrgr:rollup-oe2cdzj, r=matthiaskrgr

Rollup of 11 pull requests

Successful merges:

 - #100387 (Check uniqueness of impl items by trait item when applicable.)
 - #101727 (Stabilize map_first_last)
 - #101774 (Warn about safety of `fetch_update`)
 - #102227 (fs::get_path solarish version.)
 - #102445 (Add `is_empty()` method to `core::ffi::CStr`.)
 - #102612 (Migrate `codegen_ssa` to diagnostics structs - [Part 1])
 - #102685 (Interpret EH actions properly)
 - #102869 (Add basename and dirname aliases)
 - #102889 (rustc_hir: Less error-prone methods for accessing `PartialRes` resolution)
 - #102893 (Fix ICE #102878)
 - #102912 (:arrow_up: rust-analyzer)

Failed merges:

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

21 months agoRollup merge of #102912 - lnicola:rust-analyzer-2022-10-11, r=lnicola
Matthias Krüger [Tue, 11 Oct 2022 16:59:51 +0000 (18:59 +0200)]
Rollup merge of #102912 - lnicola:rust-analyzer-2022-10-11, r=lnicola

:arrow_up: rust-analyzer

r? `@ghost`

21 months agoRollup merge of #102893 - TaKO8Ki:fix-102878, r=davidtwco
Matthias Krüger [Tue, 11 Oct 2022 16:59:50 +0000 (18:59 +0200)]
Rollup merge of #102893 - TaKO8Ki:fix-102878, r=davidtwco

Fix ICE #102878

Fixes #102878

21 months agoRollup merge of #102889 - petrochenkov:partres, r=cjgillot
Matthias Krüger [Tue, 11 Oct 2022 16:59:50 +0000 (18:59 +0200)]
Rollup merge of #102889 - petrochenkov:partres, r=cjgillot

rustc_hir: Less error-prone methods for accessing `PartialRes` resolution

21 months agoRollup merge of #102869 - azdavis:master, r=joshtriplett
Matthias Krüger [Tue, 11 Oct 2022 16:59:49 +0000 (18:59 +0200)]
Rollup merge of #102869 - azdavis:master, r=joshtriplett

Add basename and dirname aliases

Users might be used to the POSIX names of these functions. In fact, here's a [blog post][1] about this very thing.

[1]: https://boinkor.net/2019/07/basename-and-dirname-in-rust/

21 months agoRollup merge of #102685 - nbdd0121:unwind, r=m-ou-se
Matthias Krüger [Tue, 11 Oct 2022 16:59:49 +0000 (18:59 +0200)]
Rollup merge of #102685 - nbdd0121:unwind, r=m-ou-se

Interpret EH actions properly

The EH actions stored in the LSDA follows the format of GCC except table (even for LLVM-generated code). An missing action in the table is the encoding for `Terminate`, see https://github.com/gcc-mirror/gcc/blob/master/libstdc%2B%2B-v3/libsupc%2B%2B/eh_personality.cc#L522-L526.

The currently code interprets it as `None`, as a workaround for #35011, an issue that seems to occur in LLVM 3.7 and not after 3.9. These are very old versions of LLVM and we don't support them anymore, so remove this workaround and interpret them properly.

Note that LLVM currently does not emit any `Terminate` actions, but GCC does. Although GCC backend currently doesn't do unwinding, removing it preemptively would prevent future developers from wasting time to figure out what's wrong.

``@rustbot`` label: +T-compiler

21 months agoRollup merge of #102612 - JhonnyBillM:migrate-codegen-ssa-to-diagnostics-structs...
Matthias Krüger [Tue, 11 Oct 2022 16:59:48 +0000 (18:59 +0200)]
Rollup merge of #102612 - JhonnyBillM:migrate-codegen-ssa-to-diagnostics-structs, r=davidtwco

Migrate `codegen_ssa` to diagnostics structs - [Part 1]

Initial migration of `codegen_ssa`. Going to split this crate migration in at least two PRs in order to avoid a huge PR and to quick off some questions around:

1. Translating messages from "external" crates.
2. Interfacing with OS messages.
3. Adding UI tests while migrating diagnostics.

_See comments below._

21 months agoRollup merge of #102445 - jmillikin:cstr-is-empty, r=Mark-Simulacrum
Matthias Krüger [Tue, 11 Oct 2022 16:59:48 +0000 (18:59 +0200)]
Rollup merge of #102445 - jmillikin:cstr-is-empty, r=Mark-Simulacrum

Add `is_empty()` method to `core::ffi::CStr`.

ACP: https://github.com/rust-lang/libs-team/issues/106

Tracking issue: https://github.com/rust-lang/rust/issues/102444

21 months agoRollup merge of #102227 - devnexen:solarish_get_path, r=m-ou-se
Matthias Krüger [Tue, 11 Oct 2022 16:59:47 +0000 (18:59 +0200)]
Rollup merge of #102227 - devnexen:solarish_get_path, r=m-ou-se

fs::get_path solarish version.

similar to linux, albeit there is no /proc/self notion on solaris
 based system thus flattening the difference for simplification sake.

21 months agoRollup merge of #101774 - Riolku:atomic-update-aba, r=m-ou-se
Matthias Krüger [Tue, 11 Oct 2022 16:59:46 +0000 (18:59 +0200)]
Rollup merge of #101774 - Riolku:atomic-update-aba, r=m-ou-se

Warn about safety of `fetch_update`

Specifically as it relates to the ABA problem.

`fetch_update` is a useful function, and one that isn't provided by, say, C++. However, this does not mean the function is magic. It is implemented in terms of `compare_exchange_weak`, and in particular, suffers from the ABA problem. See the following code, which is a naive implementation of `pop` in a lock-free queue:

```rust
fn pop(&self) -> Option<i32> {
    self.front.fetch_update(Ordering::Relaxed, Ordering::Acquire, |front| {
        if front == ptr::null_mut() {
            None
        }
        else {
            Some(unsafe { (*front).next })
        }
    }.ok()
}
```

This code is unsound if called from multiple threads because of the ABA problem. Specifically, suppose nodes are allocated with `Box`. Suppose the following sequence happens:

```
Initial: Queue is X -> Y.

Thread A: Starts popping, is pre-empted.
Thread B: Pops successfully, twice, leaving the queue empty.
Thread C: Pushes, and `Box` returns X (very common for allocators)
Thread A: Wakes up, sees the head is still X, and stores Y as the new head.
```

But `Y` is deallocated. This is undefined behaviour.

Adding a note about this problem to `fetch_update` should hopefully prevent users from being misled, and also, a link to this common problem is, in my opinion, an improvement to our docs on atomics.

21 months agoRollup merge of #101727 - est31:stabilize_map_first_last, r=m-ou-se
Matthias Krüger [Tue, 11 Oct 2022 16:59:46 +0000 (18:59 +0200)]
Rollup merge of #101727 - est31:stabilize_map_first_last, r=m-ou-se

Stabilize map_first_last

Stabilizes the following functions:

```Rust
impl<T> BTreeSet<T> {
    pub fn first(&self) -> Option<&T> where T: Ord;
    pub fn last(&self) -> Option<&T> where T: Ord;
    pub fn pop_first(&mut self) -> Option<T> where T: Ord;
    pub fn pop_last(&mut self) -> Option<T> where T: Ord;
}

impl<K, V> BTreeMap<K, V> {
    pub fn first_key_value(&self) -> Option<(&K, &V)> where K: Ord;
    pub fn last_key_value(&self) -> Option<(&K, &V)> where K: Ord;
    pub fn first_entry(&mut self) -> Option<OccupiedEntry<'_, K, V>> where K: Ord;
    pub fn last_entry(&mut self) -> Option<OccupiedEntry<'_, K, V>> where K: Ord;
    pub fn pop_first(&mut self) -> Option<(K, V)> where K: Ord;
    pub fn pop_last(&mut self) -> Option<(K, V)> where K: Ord;
}
```

Closes #62924

~~Blocked on the [FCP](https://github.com/rust-lang/rust/issues/62924#issuecomment-1179489929) finishing.~~ Edit: It finished!

21 months agoRollup merge of #100387 - cjgillot:hygiene-trait-impl, r=petrochenkov
Matthias Krüger [Tue, 11 Oct 2022 16:59:45 +0000 (18:59 +0200)]
Rollup merge of #100387 - cjgillot:hygiene-trait-impl, r=petrochenkov

Check uniqueness of impl items by trait item when applicable.

When checking uniqueness of item names in impl blocks, we currently use the same definition of hygiene as for toplevel items.  This means that a plain item and one generated by a macro 2.0 do not collide.

This hygiene rule does not match with how impl items resolve to associated trait items. As a consequence, we misdiagnose the trait impls.

This PR proposes to consider that trait impl items are uses of the corresponding trait items during resolution, instead of checking for duplicates later. An error is emitted when a trait impl item is used twice.

There should be no stable breakage, since macros 2.0 are still unstable.

r? ``@petrochenkov``
cc ``@RalfJung``

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

21 months agorustdoc: remove unneeded `.content` selector from link colors
Michael Howell [Tue, 11 Oct 2022 16:22:40 +0000 (09:22 -0700)]
rustdoc: remove unneeded `.content` selector from link colors

Since 98f05a0282625a5fda6e90ebf3b05a4bd7608f65 and
b5963f07e611cf2a09a310eb74c1a93adfaeb9de removed color classes from sidebar
items, there's no need for the selectors to be so specific any more.

This commit does have to change `h1.fqn a` to just be `h1 a`, so that the
header link color selector is less specific than the typed link at the end.
Since #89506 made docblocks start at `h2`, the main page link header should
be the only h1 in the page now.

21 months agorustdoc: remove unused classes from sidebar
Michael Howell [Tue, 11 Oct 2022 15:50:41 +0000 (08:50 -0700)]
rustdoc: remove unused classes from sidebar

Since 98f05a0282625a5fda6e90ebf3b05a4bd7608f65 removed separate colors
from the currently-selected item, there's no need to have item classes on
sidebar links.

21 months agoAuto merge of #102894 - RalfJung:compiler_builtins, r=Amanieu
bors [Tue, 11 Oct 2022 14:04:59 +0000 (14:04 +0000)]
Auto merge of #102894 - RalfJung:compiler_builtins, r=Amanieu

update compiler_builtins

r? `@Amanieu`

21 months agoAuto merge of #102915 - JohnTitor:rollup-5ht99y1, r=JohnTitor
bors [Tue, 11 Oct 2022 11:03:12 +0000 (11:03 +0000)]
Auto merge of #102915 - JohnTitor:rollup-5ht99y1, r=JohnTitor

Rollup of 7 pull requests

Successful merges:

 - #102258 (Remove unused variable in float formatting.)
 - #102277 (Consistently write `RwLock`)
 - #102412 (Never panic in `thread::park` and `thread::park_timeout`)
 - #102589 (scoped threads: pass closure through MaybeUninit to avoid invalid dangling references)
 - #102625 (fix backtrace small typo)
 - #102859 (Move lifetime resolution module to rustc_hir_analysis.)
 - #102898 (rustdoc: remove unneeded `<div>` wrapper from sidebar DOM)

Failed merges:

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

21 months agoRollup merge of #102898 - notriddle:notriddle/sidebar-block, r=GuillaumeGomez
Yuki Okushi [Tue, 11 Oct 2022 09:37:55 +0000 (18:37 +0900)]
Rollup merge of #102898 - notriddle:notriddle/sidebar-block, r=GuillaumeGomez

rustdoc: remove unneeded `<div>` wrapper from sidebar DOM

When this was added, the sidebar had a bit more complex style. It can be removed, now.

Preview: https://notriddle.com/notriddle-rustdoc-demos/sidebar-block/std/index.html

21 months agoRollup merge of #102859 - cjgillot:collect-lifetimes, r=oli-obk
Yuki Okushi [Tue, 11 Oct 2022 09:37:55 +0000 (18:37 +0900)]
Rollup merge of #102859 - cjgillot:collect-lifetimes, r=oli-obk

Move lifetime resolution module to rustc_hir_analysis.

Now that lifetime resolution has been removed from it, this file has nothing to do in `rustc_resolve`.  It's purpose is to compute Debruijn indices for lifetimes, so let's put it in type collection.

21 months agoRollup merge of #102625 - Rageking8:fix-backtrace-small-typo, r=m-ou-se
Yuki Okushi [Tue, 11 Oct 2022 09:37:54 +0000 (18:37 +0900)]
Rollup merge of #102625 - Rageking8:fix-backtrace-small-typo, r=m-ou-se

fix backtrace small typo

21 months agoRollup merge of #102589 - RalfJung:scoped-threads-dangling, r=m-ou-se
Yuki Okushi [Tue, 11 Oct 2022 09:37:54 +0000 (18:37 +0900)]
Rollup merge of #102589 - RalfJung:scoped-threads-dangling, r=m-ou-se

scoped threads: pass closure through MaybeUninit to avoid invalid dangling references

The `main` function defined here looks roughly like this, if it were written as a more explicit stand-alone function:
```rust
// Not showing all the `'lifetime` tracking, the point is that
// this closure might live shorter than `thread`.
fn thread(control: ..., closure: impl FnOnce() + 'lifetime) {
    closure();
    control.signal_done();
    // A lot of time can pass here.
}
```
Note that `thread` continues to run even after `signal_done`! Now consider what happens if the `closure` captures a reference of lifetime `'lifetime`:
- The type of `closure` is a struct (the implicit unnameable closure type) with a `&'lifetime mut T` field. References passed to a function are marked with `dereferenceable`, which is LLVM speak for *this reference will remain live for the entire duration of this function*.
- The closure runs, `signal_done` runs. Then -- potentially -- this thread gets scheduled away and the main thread runs, seeing the signal and returning to the user. Now `'lifetime` ends and the memory the reference points to might be deallocated.
- Now we have UB! The reference that as passed to `thread` with the promise of remaining live for the entire duration of the function, actually got deallocated while the function still runs. Oops.

Long-term I think we should be able to use `ManuallyDrop` to fix this without `unsafe`, or maybe a new `MaybeDangling` type. I am working on an RFC for that. But in the mean time it'd be nice to fix this so that Miri with `-Zmiri-retag-fields` (which is needed for "full enforcement" of all the LLVM flags we generate) stops erroring on scoped threads.

Fixes https://github.com/rust-lang/rust/issues/101983
r? `@m-ou-se`

21 months agoRollup merge of #102412 - joboet:dont_panic, r=m-ou-se
Yuki Okushi [Tue, 11 Oct 2022 09:37:53 +0000 (18:37 +0900)]
Rollup merge of #102412 - joboet:dont_panic, r=m-ou-se

Never panic in `thread::park` and `thread::park_timeout`

fixes #102398

`@rustbot` label +T-libs +T-libs-api

21 months agoRollup merge of #102277 - mgeisler:rwlock, r=m-ou-se
Yuki Okushi [Tue, 11 Oct 2022 09:37:52 +0000 (18:37 +0900)]
Rollup merge of #102277 - mgeisler:rwlock, r=m-ou-se

Consistently write `RwLock`

Before the documentation sometimes referred to an "rwlock" and sometimes to "`RwLock`".

21 months agoRollup merge of #102258 - cjgillot:core-kappa, r=m-ou-se
Yuki Okushi [Tue, 11 Oct 2022 09:37:52 +0000 (18:37 +0900)]
Rollup merge of #102258 - cjgillot:core-kappa, r=m-ou-se

Remove unused variable in float formatting.

21 months agoAuto merge of #102755 - pcc:data-local-tmp, r=Mark-Simulacrum
bors [Tue, 11 Oct 2022 08:09:41 +0000 (08:09 +0000)]
Auto merge of #102755 - pcc:data-local-tmp, r=Mark-Simulacrum

tools/remote-test-{server,client}: Use /data/local/tmp on Android

The /data/tmp directory does not exist, at least not on recent versions of Android, which currently leads to test failures on that platform. I checked a virtual device running AOSP master and a Nexus 5 running Android Marshmallow and on both devices the /data/tmp directory does not exist and /data/local/tmp does, so let's switch to /data/local/tmp.

21 months ago:arrow_up: rust-analyzer
Laurențiu Nicola [Tue, 11 Oct 2022 07:37:35 +0000 (10:37 +0300)]
:arrow_up: rust-analyzer

21 months agoReport duplicate definitions in trait impls during resolution.
Camille GILLOT [Wed, 10 Aug 2022 19:31:26 +0000 (21:31 +0200)]
Report duplicate definitions in trait impls during resolution.

21 months agorustc_hir: Less error-prone methods for accessing `PartialRes` resolution
Vadim Petrochenkov [Mon, 10 Oct 2022 15:21:35 +0000 (19:21 +0400)]
rustc_hir: Less error-prone methods for accessing `PartialRes` resolution

21 months agoAuto merge of #102724 - pcc:scs-fix-test, r=Mark-Simulacrum
bors [Tue, 11 Oct 2022 04:27:13 +0000 (04:27 +0000)]
Auto merge of #102724 - pcc:scs-fix-test, r=Mark-Simulacrum

Fix the sanitizer_scs_attr_check.rs test

The test is failing when targeting aarch64 Android. The intent appears to have been to look for a function attributes comment (or the absence of one) on the line preceding the function declaration. But this isn't quite possible with FileCheck and the test as written was looking for a line with `no_scs` after a line with `scs`, which doesn't appear in the output. Instead, match on the function attributes comment on the line following the demangled function name comment.

21 months agoRemove outdated comment
Michael Howell [Tue, 11 Oct 2022 00:53:27 +0000 (17:53 -0700)]
Remove outdated comment

21 months agoAuto merge of #102896 - matthiaskrgr:rollup-jg5xawz, r=matthiaskrgr
bors [Tue, 11 Oct 2022 00:36:26 +0000 (00:36 +0000)]
Auto merge of #102896 - matthiaskrgr:rollup-jg5xawz, r=matthiaskrgr

Rollup of 6 pull requests

Successful merges:

 - #101360 (Point out incompatible closure bounds)
 - #101789 (`let`'s not needed in struct field definitions)
 - #102846 (update to syn-1.0.102)
 - #102871 (rustdoc: clean up overly complex `.trait-impl` CSS selectors)
 - #102876 (suggest candidates for unresolved import)
 - #102888 (Improve rustdoc-gui search-color test)

Failed merges:

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

21 months agoDo not alias for fs
Ariel Davis [Tue, 11 Oct 2022 00:05:59 +0000 (17:05 -0700)]
Do not alias for fs

21 months agoAuto merge of #101720 - GuillaumeGomez:warn-INVALID_HTML_TAGS, r=notriddle
bors [Mon, 10 Oct 2022 21:41:02 +0000 (21:41 +0000)]
Auto merge of #101720 - GuillaumeGomez:warn-INVALID_HTML_TAGS, r=notriddle

Change default level of INVALID_HTML_TAGS to warning and stabilize it

Fixes of #67799.

cc `@Nemo157`
r? `@notriddle`

21 months agoCheck representability in adt_sized_constraint
Cameron Steffen [Mon, 10 Oct 2022 16:22:41 +0000 (11:22 -0500)]
Check representability in adt_sized_constraint

21 months agoRollup merge of #102888 - GuillaumeGomez:improve-search-color-check, r=notriddle
Matthias Krüger [Mon, 10 Oct 2022 18:47:34 +0000 (20:47 +0200)]
Rollup merge of #102888 - GuillaumeGomez:improve-search-color-check, r=notriddle

Improve rustdoc-gui search-color test

Thanks to the add of "functions" in `browser-ui-test`, we can start to reduce the size of the scripts. It'll be very useful for all color checks.

r? `@notriddle`

21 months agoRollup merge of #102876 - SparrowLii:import-candidate, r=fee1-dead
Matthias Krüger [Mon, 10 Oct 2022 18:47:34 +0000 (20:47 +0200)]
Rollup merge of #102876 - SparrowLii:import-candidate, r=fee1-dead

suggest candidates for unresolved import

Currently we prompt suggestion of candidates(help notes of `use xxx::yyy`) for names which cannot be resolved, but we don't do that for import statements themselves that couldn't be resolved. It seems reasonable to add candidate help information for these statements as well.
Fixes #102711

21 months agoRollup merge of #102871 - notriddle:notriddle/trait-impl-anchor, r=GuillaumeGomez
Matthias Krüger [Mon, 10 Oct 2022 18:47:33 +0000 (20:47 +0200)]
Rollup merge of #102871 - notriddle:notriddle/trait-impl-anchor, r=GuillaumeGomez

rustdoc: clean up overly complex `.trait-impl` CSS selectors

When added in 45964368f4a2e31c94e9bcf1cef933c087d21544, these multi-class selectors were present in the initial commit, but no reason was given why the shorter selector wouldn't work.

21 months agoRollup merge of #102846 - zertosh:update-syn, r=dtolnay
Matthias Krüger [Mon, 10 Oct 2022 18:47:33 +0000 (20:47 +0200)]
Rollup merge of #102846 - zertosh:update-syn, r=dtolnay

update to syn-1.0.102

This update removes the only `.gitignore` found in `rustc-src`:

    vendor/syn/tests/.gitignore
    vendor/syn-1.0.91/tests/.gitignore
    vendor/syn-1.0.95/tests/.gitignore

To check-in `rustc-src` for hermetic builds in environments with
restrictive `.gitignore` policies, one has to remove these
`tests/.gitignore` and patch the respective
`.cargo-checksum.json`.`syn` >1.0.101 includes dtolnay/syn@3c49303bed7a,
which removes its `tests/.gitignore`. Now the `syn` crates.io package
has no `.gitignore`.

[`rustc-src`'s `vendor`][] is produced from the root `Cargo.toml`,
`src/tools/rust-analyzer/Cargo.toml`,
`compiler/rustc_codegen_cranelift/Cargo.toml`, and
`src/bootstrap/Cargo.toml`. `rustc_codegen_cranelift` does not use
`syn`.

[`rustc-src`'s `vendor`]:
  https://github.com/rust-lang/rust/blob/c0784109daa0/src/bootstrap/dist.rs#L934-L940

This was produced with:

    cargo update --package syn --precise 1.0.102 \

    cargo update --package syn --precise 1.0.102 \
        --manifest-path src/tools/rust-analyzer/Cargo.toml

    cargo update --package syn --precise 1.0.102 \
        --manifest-path src/bootstrap/Cargo.toml

21 months agoRollup merge of #101789 - gimbles:let, r=estebank
Matthias Krüger [Mon, 10 Oct 2022 18:47:32 +0000 (20:47 +0200)]
Rollup merge of #101789 - gimbles:let, r=estebank

`let`'s not needed in struct field definitions

Fixes #101683

21 months agoRollup merge of #101360 - compiler-errors:multiple-closure-bounds, r=petrochenkov
Matthias Krüger [Mon, 10 Oct 2022 18:47:31 +0000 (20:47 +0200)]
Rollup merge of #101360 - compiler-errors:multiple-closure-bounds, r=petrochenkov

Point out incompatible closure bounds

Fixes #100295

21 months agoFix unclosed HTML tag in clippy doc
Guillaume Gomez [Mon, 10 Oct 2022 18:45:04 +0000 (20:45 +0200)]
Fix unclosed HTML tag in clippy doc

21 months agoAuto merge of #102596 - scottmcm:option-bool-calloc, r=Mark-Simulacrum
bors [Mon, 10 Oct 2022 18:42:40 +0000 (18:42 +0000)]
Auto merge of #102596 - scottmcm:option-bool-calloc, r=Mark-Simulacrum

Do the `calloc` optimization for `Option<bool>`

Inspired by <https://old.reddit.com/r/rust/comments/xtiqj8/why_is_this_functional_version_faster_than_my_for/iqqy37b/>.

21 months agorustdoc: remove unneeded `<div>` wrapper from sidebar DOM
Michael Howell [Mon, 10 Oct 2022 18:37:19 +0000 (11:37 -0700)]
rustdoc: remove unneeded `<div>` wrapper from sidebar DOM

When this was added, the sidebar had a bit more complex style. It can be
removed, now.

21 months agoupdate compiler_builtins
Ralf Jung [Mon, 10 Oct 2022 18:13:45 +0000 (20:13 +0200)]
update compiler_builtins

21 months agofix #102878
Takayuki Maeda [Mon, 10 Oct 2022 17:43:36 +0000 (02:43 +0900)]
fix #102878

21 months agoMove lifetime resolution module to rustc_hir_analysis.
Camille GILLOT [Sun, 9 Oct 2022 20:26:39 +0000 (20:26 +0000)]
Move lifetime resolution module to rustc_hir_analysis.

21 months agoFix unclosed HTML tag in rustfmt doc
Guillaume Gomez [Mon, 10 Oct 2022 16:29:17 +0000 (18:29 +0200)]
Fix unclosed HTML tag in rustfmt doc

21 months agoFix compiler docs
Guillaume Gomez [Sun, 9 Oct 2022 14:15:23 +0000 (16:15 +0200)]
Fix compiler docs

21 months agoFix doc lint error
Guillaume Gomez [Sat, 8 Oct 2022 12:42:38 +0000 (14:42 +0200)]
Fix doc lint error

21 months agoStabilize rustdoc CHECK_INVALID_HTML_TAGS check
Guillaume Gomez [Mon, 12 Sep 2022 10:07:43 +0000 (12:07 +0200)]
Stabilize rustdoc CHECK_INVALID_HTML_TAGS check

21 months agoUpdate rustdoc tests
Guillaume Gomez [Tue, 13 Sep 2022 10:01:07 +0000 (12:01 +0200)]
Update rustdoc tests

21 months agoChange default lint level of INVALID_HTML_TAGS to warning
Guillaume Gomez [Mon, 12 Sep 2022 13:02:45 +0000 (15:02 +0200)]
Change default lint level of INVALID_HTML_TAGS to warning

21 months agomake up your mind, rustfmt
Nathan Stocks [Mon, 10 Oct 2022 16:06:44 +0000 (10:06 -0600)]
make up your mind, rustfmt

21 months agoSimplify result color checks
Guillaume Gomez [Mon, 10 Oct 2022 15:59:51 +0000 (17:59 +0200)]
Simplify result color checks

21 months agoUpdate browser-ui-test version to 0.12.2
Guillaume Gomez [Mon, 10 Oct 2022 13:09:38 +0000 (15:09 +0200)]
Update browser-ui-test version to 0.12.2

21 months agoremove out-of-date fixme
Nathan Stocks [Mon, 10 Oct 2022 15:52:53 +0000 (09:52 -0600)]
remove out-of-date fixme

21 months agomacros: simplify field ordering in diag derive
David Wood [Mon, 3 Oct 2022 15:10:34 +0000 (16:10 +0100)]
macros: simplify field ordering in diag derive

Following the approach taken in earlier commits to separate formatting
initialization from use in the subdiagnostic derive, simplify the
diagnostic derive by removing the field-ordering logic that previously
solved this problem.

Signed-off-by: David Wood <david.wood@huawei.com>
21 months agomacros: separate suggestion fmt'ing and emission
David Wood [Mon, 3 Oct 2022 13:28:02 +0000 (14:28 +0100)]
macros: separate suggestion fmt'ing and emission

Diagnostic derives have previously had to take special care when
ordering the generated code so that fields were not used after a move.

This is unlikely for most fields because a field is either annotated
with a subdiagnostic attribute and is thus likely a `Span` and copiable,
or is a argument, in which case it is only used once by `set_arg`
anyway.

However, format strings for code in suggestions can result in fields
being used after being moved if not ordered carefully. As a result, the
derive currently puts `set_arg` calls last (just before emission), such
as:

```rust
let diag = { /* create diagnostic */ };

diag.span_suggestion_with_style(
    span,
    fluent::crate::slug,
    format!("{}", __binding_0),
    Applicability::Unknown,
    SuggestionStyle::ShowAlways
);
/* + other subdiagnostic additions */

diag.set_arg("foo", __binding_0);
/* + other `set_arg` calls */

diag.emit();
```

For eager translation, this doesn't work, as the message being
translated eagerly can assume that all arguments are available - so
arguments _must_ be set first.

Format strings for suggestion code are now separated into two parts - an
initialization line that performs the formatting into a variable, and a
usage in the subdiagnostic addition.

By separating these parts, the initialization can happen before
arguments are set, preserving the desired order so that code compiles,
while still enabling arguments to be set before subdiagnostics are
added.

```rust
let diag = { /* create diagnostic */ };

let __code_0 = format!("{}", __binding_0);
/* + other formatting */

diag.set_arg("foo", __binding_0);
/* + other `set_arg` calls */

diag.span_suggestion_with_style(
    span,
    fluent::crate::slug,
    __code_0,
    Applicability::Unknown,
    SuggestionStyle::ShowAlways
);
/* + other subdiagnostic additions */

diag.emit();
```

Signed-off-by: David Wood <david.wood@huawei.com>
21 months agoquery_system: finish migration
David Wood [Mon, 3 Oct 2022 13:26:29 +0000 (14:26 +0100)]
query_system: finish migration

Using eager translation, migrate the remaining repeated cycle stack
diagnostic.

Signed-off-by: David Wood <david.wood@huawei.com>
21 months agomacros: `#[subdiagnostic(eager)]`
David Wood [Mon, 3 Oct 2022 13:24:17 +0000 (14:24 +0100)]
macros: `#[subdiagnostic(eager)]`

Add support for `eager` argument to the `subdiagnostic` attribute which
generates a call to `eager_subdiagnostic`.

Signed-off-by: David Wood <david.wood@huawei.com>
21 months agoerrors: `DiagnosticMessage::Eager`
David Wood [Mon, 3 Oct 2022 13:14:51 +0000 (14:14 +0100)]
errors: `DiagnosticMessage::Eager`

Add variant of `DiagnosticMessage` for eagerly translated messages
(messages in the target language which don't need translated by the
emitter during emission). Also adds `eager_subdiagnostic` function which
is intended to be invoked by the diagnostic derive for subdiagnostic
fields which are marked as needing eager translation.

Signed-off-by: David Wood <david.wood@huawei.com>
21 months agoerrors: `AddToDiagnostic::add_to_diagnostic_with`
David Wood [Mon, 3 Oct 2022 13:09:05 +0000 (14:09 +0100)]
errors: `AddToDiagnostic::add_to_diagnostic_with`

`AddToDiagnostic::add_to_diagnostic_with` is similar to the previous
`AddToDiagnostic::add_to_diagnostic` but takes a function that can be
used by the caller to modify diagnostic messages originating from the
subdiagnostic (such as performing translation eagerly).

`add_to_diagnostic` now just calls `add_to_diagnostic_with` with an
empty closure.

Signed-off-by: David Wood <david.wood@huawei.com>
21 months agoerrors: use `HashMap` to store diagnostic args
David Wood [Mon, 3 Oct 2022 13:02:49 +0000 (14:02 +0100)]
errors: use `HashMap` to store diagnostic args

Eager translation will enable subdiagnostics to be translated multiple
times with different arguments - this requires the ability to replace
the value of one argument with a new value, which is better suited to a
`HashMap` than the previous storage, a `Vec`.

Signed-off-by: David Wood <david.wood@huawei.com>
21 months agomacros: tidy up lint changes
David Wood [Mon, 3 Oct 2022 14:34:00 +0000 (15:34 +0100)]
macros: tidy up lint changes

Small tweaks to changes made in a previous PR, unrelated to eager
translation.

Signed-off-by: David Wood <david.wood@huawei.com>
21 months agoAuto merge of #96711 - emilio:inline-slice-clone, r=nikic
bors [Mon, 10 Oct 2022 12:09:21 +0000 (12:09 +0000)]
Auto merge of #96711 - emilio:inline-slice-clone, r=nikic

slice: #[inline] a couple iterator methods.

The one I care about and actually saw in the wild not getting inlined is
clone(). We ended up doing a whole function call for something that just
copies two pointers.

I ended up marking as_slice / as_ref as well because make_slice is
inline(always) itself, and is also the kind of think that can kill
performance in hot loops if you expect it to get inlined. But happy to
undo those.

21 months ago`let` is not allowed in struct field definitions
gimbles [Mon, 10 Oct 2022 11:23:13 +0000 (16:53 +0530)]
`let` is not allowed in struct field definitions

Co-authored-by: jyn514 <jyn514@gmail.com>
Co-authored-by: Esteban Kuber <estebank@users.noreply.github.com>
21 months agoAuto merge of #102875 - Dylan-DPC:rollup-zwcq8h9, r=Dylan-DPC
bors [Mon, 10 Oct 2022 09:12:06 +0000 (09:12 +0000)]
Auto merge of #102875 - Dylan-DPC:rollup-zwcq8h9, r=Dylan-DPC

Rollup of 6 pull requests

Successful merges:

 - #99696 (Uplift `clippy::for_loops_over_fallibles` lint into rustc)
 - #102055 (Move some tests to more reasonable directories)
 - #102786 (Remove tuple candidate, nothing special about it)
 - #102794 (Make tests capture the error printed by a Result return)
 - #102853 (Skip chained OpaqueCast when building captures.)
 - #102868 (Rename `AssocItemKind::TyAlias` to `AssocItemKind::Type`)

Failed merges:

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

21 months agoRollup merge of #102868 - compiler-errors:rename-assoc-tyalias-to-ty, r=TaKO8Ki
Dylan DPC [Mon, 10 Oct 2022 08:13:43 +0000 (13:43 +0530)]
Rollup merge of #102868 - compiler-errors:rename-assoc-tyalias-to-ty, r=TaKO8Ki

Rename `AssocItemKind::TyAlias` to `AssocItemKind::Type`

Thanks `@camsteffen` for catching this in ast too, cc https://github.com/rust-lang/rust/pull/102829#issuecomment-1272649247

21 months agoRollup merge of #102853 - cjgillot:skip-opaque-cast, r=jackh726
Dylan DPC [Mon, 10 Oct 2022 08:13:42 +0000 (13:43 +0530)]
Rollup merge of #102853 - cjgillot:skip-opaque-cast, r=jackh726

Skip chained OpaqueCast when building captures.

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

21 months agoRollup merge of #102794 - dtolnay:termination, r=thomcc
Dylan DPC [Mon, 10 Oct 2022 08:13:41 +0000 (13:43 +0530)]
Rollup merge of #102794 - dtolnay:termination, r=thomcc

Make tests capture the error printed by a Result return

An error returned by tests previously would get written directly to stderr, instead of to the capture buffer set up by the test harness. This PR makes it write to the capture buffer so that it can be integrated as part of the test output by build tools such as `buck test`, since being able to read the error message returned by a test is pretty critical to debugging why the test failed.

<br>

**Before:**

```rust
// tests/test.rs

#[test]
fn test() -> Result<(), &'static str> {
    println!("STDOUT");
    eprintln!("STDERR");
    Err("RESULT")
}
```

```console
$ cargo build --test test
$ target/debug/deps/test-???????????????? -Z unstable-options --format=json
{ "type": "suite", "event": "started", "test_count": 1 }
{ "type": "test", "event": "started", "name": "test" }
Error: "RESULT"
{ "type": "test", "name": "test", "event": "failed", "stdout": "STDOUT\nSTDERR\n" }
{ "type": "suite", "event": "failed", "passed": 0, "failed": 1, "ignored": 0, "measured": 0, "filtered_out": 0, "exec_time": 0.00040313 }
```

**After:**

```console
$ target/debug/deps/test-???????????????? -Z unstable-options --format=json
{ "type": "suite", "event": "started", "test_count": 1 }
{ "type": "test", "event": "started", "name": "test" }
{ "type": "test", "name": "test", "event": "failed", "stdout": "STDOUT\nSTDERR\nError: \"RESULT\"" }
{ "type": "suite", "event": "failed", "passed": 0, "failed": 1, "ignored": 0, "measured": 0, "filtered_out": 0, "exec_time": 0.000261894 }
```

21 months agoRollup merge of #102786 - compiler-errors:no-tuple-candidate, r=lcnr
Dylan DPC [Mon, 10 Oct 2022 08:13:41 +0000 (13:43 +0530)]
Rollup merge of #102786 - compiler-errors:no-tuple-candidate, r=lcnr

Remove tuple candidate, nothing special about it

r? `@lcnr` you mentioned this during the talk you gave i think

21 months agoRollup merge of #102055 - c410-f3r:moar-errors, r=petrochenkov
Dylan DPC [Mon, 10 Oct 2022 08:13:40 +0000 (13:43 +0530)]
Rollup merge of #102055 - c410-f3r:moar-errors, r=petrochenkov

Move some tests to more reasonable directories

r? ``@petrochenkov``

21 months agoRollup merge of #99696 - WaffleLapkin:uplift, r=fee1-dead
Dylan DPC [Mon, 10 Oct 2022 08:13:40 +0000 (13:43 +0530)]
Rollup merge of #99696 - WaffleLapkin:uplift, r=fee1-dead

Uplift `clippy::for_loops_over_fallibles` lint into rustc

This PR, as the title suggests, uplifts [`clippy::for_loops_over_fallibles`] lint into rustc. This lint warns for code like this:
```rust
for _ in Some(1) {}
for _ in Ok::<_, ()>(1) {}
```
i.e. directly iterating over `Option` and `Result` using `for` loop.

There are a number of suggestions that this PR adds (on top of what clippy suggested):
1. If the argument (? is there a better name for that expression) of a `for` loop is a `.next()` call, then we can suggest removing it (or rather replacing with `.by_ref()` to allow iterator being used later)
   ```rust
    for _ in iter.next() {}
    // turns into
    for _ in iter.by_ref() {}
    ```
2. (otherwise) We can suggest using `while let`, this is useful for non-iterator, iterator-like things like [async] channels
   ```rust
   for _ in rx.recv() {}
   // turns into
   while let Some(_) = rx.recv() {}
   ```
3. If the argument type is `Result<impl IntoIterator, _>` and the body has a `Result<_, _>` type, we can suggest using `?`
   ```rust
   for _ in f() {}
   // turns into
   for _ in f()? {}
   ```
4. To preserve the original behavior and clear intent, we can suggest using `if let`
   ```rust
   for _ in f() {}
   // turns into
   if let Some(_) = f() {}
   ```
(P.S. `Some` and `Ok` are interchangeable depending on the type)

I still feel that the lint wording/look is somewhat off, so I'll be happy to hear suggestions (on how to improve suggestions :D)!

Resolves #99272

[`clippy::for_loops_over_fallibles`]: https://rust-lang.github.io/rust-clippy/master/index.html#for_loops_over_fallibles

21 months agorustdoc: clean up overly complex `.trait-impl` CSS selectors
Michael Howell [Mon, 10 Oct 2022 06:19:50 +0000 (23:19 -0700)]
rustdoc: clean up overly complex `.trait-impl` CSS selectors

When added in 45964368f4a2e31c94e9bcf1cef933c087d21544, these multi-class
selectors were present in the initial commit, but no reason was given why
the shorter selector wouldn't work.

21 months agoAuto merge of #94381 - Kobzol:llvm-bolt, r=Mark-Simulacrum
bors [Mon, 10 Oct 2022 06:18:58 +0000 (06:18 +0000)]
Auto merge of #94381 - Kobzol:llvm-bolt, r=Mark-Simulacrum

Use BOLT in CI to optimize LLVM

This PR adds an optimization step in the Linux `dist` CI pipeline that uses [BOLT](https://github.com/llvm/llvm-project/tree/main/bolt) to optimize the `libLLVM.so` library built by boostrap.

Steps:
- [x] Use LLVM 15 as a bootstrap compiler and use it to build BOLT
- [x] Compile LLVM with support for relocations (`-DCMAKE_SHARED_LINKER_FLAGS="-Wl,-q"`)
- [x] Gather profile data using instrumented LLVM
- [x] Apply profile to LLVM that has already been PGOfied
- [x] Run with BOLT profiling on more benchmarks
- [x] Decide on the order of optimization (PGO -> BOLT?)
- [x] Decide how we should get `bolt` (currently we use the host `bolt`)
- [x] Clean up

The latest perf results can be found [here](https://github.com/rust-lang/rust/pull/94381#issuecomment-1258269440). The current CI build time with BOLT applied is around 1h 55 minutes.

21 months agoPoint out incompatible closure bounds
Michael Goulet [Sat, 3 Sep 2022 04:57:21 +0000 (04:57 +0000)]
Point out incompatible closure bounds

21 months agoAdd basename and dirname aliases
Ariel Davis [Mon, 10 Oct 2022 04:44:44 +0000 (21:44 -0700)]
Add basename and dirname aliases

21 months agoAuto merge of #102867 - JohnTitor:rollup-qnwsajt, r=JohnTitor
bors [Mon, 10 Oct 2022 03:20:03 +0000 (03:20 +0000)]
Auto merge of #102867 - JohnTitor:rollup-qnwsajt, r=JohnTitor

Rollup of 6 pull requests

Successful merges:

 - #102275 (Stabilize `half_open_range_patterns`)
 - #102323 (Trying to suggest additional lifetime parameter)
 - #102345 (Recover from impl Trait in type param bound)
 - #102845 (Elaborate trait ref to compute object safety.)
 - #102860 (Add missing documentation for FileNameDisplayPreference variants)
 - #102862 (From<Alignment> for usize & NonZeroUsize)

Failed merges:

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

21 months agosuggest candidates for unresolved import
SparrowLii [Mon, 10 Oct 2022 03:14:32 +0000 (11:14 +0800)]
suggest candidates for unresolved import

21 months agoRename AssocItemKind::TyAlias to AssocItemKind::Type
Michael Goulet [Mon, 10 Oct 2022 02:05:24 +0000 (02:05 +0000)]
Rename AssocItemKind::TyAlias to AssocItemKind::Type

21 months agoRollup merge of #102862 - scottmcm:more-alignment-traits, r=thomcc
Yuki Okushi [Mon, 10 Oct 2022 01:23:06 +0000 (10:23 +0900)]
Rollup merge of #102862 - scottmcm:more-alignment-traits, r=thomcc

From<Alignment> for usize & NonZeroUsize

Since you mentioned these two in https://github.com/rust-lang/rust/pull/102072#issuecomment-1272390033,
r? ``@thomcc``

Tracking Issue: https://github.com/rust-lang/rust/issues/102070

21 months agoRollup merge of #102860 - GuillaumeGomez:missing-docs-FileNameDisplayPreference,...
Yuki Okushi [Mon, 10 Oct 2022 01:23:05 +0000 (10:23 +0900)]
Rollup merge of #102860 - GuillaumeGomez:missing-docs-FileNameDisplayPreference, r=nagisa

Add missing documentation for FileNameDisplayPreference variants

Took me a while to find the information when I needed it so hopefully it should save some time for the next ones.

r? ``@thomcc``

21 months agoRollup merge of #102845 - cjgillot:gat-object, r=fee1-dead
Yuki Okushi [Mon, 10 Oct 2022 01:23:05 +0000 (10:23 +0900)]
Rollup merge of #102845 - cjgillot:gat-object, r=fee1-dead

Elaborate trait ref to compute object safety.

instead of building them manually from supertraits and associated items.

This allows to have the correct substs for GATs.

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

21 months agoRollup merge of #102345 - chenyukang:fix-102182-impl-trait, r=estebank
Yuki Okushi [Mon, 10 Oct 2022 01:23:04 +0000 (10:23 +0900)]
Rollup merge of #102345 - chenyukang:fix-102182-impl-trait, r=estebank

Recover from impl Trait in type param bound

Fixes #102182
r? ``@estebank``

21 months agoRollup merge of #102323 - Stoozy:master, r=cjgillot
Yuki Okushi [Mon, 10 Oct 2022 01:23:04 +0000 (10:23 +0900)]
Rollup merge of #102323 - Stoozy:master, r=cjgillot

Trying to suggest additional lifetime parameter

``@cjgillot`` This is what I have so far for #100615

21 months agoRollup merge of #102275 - Urgau:stabilize-half_open_range_patterns, r=cjgillot
Yuki Okushi [Mon, 10 Oct 2022 01:23:03 +0000 (10:23 +0900)]
Rollup merge of #102275 - Urgau:stabilize-half_open_range_patterns, r=cjgillot

Stabilize `half_open_range_patterns`

This PR stabilize `feature(half_open_range_patterns)`:
```
Allows using `..=X` as a pattern.
```

And adds a new `feature(half_open_range_patterns_in_slices)` for the slice part, https://github.com/rust-lang/rust/pull/102275#issuecomment-1267422806.

The FCP was completed in https://github.com/rust-lang/rust/issues/67264.