]> git.lizzy.rs Git - rust.git/log
rust.git
2 years agoAuto merge of #89048 - oli-obk:in_tracing_we_trust, r=jackh726
bors [Tue, 28 Sep 2021 14:55:37 +0000 (14:55 +0000)]
Auto merge of #89048 - oli-obk:in_tracing_we_trust, r=jackh726

Add more tracing instrumentation

I changed or added all this while working on a branch and pulled it out so we can merge it on its own.

2 years agoMore tracing instrumentation
Oli Scherer [Fri, 20 Aug 2021 13:36:04 +0000 (13:36 +0000)]
More tracing instrumentation

2 years agoAuto merge of #86191 - kawadakk:release-add-solid-support, r=nagisa,estebank,m-ou-se,
bors [Tue, 28 Sep 2021 11:50:33 +0000 (11:50 +0000)]
Auto merge of #86191 - kawadakk:release-add-solid-support, r=nagisa,estebank,m-ou-se,

Add SOLID targets

This PR introduces new tier 3 targets for [SOLID](https://www.kmckk.co.jp/eng/SOLID/) embedded development platform by Kyoto Microcomputer Co., Ltd.

|          Target name           | `target_arch` | `target_vendor` | `target_os`  |
|--------------------------------|---------------|-----------------|--------------|
| `aarch64-kmc-solid_asp3`       | `aarch64`     | `kmc`           | `solid_asp3` |
| `armv7a-kmc-solid_asp3-eabi`   | `arm`         | `kmc`           | `solid_asp3` |
| `armv7a-kmc-solid_asp3-eabihf` | `arm`         | `kmc`           | `solid_asp3` |

## Related PRs

- [ ] `libc`: https://github.com/rust-lang/libc/pull/2227
- [ ] `cc`: https://github.com/alexcrichton/cc-rs/pull/609

## Non-blocking Issues

- [ ] The target kernel can support `Thread::unpark` directly, but this property is not utilized because the underlying kernel feature is used to implement `Condvar` and it's unclear whether `std` should guarantee that parking tokens are not clobbered by other synchronization primitives.
- [ ] The rustc book: The page title "\*-kmc-solid-\*" shows up as "-kmc-solid-" in TOC

## Tier 3 Target Policy

As tier 3 targets, the new targets are required to adhere to [the tier 3 target policy](https://doc.rust-lang.org/nightly/rustc/target-tier-policy.html#tier-3-target-policy) requirements. This section quotes each requirement in entirety and describes how they are met.

> - A tier 3 target must have a designated developer or developers (the "target maintainers") on record to be CCed when issues arise regarding the target. (The mechanism to track and CC such developers may evolve over time.)

See [`src/doc/rustc/src/platform-support/kmc-solid.md`](https://github.com/kawadakk/rust/blob/release-add-solid-support/src/doc/rustc/src/platform-support/kmc-solid.md).

> - Targets must use naming consistent with any existing targets; for instance, a target for the same CPU or OS as an existing Rust target should use the same name for that CPU or OS. Targets should normally use the same names and naming conventions as used elsewhere in the broader ecosystem beyond Rust (such as in other toolchains), unless they have a very good reason to diverge. Changing the name of a target can be highly disruptive, especially once the target reaches a higher tier, so getting the name right is important even for a tier 3 target.
>     - Target names should not introduce undue confusion or ambiguity unless absolutely necessary to maintain ecosystem compatibility. For example, if the name of the target makes people extremely likely to form incorrect beliefs about what it targets, the name should be changed or augmented to disambiguate it.

The new target names follow this format: `$ARCH-$VENDOR-$OS-$ABI`, which is already adopted by most existing targets. `$ARCH` and `$ABI` follow the convention: `aarch64-*` for AArch64, `armv7a-*-eabi` for Armv7-A with EABI. `$OS` is used to distinguish multiple variations of the platform in a somewhat similar way to the Apple targets, though we are only adding one variation in this PR. `$VENDOR` denotes the platform vendor name similarly to the Apple, Solaris, SGX, and VxWorks targets.

`$OS` corresponds to the value of `target_os` and takes the format `solid-$KERNEL`. The inclusion of a hyphen prevents unique decomposition of target names, though the mapping between target names and target attributes isn't trivial in the first place, e.g., because of the Android targets.

More targets may be added later, as we support other base kernels (there are at least three at the point of writing) and are interested in supporting other processor architectures in the future.

> - Tier 3 targets may have unusual requirements to build or use, but must not create legal issues or impose onerous legal terms for the Rust project or for Rust developers or users.
>     - The target must not introduce license incompatibilities.
>     - Anything added to the Rust repository must be under the standard Rust license (`MIT OR Apache-2.0`).
>     - The target must not cause the Rust tools or libraries built for any other host (even when supporting cross-compilation to the target) to depend on any new dependency less permissive than the Rust licensing policy. This applies whether the dependency is a Rust crate that would require adding new license exceptions (as specified by the `tidy` tool in the rust-lang/rust repository), or whether the dependency is a native library or binary. In other words, the introduction of the target must not cause a user installing or running a version of Rust or the Rust tools to be subject to any new license requirements.
>     - If the target supports building host tools (such as `rustc` or `cargo`), those host tools must not depend on proprietary (non-FOSS) libraries, other than ordinary runtime libraries supplied by the platform and commonly used by other binaries built for the target. For instance, `rustc` built for the target may depend on a common proprietary C runtime library or console output library, but must not depend on a proprietary code generation library or code optimization library. Rust's license permits such combinations, but the Rust project has no interest in maintaining such combinations within the scope of Rust itself, even at tier 3.
>     - Targets should not require proprietary (non-FOSS) components to link a functional binary or library.
>     - "onerous" here is an intentionally subjective term. At a minimum, "onerous" legal/licensing terms include but are *not* limited to: non-disclosure requirements, non-compete requirements, contributor license agreements (CLAs) or equivalent, "non-commercial"/"research-only"/etc terms, requirements conditional on the employer or employment of any particular Rust developers, revocable terms, any requirements that create liability for the Rust project or its developers or users, or any requirements that adversely affect the livelihood or prospects of the Rust project or its developers or users.

We intend to make the contribution fully available under the standard Rust license with no additional legal restrictions whatsoever. This PR does not introduce any new dependency less permissive than the Rust license policy, and we are willing to ensure this doesn't happen for future contributions regarding the new targets.

The new targets don't support building host tools.

Although the new targets use a platform-provided C compiler toolchain, it can be substituted by [GNU Arm Embedded Toolchain](https://developer.arm.com/tools-and-software/open-source-software/developer-tools/gnu-toolchain/gnu-rm) for testing purposes.

> - Tier 3 targets should attempt to implement as much of the standard libraries as possible and appropriate (`core` for most targets, `alloc` for targets that can support dynamic memory allocation, `std` for targets with an operating system or equivalent layer of system-provided functionality), but may leave some code unimplemented (either unavailable or stubbed out as appropriate), whether because the target makes it impossible to implement or challenging to implement. The authors of pull requests are not obligated to avoid calling any portions of the standard library on the basis of a tier 3 target not implementing those portions.

Most features are implemented. The following features are not implemented due to the lack of native support:

- `fs::File::{file_attr, truncate, duplicate, set_permissions}`
- `fs::{symlink, link, canonicalize}`
- Process creation
- Command-line arguments

~~Networking is not implemented yet, and we intend to add it as soon as it's ready.~~
Edit (2021-07-07): Networking is now implemented.

Backtrace generation is not really a good fit for embedded targets, so it's intentionally left unimplemented. Unwinding is functional, however.

> - The target must provide documentation for the Rust community explaining how to build for the target, using cross-compilation if possible. If the target supports running tests (even if they do not pass), the documentation must explain how to run tests for the target, using emulation if possible or dedicated hardware if necessary.

See [`src/doc/rustc/src/platform-support/kmc-solid.md`](https://github.com/kawadakk/rust/blob/release-add-solid-support/src/doc/rustc/src/platform-support/kmc-solid.md). Running tests is not supported.

> - Neither this policy nor any decisions made regarding targets shall create any binding agreement or estoppel by any party. If any member of an approving Rust team serves as one of the maintainers of a target, or has any legal or employment requirement (explicit or implicit) that might affect their decisions regarding a target, they must recuse themselves from any approval decisions regarding the target's tier status, though they may otherwise participate in discussions.
>     - This requirement does not prevent part or all of this policy from being cited in an explicit contract or work agreement (e.g. to implement or maintain support for a target). This requirement exists to ensure that a developer or team responsible for reviewing and approving a target does not face any legal threats or obligations that would prevent them from freely exercising their judgment in such approval, even if such judgment involves subjective matters or goes beyond the letter of these requirements.
> - Tier 3 targets must not impose burden on the authors of pull requests, or other developers in the community, to maintain the target. In particular, do not post comments (automated or manual) on a PR that derail or suggest a block on the PR based on a tier 3 target. Do not send automated messages or notifications (via any medium, including via ``@`)` to a PR author or others involved with a PR regarding a tier 3 target, unless they have opted into such messages.
>     - Backlinks such as those generated by the issue/PR tracker when linking to an issue or PR are not considered a violation of this policy, within reason. However, such messages (even on a separate repository) must not generate notifications to anyone involved with a PR who has not requested such notifications.
> - Patches adding or updating tier 3 targets must not break any existing tier 2 or tier 1 target, and must not knowingly break another tier 3 target without approval of either the compiler team or the maintainers of the other tier 3 target.
>     - In particular, this may come up when working on closely related targets, such as variations of the same architecture with different features. Avoid introducing unconditional uses of features that another variation of the target may not have; use conditional compilation or runtime detection, as appropriate, to let each target run code supported by that target.

We acknowledge these requirements and intend to ensure they are met.

There are no closely related targets at the moment.

2 years agoAuto merge of #89293 - TaKO8Ki:fix-confusing-error-for-path-separator-to-refer-to...
bors [Tue, 28 Sep 2021 08:58:41 +0000 (08:58 +0000)]
Auto merge of #89293 - TaKO8Ki:fix-confusing-error-for-path-separator-to-refer-to-an-struct-item, r=estebank

Suggest using the path separator for tuple struct

Fix confusing error message `constructor is not visible here due to private fields` for tuple struct

closes #83450

2 years agoAuto merge of #89277 - jyn514:codeblock-edition, r=GuillaumeGomez
bors [Tue, 28 Sep 2021 05:50:00 +0000 (05:50 +0000)]
Auto merge of #89277 - jyn514:codeblock-edition, r=GuillaumeGomez

Use the correct edition for syntax highlighting doctests

Previously it would unconditionally use edition 2015, which was incorrect.

Helps with https://github.com/rust-lang/rust/issues/89135 in that you can now override the doctest to be 2018 edition instead of being forced to fix the error. This doesn't resolve any of the deeper problems that rustdoc disagrees with most rust users on what a code block is.

cc `@Mark-Simulacrum`

2 years agoAdd SOLID targets
Tomoaki Kawada [Tue, 28 Sep 2021 02:20:46 +0000 (11:20 +0900)]
Add SOLID targets

SOLID[1] is an embedded development platform provided by Kyoto
Microcomputer Co., Ltd. This commit introduces a basic Tier 3 support
for SOLID.

# New Targets

The following targets are added:

 - `aarch64-kmc-solid_asp3`
 - `armv7a-kmc-solid_asp3-eabi`
 - `armv7a-kmc-solid_asp3-eabihf`

SOLID's target software system can be divided into two parts: an
RTOS kernel, which is responsible for threading and synchronization,
and Core Services, which provides filesystems, networking, and other
things. The RTOS kernel is a μITRON4.0[2][3]-derived kernel based on
the open-source TOPPERS RTOS kernels[4]. For uniprocessor systems
(more precisely, systems where only one processor core is allocated for
SOLID), this will be the TOPPERS/ASP3 kernel. As μITRON is
traditionally only specified at the source-code level, the ABI is
unique to each implementation, which is why `asp3` is included in the
target names.

More targets could be added later, as we support other base kernels
(there are at least three at the point of writing) and are interested
in supporting other processor architectures in the future.

# C Compiler

Although SOLID provides its own supported C/C++ build toolchain, GNU Arm
Embedded Toolchain seems to work for the purpose of building Rust.

# Unresolved Questions

A μITRON4 kernel can support `Thread::unpark` natively, but it's not
used by this commit's implementation because the underlying kernel
feature is also used to implement `Condvar`, and it's unclear whether
`std` should guarantee that parking tokens are not clobbered by other
synchronization primitives.

# Unsupported or Unimplemented Features

Most features are implemented. The following features are not
implemented due to the lack of native support:

- `fs::File::{file_attr, truncate, duplicate, set_permissions}`
- `fs::{symlink, link, canonicalize}`
- Process creation
- Command-line arguments

Backtrace generation is not really a good fit for embedded targets, so
it's intentionally left unimplemented. Unwinding is functional, however.

## Dynamic Linking

Dynamic linking is not supported. The target platform supports dynamic
linking, but enabling this in Rust causes several problems.

 - The linker invocation used to build the shared object of `std` is
   too long for the platform-provided linker to handle.

 - A linker script with specific requirements is required for the
   compiled shared object to be actually loadable.

As such, we decided to disable dynamic linking for now. Regardless, the
users can try to create shared objects by manually invoking the linker.

## Executable

Building an executable is not supported as the notion of "executable
files" isn't well-defined for these targets.

[1] https://solid.kmckk.com/SOLID/
[2] http://ertl.jp/ITRON/SPEC/mitron4-e.html
[3] https://en.wikipedia.org/wiki/ITRON_project
[4] https://toppers.jp/

2 years agoAuto merge of #89249 - Aaron1011:higher-ranked-cause, r=estebank
bors [Mon, 27 Sep 2021 21:29:19 +0000 (21:29 +0000)]
Auto merge of #89249 - Aaron1011:higher-ranked-cause, r=estebank

Improve cause information for NLL higher-ranked errors

This PR has several interconnected pieces:

1. In some of the NLL region error code, we now pass
   around an `ObligationCause`, instead of just a plain `Span`.
   This gets forwarded into `fulfill_cx.register_predicate_obligation`
   during error reporting.
2. The general InferCtxt error reporting code is extended to
   handle `ObligationCauseCode::BindingObligation`
3. A new enum variant `ConstraintCategory::Predicate` is added.
   We try to avoid using this as the 'best blame constraint' - instead,
   we use it to enhance the `ObligationCause` of the `BlameConstraint`
   that we do end up choosing.

As a result, several NLL error messages now contain the same
"the lifetime requirement is introduced here" message as non-NLL
errors.

Having an `ObligationCause` available will likely prove useful
for future improvements to NLL error messages.

2 years agoAuto merge of #89214 - smoelius:register_tool, r=petrochenkov
bors [Mon, 27 Sep 2021 18:21:14 +0000 (18:21 +0000)]
Auto merge of #89214 - smoelius:register_tool, r=petrochenkov

Pass real crate-level attributes to `pre_expansion_lint`

The PR concerns the unstable feature `register_tool` (#66079).

The feature's implementation requires the attributes of the crate being compiled, so that when attributes like `allow(foo::bar)` are encountered, it can be verified that `register_tool(foo)` appears in the crate root.

However, the crate's attributes are not readily available during early lint passes. Specifically, on this line, `krate.attrs` appears to be the attributes of the current source file, not the attributes of the whole crate: https://github.com/rust-lang/rust/blob/bf642323d621dcefeef1d8ab4711aae36e357615/compiler/rustc_lint/src/context.rs#L815

Consequently, "unknown tool" errors were being produced when `allow(foo::bar)` appeared in a submodule, even though `register_tool(foo)` appeared in the crate root.

EDITED: The proposed fix is to obtain the real crate-level attributes in `configure_and_expand` and pass them to `pre_expansion_lint`. (See `@petrochenkov's` [comment](https://github.com/rust-lang/rust/pull/89214#issuecomment-926927072) below.)

The original "prosed fix" text follows.

---

The proposed fix is to add an `error_on_unknown_tool` flag to `LintLevelsBuilder`. The flag controls whether "unknown tool" errors are emitted. The flag is set during late passes, but not earlier.

More specifically, this PR contains two commits:

* The first adds a `known-tool-in-submodule` UI test that does not currently pass.
* The second adds the `error_on_unknown_tool` flag. The new test passes with the addition of this flag.

This change has the added benefit of eliminating some errors that were duplicated in existing tests.

To the reviewer: please check that I implemented the UI test correctly.

2 years agoRemove `DefId` from `ConstraintCategory::Predicate`
Aaron Hill [Mon, 27 Sep 2021 15:45:34 +0000 (10:45 -0500)]
Remove `DefId` from `ConstraintCategory::Predicate`

This shirnks the size of `ConstraintCategory`, hopefully
fixing a performance regression.

2 years agoImprove cause information for NLL higher-ranked errors
Aaron Hill [Sat, 28 Aug 2021 23:45:37 +0000 (18:45 -0500)]
Improve cause information for NLL higher-ranked errors

This PR has several interconnected pieces:

1. In some of the NLL region error code, we now pass
   around an `ObligationCause`, instead of just a plain `Span`.
   This gets forwarded into `fulfill_cx.register_predicate_obligation`
   during error reporting.
2. The general InferCtxt error reporting code is extended to
   handle `ObligationCauseCode::BindingObligation`
3. A new enum variant `ConstraintCategory::Predicate` is added.
   We try to avoid using this as the 'best blame constraint' - instead,
   we use it to enhance the `ObligationCause` of the `BlameConstraint`
   that we do end up choosing.

As a result, several NLL error messages now contain the same
"the lifetime requirement is introduced here" message as non-NLL
errors.

Having an `ObligationCause` available will likely prove useful
for future improvements to NLL error messages.

2 years agoAuto merge of #89285 - jackh726:issue-88862, r=nikomatsakis
bors [Mon, 27 Sep 2021 14:08:13 +0000 (14:08 +0000)]
Auto merge of #89285 - jackh726:issue-88862, r=nikomatsakis

Don't normalize opaque types with escaping late-bound regions

Fixes #88862

Turns out, this has some really bad perf implications in large types (issue #88862). While we technically can handle them fine, it doesn't change test output either way. For now, revert with an added benchmark. Future attempts to change this back will have to consider perf.

Needs a perf run once https://github.com/rust-lang/rustc-perf/pull/1033 is merged

r? `@nikomatsakis`

2 years agoAuto merge of #89263 - TaKO8Ki:suggest-both-immutable-and-mutable-trait-implementatio...
bors [Mon, 27 Sep 2021 11:10:40 +0000 (11:10 +0000)]
Auto merge of #89263 - TaKO8Ki:suggest-both-immutable-and-mutable-trait-implementations, r=estebank

Suggest both of immutable and mutable trait implementations

closes #85865

2 years agoAuto merge of #89203 - GuillaumeGomez:cleanup-rustdoc-types, r=camelid
bors [Mon, 27 Sep 2021 07:54:16 +0000 (07:54 +0000)]
Auto merge of #89203 - GuillaumeGomez:cleanup-rustdoc-types, r=camelid

Clean up clean/types.rs file by making the implementations follow the type declaration

This PR doesn't change anything, it simply moves things around: when reading the code, I realized a few times that a type declaration and implementations on it might be separated by some other type declarations, which makes the reading much more complicated. I put back impl and declaration together.

r? `@camelid`

2 years agosuggest path for tuple struct
Takayuki Maeda [Mon, 27 Sep 2021 07:28:38 +0000 (16:28 +0900)]
suggest path for tuple struct

2 years agoAuto merge of #89182 - GuillaumeGomez:boostrap-explicit-request, r=Mark-Simulacrum
bors [Mon, 27 Sep 2021 05:00:59 +0000 (05:00 +0000)]
Auto merge of #89182 - GuillaumeGomez:boostrap-explicit-request, r=Mark-Simulacrum

Simplify explicit request check and allow to run "doc src/librustdoc" even without config set

Originally I wanted to allow the command `doc src/librustdoc` to work when passed explicitly but then `@Mark-Simulacrum` recommended me to generalize it, so here we are!

r? `@Mark-Simulacrum`

2 years agoAuto merge of #89145 - rusticstuff:bump_stdarch, r=kennytm
bors [Mon, 27 Sep 2021 02:11:52 +0000 (02:11 +0000)]
Auto merge of #89145 - rusticstuff:bump_stdarch, r=kennytm

Update stdarch submodule

This is mainly to fix the critical issue of aarch64 store intrinsics overwriting additional memory, see https://github.com/rust-lang/stdarch/issues/1220

Changes:
* aarch64/armv7: additional vld1/vst1 intrinsics + perf fixes for existing ones
  * https://github.com/rust-lang/stdarch/pull/1205
  * https://github.com/rust-lang/stdarch/pull/1207
  * https://github.com/rust-lang/stdarch/pull/1216
* armv7: Make FMA work with vfpv4 and optimize
  * https://github.com/rust-lang/stdarch/pull/1219
* Non-visible changes to the testing framework
  * https://github.com/rust-lang/stdarch/pull/1208
  * https://github.com/rust-lang/stdarch/pull/1211
  * https://github.com/rust-lang/stdarch/pull/1213
  * https://github.com/rust-lang/stdarch/pull/1215
  * https://github.com/rust-lang/stdarch/pull/1218

2 years agoAuto merge of #89092 - bjorn3:sync_cg_clif-2021-09-19, r=bjorn3
bors [Sun, 26 Sep 2021 23:31:01 +0000 (23:31 +0000)]
Auto merge of #89092 - bjorn3:sync_cg_clif-2021-09-19, r=bjorn3

Sync rustc_codegen_cranelift

Nothing exciting this time. Mostly internal refactorings.

r? `@ghost`

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

2 years agoPass real crate-level attributes to `pre_expansion_lint`
Samuel Moelius [Sun, 26 Sep 2021 20:50:26 +0000 (20:50 +0000)]
Pass real crate-level attributes to `pre_expansion_lint`

2 years agoDon't normalize opaque types with escaping late-bound regions.
jackh726 [Sun, 26 Sep 2021 19:58:24 +0000 (15:58 -0400)]
Don't normalize opaque types with escaping late-bound regions.

Turns out, this has some really bad perf implications in large types (issue #88862). While we technically can handle them fine, it doesn't change test output either way. For now, revert with an added benchmark. Future attempts to change this back will have to consider perf.

2 years agoAuto merge of #89144 - sexxi-goose:insig_stdlib, r=nikomatsakis
bors [Sun, 26 Sep 2021 19:36:00 +0000 (19:36 +0000)]
Auto merge of #89144 - sexxi-goose:insig_stdlib, r=nikomatsakis

2229: Mark insignificant dtor in stdlib

I looked at all public [stdlib Drop implementations](https://doc.rust-lang.org/stable/std/ops/trait.Drop.html#implementors) and categorized them into Insigificant/Maybe/Significant Drop.

Reasons are noted here: https://docs.google.com/spreadsheets/d/19edb9r5lo2UqMrCOVjV0fwcSdS-R7qvKNL76q7tO8VA/edit#gid=1838773501

One thing missing from this PR is tagging HashMap as insigificant destructor as that needs some discussion.

r? `@Mark-Simulacrum`

cc `@nikomatsakis`

2 years agoUse the correct edition when syntax highlighting doctests
Joshua Nelson [Sun, 26 Sep 2021 16:29:41 +0000 (16:29 +0000)]
Use the correct edition when syntax highlighting doctests

Previously it would unconditionally use edition 2015, which was
incorrect.

2 years agoPreserve the whole LangSyntax when parsing doctests
Joshua Nelson [Sun, 26 Sep 2021 16:28:36 +0000 (16:28 +0000)]
Preserve the whole LangSyntax when parsing doctests

Previously, only the raw string and the `is_ignore` field were
preserved, which made it hard to recover anything else.

2 years agotest suggesting immutable or mutable trait implementations
Takayuki Maeda [Sun, 26 Sep 2021 15:59:57 +0000 (00:59 +0900)]
test suggesting immutable or mutable trait implementations

2 years agofix test error
Takayuki Maeda [Sun, 26 Sep 2021 15:50:46 +0000 (00:50 +0900)]
fix test error

2 years agoAuto merge of #88316 - est31:remove_box_tests, r=Mark-Simulacrum
bors [Sun, 26 Sep 2021 15:48:10 +0000 (15:48 +0000)]
Auto merge of #88316 - est31:remove_box_tests, r=Mark-Simulacrum

Remove most box syntax uses from the testsuite except for src/test/ui/issues

Removes most box syntax uses from the testsuite outside of the src/test/ui/issues directory. The goal was to only change tests where box syntax is an implementation detail instead of the actual feature being tested. So some tests were left out, like the regression test for #87935, or tests where the obtained error message changed significantly.

Mostly this replaces box syntax with `Box::new`, but there are some minor drive by improvements, like formatting improvements or `assert_eq` instead of `assert!( == )`.

Prior PR that removed box syntax from the compiler and tools: #87781

2 years agobetter suggestions
Takayuki Maeda [Sun, 26 Sep 2021 15:30:39 +0000 (00:30 +0900)]
better suggestions

2 years agoAuto merge of #89101 - ehuss:compiletest-incremental-build, r=Mark-Simulacrum
bors [Sun, 26 Sep 2021 08:09:12 +0000 (08:09 +0000)]
Auto merge of #89101 - ehuss:compiletest-incremental-build, r=Mark-Simulacrum

Support incremental in compiletest for non-incremental modes.

This adds first-class support for using incremental builds in non-incremental-mode tests.  These tests previously manually passed `-C incremental=tmp/foo` which resulted in reusing the same tmp folder between runs.  This means that these tests could fail whenever the on-disk incremental format changed (such as when updating one's local source tree).  This changes it so that these tests can pass a `// incremental-build` header which instructs compiletest to create a set aside a dedicated incremental directory which will be cleared before the test starts to ensure it has a clean slate.

2 years agofix the relevant tests
Takayuki Maeda [Sun, 26 Sep 2021 07:18:58 +0000 (16:18 +0900)]
fix the relevant tests

2 years agosuggest both immutable and mutable trait implementations
Takayuki Maeda [Sun, 26 Sep 2021 07:16:04 +0000 (16:16 +0900)]
suggest both immutable and mutable trait implementations

2 years agoAuto merge of #88680 - ehuss:more-attr-validation, r=petrochenkov
bors [Sun, 26 Sep 2021 05:15:11 +0000 (05:15 +0000)]
Auto merge of #88680 - ehuss:more-attr-validation, r=petrochenkov

Validate builtin attributes for macro args.

This adds some validation for `path`, `crate_type`, and `recursion_limit` attributes so that they will now return an error if you attempt to pass a macro into them (such as `#[path = foo!()]`). Previously, the attribute would be completely ignored. These attributes are special because their values need to be known before/during expansion.

cc #87681

2 years agoAuto merge of #89262 - Manishearth:rollup-vtkbetm, r=Manishearth
bors [Sun, 26 Sep 2021 02:31:12 +0000 (02:31 +0000)]
Auto merge of #89262 - Manishearth:rollup-vtkbetm, r=Manishearth

Rollup of 7 pull requests

Successful merges:

 - #88895 (rustdoc: Cleanup `clean` part 2)
 - #88973 (Expose the std_detect env_override feature)
 - #89010 (Add some intra doc links)
 - #89198 (rustdoc: Don't show hidden trait methods)
 - #89216 (Consistent big O notation)
 - #89224 (Change the order of imports suggestions)
 - #89256 (Fix typo in release notes)

Failed merges:

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

2 years agoRemove box syntax from most places in src/test outside of the issues dir
est31 [Wed, 25 Aug 2021 00:39:40 +0000 (02:39 +0200)]
Remove box syntax from most places in src/test outside of the issues dir

2 years agoRollup merge of #89256 - danielg1111:fix_typo, r=Mark-Simulacrum
Manish Goregaokar [Sun, 26 Sep 2021 01:22:22 +0000 (18:22 -0700)]
Rollup merge of #89256 - danielg1111:fix_typo, r=Mark-Simulacrum

Fix typo in release notes

2 years agoRollup merge of #89224 - TaKO8Ki:change-the-order-of-suggestions, r=joshtriplett
Manish Goregaokar [Sun, 26 Sep 2021 01:22:21 +0000 (18:22 -0700)]
Rollup merge of #89224 - TaKO8Ki:change-the-order-of-suggestions, r=joshtriplett

Change the order of imports suggestions

closes #83564

2 years agoRollup merge of #89216 - r00ster91:bigo, r=dtolnay
Manish Goregaokar [Sun, 26 Sep 2021 01:22:20 +0000 (18:22 -0700)]
Rollup merge of #89216 - r00ster91:bigo, r=dtolnay

Consistent big O notation

This makes the big O time complexity notation in places with markdown support more consistent.
Inspired by #89210

2 years agoRollup merge of #89198 - hkmatsumoto:hide-hidden-methods, r=jyn514
Manish Goregaokar [Sun, 26 Sep 2021 01:22:19 +0000 (18:22 -0700)]
Rollup merge of #89198 - hkmatsumoto:hide-hidden-methods, r=jyn514

rustdoc: Don't show hidden trait methods

Fix #89186.

By skipping trait items whose attributes include `hidden`, we avoid showing such trait methods.

2 years agoRollup merge of #89010 - est31:intra_doc_links, r=m-ou-se
Manish Goregaokar [Sun, 26 Sep 2021 01:22:19 +0000 (18:22 -0700)]
Rollup merge of #89010 - est31:intra_doc_links, r=m-ou-se

Add some intra doc links

2 years agoRollup merge of #88973 - lu-zero:std_detect-env_override, r=Amanieu
Manish Goregaokar [Sun, 26 Sep 2021 01:22:18 +0000 (18:22 -0700)]
Rollup merge of #88973 - lu-zero:std_detect-env_override, r=Amanieu

Expose the std_detect env_override feature

2 years agoRollup merge of #88895 - camelid:cleanup-pt2, r=jyn514
Manish Goregaokar [Sun, 26 Sep 2021 01:22:17 +0000 (18:22 -0700)]
Rollup merge of #88895 - camelid:cleanup-pt2, r=jyn514

rustdoc: Cleanup `clean` part 2

Split out from #88379. This contains the following commits from that PR:

- Remove `Type::ResolvedPath.is_generic`
- Rename `is_generic()` to `is_assoc_ty()`

r? `@jyn514`

2 years agoFix typo in release notes
Daniel Giger [Sat, 25 Sep 2021 20:34:39 +0000 (16:34 -0400)]
Fix typo in release notes

2 years agoAuto merge of #88343 - steffahn:fix_code_spacing, r=jyn514
bors [Sat, 25 Sep 2021 20:08:11 +0000 (20:08 +0000)]
Auto merge of #88343 - steffahn:fix_code_spacing, r=jyn514

Fix spacing of links in inline code.

Similar to #80733, but the focus is different. This PR eliminates all occurrences of pieced-together inline code blocks like [`Box`]`<`[`Option`]`<T>>` and replaces them with good-looking ones (using HTML-syntax), like <code>[Box]<[Option]\<T>></code>. As far as I can tell, I should’ve found all of these in the standard library (regex search with `` r"`\]`|`\[`" ``) \[except for in `core::convert` where I’ve noticed other things in the docs that I want to fix in a separate PR]. In particular, unlike #80733, I’ve added almost no new instance of inline code that’s broken up into multiple links (or some link and some link-free part). I also added tooltips (the stuff in quotes for the markdown link listings) in places that caught my eye, but that’s by no means systematic, just opportunistic.

[Box]: https://doc.rust-lang.org/std/boxed/struct.Box.html "Box"
[`Box`]: https://doc.rust-lang.org/std/boxed/struct.Box.html "Box"
[Option]: https://doc.rust-lang.org/std/option/enum.Option.html "Option"
[`Option`]: https://doc.rust-lang.org/std/option/enum.Option.html "Option"

Context: I got annoyed by repeatedly running into new misformatted inline code while reading the standard library docs. I know that once issue #83997 (and/or related ones) are resolved, these changes become somewhat obsolete, but I fail to notice much progress on that end right now.

r? `@jyn514`

2 years agoExpose the std_detect env_override feature
Luca Barbato [Wed, 15 Sep 2021 15:12:46 +0000 (17:12 +0200)]
Expose the std_detect env_override feature

2 years agoApply 16 commits (squashed)
Frank Steffahn [Wed, 25 Aug 2021 09:45:08 +0000 (11:45 +0200)]
Apply 16 commits (squashed)

----------

Fix spacing for links inside code blocks, and improve link tooltips in alloc::fmt

----------

Fix spacing for links inside code blocks, and improve link tooltips in alloc::{rc, sync}

----------

Fix spacing for links inside code blocks, and improve link tooltips in alloc::string

----------

Fix spacing for links inside code blocks in alloc::vec

----------

Fix spacing for links inside code blocks in core::option

----------

Fix spacing for links inside code blocks, and improve a few link tooltips in core::result

----------

Fix spacing for links inside code blocks in core::{iter::{self, iterator}, stream::stream, poll}

----------

Fix spacing for links inside code blocks, and improve a few link tooltips in std::{fs, path}

----------

Fix spacing for links inside code blocks in std::{collections, time}

----------

Fix spacing for links inside code blocks in and make formatting of `&str`-like types consistent in std::ffi::{c_str, os_str}

----------

Fix spacing for links inside code blocks, and improve link tooltips in std::ffi

----------

Fix spacing for links inside code blocks, and improve a few link tooltips
in std::{io::{self, buffered::{bufreader, bufwriter}, cursor, util}, net::{self, addr}}

----------

Fix typo in link to `into` for `OsString` docs

----------

Remove tooltips that will probably become redundant in the future

----------

Apply suggestions from code review

Replacing `…std/primitive.reference.html` paths with just `reference`

Co-authored-by: Joshua Nelson <github@jyn.dev>
----------

Also replace `…std/primitive.reference.html` paths with just `reference` in `core::pin`

2 years agoAuto merge of #87584 - adamgemmell:dev/asm-tests, r=Amanieu
bors [Sat, 25 Sep 2021 17:14:38 +0000 (17:14 +0000)]
Auto merge of #87584 - adamgemmell:dev/asm-tests, r=Amanieu

Add inline asm! tests for aarch64

Port many of the x86-only UI tests for inline asm! over to aarch64.

2 years agorustdoc: Document `is_assoc_ty()`
Noah Lev [Sat, 25 Sep 2021 16:50:12 +0000 (09:50 -0700)]
rustdoc: Document `is_assoc_ty()`

It's adapted from the old documentation for the `is_generic` field.

2 years agoElaborate comment
Hirochika Matsumoto [Sat, 25 Sep 2021 16:07:10 +0000 (01:07 +0900)]
Elaborate comment

Co-authored-by: Joshua Nelson <github@jyn.dev>
2 years agoCheck for macros in built-in attributes that don't support them.
Eric Huss [Fri, 17 Sep 2021 20:08:56 +0000 (13:08 -0700)]
Check for macros in built-in attributes that don't support them.

2 years agoMove malformed attribute code to a function and fix inner attribute suggestion.
Eric Huss [Fri, 17 Sep 2021 00:48:06 +0000 (17:48 -0700)]
Move malformed attribute code to a function and fix inner attribute suggestion.

Moving to a dedicated function in preparation for other validation.

The suggestion given didn't consider if it was an inner attribute.

2 years agoAuto merge of #88243 - nikic:newpm-2, r=nagisa
bors [Sat, 25 Sep 2021 13:43:52 +0000 (13:43 +0000)]
Auto merge of #88243 - nikic:newpm-2, r=nagisa

Enable new pass manager with LLVM 13

The new pass manager is enabled by default in clang since Clang/LLVM 13. Per the recent discussion on llvm-dev (https://lists.llvm.org/pipermail/llvm-dev/2021-August/152305.html) the legacy pass manager will be unmaintained in LLVM 14 and removed entirely in LLVM 15.

This switches us to use the new pass manager if LLVM >= 13 is used. It's possible to still use the old pass manager using `-Z new-llvm-pass-manager=no`.

2 years agoAuto merge of #89030 - nbdd0121:box2, r=jonas-schievink
bors [Sat, 25 Sep 2021 11:01:13 +0000 (11:01 +0000)]
Auto merge of #89030 - nbdd0121:box2, r=jonas-schievink

Introduce `Rvalue::ShallowInitBox`

Polished version of #88700.

Implements MCP rust-lang/compiler-team#460, and should allow #43596 to go forward.

In short, creating an empty box is split from a nullary-op `NullOp::Box` into two steps, first a call to `exchange_malloc`, then a `Rvalue::ShallowInitBox` which transmutes `*mut u8` to a shallow-initialized `Box<T>`. This allows the `exchange_malloc` call to unwind. Details can be found in the MCP.

`NullOp::Box` is not yet removed, purely to make reverting easier in case anything goes wrong as the result of this PR. If revert is needed a reversion of "Use Rvalue::ShallowInitBox for box expression" commit followed by a test bless should be sufficient.

Experiments in #88700 showed a very slight compile-time perf regression due to (supposedly) slightly more time spent in LLVM. We could omit unwind edge generation (in non-`oom=panic` case) in box expression MIR construction to restore perf; but I don't think it's necessary since runtime perf isn't affected and perf difference is rather small.

2 years agoPin panic-in-drop=abort test to old pass manager
Nikita Popov [Sat, 25 Sep 2021 10:39:20 +0000 (12:39 +0200)]
Pin panic-in-drop=abort test to old pass manager

2 years agoMake expectation in panic-in-drop-abort.rs test more precise
Nikita Popov [Tue, 14 Sep 2021 18:16:22 +0000 (20:16 +0200)]
Make expectation in panic-in-drop-abort.rs test more precise

Check whether a call/invoke of the function exists, but don't
match a leftover function declaration.

Also remove the CHECK-LABELs: In panic-in-drop=unwind mode the
call will not actually be in either of those functions, so
remove the restriction and look for any calls.

2 years agoUse correct pipeline for LTO at O0
Nikita Popov [Mon, 13 Sep 2021 16:18:59 +0000 (18:18 +0200)]
Use correct pipeline for LTO at O0

Unlike the pre-link piplines, the LTO pipelines do support O0,
and using them is required to avoid leaving behind undefined
references for the linker.

2 years agoEnable new pass manager on LLVM 13
Nikita Popov [Sat, 21 Aug 2021 20:20:32 +0000 (22:20 +0200)]
Enable new pass manager on LLVM 13

The new pass manager is enabled by default in clang since
Clang/LLVM 13. While the discussion about this is still ongoing
(https://lists.llvm.org/pipermail/llvm-dev/2021-August/152305.html)
it's expected that support for the legacy pass manager will be
dropped either in LLVM 14 or 15.

This switches us to use the new pass manager if LLVM >= 13 is used.

2 years agoAuto merge of #89237 - BoxyUwU:trackersMcCaller, r=eddyb
bors [Sat, 25 Sep 2021 07:33:25 +0000 (07:33 +0000)]
Auto merge of #89237 - BoxyUwU:trackersMcCaller, r=eddyb

make `#[track_caller]` actually do stuff in `Steal::borrow`

makes this ICE message useful:
``thread 'rustc' panicked at 'attempted to read from stolen value', /rustc/ac2d9fc509e36d1b32513744adf58c34bcc4f43c\compiler\rustc_data_structures\src\steal.rs:37:21``

2 years agorustdoc: Don't show hidden trait methods
Hirochika Matsumoto [Thu, 23 Sep 2021 10:38:01 +0000 (19:38 +0900)]
rustdoc: Don't show hidden trait methods

By skipping trait items whose attributes include `hidden`, we void
showing
such trait methods.

2 years agoAuto merge of #87220 - petrochenkov:derivecfglimit2, r=Aaron1011
bors [Sat, 25 Sep 2021 04:35:59 +0000 (04:35 +0000)]
Auto merge of #87220 - petrochenkov:derivecfglimit2, r=Aaron1011

Make `#[derive(A, B, ...)]` cfg-eval its input only for `A, B, ...` and stabilize `feature(macro_attributes_in_derive_output)`

Stabilization report: https://github.com/rust-lang/rust/pull/87220#issuecomment-881923657

Closes #81119
r? `@Aaron1011`

2 years agouse `drain_filter` instead of `filter` and `retain`
Takayuki Maeda [Sat, 25 Sep 2021 02:33:53 +0000 (11:33 +0900)]
use `drain_filter` instead of `filter` and `retain`

2 years agoAuto merge of #89230 - workingjubilee:rollup-1swktdq, r=workingjubilee
bors [Sat, 25 Sep 2021 00:20:28 +0000 (00:20 +0000)]
Auto merge of #89230 - workingjubilee:rollup-1swktdq, r=workingjubilee

Rollup of 8 pull requests

Successful merges:

 - #88893 (Add 1.56.0 release notes)
 - #89001 (Be explicit about using Binder::dummy)
 - #89072 (Avoid a couple of Symbol::as_str calls in cg_llvm )
 - #89104 (Simplify scoped_thread)
 - #89208 ([rfc 2229] Drop fully captured upvars in the same order as the regular drop code)
 - #89210 (Add missing time complexities to linked_list.rs)
 - #89217 (Enable "generate-link-to-definition" option on rust tools docs as well)
 - #89221 (Give better error for `macro_rules! name!`)

Failed merges:

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

2 years agoBless tests
Gary Guo [Thu, 16 Sep 2021 22:04:02 +0000 (23:04 +0100)]
Bless tests

2 years agoReport heap allocation instead of non-const fn for exchange_malloc call
Gary Guo [Thu, 16 Sep 2021 21:49:34 +0000 (22:49 +0100)]
Report heap allocation instead of non-const fn for exchange_malloc call

2 years agoUse Rvalue::ShallowInitBox for box expression
Gary Guo [Sat, 11 Sep 2021 22:24:55 +0000 (23:24 +0100)]
Use Rvalue::ShallowInitBox for box expression

2 years agoIntroduce `Rvalue::ShallowInitBox`
Gary Guo [Mon, 6 Sep 2021 17:33:23 +0000 (18:33 +0100)]
Introduce `Rvalue::ShallowInitBox`

2 years agoarrr caught ya caller
Ellen [Fri, 24 Sep 2021 23:34:02 +0000 (00:34 +0100)]
arrr caught ya caller

awd

2 years agoAuto merge of #86246 - FabianWolff:issue-83471, r=estebank
bors [Fri, 24 Sep 2021 21:30:35 +0000 (21:30 +0000)]
Auto merge of #86246 - FabianWolff:issue-83471, r=estebank

Add basic checks for well-formedness of `fn`/`fn_mut` lang items

This pull request fixes #83471. Lang items are never actually checked for well-formedness (#9307). This means that one can get an ICE quite easily, e.g. as follows:
```rust
#![feature(lang_items)]
#[lang = "fn"]
trait MyFn {
    const call: i32 = 42;
}

fn main() {
    (|| 42)();
}
```
or this:
```rust
#![feature(lang_items)]
#[lang = "fn"]
trait MyFn {
    fn call(i: i32, j: i32);
}

fn main() {
    (|| 42)();
}
```
Ideally, there should probably be a more comprehensive strategy for checking lang items for well-formedness, but for the time being, I have added some rudimentary well-formedness checks that prevent #83471 and similar issues.

2 years agoStabilize `feature(macro_attributes_in_derive_output)`
Vadim Petrochenkov [Sat, 17 Jul 2021 14:50:33 +0000 (17:50 +0300)]
Stabilize `feature(macro_attributes_in_derive_output)`

2 years agoderive: Do not configure or clone items unless necessary
Vadim Petrochenkov [Sat, 17 Jul 2021 14:28:43 +0000 (17:28 +0300)]
derive: Do not configure or clone items unless necessary

2 years agobuiltin_macros: Make #[derive(A, B, ...)] cfg-eval its input only for `A, B, ...`
Vadim Petrochenkov [Sat, 17 Jul 2021 14:10:03 +0000 (17:10 +0300)]
builtin_macros: Make #[derive(A, B, ...)] cfg-eval its input only for `A, B, ...`

2 years agoRollup merge of #89221 - aDotInTheVoid:macro-error-1, r=estebank
Jubilee [Fri, 24 Sep 2021 18:40:17 +0000 (11:40 -0700)]
Rollup merge of #89221 - aDotInTheVoid:macro-error-1, r=estebank

Give better error for `macro_rules! name!`

r? ``@estebank``

``@rustbot`` modify labels: +A-diagnostics +A-parser

2 years agoRollup merge of #89217 - GuillaumeGomez:generate-link-to-def-rust-tools, r=jyn514
Jubilee [Fri, 24 Sep 2021 18:40:16 +0000 (11:40 -0700)]
Rollup merge of #89217 - GuillaumeGomez:generate-link-to-def-rust-tools, r=jyn514

Enable "generate-link-to-definition" option on rust tools docs as well

Just realized that we enable the option for the compiler crates, but we don't have it for rustdoc and the other tools documentation...

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

cc ``@rust-lang/rustdoc``
r? ``@Mark-Simulacrum``

2 years agoRollup merge of #89210 - Takashiidobe:master, r=kennytm
Jubilee [Fri, 24 Sep 2021 18:40:15 +0000 (11:40 -0700)]
Rollup merge of #89210 - Takashiidobe:master, r=kennytm

Add missing time complexities to linked_list.rs

Most functions in LinkedList have time complexities in their description:
Like push front:

```
Adds an element first in the list.

This operation should compute in O(1) time.
```

Time complexities were missing for the following, so I've added them in this PR:

contains: O(n)
front: O(1)
front_mut: O(1)
back: O(1)
back_mut: O(1)

2 years agoRollup merge of #89208 - wesleywiser:rfc_2229_droporder, r=nikomatsakis
Jubilee [Fri, 24 Sep 2021 18:40:14 +0000 (11:40 -0700)]
Rollup merge of #89208 - wesleywiser:rfc_2229_droporder, r=nikomatsakis

[rfc 2229] Drop fully captured upvars in the same order as the regular drop code

Currently, with the new 2021 edition, if a closure captures all of the
fields of an upvar, we'll drop those fields in the order they are used
within the closure instead of the normal drop order (the definition
order of the fields in the type).

This changes that so we sort the captured fields by the definition order
which causes them to drop in that same order as well.

Fixes rust-lang/project-rfc-2229#42

r? `@nikomatsakis`

2 years agoRollup merge of #89104 - Mark-Simulacrum:spawn-unchecked, r=nagisa,bjorn3
Jubilee [Fri, 24 Sep 2021 18:40:13 +0000 (11:40 -0700)]
Rollup merge of #89104 - Mark-Simulacrum:spawn-unchecked, r=nagisa,bjorn3

Simplify scoped_thread

Avoids a bunch of manual pointer manipulation in favor of using the appropriate std API.

2 years agoRollup merge of #89072 - bjorn3:less_symbol_as_str, r=michaelwoerister
Jubilee [Fri, 24 Sep 2021 18:40:12 +0000 (11:40 -0700)]
Rollup merge of #89072 - bjorn3:less_symbol_as_str, r=michaelwoerister

Avoid a couple of Symbol::as_str calls in cg_llvm

This should improve performance a tiny bit. Also remove `Symbol::len` and make `SymbolIndex` private.

2 years agoRollup merge of #89001 - jackh726:binder-cleanup, r=nikomatsakis
Jubilee [Fri, 24 Sep 2021 18:40:11 +0000 (11:40 -0700)]
Rollup merge of #89001 - jackh726:binder-cleanup, r=nikomatsakis

Be explicit about using Binder::dummy

This is somewhat of a late followup to the binder refactor PR. It removes `ToPredicate` and `ToPolyTraitImpls` that hide the use of `Binder::dummy`. While this does make code a bit more verbose, it allows us be more careful about where we create binders.

Another alternative here might be to add a new trait `ToBinder` or something with a `dummy()` fn. Which could still allow grepping but allows doing something like `trait_ref.dummy()` (but I also wonder if longer-term, it would be better to be even more explicit with a `bind_with_vars(ty::List::empty())` *but* that's not clear yet.

r? ``@nikomatsakis``

2 years agoRollup merge of #88893 - Mark-Simulacrum:relnotes, r=pietroalbini
Jubilee [Fri, 24 Sep 2021 18:40:11 +0000 (11:40 -0700)]
Rollup merge of #88893 - Mark-Simulacrum:relnotes, r=pietroalbini

Add 1.56.0 release notes

Notable things:

* Rustdoc section currently absent, for lack of things to call out that I could find. It seems like https://github.com/rust-lang/rust/pull/87451 is the only potential candidate, but that seems like more of a bugfix and doesn't seem to warrant inclusion to me. But we can add it if desired.

As with the 1.55.0 release notes, my intent is to leave this open for approximately 1-2 weeks at the early part of the cycle, and then merge it in (after fixing any feedback). Further iteration can happen in subsequent issues (and PRs).

[Rendered](https://github.com/Mark-Simulacrum/rust/blob/relnotes/RELEASES.md)

2 years agoMake error message for malformed `fn`/`fn_mut` lang item more specific
Fabian Wolff [Fri, 24 Sep 2021 16:55:14 +0000 (18:55 +0200)]
Make error message for malformed `fn`/`fn_mut` lang item more specific

2 years agoAuto merge of #88872 - petrochenkov:getmod2, r=cjgillot
bors [Fri, 24 Sep 2021 18:12:33 +0000 (18:12 +0000)]
Auto merge of #88872 - petrochenkov:getmod2, r=cjgillot

resolve: Some module-related refactorings

See the individual commits.

2 years agoDisable a spuriously failing test
Vadim Petrochenkov [Fri, 24 Sep 2021 17:28:47 +0000 (20:28 +0300)]
Disable a spuriously failing test

2 years agoDisable some tests for platforms without registers.
Adam Gemmell [Mon, 6 Sep 2021 15:44:19 +0000 (16:44 +0100)]
Disable some tests for platforms without registers.

Update new tests to run on aarch64 platforms.

2 years agoUpdate and add more tests
Wesley Wiser [Fri, 24 Sep 2021 16:26:24 +0000 (12:26 -0400)]
Update and add more tests

2 years agoAdd basic checks for well-formedness of `fn`/`fn_mut` lang items
Fabian Wolff [Sat, 12 Jun 2021 10:48:04 +0000 (12:48 +0200)]
Add basic checks for well-formedness of `fn`/`fn_mut` lang items

2 years agoAdd inline asm! tests for aarch64
Adam Gemmell [Thu, 24 Jun 2021 14:01:49 +0000 (14:01 +0000)]
Add inline asm! tests for aarch64

Enable tests which are largely architecture-independent on all supported
platforms

2 years agoresolve: Refactor obtaining `Module` from its `DefId`
Vadim Petrochenkov [Sat, 11 Sep 2021 23:06:27 +0000 (02:06 +0300)]
resolve: Refactor obtaining `Module` from its `DefId`

The `Option<Module>` version is supported for the case where we don't know whether the `DefId` refers to a module or not.
Non-local traits and enums are also correctly found now.

2 years agoresolve: Use a single common map for local and foreign modules
Vadim Petrochenkov [Sat, 11 Sep 2021 22:59:05 +0000 (01:59 +0300)]
resolve: Use a single common map for local and foreign modules

2 years agoresolve: Rename some expansion def scope methods
Vadim Petrochenkov [Sat, 11 Sep 2021 22:47:46 +0000 (01:47 +0300)]
resolve: Rename some expansion def scope methods

2 years agoresolve: Cleanup module allocation
Vadim Petrochenkov [Sat, 11 Sep 2021 13:37:34 +0000 (16:37 +0300)]
resolve: Cleanup module allocation

Construction of all modules is now centralized and performed by `fn new_module`.

2 years agoresolve: Do not cache nearest parent mod in `ModuleData`
Vadim Petrochenkov [Mon, 13 Sep 2021 21:13:14 +0000 (00:13 +0300)]
resolve: Do not cache nearest parent mod in `ModuleData`

2 years agoAdd 1.56.0 release notes
Mark Rousskov [Sun, 12 Sep 2021 19:13:54 +0000 (15:13 -0400)]
Add 1.56.0 release notes

Co-authored-by: Josh Triplett <josh@joshtriplett.org>
2 years agochange the order of path suggestions
Takayuki Maeda [Fri, 24 Sep 2021 15:22:59 +0000 (00:22 +0900)]
change the order of path suggestions

2 years agoAuto merge of #88999 - Migi:master, r=oli-obk
bors [Fri, 24 Sep 2021 15:22:26 +0000 (15:22 +0000)]
Auto merge of #88999 - Migi:master, r=oli-obk

Make `Duration` respect `width` when formatting using `Debug`

When printing or writing a `std::time::Duration` using `Debug` formatting, it previously completely ignored any specified `width`. This is unlike types like integers and floats, which do pad to `width`, for both `Display` and `Debug`, though not all types consider `width` in their `Debug` output (see e.g. #30164). Curiously, `Duration`'s `Debug` formatting *did* consider `precision`.

This PR makes `Duration` pad to `width` just like integers and floats, so that
```rust
format!("|{:8?}|", Duration::from_millis(1234))
```
returns
```
|1.234s  |
```

Before you ask "who formats `Debug` output?", note that `Duration` doesn't actually implement `Display`, so `Debug` is currently the only way to format `Duration`s. I think that's wrong, and `Duration` should get a `Display` implementation, but in the meantime there's no harm in making the `Debug` formatting respect `width` rather than ignore it.

I chose the default alignment to be left-aligned. The general rule Rust uses is: numeric types are right-aligned by default, non-numeric types left-aligned. It wasn't clear to me whether `Duration` is a numeric type or not. The fact that a formatted `Duration` can end with suffixes of variable length (`"s"`, `"ms"`, `"µs"`, etc.) made me lean towards left-alignment, but it would be trivial to change it.

Fixes issue #88059.

2 years agoGive better error for `macro_rules! name!`
Nixon Enraght-Moony [Fri, 24 Sep 2021 12:31:01 +0000 (13:31 +0100)]
Give better error for `macro_rules! name!`

2 years agounitalicize O(1) complexities
Takashi Idobe [Fri, 24 Sep 2021 13:33:49 +0000 (08:33 -0500)]
unitalicize O(1) complexities

2 years agoMerge branch 'rust-lang:master' into master
Takashi Idobe [Fri, 24 Sep 2021 13:31:03 +0000 (08:31 -0500)]
Merge branch 'rust-lang:master' into master

2 years agoAuto merge of #88835 - FabianWolff:issue-88770, r=petrochenkov
bors [Fri, 24 Sep 2021 11:54:29 +0000 (11:54 +0000)]
Auto merge of #88835 - FabianWolff:issue-88770, r=petrochenkov

Fix error recovery in format macro parsing

Fixes #88770. Basically, the assumption in the following comment is incorrect:
https://github.com/rust-lang/rust/blob/b69fe57261086e70aea9d5b58819a1794bf7c121/compiler/rustc_builtin_macros/src/format.rs#L167-L172

This is only true in the first iteration of the loop, when [`p.clear_expected_tokens()`](https://github.com/rust-lang/rust/blob/b69fe57261086e70aea9d5b58819a1794bf7c121/compiler/rustc_builtin_macros/src/format.rs#L164) is called. In subsequent iterations, `p.expected_tokens` won't be empty, so `p.expect()` won't actually call `unexpected_try_recover()`:
https://github.com/rust-lang/rust/blob/b69fe57261086e70aea9d5b58819a1794bf7c121/compiler/rustc_parse/src/parser/mod.rs#L487-L498

Instead, it will call `expect_one_of()`, which _can_ recover and return `Ok()`. This PR handles this case to fix the ICE in #88770.

2 years agoconsistent big O notation
r00ster91 [Fri, 24 Sep 2021 10:44:28 +0000 (12:44 +0200)]
consistent big O notation

2 years agoEnable "generate-link-to-definition" option on rust tools docs as well
Guillaume Gomez [Fri, 24 Sep 2021 10:05:35 +0000 (12:05 +0200)]
Enable "generate-link-to-definition" option on rust tools docs as well

2 years agoSimplify explicit request check
Guillaume Gomez [Wed, 22 Sep 2021 20:25:42 +0000 (22:25 +0200)]
Simplify explicit request check

2 years agoAuto merge of #89130 - nikic:update-llvm-2, r=cuviper
bors [Fri, 24 Sep 2021 08:12:15 +0000 (08:12 +0000)]
Auto merge of #89130 - nikic:update-llvm-2, r=cuviper

Update LLVM submodule

This merges the upstream `release/13.x` branch to pull in the second fix for #88769.

2 years agoAuto merge of #89120 - In-line:remove_unneded_visible_parents_map, r=estebank
bors [Fri, 24 Sep 2021 05:29:49 +0000 (05:29 +0000)]
Auto merge of #89120 - In-line:remove_unneded_visible_parents_map, r=estebank

Disable visible path calculation for PrettyPrinter in Ok path of compiler