]> git.lizzy.rs Git - rust.git/log
rust.git
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 #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 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 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 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

2 years agoFix tidy and respond to some feedback
Wesley Wiser [Fri, 24 Sep 2021 02:15:12 +0000 (22:15 -0400)]
Fix tidy and respond to some feedback

2 years agoAuto merge of #89211 - workingjubilee:rollup-fj4eduk, r=workingjubilee
bors [Fri, 24 Sep 2021 01:48:02 +0000 (01:48 +0000)]
Auto merge of #89211 - workingjubilee:rollup-fj4eduk, r=workingjubilee

Rollup of 7 pull requests

Successful merges:

 - #88612 (Add a better error message for #39364)
 - #89023 (Resolve issue : Somewhat confusing error with extended_key_value_attributes)
 - #89148 (Suggest `_` in turbofish if param will be inferred from fn argument)
 - #89171 (Run `no_core` rustdoc tests only on Linux)
 - #89176 (Change singular to plural)
 - #89184 (Temporarily rename int_roundings functions to avoid conflicts)
 - #89200 (Fix typo)

Failed merges:

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

2 years agoRollup merge of #89200 - hkmatsumoto:patch, r=workingjubilee
Jubilee [Fri, 24 Sep 2021 00:31:47 +0000 (17:31 -0700)]
Rollup merge of #89200 - hkmatsumoto:patch, r=workingjubilee

Fix typo

2 years agoRollup merge of #89184 - joshtriplett:master, r=estebank
Jubilee [Fri, 24 Sep 2021 00:31:46 +0000 (17:31 -0700)]
Rollup merge of #89184 - joshtriplett:master, r=estebank

Temporarily rename int_roundings functions to avoid conflicts

These functions are unstable, but because they're inherent they still
introduce conflicts with stable trait functions in crates. Temporarily
rename them to fix these conflicts, until we can resolve those conflicts
in a better way.

2 years agoRollup merge of #89176 - TaKO8Ki:change-singular-to-plural, r=lcnr
Jubilee [Fri, 24 Sep 2021 00:31:45 +0000 (17:31 -0700)]
Rollup merge of #89176 - TaKO8Ki:change-singular-to-plural, r=lcnr

Change singular to plural

2 years agoRollup merge of #89171 - rusticstuff:aarch64_macos_rustdoc_ci_fixes, r=jyn514
Jubilee [Fri, 24 Sep 2021 00:31:44 +0000 (17:31 -0700)]
Rollup merge of #89171 - rusticstuff:aarch64_macos_rustdoc_ci_fixes, r=jyn514

Run `no_core` rustdoc tests only on Linux

I don't think this is really worth investigating further so I just disabled them.

They currently fail like this:
```
error: linking with `cc` failed: exit status: 1
  |
  = note: "cc" "-Wl,-exported_symbols_list,/var/folders/pg/gjhzdz7n361f0pv665d0723w0000gn/T/rustcPUsMpx/list" "-arch" "arm64" "/Users/hans/dev/rust/build/aarch64-apple-darwin/test/rustdoc/intra-doc/prim-methods-external-core/auxiliary/my-core.my_core.9f3c60de-cgu.0.rcgu.o" "/Users/hans/dev/rust/build/aarch64-apple-darwin/test/rustdoc/intra-doc/prim-methods-external-core/auxiliary/my-core.50fu2g9urkmisdsg.rcgu.o" "-L" "/Users/hans/dev/rust/build/aarch64-apple-darwin/native/rust-test-helpers" "-L" "/Users/hans/dev/rust/build/aarch64-apple-darwin/test/rustdoc/intra-doc/prim-methods-external-core/auxiliary" "-L" "/Users/hans/dev/rust/build/aarch64-apple-darwin/stage1/lib/rustlib/aarch64-apple-darwin/lib" "-L" "/Users/hans/dev/rust/build/aarch64-apple-darwin/stage1/lib/rustlib/aarch64-apple-darwin/lib" "-o" "/Users/hans/dev/rust/build/aarch64-apple-darwin/test/rustdoc/intra-doc/prim-methods-external-core/auxiliary/libmy_core.dylib" "-Wl,-dead_strip" "-dynamiclib" "-Wl,-dylib" "-Wl,-install_name" "-Wl,``@rpath/libmy_core.dylib"`` "-nodefaultlibs"
  = note: ld: dynamic main executables must link with libSystem.dylib for architecture arm64
          clang: error: linker command failed with exit code 1 (use -v to see invocation)
```

r? ``@jyn514``

