]> git.lizzy.rs Git - rust.git/log
rust.git
2 years agorustc_target: `TyAndLayout::field` should never error.
Eduard-Mihai Burtescu [Wed, 25 Aug 2021 15:05:10 +0000 (18:05 +0300)]
rustc_target: `TyAndLayout::field` should never error.

2 years agorustc_target: require `TyAbiInterface` in `LayoutOf`.
Eduard-Mihai Burtescu [Wed, 25 Aug 2021 13:40:39 +0000 (16:40 +0300)]
rustc_target: require `TyAbiInterface` in `LayoutOf`.

2 years agorustc_target: rename `TyAndLayoutMethods` to `TyAbiInterface`.
Eduard-Mihai Burtescu [Wed, 25 Aug 2021 13:45:24 +0000 (16:45 +0300)]
rustc_target: rename `TyAndLayoutMethods` to `TyAbiInterface`.

2 years agorustc_target: add lifetime parameter to `LayoutOf`.
Eduard-Mihai Burtescu [Wed, 25 Aug 2021 11:51:22 +0000 (14:51 +0300)]
rustc_target: add lifetime parameter to `LayoutOf`.

2 years agoAuto merge of #88326 - eddyb:inline-ty-layout-methods, r=oli-obk
bors [Fri, 27 Aug 2021 06:37:21 +0000 (06:37 +0000)]
Auto merge of #88326 - eddyb:inline-ty-layout-methods, r=oli-obk

`#[inline]` non-generic `pub fn`s in `rustc_target::abi` and `ty::layout`.

Mostly doing this as a perf curiosity, having spotted that `#[inline]` usage is a bit spotty.

2 years agoAuto merge of #88278 - ehuss:update-cargo, r=ehuss
bors [Fri, 27 Aug 2021 03:48:04 +0000 (03:48 +0000)]
Auto merge of #88278 - ehuss:update-cargo, r=ehuss

Update cargo

19 commits in e96bdb0c3d0a418e7fcd7fbd69be08abf830b4bc..f559c109cc79fe413a8535fb620a5a58b3823d94
2021-08-17 22:58:47 +0000 to 2021-08-26 22:54:55 +0000
- Fix test not to rely on `cargo` in PATH. (rust-lang/cargo#9843)
- Improve resolver message to include dependency requirements (rust-lang/cargo#9827)
- Add hint for cargo metadata in environment section (rust-lang/cargo#9836)
- Fix panic with build-std of a proc-macro. (rust-lang/cargo#9834)
- Fix typos “a”→“an” (rust-lang/cargo#9821)
- Fix typo in git-authentication.md (rust-lang/cargo#9832)
- Add some debug logging for `cargo fix` (rust-lang/cargo#9831)
- Add documentation about third-party registries. (rust-lang/cargo#9830)
- unset the FIX_ENV when executing the real rustc (rust-lang/cargo#9818)
- Allow crate download by checksum (rust-lang/cargo#9801)
- Emit warning for migrating to unstable edition in stable channel (rust-lang/cargo#9792)
- Warning for no lib dependencies (rust-lang/cargo#9771)
- Temporarily disable extern-html-root-url test. (rust-lang/cargo#9824)
- Move `tmp` test directory. (rust-lang/cargo#9814)
- Fix test incorrectly validating CARGO_PKG_LICENSE_FILE. (rust-lang/cargo#9813)
- Implement `[future-incompat-report]` config section (rust-lang/cargo#9774)
- Bump curl. (rust-lang/cargo#9809)
- Determine packages to install prior to installing (rust-lang/cargo#9793)
- Show feature resolver differences for dev-dependencies. (rust-lang/cargo#9803)

2 years agoUpdate cargo
Eric Huss [Tue, 24 Aug 2021 02:16:44 +0000 (19:16 -0700)]
Update cargo

2 years agoAuto merge of #88371 - Manishearth:rollup-pkkjsme, r=Manishearth
bors [Fri, 27 Aug 2021 01:07:17 +0000 (01:07 +0000)]
Auto merge of #88371 - Manishearth:rollup-pkkjsme, r=Manishearth

Rollup of 11 pull requests

Successful merges:

 - #87832 (Fix debugger stepping behavior with `match` expressions)
 - #88123 (Make spans for tuple patterns in E0023 more precise)
 - #88215 (Reland #83738: "rustdoc: Don't load all extern crates unconditionally")
 - #88216 (Don't stabilize creation of TryReserveError instances)
 - #88270 (Handle type ascription type ops in NLL HRTB diagnostics)
 - #88289 (Fixes for LLVM change 0f45c16f2caa7c035e5c3edd40af9e0d51ad6ba7)
 - #88320 (type_implements_trait consider obligation failure on overflow)
 - #88332 (Add argument types tait tests)
 - #88340 (Add `c_size_t` and `c_ssize_t` to `std::os::raw`.)
 - #88346 (Revert "Add type of a let tait test impl trait straight in let")
 - #88348 (Add field types tait tests)

Failed merges:

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

2 years agoAuto merge of #87280 - lcnr:lazy-anon-const-default-substs, r=nikomatsakis
bors [Thu, 26 Aug 2021 22:26:23 +0000 (22:26 +0000)]
Auto merge of #87280 - lcnr:lazy-anon-const-default-substs, r=nikomatsakis

lazily "compute" anon const default substs

Continuing the work of #83086, this implements the discussed solution for the [unused substs problem](https://github.com/rust-lang/project-const-generics/blob/master/design-docs/anon-const-substs.md#unused-substs). As of now, anonymous constants inherit all of their parents generics, even if they do not use them, e.g. in `fn foo<T, const N: usize>() -> [T; N + 1]`, the array length has `T` as a generic parameter even though it doesn't use it. These *unused substs* cause some backwards incompatible, and imo incorrect behavior, e.g. #78369.

---
We do not actually filter any generic parameters here and the `default_anon_const_substs` query still a dummy which only checks that
- we now prevent the previously existing query cycles and are able to call `predicates_of(parent)` when computing the substs of anonymous constants
- the default anon consts substs only include the typeflags we assume it does.

Implementing that filtering will be left as future work.

---

The idea of this PR is to delay the creation of the anon const substs until after we've computed `predicates_of` for the parent of the anon const. As the predicates of the parent can however contain the anon const we still have to create a `ty::Const` for it.

We do this by changing the substs field of `ty::Unevaluated` to an option and modifying accesses to instead call the method `unevaluated.substs(tcx)` which returns the substs as before. If the substs - now `substs_` -  of `ty::Unevaluated` are `None`, it means that the anon const currently has its default substs, i.e. the substs it has when first constructed, which are the generic parameters it has available. To be able to call `unevaluated.substs(tcx)` in a `TypeVisitor`, we add the non-defaulted method `fn tcx_for_anon_const_substs(&self) -> Option<TyCtxt<'tcx>>`. In case `tcx_for_anon_const_substs` returns `None`, unknown anon const default substs are skipped entirely.

Even when `substs_` is `None` we still have to treat the constant as if it has its default substs. To do this, `TypeFlags` are modified so that it is clear whether they can still change when *exposing* any anon const default substs. A new flag, `HAS_UNKNOWN_DEFAULT_CONST_SUBSTS`, is added in case some default flags are missing.

The rest of this PR are some smaller changes to either not cause cycles by trying to access the default anon const substs too early or to be able to access the `tcx` in previously unused locations.

cc `@rust-lang/project-const-generics`
r? `@nikomatsakis`

2 years agoRollup merge of #88348 - spastorino:field-types-tait-test, r=oli-obk
Manish Goregaokar [Thu, 26 Aug 2021 19:38:15 +0000 (12:38 -0700)]
Rollup merge of #88348 - spastorino:field-types-tait-test, r=oli-obk

Add field types tait tests

r? ```@oli-obk```

Related to #86727

2 years agoRollup merge of #88346 - spastorino:revert-type-of-a-let2, r=jackh726
Manish Goregaokar [Thu, 26 Aug 2021 19:38:14 +0000 (12:38 -0700)]
Rollup merge of #88346 - spastorino:revert-type-of-a-let2, r=jackh726

Revert "Add type of a let tait test impl trait straight in let"

This reverts commit dbadab54df148b55b2e884440bfaeaa38517e6e8.
This is not part of TAITs, so, if tested should probably be done
elsewhere.

r? ````@oli-obk````

This is similar to what I was commenting here https://github.com/rust-lang/rust/pull/88332#discussion_r695939901
These is not part of TAITs so should not live in type-alias-impl-trait test directory.
I'm going to avoid adding this kind of tests in `type-alias-impl-trait` test directory and avoid thinking about them in this pass.

2 years agoRollup merge of #88340 - thomcc:c_size_t, r=joshtriplett
Manish Goregaokar [Thu, 26 Aug 2021 19:38:13 +0000 (12:38 -0700)]
Rollup merge of #88340 - thomcc:c_size_t, r=joshtriplett

Add `c_size_t` and `c_ssize_t` to `std::os::raw`.

Apparently these aren't guaranteed to be the same, and are merely "always the same in practice" (see https://rust-lang.zulipchat.com/#narrow/stream/136281-t-lang.2Fwg-unsafe-code-guidelines/topic/.60usize.60.20vs.20.60size_t.60).

This is a big footgun, but I suspect it can be alleviated if we expose this and start migrating people to it in advance of any platforms that ever have this as different.

I'll file a tracking issue after this gets some traction.

2 years agoRollup merge of #88332 - spastorino:argument-types-tait-test, r=oli-obk
Manish Goregaokar [Thu, 26 Aug 2021 19:38:12 +0000 (12:38 -0700)]
Rollup merge of #88332 - spastorino:argument-types-tait-test, r=oli-obk

Add argument types tait tests

r? ``@oli-obk``

Related to #86727

2 years agoRollup merge of #88320 - sexxi-goose:issue-88103, r=nikomatsakis
Manish Goregaokar [Thu, 26 Aug 2021 19:38:11 +0000 (12:38 -0700)]
Rollup merge of #88320 - sexxi-goose:issue-88103, r=nikomatsakis

type_implements_trait consider obligation failure on overflow

Fixes: #88103
2 years agoRollup merge of #88289 - durin42:llvm-14-attrs, r=nikic
Manish Goregaokar [Thu, 26 Aug 2021 19:38:10 +0000 (12:38 -0700)]
Rollup merge of #88289 - durin42:llvm-14-attrs, r=nikic

Fixes for LLVM change 0f45c16f2caa7c035e5c3edd40af9e0d51ad6ba7

More details in the individual commit messages, but the summary is: LLVM deleted an unused-to-them method that we used, we worked around it to avoid annoying cleanup/restructuring in the Rust-side code.

2 years agoRollup merge of #88270 - lqd:hrtb-type-ascription, r=nikomatsakis
Manish Goregaokar [Thu, 26 Aug 2021 19:38:09 +0000 (12:38 -0700)]
Rollup merge of #88270 - lqd:hrtb-type-ascription, r=nikomatsakis

Handle type ascription type ops in NLL HRTB diagnostics

Currently, there are still a few cases of the "higher-ranked subtype error" of yore, 4 of which are related to type ascription.

This PR is a follow-up to #86700, adding support for type ascription type ops, and makes 3 of these tests output the same diagnostics in NLL mode as the migrate mode (and 1 is now much closer, especially if you ignore that it already outputs an additional error in NLL mode -- which could be a duplicate caused by a lack of normalization like [these comments point out](https://github.com/rust-lang/rust/blob/9583fd1bdd0127328e25e5b8c24dff575ec2c86b/compiler/rustc_traits/src/type_op.rs#L122-L157), or an imprecision in some parts of normalization as [described here](https://github.com/rust-lang/rust/pull/86700#discussion_r689086688)).

Since we discussed these recently:
- [here](https://github.com/rust-lang/rust/pull/86700#discussion_r689158868), cc ````@matthewjasper,````
- and [here](https://github.com/rust-lang/rust/issues/57374#issuecomment-901500856), cc ````@Aaron1011.````

It should only leave [this TAIT test](https://github.com/rust-lang/rust/blob/9583fd1bdd0127328e25e5b8c24dff575ec2c86b/src/test/ui/type-alias-impl-trait/issue-57611-trait-alias.rs) as still emitting [the terse error](https://github.com/rust-lang/rust/blob/9583fd1bdd0127328e25e5b8c24dff575ec2c86b/src/test/ui/type-alias-impl-trait/issue-57611-trait-alias.nll.stderr).

r? ````@estebank```` (so that they shake their fist at NLL's general direction less often) or ````@nikomatsakis```` or matthew or aaron, the more the merrier.

2 years agoRollup merge of #88216 - kornelski:from_layout_err, r=kennytm
Manish Goregaokar [Thu, 26 Aug 2021 19:38:08 +0000 (12:38 -0700)]
Rollup merge of #88216 - kornelski:from_layout_err, r=kennytm

Don't stabilize creation of TryReserveError instances

#48043 + https://github.com/rust-lang/rust/pull/87993#issuecomment-903189016

2 years agoRollup merge of #88215 - jyn514:lazy-loading, r=petrochenkov
Manish Goregaokar [Thu, 26 Aug 2021 19:38:07 +0000 (12:38 -0700)]
Rollup merge of #88215 - jyn514:lazy-loading, r=petrochenkov

Reland #83738: "rustdoc: Don't load all extern crates unconditionally"

I hopefully found all the bugs :crossed_fingers: time for a take two. See the last commit for details on what went wrong before.

r? `@petrochenkov` (but feel free to reassign to Guillaume if you don't have time.)

Closes https://github.com/rust-lang/rust/issues/68427. Includes a fix for https://github.com/rust-lang/rust/issues/84738.

2 years agoRollup merge of #88123 - camelid:tup-pat-precise-spans, r=estebank
Manish Goregaokar [Thu, 26 Aug 2021 19:38:06 +0000 (12:38 -0700)]
Rollup merge of #88123 - camelid:tup-pat-precise-spans, r=estebank

Make spans for tuple patterns in E0023 more precise

As suggested in #86307. Closes #86307.

r? ````@estebank````

2 years agoRollup merge of #87832 - wesleywiser:fix_match_step, r=davidtwco
Manish Goregaokar [Thu, 26 Aug 2021 19:38:05 +0000 (12:38 -0700)]
Rollup merge of #87832 - wesleywiser:fix_match_step, r=davidtwco

Fix debugger stepping behavior with `match` expressions

Previously, we would set up the source lines for `match` expressions so
that the code generated to perform the test of the scrutinee was matched
to the line of the arm that required the test and then jump from the arm
block to the "next" block was matched to all of the lines in the `match`
expression.

While that makes sense, it has the side effect of causing strange
stepping behavior in debuggers.

I've changed the source information so that all of the generated tests
are sourced to `match {scrutinee}` and the jumps are sourced to the last
line of the block they are inside. This resolves the weird stepping
behavior in all debuggers and resolves some instances of "ambiguous
symbol" errors in WinDbg preventing the user from setting breakpoints at
`match` expressions.

Before:

https://user-images.githubusercontent.com/831192/128577421-ee0c9c03-da28-4d16-997a-d57988a7bb7f.mp4

After:

https://user-images.githubusercontent.com/831192/128577433-2ceab04d-953e-4e31-9387-93f049c71ff3.mp4

Fixes #87817

2 years agoAuto merge of #87194 - eddyb:const-value-mangling, r=michaelwoerister,oli-obk
bors [Thu, 26 Aug 2021 19:15:09 +0000 (19:15 +0000)]
Auto merge of #87194 - eddyb:const-value-mangling, r=michaelwoerister,oli-obk

rustc_symbol_mangling: support structural constants and &str in v0.

This PR should unblock #85530 (except for float `const` generics, which AFAIK should've never worked).
(cc `@tmiasko` could the https://github.com/rust-lang/rust/pull/85530#issuecomment-857855379 failures be retried with a quick crater "subset" run of this PR + changing the default to `v0`? Just to make sure I didn't miss anything other than the floats)

The encoding is the one suggested before in e.g. https://github.com/rust-lang/rust/issues/61486#issuecomment-878932102, tho this PR won't by itself finish #61486, before closing that we'd likely want to move to `@oli-obk's` "valtrees" (i.e. #83234 and other associated work).

<hr>

**EDITs**:
1. switched unit/tuple/braced-with-named-fields `<const-fields>` prefixes from `"u"`/`"T"`/`""` to `"U"`/`"T"`/`"S"` to avoid the ambiguity reported by `@tmiasko` in https://github.com/rust-lang/rust/pull/87194#issuecomment-884279921.

2. `rustc-demangle` PR: https://github.com/alexcrichton/rustc-demangle/pull/55

3. RFC amendment PR: https://github.com/rust-lang/rfcs/pull/3161
    * also removed the grammar changes included in that PR, from this description

4. added tests (temporarily using my fork of `rustc-demangle`)

<hr>

r? `@michaelwoerister`

2 years ago`#[inline]` non-generic `pub fn`s in `rustc_target::abi` and `ty::layout`.
Eduard-Mihai Burtescu [Wed, 25 Aug 2021 12:53:08 +0000 (15:53 +0300)]
`#[inline]` non-generic `pub fn`s in `rustc_target::abi` and `ty::layout`.

2 years agocompiletest: allow `.` in remote test paths (can arise from revisions).
Eduard-Mihai Burtescu [Thu, 26 Aug 2021 17:20:08 +0000 (20:20 +0300)]
compiletest: allow `.` in remote test paths (can arise from revisions).

2 years agoFix the bugs and add a regression test
Joshua Nelson [Sat, 21 Aug 2021 20:14:56 +0000 (20:14 +0000)]
Fix the bugs and add a regression test

- All attributes for an item need to be considered at once, they can't
  be considered a line at a time.
- The top-level crate was not being visited. This bug was caught by
  `extern-crate-used-only-in-link`, which I'm very glad I added.
- Make the loader private to the module, so that only one function is
  exposed.

2 years agoAuto merge of #88308 - eddyb:cooked-layouts, r=nagisa
bors [Thu, 26 Aug 2021 15:24:01 +0000 (15:24 +0000)]
Auto merge of #88308 - eddyb:cooked-layouts, r=nagisa

Morph `layout_raw` query into `layout_of`.

Before this PR, `LayoutCx::layout_of` wrapped the `layout_raw` query, to:
* normalize the type, before attempting to compute the layout
* pass the layout to `record_layout_for_printing`, for `-Zprint-type-sizes`

Moving those two responsibilities into the query may reduce overhead (due to cached calls skipping those steps), but I want to do a perf run to know.

One of the changes I had to make was changing the return type of the query, to be able to both get out the type produced by normalizing inside the query *and* to match the signature of the old `TyCtxt::layout_of`. This change may be worse, perf-wise, so that's another reason I want to check.

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

2 years agoRustWrapper: adapt to LLVM change 0f45c16f2caa
Augie Fackler [Tue, 24 Aug 2021 13:44:17 +0000 (09:44 -0400)]
RustWrapper: adapt to LLVM change 0f45c16f2caa

The above-mentioned commit (part of the LLVM 14 development cycle)
removes a method that rustc uses somewhat extensively. We mostly switch
to lower-level methods that exist in all versions of LLVM we use, so no
new ifdef logic is required in most cases.

2 years agoAdd argument types tait tests
Santiago Pastorino [Wed, 25 Aug 2021 15:49:39 +0000 (12:49 -0300)]
Add argument types tait tests

2 years agoAdd test for stepping though `match` expressions
Wesley Wiser [Fri, 6 Aug 2021 18:13:10 +0000 (14:13 -0400)]
Add test for stepping though `match` expressions

2 years agoAuto merge of #83698 - erikdesjardins:undefconst, r=RalfJung,oli-obk
bors [Thu, 26 Aug 2021 10:49:25 +0000 (10:49 +0000)]
Auto merge of #83698 - erikdesjardins:undefconst, r=RalfJung,oli-obk

Use undef for uninitialized bytes in constants

Fixes #83657

This generates good code when the const is fully uninit, e.g.

```rust
#[no_mangle]
pub const fn fully_uninit() -> MaybeUninit<[u8; 10]> {
    const M: MaybeUninit<[u8; 10]> = MaybeUninit::uninit();
    M
}
```
generates
```asm
fully_uninit:
ret
```

as you would expect.

There is no improvement, however, when it's partially uninit, e.g.

```rust
pub struct PartiallyUninit {
    x: u64,
    y: MaybeUninit<[u8; 10]>
}

#[no_mangle]
pub const fn partially_uninit() -> PartiallyUninit {
    const X: PartiallyUninit = PartiallyUninit { x: 0xdeadbeefcafe, y: MaybeUninit::uninit() };
    X
}
```
generates
```asm
partially_uninit:
mov rax, rdi
mov rcx, qword ptr [rip + .L__unnamed_1+16]
mov qword ptr [rdi + 16], rcx
movups xmm0, xmmword ptr [rip + .L__unnamed_1]
movups xmmword ptr [rdi], xmm0
ret

.L__unnamed_1:
.asciz "\376\312\357\276\255\336\000"
.zero 16
.size .L__unnamed_1, 24
```
which copies a bunch of zeros in place of the undef bytes, the same as before this change.

Edit: generating partially-undef constants isn't viable at the moment anyways due to #84565, so it's disabled

2 years agorebase
lcnr [Thu, 26 Aug 2021 09:04:01 +0000 (11:04 +0200)]
rebase

2 years agooptimize `HasTypeFlagsVisitor`
lcnr [Tue, 17 Aug 2021 08:23:51 +0000 (10:23 +0200)]
optimize `HasTypeFlagsVisitor`

2 years agoinline stuff
lcnr [Mon, 9 Aug 2021 08:38:27 +0000 (10:38 +0200)]
inline stuff

2 years agoadd fixme
lcnr [Wed, 4 Aug 2021 08:17:06 +0000 (10:17 +0200)]
add fixme

2 years agotype flags
lcnr [Wed, 4 Aug 2021 07:34:46 +0000 (09:34 +0200)]
type flags

2 years agoreview
lcnr [Mon, 2 Aug 2021 07:56:05 +0000 (09:56 +0200)]
review

2 years agoshrink `ty::PredicateKind` again
lcnr [Mon, 2 Aug 2021 06:47:15 +0000 (08:47 +0200)]
shrink `ty::PredicateKind` again

2 years agois_polymorphic doesn't matter for tests
lcnr [Mon, 19 Jul 2021 15:20:24 +0000 (17:20 +0200)]
is_polymorphic doesn't matter for tests

2 years agoupdate mir diffs
lcnr [Mon, 19 Jul 2021 14:59:19 +0000 (16:59 +0200)]
update mir diffs

2 years agoignore const substs in `implicit_infer`
lcnr [Mon, 19 Jul 2021 12:05:13 +0000 (14:05 +0200)]
ignore const substs in `implicit_infer`

2 years agouse `ty::Unevaluated` instead of def substs pair
lcnr [Mon, 19 Jul 2021 11:52:43 +0000 (13:52 +0200)]
use `ty::Unevaluated` instead of def substs pair

2 years agocheck for cycles in `default_anon_const_substs`
lcnr [Mon, 19 Jul 2021 11:03:29 +0000 (13:03 +0200)]
check for cycles in `default_anon_const_substs`

2 years agodon't just compare `ty::Const`
lcnr [Mon, 19 Jul 2021 10:13:25 +0000 (12:13 +0200)]
don't just compare `ty::Const`

2 years agoupdate `TypeFlags` to deal with missing ct substs
lcnr [Sat, 17 Jul 2021 16:48:07 +0000 (18:48 +0200)]
update `TypeFlags` to deal with missing ct substs

2 years agoadd `tcx` to `fn walk`
lcnr [Sat, 17 Jul 2021 14:43:23 +0000 (16:43 +0200)]
add `tcx` to `fn walk`

2 years agomake unevaluated const substs optional
lcnr [Mon, 15 Mar 2021 23:05:45 +0000 (00:05 +0100)]
make unevaluated const substs optional

2 years agorequire a `tcx` for `TypeVisitor`
lcnr [Sat, 13 Mar 2021 15:05:15 +0000 (16:05 +0100)]
require a `tcx` for `TypeVisitor`

2 years agoAuto merge of #88222 - jyn514:shared-cache, r=GuillaumeGomez
bors [Thu, 26 Aug 2021 08:04:29 +0000 (08:04 +0000)]
Auto merge of #88222 - jyn514:shared-cache, r=GuillaumeGomez

rustdoc: Move Cache from Context to SharedContext

r? `@camelid`

2 years agoAuto merge of #88066 - LeSeulArtichaut:patterns-cleanups, r=nagisa
bors [Thu, 26 Aug 2021 05:23:35 +0000 (05:23 +0000)]
Auto merge of #88066 - LeSeulArtichaut:patterns-cleanups, r=nagisa

Use if-let guards in the codebase and various other pattern cleanups

Dogfooding if-let guards as experimentation for the feature.

Tracking issue #51114. Conflicts with #87937.

2 years agoAuto merge of #88069 - Mark-Simulacrum:llvm-pgo, r=pietroalbini
bors [Thu, 26 Aug 2021 01:14:16 +0000 (01:14 +0000)]
Auto merge of #88069 - Mark-Simulacrum:llvm-pgo, r=pietroalbini

PGO for LLVM builds on x86_64-unknown-linux-gnu in CI

This shows up to 6% less instruction counts with larger - up to 18% - wins on cycles
on multiple benchmarks, and up to 19% wins on the -j1 wall times for rustc self-compilation.

We can afford to spend the extra cycles building LLVM essentially once more for
the x86_64-unknown-linux-gnu CI build today. The builder finishes in around 50
minutes on average, and this adds just 10 more minutes. Given the sizeable
improvements in compiler performance, this is definitely worth it.

2 years agoAdd field types tait tests
Santiago Pastorino [Wed, 25 Aug 2021 23:07:12 +0000 (20:07 -0300)]
Add field types tait tests

2 years agoRevert "Add type of a let tait test impl trait straight in let"
Santiago Pastorino [Wed, 25 Aug 2021 22:14:50 +0000 (19:14 -0300)]
Revert "Add type of a let tait test impl trait straight in let"

This reverts commit dbadab54df148b55b2e884440bfaeaa38517e6e8.
This is not part of TAITs, so, if tested should probably be done
elsewhere.

2 years agoReference tracking issue
Thom Chiovoloni [Wed, 25 Aug 2021 21:58:17 +0000 (14:58 -0700)]
Reference tracking issue

2 years agouse a peekable iterator to check the first chunk
Erik Desjardins [Wed, 25 Aug 2021 21:44:27 +0000 (17:44 -0400)]
use a peekable iterator to check the first chunk

2 years agoyet more comment improvements
Erik Desjardins [Wed, 25 Aug 2021 21:40:57 +0000 (17:40 -0400)]
yet more comment improvements

2 years agoimprove comments
Erik Desjardins [Sun, 15 Aug 2021 16:24:58 +0000 (12:24 -0400)]
improve comments

2 years agoput code in a more logical order
Erik Desjardins [Sat, 14 Aug 2021 18:13:06 +0000 (14:13 -0400)]
put code in a more logical order

2 years agoadd comments
Erik Desjardins [Sat, 14 Aug 2021 17:54:35 +0000 (13:54 -0400)]
add comments

2 years agoimplement InitMaskCompressed using InitChunkIter, cleanup
Erik Desjardins [Wed, 11 Aug 2021 03:16:11 +0000 (23:16 -0400)]
implement InitMaskCompressed using InitChunkIter, cleanup

2 years agooptimize initialization checks
Erik Desjardins [Tue, 10 Aug 2021 23:29:18 +0000 (19:29 -0400)]
optimize initialization checks

2 years agoimprove comment
Erik Desjardins [Tue, 10 Aug 2021 05:26:33 +0000 (01:26 -0400)]
improve comment

2 years agodon't generate partially-undef consts
Erik Desjardins [Tue, 27 Apr 2021 04:15:41 +0000 (00:15 -0400)]
don't generate partially-undef consts

2 years agouse undef for uninitialized bytes in constants
Erik Desjardins [Wed, 31 Mar 2021 04:06:01 +0000 (00:06 -0400)]
use undef for uninitialized bytes in constants

2 years agoAdjust spans
Noah Lev [Wed, 25 Aug 2021 21:40:06 +0000 (14:40 -0700)]
Adjust spans

* Highlight the whole pattern if it has no fields
* Highlight the whole definition if it has no fields
* Only highlight the pattern name if the pattern is multi-line
* Determine whether a pattern is multi-line based on distance from name
  to last field, rather than first field

2 years agoBump download-ci-llvm stamp
Mark Rousskov [Wed, 25 Aug 2021 18:33:23 +0000 (14:33 -0400)]
Bump download-ci-llvm stamp

This will ensure the optimized LLVM is used for local builds after rebasing
immediately, rather than needing to wait for a future LLVM bump.

2 years agoBump sccache used in CI to v0.2.15
Mark Rousskov [Tue, 24 Aug 2021 21:15:14 +0000 (17:15 -0400)]
Bump sccache used in CI to v0.2.15

This skips bumping Windows sccache because we run into compilation failures when
doing so (-m32 not supported by clang-cl?). Not clear on cause, but seems
easiest to just hold back.

This should avoid PGO-related failures encountered on Linux, and more broadly
seems like a good idea on other platforms as well (though it is likely not
necessary right this moment).

2 years agoAuto merge of #85499 - jackh726:assoc-type-norm-rebase, r=nikomatsakis
bors [Wed, 25 Aug 2021 20:08:00 +0000 (20:08 +0000)]
Auto merge of #85499 - jackh726:assoc-type-norm-rebase, r=nikomatsakis

Normalize projections under binders

Fixes #70243
Fixes #70120
Fixes #62529
Fixes #87219

Issues to followup on after (probably fixed, but no test added here):
#76956
#56556
#79207
#85636

r? `@nikomatsakis`

2 years agoBless NLL compare mode
jackh726 [Wed, 25 Aug 2021 20:06:52 +0000 (16:06 -0400)]
Bless NLL compare mode

2 years agoFix debugger stepping behavior around `match` expressions
Wesley Wiser [Fri, 23 Jul 2021 22:55:36 +0000 (18:55 -0400)]
Fix debugger stepping behavior around `match` expressions

Previously, we would set up the source lines for `match` expressions so
that the code generated to perform the test of the scrutinee was matched
to the line of the arm that required the test and then jump from the arm
block to the "next" block was matched to all of the lines in the `match`
expression.

While that makes sense, it has the side effect of causing strange
stepping behavior in debuggers.

I've changed the source information so that all of the generated tests
are sourced to `match {scrutinee}` and the jumps are sourced to the last
line of the block they are inside. This resolves the weird stepping
behavior in all debuggers and resolves some instances of "ambiguous
symbol" errors in WinDbg preventing the user from setting breakpoints at
`match` expressions.

2 years agoAdd `c_size_t` and `c_ssize_t` to `std::os::raw`.
Thom Chiovoloni [Wed, 25 Aug 2021 18:25:26 +0000 (11:25 -0700)]
Add `c_size_t` and `c_ssize_t` to `std::os::raw`.

2 years agoVarious pattern cleanups
Léo Lanteri Thauvin [Mon, 16 Aug 2021 15:30:23 +0000 (17:30 +0200)]
Various pattern cleanups

2 years agoUse if-let guards in the codebase
Léo Lanteri Thauvin [Mon, 16 Aug 2021 15:29:49 +0000 (17:29 +0200)]
Use if-let guards in the codebase

2 years agoAuto merge of #88329 - LeSeulArtichaut:rollup-blg8hc0, r=LeSeulArtichaut
bors [Wed, 25 Aug 2021 16:22:57 +0000 (16:22 +0000)]
Auto merge of #88329 - LeSeulArtichaut:rollup-blg8hc0, r=LeSeulArtichaut

Rollup of 16 pull requests

Successful merges:

 - #87944 (add Cell::as_array_of_cells, similar to Cell::as_slice_of_cells)
 - #88156 (Adjust / fix documentation of `Arc::make_mut`)
 - #88157 (bootstrap.py: recognize riscv64 when auto-detect)
 - #88196 (Refactor `named_asm_labels` to a HIR lint)
 - #88218 (Remove `Session.trait_methods_not_found`)
 - #88223 (Remove the `TryV2` alias)
 - #88226 (Fix typo “a Rc” → “an Rc” (and a few more))
 - #88267 (2229: Update signature for truncate function)
 - #88273 (Fix references to `ControlFlow` in docs)
 - #88277 (Update books)
 - #88291 (Add SAFETY comments to core::slice::sort::partition_in_blocks)
 - #88293 (Fix grammar in alloc test)
 - #88298 (Errorkind reorder)
 - #88299 (Stabilise BufWriter::into_parts)
 - #88314 (Add type of a let tait test)
 - #88325 (Add mutable-noalias to the release notes for 1.54)

Failed merges:

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

2 years agotrailing whitespace
Niko Matsakis [Wed, 25 Aug 2021 16:09:48 +0000 (12:09 -0400)]
trailing whitespace

2 years agoupdate docs for `type_implements_trait`
Niko Matsakis [Wed, 25 Aug 2021 15:39:35 +0000 (11:39 -0400)]
update docs for `type_implements_trait`

2 years agoRollup merge of #88325 - jyn514:noalias, r=XAMPPRocky
Léo Lanteri Thauvin [Wed, 25 Aug 2021 13:49:03 +0000 (15:49 +0200)]
Rollup merge of #88325 - jyn514:noalias, r=XAMPPRocky

Add mutable-noalias to the release notes for 1.54

It was enabled in #82834 and disabled in 1.53 by #86036, but it was never disabled on (then) nightly, so it still landed in 1.54.

This was mentioned on https://github.com/rust-lang/rust/pull/86696 but never made it into the release notes.

r? `@XAMPPRocky` cc `@nikic`

2 years agoRollup merge of #88314 - spastorino:type-of-a-let-tait-test, r=oli-obk
Léo Lanteri Thauvin [Wed, 25 Aug 2021 13:49:02 +0000 (15:49 +0200)]
Rollup merge of #88314 - spastorino:type-of-a-let-tait-test, r=oli-obk

Add type of a let tait test

r? `@oli-obk`

Related to #86727

2 years agoRollup merge of #88299 - ijackson:bufwriter, r=Mark-Simulacrum
Léo Lanteri Thauvin [Wed, 25 Aug 2021 13:49:01 +0000 (15:49 +0200)]
Rollup merge of #88299 - ijackson:bufwriter, r=Mark-Simulacrum

Stabilise BufWriter::into_parts

The FCP for this has already completed, in #80690.

This was just blocked on #85901 (which changed the name), which is now merged.  The original stabilisation MR was #84770 but that has a lot of noise in it, and I also accidentally deleted the branch while trying to tidy up.  So here is a new MR.  Sorry for the noise.

Closes #80690

2 years agoRollup merge of #88298 - ijackson:errorkind-reorder, r=dtolnay
Léo Lanteri Thauvin [Wed, 25 Aug 2021 13:49:00 +0000 (15:49 +0200)]
Rollup merge of #88298 - ijackson:errorkind-reorder, r=dtolnay

Errorkind reorder

I was doing a bit more work in this area and the untidiness of these two orderings bothered me.

The commit messages have the detailed rationale.  For your convenience, I c&p them here:

```
    io::ErrorKind: rationalise ordering in main enum

    It is useful to keep some coherent structure to this ordering.  In
    particular, Other and Uncategorized should be next to each other, at
    the end.

    Also it seems to make sense to treat UnexpectedEof and OutOfMemory
    specially, since they are not like the other errors (despite
    OutOfMemory also being generatable by some OS errors).

    So:
     * Move Other to the end, just before Uncategorized
     * Move Unsupported to between Interrupted and UnexpectedEof
     * Add some comments documenting where to add things
```

```
    io::Error: alphabeticise the match in as_str()

    There was no rationale for the previous ordering.
```

r? kennytm   since that's who rust-highfive picked before, in #88294 which I accidentally closed.

2 years agoRollup merge of #88293 - est31:fix_grammar, r=Mark-Simulacrum
Léo Lanteri Thauvin [Wed, 25 Aug 2021 13:48:59 +0000 (15:48 +0200)]
Rollup merge of #88293 - est31:fix_grammar, r=Mark-Simulacrum

Fix grammar in alloc test

2 years agoRollup merge of #88291 - mdsn:partition-in-blocks-safety, r=Mark-Simulacrum
Léo Lanteri Thauvin [Wed, 25 Aug 2021 13:48:58 +0000 (15:48 +0200)]
Rollup merge of #88291 - mdsn:partition-in-blocks-safety, r=Mark-Simulacrum

Add SAFETY comments to core::slice::sort::partition_in_blocks

A few more SAFETY comments for #66219. There are still a few more in this module.

`@rustbot` label T-libs T-compiler C-cleanup

2 years agoRollup merge of #88277 - ehuss:update-books, r=ehuss
Léo Lanteri Thauvin [Wed, 25 Aug 2021 13:48:57 +0000 (15:48 +0200)]
Rollup merge of #88277 - ehuss:update-books, r=ehuss

Update books

## reference

1 commits in 4884fe45c14f8b22121760fb117181bb4da8dfe0..da6ea9b03f74cae0a292f40315723d7a3a973637
2021-07-28 21:31:28 -0700 to 2021-08-19 21:28:10 -0700
- Allow users to change status labels (rust-lang/reference#1083)

## book

7 commits in 7e49659102f0977d9142190e1ba23345c0f00eb1..687e21bde2ea10c261f79fa14797c5137425098d
2021-08-03 21:41:35 -0400 to 2021-08-18 20:48:38 -0400
- Small tweaks to Ferris size and position
- Retain previous height: auto just in case
- Shrink and move ferris when possible
- Snapshot chapter 6 for nostarch
- Demonstrate variable as catch-all for match. Fixes rust-lang/book#1868.
- Improve the if let example to have a binding pattern. Fixes rust-lang/book#1401.
- Fixes typo (rust-lang/book#2816)

## rust-by-example

1 commits in 0dc9cd4e89f00cb5230f120e1a083916386e422b..04f489c889235fe3b6dfe678ae5410d07deda958
2021-07-23 09:14:27 -0300 to 2021-08-17 08:01:20 -0300
- Grammar mistake (rust-lang/rust-by-example#1456)

## rustc-dev-guide

5 commits in c4644b427cbdaafc7a87be0ccdf5d8aaa07ac35f..cf0e151b7925a40f13fbc6573c6f97d5f94c7c17
2021-08-10 20:41:44 +0900 to 2021-08-22 11:47:02 -0300
- Fix typo “a Rc” → “an Rc” (rust-lang/rustc-dev-guide#1191)
- Expand THIR section with more details (rust-lang/rustc-dev-guide#1183)
- Remove docs for old -Z profile-queries flag
- update mdbook version to latest
- allow to quickly edit a page directly on github

2 years agoRollup merge of #88273 - jhpratt:update-iterator-docs, r=jyn514
Léo Lanteri Thauvin [Wed, 25 Aug 2021 13:48:55 +0000 (15:48 +0200)]
Rollup merge of #88273 - jhpratt:update-iterator-docs, r=jyn514

Fix references to `ControlFlow` in docs

The `Iterator::for_each` method previously stated that it was not possible to use `break` and `continue` in it — this has been updated to acknowledge the stabilization of `ControlFlow`. Additionally, `ControlFlow` was referred to as `crate::ops::ControlFlow` which is not the correct path for an end user.

r? `@jyn514`

2 years agoRollup merge of #88267 - sexxi-goose:truncate_unique, r=nikomatsakis
Léo Lanteri Thauvin [Wed, 25 Aug 2021 13:48:54 +0000 (15:48 +0200)]
Rollup merge of #88267 - sexxi-goose:truncate_unique, r=nikomatsakis

2229: Update signature for truncate function

r? `@nikomatsakis`

2 years agoRollup merge of #88226 - steffahn:an_rc, r=michaelwoerister
Léo Lanteri Thauvin [Wed, 25 Aug 2021 13:48:53 +0000 (15:48 +0200)]
Rollup merge of #88226 - steffahn:an_rc, r=michaelwoerister

Fix typo “a Rc” → “an Rc” (and a few more)

After stumbling about it in the dev-guide, I’ve devided to eliminate all mentions of “a Rc”, replacing it with “an Rc”. E.g.
```plain
$ rg "(^|[^'])\ba\b[^\w=:]*\bRc"
compiler/rustc_data_structures/src/owning_ref/mod.rs
1149:/// Typedef of a owning reference that uses a `Rc` as the owner.

library/std/src/ffi/os_str.rs
919:    /// Converts a [`OsString`] into a [`Rc`]`<OsStr>` without copying or allocating.

library/std/src/ffi/c_str.rs
961:    /// Converts a [`CString`] into a [`Rc`]`<CStr>` without copying or allocating.

src/doc/rustc-dev-guide/src/query.md
61:are cheaply cloneable; insert a `Rc` if necessary).

src/doc/book/src/ch15-06-reference-cycles.md
72:decreases the reference count of the `a` `Rc<List>` instance from 2 to 1 as

library/alloc/src/rc.rs
1746:    /// Converts a generic type `T` into a `Rc<T>`
```
_(the match in the book is a false positive)_
Since the dev-guide is a submodule, it’s getting a separate PR: rust-lang/rustc-dev-guide#1191

I’ve also gone ahead and done the same search for `RwLock` and hit a few cases in the `OwningRef` adaption. Then, I couldn’t keep the countless cases of “a owning …” or “a owner” unaddressed, which concludes this PR.

`@rustbot` label C-cleanup

2 years agoRollup merge of #88223 - scottmcm:fix-alias, r=yaahc
Léo Lanteri Thauvin [Wed, 25 Aug 2021 13:48:52 +0000 (15:48 +0200)]
Rollup merge of #88223 - scottmcm:fix-alias, r=yaahc

Remove the `TryV2` alias

Post-bootstrap-update cleanup.

(No more `try_trait_transition` feature.)

2 years agoRollup merge of #88218 - Aaron1011:missing-method-dyn, r=nagisa
Léo Lanteri Thauvin [Wed, 25 Aug 2021 13:48:51 +0000 (15:48 +0200)]
Rollup merge of #88218 - Aaron1011:missing-method-dyn, r=nagisa

Remove `Session.trait_methods_not_found`

Instead, avoid registering the problematic well-formed obligation
to begin with. This removes global untracked mutable state,
and avoids potential issues with incremental compilation.

2 years agoRollup merge of #88196 - asquared31415:named-asm-labels-refactor, r=Amanieu
Léo Lanteri Thauvin [Wed, 25 Aug 2021 13:48:50 +0000 (15:48 +0200)]
Rollup merge of #88196 - asquared31415:named-asm-labels-refactor, r=Amanieu

Refactor `named_asm_labels` to a HIR lint

As discussed on #88169, the `named_asm_labels` lint could be moved to a HIR lint.  That allows future lints or custom plugins or clippy lints to more easily access the `asm!` macro's data and create better error messages with the lints.

2 years agoRollup merge of #88157 - Icenowy:bootstrap-riscv64, r=Mark-Simulacrum
Léo Lanteri Thauvin [Wed, 25 Aug 2021 13:48:49 +0000 (15:48 +0200)]
Rollup merge of #88157 - Icenowy:bootstrap-riscv64, r=Mark-Simulacrum

bootstrap.py: recognize riscv64 when auto-detect

The architecture auto-detect table has no entry for riscv64 (which rustc
uses riscv64gc for the first part of triplet, assuming it's a generic
Linux distro).

Add it to the table to allow riscv64 systems to bootstrap Rust.

Signed-off-by: Icenowy Zheng <icenowy@aosc.io>
2 years agoRollup merge of #88156 - steffahn:arc_make_mut_and_weak, r=Mark-Simulacrum
Léo Lanteri Thauvin [Wed, 25 Aug 2021 13:48:48 +0000 (15:48 +0200)]
Rollup merge of #88156 - steffahn:arc_make_mut_and_weak, r=Mark-Simulacrum

Adjust / fix documentation of `Arc::make_mut`

Related discussion in the users forum:
[Whatʼs this alleged difference between Arc::make_mut and Rc::make_mut? – The Rust Programming Language Forum](https://users.rust-lang.org/t/what-s-this-alleged-difference-between-arc-make-mut-and-rc-make-mut/63747?u=steffahn)

Also includes a small formatting improvement in the documentation of `Rc::make_mut`.

This PR makes the two documentations in question complete analogs. The previously claimed point in which one “differs from the behavior of” the other turns out to be incorrect, AFAIK.

One remaining inaccuracy: `Weak` pointers aren’t disassociated from the allocation but only from the contained value, i.e. in case of outstanding `Weak` pointers there still is a new allocation created, just the call to `.clone()` is avoided, instead the value is moved from one allocation to the other.

`@rustbot` label T-libs-api, A-docs

2 years agoRollup merge of #87944 - oconnor663:as_array_of_cells, r=scottmcm
Léo Lanteri Thauvin [Wed, 25 Aug 2021 13:48:47 +0000 (15:48 +0200)]
Rollup merge of #87944 - oconnor663:as_array_of_cells, r=scottmcm

add Cell::as_array_of_cells, similar to Cell::as_slice_of_cells

I'd like to propose adding `Cell::as_array_of_cells`, as a natural analog to `Cell::as_slice_of_cells`. I don't have a specific use case in mind, other than that supporting slices but not arrays feels like a gap. Do other folks agree with that intuition? Would this addition be substantial enough to need an RFC?

---

Previously, converting `&mut [T; N]` to `&[Cell<T>; N]` looks like this:

```rust
let array = &mut [1, 2, 3];
let cells: &[Cell<i32>; 3] = Cell::from_mut(&mut array[..])
    .as_slice_of_cells()
    .try_into()
    .unwrap();
```

With this new helper method, it looks like this:

```rust
let array = &mut [1, 2, 3];
let cells = Cell::from_mut(array).as_array_of_cells();
```

2 years agoAuto merge of #87937 - LeSeulArtichaut:active-if-let-guards, r=nagisa
bors [Wed, 25 Aug 2021 13:42:02 +0000 (13:42 +0000)]
Auto merge of #87937 - LeSeulArtichaut:active-if-let-guards, r=nagisa

Don't mark `if_let_guard` as an incomplete feature

I don't think there is any reason for `if_let_guard` to be an incomplete feature, and I think the reason they were marked in the first place was simply because they weren't implemented at all.

r? `@pnkfelix`
cc tracking issue #51114

2 years agoAdd mutable-noalias to the release notes for 1.54
Joshua Nelson [Wed, 25 Aug 2021 12:11:48 +0000 (07:11 -0500)]
Add mutable-noalias to the release notes for 1.54

2 years agoAuto merge of #85344 - cbeuw:remap-across-cwd, r=michaelwoerister
bors [Wed, 25 Aug 2021 10:58:43 +0000 (10:58 +0000)]
Auto merge of #85344 - cbeuw:remap-across-cwd, r=michaelwoerister

Correctly handle remapping from path containing the current directory with trailing paths

If we have a `auxiliary/lib.rs`, and we generate the metadata with `--remap-path-prefix $PWD/auxiliary=xyz`, the path to `$PWD/auxiliary/lib.rs` won't be correctly remapped in the metadata. This is because internally, path to the working directory itself and relative paths to files under the working directory are remapped separately (hence neither are affected since neither has `$PWD/auxiliary` as prefix), but the concatenation between the working directory and the relative path is not remapped. This PR fixes that.

2 years agoAuto merge of #87875 - asquared31415:generic-lang-items, r=cjgillot
bors [Wed, 25 Aug 2021 08:12:16 +0000 (08:12 +0000)]
Auto merge of #87875 - asquared31415:generic-lang-items, r=cjgillot

Improve detection of generics on lang items

Adds detection for the required generics for all lang items.  Many lang items require an exact or minimum amount of generic arguments and if they don't exist, the compiler will ICE.  This does not add any additional validation about bounds on generics or any other lang item restrictions.

Fixes one of the ICEs in #87573

cc `@FabianWolff`

2 years agotype_implements_trait consider obligation failure on overflow
Aman Arora [Wed, 25 Aug 2021 07:52:24 +0000 (03:52 -0400)]
type_implements_trait consider obligation failure on overflow

2 years agoAuto merge of #84333 - tmiasko:liveness-yield, r=tmandry
bors [Wed, 25 Aug 2021 05:31:26 +0000 (05:31 +0000)]
Auto merge of #84333 - tmiasko:liveness-yield, r=tmandry

Improve liveness analysis for generators

Liveness analysis for generators assumes that execution always continues
normally after a yield point, not accounting for the fact that generator
could be dropped before completion.

If generators captures any variables by reference, those variables could
be used within a generator, or when the generator completes, but also
after each yield point in the case the generator is dropped.

Account for the case when generator is dropped after yielding, but
before running to the completion. This effectively considers all
variables captured by reference to be used after a yield point.

Fixes #84292.

2 years agoReview comments
jackh726 [Wed, 25 Aug 2021 02:26:48 +0000 (22:26 -0400)]
Review comments

2 years agoAlso ignore typeoutlives predicates
jackh726 [Fri, 23 Jul 2021 18:26:02 +0000 (14:26 -0400)]
Also ignore typeoutlives predicates

2 years agoNormalize only after failure
jackh726 [Fri, 23 Jul 2021 04:10:56 +0000 (00:10 -0400)]
Normalize only after failure

2 years agoNormalize associated types with bound vars
Jack Huey [Mon, 3 May 2021 13:25:32 +0000 (09:25 -0400)]
Normalize associated types with bound vars