2 years agoRollup merge of #89148 - estebank:used-type-param, r=oli-obk
Jubilee [Fri, 24 Sep 2021 00:31:43 +0000 (17:31 -0700)]
Rollup merge of #89148 - estebank:used-type-param, r=oli-obk

Suggest `_` in turbofish if param will be inferred from fn argument

2 years agoRollup merge of #89023 - Wardenfar:issue-85066, r=nagisa
Jubilee [Fri, 24 Sep 2021 00:31:42 +0000 (17:31 -0700)]
Rollup merge of #89023 - Wardenfar:issue-85066, r=nagisa

Resolve issue : Somewhat confusing error with extended_key_value_attributes

Fixes #85066

2 years agoRollup merge of #88612 - lovasoa:patch-1, r=m-ou-se
Jubilee [Fri, 24 Sep 2021 00:31:41 +0000 (17:31 -0700)]
Rollup merge of #88612 - lovasoa:patch-1, r=m-ou-se

Add a better error message for #39364

There is a known bug in the implementation of mpsc channels in rust.
This adds a clearer error message when the bug occurs, so that developers don't lose too much time looking for the origin of the bug.
See https://github.com/rust-lang/rust/issues/39364

2 years agoremove trailing whitespace
Takashi Idobe [Thu, 23 Sep 2021 23:20:46 +0000 (18:20 -0500)]
remove trailing whitespace

2 years agoAdd time complexities to linked_list.rs
Takashi Idobe [Thu, 23 Sep 2021 22:58:02 +0000 (17:58 -0500)]
Add time complexities to linked_list.rs

2 years agoAuto merge of #88804 - Mark-Simulacrum:never-algo-v2, r=nikomatsakis,jackh726
bors [Thu, 23 Sep 2021 22:45:22 +0000 (22:45 +0000)]
Auto merge of #88804 - Mark-Simulacrum:never-algo-v2, r=nikomatsakis,jackh726

Revise never type fallback algorithm

This is a rebase of https://github.com/rust-lang/rust/pull/84573, but dropping the stabilization of never type (and the accompanying large test diff).

Each commit builds & has tests updated alongside it, and could be reviewed in a more or less standalone fashion. But it may make more sense to review the PR as a whole, I'm not sure. It should be noted that tests being updated isn't really a good indicator of final behavior -- never_type_fallback is not enabled by default in this PR, so we can't really see the full effects of the commits here.

This combines the work by Niko, which is [documented in this gist](https://gist.github.com/nikomatsakis/7a07b265dc12f5c3b3bd0422018fa660), with some additional rules largely derived to target specific known patterns that regress with the algorithm solely derived by Niko. We build these from an intuition that:

* In general, fallback to `()` is *sound* in all cases
* But, in general, we *prefer* fallback to `!` as it accepts more code, particularly that written to intentionally use `!` (e.g., Result's with a Infallible/! variant).

When evaluating Niko's proposed algorithm, we find that there are certain cases where fallback to `!` leads to compilation failures in real-world code, and fallback to `()` fixes those errors. In order to allow for stabilization, we need to fix a good portion of these patterns.

The final rule set this PR proposes is that, by default, we fallback from `?T` to `!`, with the following exceptions:

1. `?T: Foo` and `Bar::Baz = ?T` and `(): Foo`, then fallback to `()`
2. Per [Niko's algorithm](https://gist.github.com/nikomatsakis/7a07b265dc12f5c3b3bd0422018fa660#proposal-fallback-chooses-between--and--based-on-the-coercion-graph), the "live" `?T` also fallback to `()`.

The first rule is necessary to address a fairly common pattern which boils down to something like the snippet below. Without rule 1, we do not see the closure's return type as needing a () fallback, which leads to compilation failure.

```rust
#![feature(never_type_fallback)]

trait Bar { }
impl Bar for () {  }
impl Bar for u32 {  }

fn foo<R: Bar>(_: impl Fn() -> R) {}

fn main() {
    foo(|| panic!());
}
```

r? `@jackh726`

2 years agoDrop fully captured upvars in the same order as the regular drop code
Wesley Wiser [Thu, 23 Sep 2021 20:36:49 +0000 (16:36 -0400)]
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 https://github.com/rust-lang/project-rfc-2229/issues/42

2 years agoAdd tests to verify the drop order of fields in fully captured upvars
Wesley Wiser [Thu, 23 Sep 2021 19:15:51 +0000 (15:15 -0400)]
Add tests to verify the drop order of fields in fully captured upvars