]> git.lizzy.rs Git - rust.git/log
rust.git
3 years agoFix intra-doc links for primitives
Joshua Nelson [Sun, 20 Sep 2020 06:18:09 +0000 (02:18 -0400)]
Fix intra-doc links for primitives

- Add `PrimTy::name` and `PrimTy::name_str`
- Use those new functions to distinguish between the name in scope and
the canonical name
- Fix diagnostics for primitive types
- Add tests for primitives

3 years agoPerform most diagnostic lookups in `resolution_failure`
Joshua Nelson [Sun, 20 Sep 2020 04:32:00 +0000 (00:32 -0400)]
Perform most diagnostic lookups in `resolution_failure`

Previously, these were spread throughout the codebase. This had two
drawbacks:

1. It caused the fast path to be slower: even if a link resolved,
rustdoc would still perform various lookups for the error diagnostic.
2. It was inconsistent and didn't always give all diagnostics (https://github.com/rust-lang/rust/issues/76925)

Now, diagnostics only perform expensive lookups in the error case.
Additionally, the error handling is much more consistent, both in
wording and behavior.

- Remove `CannotHaveAssociatedItems`, `NotInScope`, `NoAssocItem`, and `NotAVariant`
  in favor of the more general `NotResolved`

  `resolution_failure` will now look up which of the four above
  categories is relevant, instead of requiring the rest of the code to
  be consistent and accurate in which it picked.

- Remove unnecessary lookups throughout the intra-doc link pass. These
are now done by `resolution_failure`.
  + Remove unnecessary `extra_fragment` argument to `variant_field()`;
    it was only used to do lookups on failure.
  + Remove various lookups related to associated items
  + Remove distinction between 'not in scope' and 'no associated item'

- Don't perform unnecessary copies
- Remove unused variables and code
- Update tests
- Note why looking at other namespaces is still necessary
- 'has no inner item' -> 'contains no item'

bless tests

3 years agoAuto merge of #76626 - jyn514:x.py-changelog, r=Mark-Simulacrum
bors [Tue, 22 Sep 2020 10:36:41 +0000 (10:36 +0000)]
Auto merge of #76626 - jyn514:x.py-changelog, r=Mark-Simulacrum

Add a changelog for x.py and nag contributors until they read it

Add a changelog for x.py

- Add a changelog and instructions for updating it
- Use `changelog-seen` in `config.toml` and `VERSION` in bootstrap to determine whether the changelog has been read.  There's no way to tie reading the changelog to updating the version, so unfortunately they still have to update `config.toml` manually. Actually reading the changelog is optional, anyone can set `changelog-seen = N` without reading (although it's not recommended).
- Nag people if they haven't read the x.py changelog
  + Print message twice to make sure it's seen
- Give different error messages depending on whether the version needs to be updated or added

Closes https://github.com/rust-lang/rust/issues/76617
r? `@Mark-Simulacrum`

3 years agoAuto merge of #76906 - Nicholas-Baron:shorten_typeck_check, r=oli-obk
bors [Tue, 22 Sep 2020 08:11:07 +0000 (08:11 +0000)]
Auto merge of #76906 - Nicholas-Baron:shorten_typeck_check, r=oli-obk

Split rustc_typeck::check into separate files

Contributing to #60302.

3 years agoAuto merge of #76799 - Mark-Simulacrum:fix-cross-compile-dist, r=alexcrichton
bors [Tue, 22 Sep 2020 06:02:21 +0000 (06:02 +0000)]
Auto merge of #76799 - Mark-Simulacrum:fix-cross-compile-dist, r=alexcrichton

Fix cross compiling dist/build invocations

I am uncertain why the first commit is not affecting CI. I suspect it's because we pass --disable-docs on most of our cross-compilation builders. The second commit doesn't affect CI because CI runs x.py dist, not x.py build.

Both commits are standalone; together they should resolve #76733. The first commit doesn't really fix that issue but rather just fixes cross-compiled x.py dist, resolving a bug introduced in #76549.

3 years agoAuto merge of #77039 - ecstatic-morse:rollup-qv3jj4a, r=ecstatic-morse
bors [Tue, 22 Sep 2020 03:45:30 +0000 (03:45 +0000)]
Auto merge of #77039 - ecstatic-morse:rollup-qv3jj4a, r=ecstatic-morse

Rollup of 13 pull requests

Successful merges:

 - #72734 (Reduce duplicate in liballoc reserve error handling)
 - #76131 (Don't use `zip` to compare iterators during pretty-print hack)
 - #76150 (Don't recommend ManuallyDrop to customize drop order)
 - #76275 (Implementation of Write for some immutable ref structs)
 - #76489 (Add explanation for E0756)
 - #76581 (do not ICE on bound variables, return `TooGeneric` instead)
 - #76655 (Make some methods of `Pin` unstable const)
 - #76783 (Only get ImplKind::Impl once)
 - #76807 (Use const-checking to forbid use of unstable features in const-stable functions)
 - #76888 (use if let instead of single match arm expressions)
 - #76914 (extend `Ty` and `TyCtxt` lints to self types)
 - #77022 (Reduce boilerplate for BytePos and CharPos)
 - #77032 (lint missing docs for extern items)

Failed merges:

r? `@ghost`

3 years agoRollup merge of #77032 - lcnr:visit-all-the-item-likes, r=davidtwco
ecstatic-morse [Tue, 22 Sep 2020 03:41:01 +0000 (20:41 -0700)]
Rollup merge of #77032 - lcnr:visit-all-the-item-likes, r=davidtwco

lint missing docs for extern items

fixes #76991

3 years agoRollup merge of #77022 - Juici:master, r=lcnr
ecstatic-morse [Tue, 22 Sep 2020 03:40:59 +0000 (20:40 -0700)]
Rollup merge of #77022 - Juici:master, r=lcnr

Reduce boilerplate for BytePos and CharPos

Reduces boilerplate code for BytePos and CharPos by using a macro to implement shared traits.

3 years agoRollup merge of #76914 - lcnr:path-no-more, r=ecstatic-morse
ecstatic-morse [Tue, 22 Sep 2020 03:40:57 +0000 (20:40 -0700)]
Rollup merge of #76914 - lcnr:path-no-more, r=ecstatic-morse

extend `Ty` and `TyCtxt` lints to self types

blocked on #76891

r? @ecstatic-morse cc @Aaron1011

3 years agoRollup merge of #76888 - matthiaskrgr:clippy_single_match_2, r=Dylan-DPC
ecstatic-morse [Tue, 22 Sep 2020 03:40:55 +0000 (20:40 -0700)]
Rollup merge of #76888 - matthiaskrgr:clippy_single_match_2, r=Dylan-DPC

use if let instead of single match arm expressions

use if let instead of single match arm expressions to compact code and reduce nesting (clippy::single_match)

3 years agoRollup merge of #76807 - ecstatic-morse:const-checking-staged-api, r=oli-obk
ecstatic-morse [Tue, 22 Sep 2020 03:40:53 +0000 (20:40 -0700)]
Rollup merge of #76807 - ecstatic-morse:const-checking-staged-api, r=oli-obk

Use const-checking to forbid use of unstable features in const-stable functions

First step towards #76618.

Currently this code isn't ever hit because `qualify_min_const_fn` runs first and catches pretty much everything. One exception is `const_precise_live_drops`, which does not use the newly added code since it runs as part of a separate pass.

Also contains some unrelated refactoring, which is split into separate commits.

r? @oli-obk

3 years agoRollup merge of #76783 - lzutao:rd_impl_kind, r=GuillaumeGomez
ecstatic-morse [Tue, 22 Sep 2020 03:40:51 +0000 (20:40 -0700)]
Rollup merge of #76783 - lzutao:rd_impl_kind, r=GuillaumeGomez

Only get ImplKind::Impl once

With this, the code panics in one place instead of two.

3 years agoRollup merge of #76655 - CDirkx:const-pin, r=ecstatic-morse
ecstatic-morse [Tue, 22 Sep 2020 03:40:49 +0000 (20:40 -0700)]
Rollup merge of #76655 - CDirkx:const-pin, r=ecstatic-morse

Make some methods of `Pin` unstable const

Make the following methods unstable const under the `const_pin` feature:
- `new`
- `new_unchecked`
- `into_inner`
- `into_inner_unchecked`
- `get_ref`
- `into_ref`
- `get_mut`
- `get_unchecked_mut`

Of these, `into_inner` and `into_inner_unchecked` require the unstable `const_precise_live_drops`.

Also adds tests for these methods in a const context.

Tracking issue: #76654

r? @ecstatic-morse

3 years agoRollup merge of #76581 - lcnr:bound-too-generic, r=eddyb
ecstatic-morse [Tue, 22 Sep 2020 03:40:47 +0000 (20:40 -0700)]
Rollup merge of #76581 - lcnr:bound-too-generic, r=eddyb

do not ICE on bound variables, return `TooGeneric` instead

fixes #73260, fixes #74634, fixes #76595

r? @nikomatsakis

3 years agoRollup merge of #76489 - GuillaumeGomez:add-explanation-e0756, r=jyn514
ecstatic-morse [Tue, 22 Sep 2020 03:40:46 +0000 (20:40 -0700)]
Rollup merge of #76489 - GuillaumeGomez:add-explanation-e0756, r=jyn514

Add explanation for E0756

r? @pickfire

3 years agoRollup merge of #76275 - FedericoPonzi:immutable-write-impl-73836, r=dtolnay
ecstatic-morse [Tue, 22 Sep 2020 03:40:44 +0000 (20:40 -0700)]
Rollup merge of #76275 - FedericoPonzi:immutable-write-impl-73836, r=dtolnay

Implementation of Write for some immutable ref structs

Fixes  #73836

3 years agoRollup merge of #76150 - matklad:droporder, r=withoutboats
ecstatic-morse [Tue, 22 Sep 2020 03:40:41 +0000 (20:40 -0700)]
Rollup merge of #76150 - matklad:droporder, r=withoutboats

Don't recommend ManuallyDrop to customize drop order

See
https://internals.rust-lang.org/t/need-for-controlling-drop-order-of-fields/12914/21
for the discussion.

TL;DR: ManuallyDrop is unsafe and footguny, but you can just ask the compiler to do all the work for you by re-ordering declarations.

Specifically, the original example from the docs is much better written as

```rust
struct Peach;
struct Banana;
struct Melon;
struct FruitBox {
    melon: Melon,
    // XXX: mind the relative drop order of the fields below
    peach: Peach,
    banana: Banana,
}
```

3 years agoRollup merge of #76131 - Aaron1011:fix/pretty-print-zip, r=lcnr
ecstatic-morse [Tue, 22 Sep 2020 03:40:39 +0000 (20:40 -0700)]
Rollup merge of #76131 - Aaron1011:fix/pretty-print-zip, r=lcnr

Don't use `zip` to compare iterators during pretty-print hack

If the right-hand iterator has exactly one more element than the
left-hand iterator, then both iterators will be fully consumed, but
the extra element will never be compared.

Split out from https://github.com/rust-lang/rust/pull/76130

3 years agoRollup merge of #72734 - pickfire:liballoc, r=KodrAus
ecstatic-morse [Tue, 22 Sep 2020 03:40:37 +0000 (20:40 -0700)]
Rollup merge of #72734 - pickfire:liballoc, r=KodrAus

Reduce duplicate in liballoc reserve error handling

Not sure if it affects compilation time.

3 years agoAuto merge of #76913 - vandenheuvel:performance_debug, r=lcnr
bors [Tue, 22 Sep 2020 00:22:24 +0000 (00:22 +0000)]
Auto merge of #76913 - vandenheuvel:performance_debug, r=lcnr

Fixing the performance regression of #76244

Issue https://github.com/rust-lang/rust/issues/74865 suggested that removing the `def_id` field from `ParamEnv` would improve performance. PR https://github.com/rust-lang/rust/pull/76244 implemented this change.

Generally, [results](https://perf.rust-lang.org/compare.html?start=80fc9b0ecb29050d45b17c64af004200afd3cfc2&end=5ef250dd2ad618ee339f165e9b711a1b4746887d) were as expected: an instruction count decrease of about a percent. The instruction count for the unicode crates increased by about 3%, which `@nnethercote` speculated to be caused by a quirk of inlining or codegen. As the results were generally positive, and for chalk integration, this was also a step in the right direction, the PR was r+'d regardless.

However, [wall-time performance results](https://perf.rust-lang.org/compare.html?start=a055c5a1bd95e029e9b31891db63b6dc8258b472&end=7402a394471a6738a40fea7d4f1891666e5a80c5&stat=task-clock) show a much larger performance degradation: 25%, as [mentioned](https://github.com/rust-lang/rust/pull/76244#issuecomment-694459840) by `@Mark-Simulacrum.`

This PR, for now, reverts #76244 and attempts to find out, which change caused the regression.

3 years agoAuto merge of #76683 - simonvandel:inst-combine-deref, r=oli-obk
bors [Mon, 21 Sep 2020 22:04:16 +0000 (22:04 +0000)]
Auto merge of #76683 - simonvandel:inst-combine-deref, r=oli-obk

Add optimization to avoid load of address

Look for the sequence
```rust
_2 = &_1;
...
_5 = (*_2)
```

in which we can replace the last statement with `_5 = _1` to avoid the load of _2

3 years agolint missing docs for extern items
Bastian Kauschke [Mon, 21 Sep 2020 21:48:39 +0000 (23:48 +0200)]
lint missing docs for extern items

3 years agoRun the test with explicit -O such that Add is generated instead of CheckedAdd
Simon Vandel Sillesen [Mon, 21 Sep 2020 20:15:30 +0000 (22:15 +0200)]
Run the test with explicit -O such that Add is generated instead of CheckedAdd

This makes the test run deterministic regardless of noopt testruns

3 years agoAdd optimization to avoid load of address
Simon Vandel Sillesen [Sun, 13 Sep 2020 20:38:36 +0000 (22:38 +0200)]
Add optimization to avoid load of address

3 years agoAuto merge of #77003 - joshtriplett:remove-duplicate-link-libraries, r=Mark-Simulacrum
bors [Mon, 21 Sep 2020 19:52:13 +0000 (19:52 +0000)]
Auto merge of #77003 - joshtriplett:remove-duplicate-link-libraries, r=Mark-Simulacrum

Remove duplicated library links between std and libc

The libc crate is already responsible for linking in the appropriate
libraries, and std doing the same thing results in duplicated library
names on the linker command line. Removing this duplication slightly
reduces linker time, and makes it simpler to adjust the set or order of
linked libraries in one place (such as to add static linking support).

3 years agoDon't use `zip` to compare iterators during pretty-print hack
Aaron Hill [Sun, 30 Aug 2020 22:08:16 +0000 (18:08 -0400)]
Don't use `zip` to compare iterators during pretty-print hack

If the right-hand iterator has exactly one more element than the
left-hand iterator, then both iterators will be fully consumed, but
the extra element will never be compared.

3 years agoAdd explanation for E0756
Guillaume Gomez [Tue, 8 Sep 2020 19:02:18 +0000 (21:02 +0200)]
Add explanation for E0756

3 years agoRemove cast to usize for BytePos and CharPos
James Whaley [Mon, 21 Sep 2020 18:42:43 +0000 (19:42 +0100)]
Remove cast to usize for BytePos and CharPos

The case shouldn't be necessary and implicitly truncating BytePos is not
desirable.

3 years agoadd test
Bastian Kauschke [Mon, 21 Sep 2020 18:28:52 +0000 (20:28 +0200)]
add test

3 years agoAuto merge of #76680 - Julian-Wollersberger:nongeneric_ensure_sufficient_stack, r...
bors [Mon, 21 Sep 2020 17:32:57 +0000 (17:32 +0000)]
Auto merge of #76680 - Julian-Wollersberger:nongeneric_ensure_sufficient_stack, r=jyn514

Make `ensure_sufficient_stack()` non-generic, using cargo-llvm-lines

Inspired by [this blog post](https://blog.mozilla.org/nnethercote/2020/08/05/how-to-speed-up-the-rust-compiler-some-more-in-2020/) from `@nnethercote,` I used [cargo-llvm-lines](https://github.com/dtolnay/cargo-llvm-lines/) on the rust compiler itself, to improve it's compile time. This PR contains only one low-hanging fruit, but I also want to share some measurements.

The function `ensure_sufficient_stack()` was monomorphized 1500 times, and with it the `stacker` and `psm` crates, for a total of 1.5% of all llvm IR lines. With some trickery I convert the generic closure into a dynamic one, and thus all that code is only monomorphized once.

# Measurements
Getting these numbers took some fiddling with CLI flags and I [modified](https://github.com/Julian-Wollersberger/cargo-llvm-lines/blob/master/src/main.rs#L115) cargo-llvm-lines to read from a folder instead of invoking cargo. Commands I used:
```
./x.py clean
RUSTFLAGS="--emit=llvm-ir -C link-args=-fuse-ld=lld -Z self-profile=profile" CARGOFLAGS_BOOTSTRAP="-Ztimings" RUSTC_BOOTSTRAP=1 ./x.py build -i --stage 1 library/std

# Then manually copy all .ll files into a folder I hardcoded in cargo-llvm-lines in main.rs#L115
cd ../cargo-llvm-lines
cargo run llvm-lines
```

The result is this list (see [first 500 lines](https://github.com/Julian-Wollersberger/cargo-llvm-lines/blob/master/llvm-lines-rustc-before.txt) ), before the change:
```
  Lines            Copies        Function name
  -----            ------        -------------
  16894211 (100%)  58417 (100%)  (TOTAL)
   2223855 (13.2%)   502 (0.9%)  rustc_query_system::query::plumbing::get_query_impl::{{closure}}
   1331918 (7.9%)   1287 (2.2%)  hashbrown::raw::RawTable<T>::reserve_rehash
    774434 (4.6%)  12043 (20.6%) core::ptr::drop_in_place
    294170 (1.7%)    499 (0.9%)  rustc_query_system::dep_graph::graph::DepGraph<K>::with_task_impl
    245410 (1.5%)   1552 (2.7%)  psm::on_stack::with_on_stack
    210311 (1.2%)      1 (0.0%)  rustc_target::spec::load_specific
    200962 (1.2%)    513 (0.9%)  rustc_query_system::query::plumbing::get_query_impl
    190704 (1.1%)      1 (0.0%)  rustc_middle::ty::query::<impl rustc_middle::ty::context::TyCtxt>::alloc_self_profile_query_strings
    180272 (1.1%)    468 (0.8%)  rustc_query_system::query::plumbing::load_from_disk_and_cache_in_memory
    177396 (1.1%)    114 (0.2%)  rustc_query_system::query::plumbing::force_query_impl
    161134 (1.0%)    445 (0.8%)  rustc_query_system::dep_graph::graph::DepGraph<K>::with_anon_task
    141551 (0.8%)    186 (0.3%)  rustc_query_system::query::plumbing::incremental_verify_ich
    110191 (0.7%)      7 (0.0%)  rustc_middle::ty::context::_DERIVE_rustc_serialize_Decodable_D_FOR_TypeckResults::<impl rustc_serialize::serialize::Decodable<__D> for rustc_middle::ty::context::TypeckResults>::decode::{{closure}}
    108590 (0.6%)    420 (0.7%)  core::ops::function::FnOnce::call_once
     88488 (0.5%)     21 (0.0%)  rustc_query_system::dep_graph::graph::DepGraph<K>::try_mark_previous_green
     86368 (0.5%)      1 (0.0%)  rustc_middle::ty::query::stats::query_stats
     85654 (0.5%)   3973 (6.8%)  <&T as core::fmt::Debug>::fmt
     84475 (0.5%)      1 (0.0%)  rustc_middle::ty::query::Queries::try_collect_active_jobs
     81220 (0.5%)    862 (1.5%)  <hashbrown::raw::RawIterHash<T> as core::iter::traits::iterator::Iterator>::next
     77636 (0.5%)     54 (0.1%)  core::slice::sort::recurse
     66484 (0.4%)    461 (0.8%)  <hashbrown::raw::RawIter<T> as core::iter::traits::iterator::Iterator>::next
```

All `.ll` files together had 4.4GB. After my change they had 4.2GB. So a few percent less code LLVM has to process. Hurray!
Sadly, I couldn't measure an actual wall-time improvement. Watching YouTube while compiling added to much noise...

Here is the top of the list after the change:
```
  16460866 (100%)  58341 (100%)  (TOTAL)
   1903085 (11.6%)   504 (0.9%)  rustc_query_system::query::plumbing::get_query_impl::{{closure}}
   1331918 (8.1%)   1287 (2.2%)  hashbrown::raw::RawTable<T>::reserve_rehash
    777796 (4.7%)  12031 (20.6%) core::ptr::drop_in_place
    551462 (3.4%)   1519 (2.6%)  rustc_data_structures::stack::ensure_sufficient_stack::{{closure}}
```
Note that the total was reduced by 430 000 lines and `psm::on_stack::with_on_stack` has disappeared. Instead `rustc_data_structures::stack::ensure_sufficient_stack::{{closure}}` appeared. I'm confused about that one, but it seems to consist of inlined calls to `rustc_query_system::*` stuff.

Further note the other two big culprits in this list: `rustc_query_system` and `hashbrown`. These two are monomorphized many times, the query system summing to more than 20% of all lines, not even counting code that's probably inlined elsewhere.
Assuming compile times scale linearly with llvm-lines, that means a possible 20% compile time reduction.

Reducing eg. `get_query_impl` would probably need a major refactoring of the qery system though. _Everything_ in there is generic over multiple types, has associated types and passes generic Self arguments by value. Which means you can't simply make things `dyn`.

---------------------------------------
This PR is a small step to make rustc compile faster and thus make contributing to rustc less painful. Nonetheless I love Rust and I find the work around rustc fascinating :)

3 years agoReduce boilerplate for BytePos and CharPos
James Whaley [Mon, 21 Sep 2020 17:27:43 +0000 (18:27 +0100)]
Reduce boilerplate for BytePos and CharPos

3 years agoAdded back the '// ignore-file-length' with an explanation
Nicholas-Baron [Mon, 21 Sep 2020 16:16:55 +0000 (09:16 -0700)]
Added back the '// ignore-file-length' with an explanation

3 years agoAuto merge of #77013 - RalfJung:rollup-84ut0xq, r=RalfJung
bors [Mon, 21 Sep 2020 15:06:20 +0000 (15:06 +0000)]
Auto merge of #77013 - RalfJung:rollup-84ut0xq, r=RalfJung

Rollup of 10 pull requests

Successful merges:

 - #76439 (Add error explanation for E0755)
 - #76521 (Fix segfault if pthread_getattr_np fails)
 - #76835 (make replace_prefix only take &str as arguments )
 - #76967 (Revert adding Atomic::from_mut.)
 - #76977 (Add a regression test for copy propagation miscompilation)
 - #76981 (liballoc bench use imported path Bencher)
 - #76983 (BTreeMap: extra testing & fixed comments)
 - #76996 (Fix typo in rustc_lexer docs)
 - #77009 (Dogfood total_cmp in the test crate)
 - #77012 (update Miri for another bugfix)

Failed merges:

 - #76489 (Add explanation for E0756)

r? `@ghost`

3 years agoRollup merge of #77012 - RalfJung:miri, r=RalfJung
Ralf Jung [Mon, 21 Sep 2020 13:30:51 +0000 (15:30 +0200)]
Rollup merge of #77012 - RalfJung:miri, r=RalfJung

update Miri for another bugfix

3 years agoRollup merge of #77009 - est31:dogfood_total_cmp, r=lcnr
Ralf Jung [Mon, 21 Sep 2020 13:30:49 +0000 (15:30 +0200)]
Rollup merge of #77009 - est31:dogfood_total_cmp, r=lcnr

Dogfood total_cmp in the test crate

3 years agoRollup merge of #76996 - LingMan:patch-1, r=ecstatic-morse
Ralf Jung [Mon, 21 Sep 2020 13:30:47 +0000 (15:30 +0200)]
Rollup merge of #76996 - LingMan:patch-1, r=ecstatic-morse

Fix typo in rustc_lexer docs

Also add an Oxford comma while we're editing that line.

3 years agoRollup merge of #76983 - ssomers:btree_extra_test, r=Mark-Simulacrum
Ralf Jung [Mon, 21 Sep 2020 13:30:46 +0000 (15:30 +0200)]
Rollup merge of #76983 - ssomers:btree_extra_test, r=Mark-Simulacrum

BTreeMap: extra testing & fixed comments

r? @Mark-Simulacrum

3 years agoRollup merge of #76981 - pickfire:patch-5, r=Mark-Simulacrum
Ralf Jung [Mon, 21 Sep 2020 13:30:44 +0000 (15:30 +0200)]
Rollup merge of #76981 - pickfire:patch-5, r=Mark-Simulacrum

liballoc bench use imported path Bencher

test is already in scope, no need to use the full path

3 years agoRollup merge of #76977 - tmiasko:issue-76740, r=wesleywiser
Ralf Jung [Mon, 21 Sep 2020 13:30:42 +0000 (15:30 +0200)]
Rollup merge of #76977 - tmiasko:issue-76740, r=wesleywiser

Add a regression test for copy propagation miscompilation

3 years agoRollup merge of #76967 - fusion-engineering-forks:revert-atomic-from-mut, r=kodrAus
Ralf Jung [Mon, 21 Sep 2020 13:30:41 +0000 (15:30 +0200)]
Rollup merge of #76967 - fusion-engineering-forks:revert-atomic-from-mut, r=kodrAus

Revert adding Atomic::from_mut.

This reverts #74532, which made too many assumptions about platforms, breaking some things.

Will need to be added later with a better way of gating on proper alignment, without hardcoding cfg(target_arch)s.

---

To be merged if fixing from_mut (#76965) takes too long.

r? @ghost

3 years agoRollup merge of #76835 - matthiaskrgr:replace_prefix, r=lcnr
Ralf Jung [Mon, 21 Sep 2020 13:30:39 +0000 (15:30 +0200)]
Rollup merge of #76835 - matthiaskrgr:replace_prefix, r=lcnr

make replace_prefix only take &str as arguments

included the clippy::manual strip commit to not run into merge conflicts later.

r? @lcnr

3 years agoRollup merge of #76521 - tavianator:fix-pthread-getattr-destroy, r=Amanieu
Ralf Jung [Mon, 21 Sep 2020 13:30:37 +0000 (15:30 +0200)]
Rollup merge of #76521 - tavianator:fix-pthread-getattr-destroy, r=Amanieu

Fix segfault if pthread_getattr_np fails

glibc [destroys][1] the passed pthread_attr_t if pthread_getattr_np()
fails.  Destroying it again leads to a segfault.  Fix it by only
destroying it on success for glibc.

[1]: https://sourceware.org/git/?p=glibc.git;a=blob;f=nptl/pthread_getattr_np.c;h=ce437205e41dc05653e435f6188768cccdd91c99;hb=HEAD#l205

3 years agoRollup merge of #76439 - GuillaumeGomez:add-error-explanation-e0755, r=pickfire,jyn514
Ralf Jung [Mon, 21 Sep 2020 13:30:34 +0000 (15:30 +0200)]
Rollup merge of #76439 - GuillaumeGomez:add-error-explanation-e0755, r=pickfire,jyn514

Add error explanation for E0755

r? @pickfire

3 years agoupdate Miri for another bugfix
Ralf Jung [Mon, 21 Sep 2020 13:26:50 +0000 (15:26 +0200)]
update Miri for another bugfix

3 years agoAdd a changelog for x.py
Joshua Nelson [Sat, 12 Sep 2020 02:55:16 +0000 (22:55 -0400)]
Add a changelog for x.py

- Add a changelog and instructions for updating it
- Use `changelog-seen` in `config.toml` and `VERSION` in bootstrap to determine whether the changelog has been read
- Nag people if they haven't read the x.py changelog
  + Print message twice to make sure it's seen
- Give different error messages depending on whether the version needs to be updated or added

3 years agoAuto merge of #74040 - lcnr:const-occurs-check, r=nikomatsakis
bors [Mon, 21 Sep 2020 12:52:09 +0000 (12:52 +0000)]
Auto merge of #74040 - lcnr:const-occurs-check, r=nikomatsakis

fix unification of const variables

r? `@nikomatsakis` `@varkor` `@eddyb` let's just ping everyone here :sweat_smile:

3 years agoDon't recommend ManuallyDrop to customize drop order
Aleksey Kladov [Mon, 31 Aug 2020 10:32:37 +0000 (12:32 +0200)]
Don't recommend ManuallyDrop to customize drop order

See
https://internals.rust-lang.org/t/need-for-controlling-drop-order-of-fields/12914/21
for the discussion.

TL;DR: ManuallyDrop is unsafe and footguny, but you can just ask the
compiler to do all the work for you by re-ordering declarations.

3 years agoadd tests
Bastian Kauschke [Wed, 9 Sep 2020 07:43:53 +0000 (09:43 +0200)]
add tests

3 years agocheck for cycles when unifying const variables
Bastian Kauschke [Wed, 9 Sep 2020 07:43:47 +0000 (09:43 +0200)]
check for cycles when unifying const variables

3 years agoAuto merge of #77004 - RalfJung:rollup-usac4nv, r=RalfJung
bors [Mon, 21 Sep 2020 10:26:59 +0000 (10:26 +0000)]
Auto merge of #77004 - RalfJung:rollup-usac4nv, r=RalfJung

Rollup of 13 pull requests

Successful merges:

 - #76135 (Stabilize some Option methods as const)
 - #76628 (Add sample defaults for config.toml )
 - #76846 (Avoiding unnecesary allocations at rustc_errors)
 - #76867 (Use intra-doc links in core/src/iter when possible)
 - #76868 (Finish moving to intra doc links for std::sync)
 - #76872 (Remove DeclareMethods)
 - #76936 (Add non-`unsafe` `.get_mut()` for `Unsafecell`)
 - #76958 (Replace manual as_nanos and as_secs_f64 reimplementations)
 - #76959 (Replace write_fmt with write!)
 - #76961 (Add test for issue #34634)
 - #76962 (Use const_cstr macro in consts.rs)
 - #76963 (Remove unused static_assert macro)
 - #77000 (update Miri)

Failed merges:

r? `@ghost`

3 years agoDogfood total_cmp in the test crate
est31 [Mon, 21 Sep 2020 10:13:26 +0000 (12:13 +0200)]
Dogfood total_cmp in the test crate

3 years agofix InterpCx resolve
Bastian Kauschke [Wed, 9 Sep 2020 07:43:18 +0000 (09:43 +0200)]
fix InterpCx resolve

3 years agoRollup merge of #77000 - RalfJung:miri, r=RalfJung
Ralf Jung [Mon, 21 Sep 2020 08:40:49 +0000 (10:40 +0200)]
Rollup merge of #77000 - RalfJung:miri, r=RalfJung

update Miri

I'd like to get https://github.com/rust-lang/miri/pull/1556 out there to avoid some backwards-incompatible changes.
r? @ghost Cc @rust-lang/miri

3 years agoRollup merge of #76963 - est31:remove_static_assert, r=oli-obk
Ralf Jung [Mon, 21 Sep 2020 08:40:47 +0000 (10:40 +0200)]
Rollup merge of #76963 - est31:remove_static_assert, r=oli-obk

Remove unused static_assert macro

3 years agoRollup merge of #76962 - est31:const_cstr, r=oli-obk
Ralf Jung [Mon, 21 Sep 2020 08:40:45 +0000 (10:40 +0200)]
Rollup merge of #76962 - est31:const_cstr, r=oli-obk

Use const_cstr macro in consts.rs

3 years agoRollup merge of #76961 - bugadani:test-34634, r=Mark-Simulacrum
Ralf Jung [Mon, 21 Sep 2020 08:40:43 +0000 (10:40 +0200)]
Rollup merge of #76961 - bugadani:test-34634, r=Mark-Simulacrum

Add test for issue #34634

Closes #34634

3 years agoRollup merge of #76959 - est31:write, r=oli-obk
Ralf Jung [Mon, 21 Sep 2020 08:40:41 +0000 (10:40 +0200)]
Rollup merge of #76959 - est31:write, r=oli-obk

Replace write_fmt with write!

Latter is simpler

3 years agoRollup merge of #76958 - est31:ns, r=oli-obk
Ralf Jung [Mon, 21 Sep 2020 08:40:39 +0000 (10:40 +0200)]
Rollup merge of #76958 - est31:ns, r=oli-obk

Replace manual as_nanos and as_secs_f64 reimplementations

3 years agoRollup merge of #76936 - danielhenrymantilla:unsafecell_get_mut, r=RalfJung
Ralf Jung [Mon, 21 Sep 2020 08:40:37 +0000 (10:40 +0200)]
Rollup merge of #76936 - danielhenrymantilla:unsafecell_get_mut, r=RalfJung

Add non-`unsafe` `.get_mut()` for `Unsafecell`

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

As discussed in: https://internals.rust-lang.org/t/add-non-unsafe-get-mut-for-unsafecell/12407

  - ### [Rendered documentation](https://modest-dubinsky-1f9f47.netlify.app/core/cell/struct.unsafecell)

This PR tries to move the sound `&mut UnsafeCell<T> -> &mut T` projection that all the "downstream" constructions were already relying on, up to the root abstraction, where it rightfully belongs, and officially blessing it.

  - this **helps reduce the amount of `unsafe` snippets out there** (_c.f._, the second commit of this PR: https://github.com/rust-lang/rust/pull/76936/commits/09503fd1b30c83ca605546fa3f899721e41e68c6)

The fact that this getter is now expose for `UnsafeCell<T>` itself, will also help convey the idea that **`UnsafeCell` is not magical _w.r.t._ `&mut` accesses**, contrary to what some people incorrectly think.

  - Even the standard library itself at some point had such a confusion, _c.f._ this comment where there is a mention of multi-threaded (and thus _shared_) access despite dealing with exclusive references over unique ownership: https://github.com/rust-lang/rust/blob/59fb88d061544a035f3043b47594b34789204cee/library/core/src/cell.rs#L498-L499

r? @RalfJung

3 years agoRollup merge of #76872 - khyperia:remove_declare_methods, r=eddyb
Ralf Jung [Mon, 21 Sep 2020 08:40:35 +0000 (10:40 +0200)]
Rollup merge of #76872 - khyperia:remove_declare_methods, r=eddyb

Remove DeclareMethods

Most of the `DeclareMethods` API was only used internally by rustc_codegen_llvm. As such, it makes no sense to require other backends to implement them.

(`get_declared_value` and `declare_cfn` were used, in one place, specific to the `main` symbol, which I've replaced with a more specialized function to allow more flexibility in implementation - the intent is that `declare_c_main` can go away once we do something more clever, e.g. @eddyb has ideas around having a MIR shim or somesuch we can explore in a follow-up PR)

3 years agoRollup merge of #76868 - poliorcetics:intra-doc-std-sync, r=jyn514
Ralf Jung [Mon, 21 Sep 2020 08:40:33 +0000 (10:40 +0200)]
Rollup merge of #76868 - poliorcetics:intra-doc-std-sync, r=jyn514

Finish moving to intra doc links for std::sync

Helps with #75080.

@rustbot modify labels: T-doc A-intra-doc-links

r? @jyn514

3 years agoRollup merge of #76867 - poliorcetics:intra-doc-core-iter, r=jyn514
Ralf Jung [Mon, 21 Sep 2020 08:40:32 +0000 (10:40 +0200)]
Rollup merge of #76867 - poliorcetics:intra-doc-core-iter, r=jyn514

Use intra-doc links in core/src/iter when possible

Helps with #75080.

I also updated lots of links to use `fn()` instead of `fn` when possible.

@rustbot modify labels: T-doc A-intra-doc-links

r? @jyn514

3 years agoRollup merge of #76846 - botika:master, r=davidtwco
Ralf Jung [Mon, 21 Sep 2020 08:40:30 +0000 (10:40 +0200)]
Rollup merge of #76846 - botika:master, r=davidtwco

Avoiding unnecesary allocations at rustc_errors

Simplify the code avoiding allocations with easy alternative

3 years agoRollup merge of #76628 - jyn514:default-config-files, r=Mark-Simulacrum
Ralf Jung [Mon, 21 Sep 2020 08:40:28 +0000 (10:40 +0200)]
Rollup merge of #76628 - jyn514:default-config-files, r=Mark-Simulacrum

Add sample defaults for config.toml

- Allow including defaults in `src/bootstrap/defaults` using `profile = "..."`.
- Add default config files, with a README noting they're experimental and asking you to open an issue if you run into trouble. The config files have comments explaining why the defaults are set.
- Combine config files using the `merge` dependency.

This introduces a new dependency on `merge` that hasn't yet been vetted.

I want to improve the output when `include = "x"` isn't found:

```
thread 'main' panicked at 'fs::read_to_string(&file) failed with No such file or directory (os error 2) ("configuration file did not exist")', src/bootstrap/config.rs:522:28
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
failed to run: /home/joshua/rustc/build/bootstrap/debug/bootstrap test tidy
Build completed unsuccessfully in 0:00:00
```

However that seems like it could be fixed in a follow-up.

Closes #76619

3 years agoRollup merge of #76135 - CDirkx:const-option, r=dtolnay,oli-obk
Ralf Jung [Mon, 21 Sep 2020 08:40:26 +0000 (10:40 +0200)]
Rollup merge of #76135 - CDirkx:const-option, r=dtolnay,oli-obk

Stabilize some Option methods as const

Stabilize the following methods of `Option` as const:
 - `is_some`
 - `is_none`
 - `as_ref`

These methods are currently const under the unstable feature `const_option` (tracking issue: #67441).
I believe these methods to be eligible for stabilization because of the stabilization of #49146 (Allow if and match in constants) and the trivial implementations, see also:  [PR#75463](https://github.com/rust-lang/rust/pull/75463).

Related: #76225

3 years agoRemove duplicated library links between std and libc
Josh Triplett [Mon, 21 Sep 2020 04:13:04 +0000 (21:13 -0700)]
Remove duplicated library links between std and libc

The libc crate is already responsible for linking in the appropriate
libraries, and std doing the same thing results in duplicated library
names on the linker command line. Removing this duplication slightly
reduces linker time, and makes it simpler to adjust the set or order of
linked libraries in one place (such as to add static linking support).

3 years agoAuto merge of #76843 - kornelski:longtypetofile, r=ecstatic-morse
bors [Mon, 21 Sep 2020 08:20:38 +0000 (08:20 +0000)]
Auto merge of #76843 - kornelski:longtypetofile, r=ecstatic-morse

Let user see the full type of type-length limit error

Seeing the full type of the error is sometimes essential to diagnosing the problem, but the type itself is too long to be displayed in the terminal in a useful fashion. This change solves this dilemma by writing the full offending type name to a file, and displays this filename as a note.

> note: the full type name been written to '$TEST_BUILD_DIR/issues/issue-22638/issue-22638.long-type.txt'

Closes #76777

3 years agoupdate Miri
Ralf Jung [Mon, 21 Sep 2020 07:42:34 +0000 (09:42 +0200)]
update Miri

3 years agoAdd an unused field of type `Option<DefId>` to `ParamEnv` struct.
Bram van den Heuvel [Sat, 19 Sep 2020 10:06:17 +0000 (12:06 +0200)]
Add an unused field of type `Option<DefId>` to `ParamEnv` struct.

3 years agoUpdate library/std/src/process.rs
Federico Ponzi [Mon, 21 Sep 2020 07:12:40 +0000 (08:12 +0100)]
Update library/std/src/process.rs

Co-authored-by: David Tolnay <dtolnay@gmail.com>
3 years agoUpdates stability attributes to the current nightly version
Federico Ponzi [Mon, 21 Sep 2020 06:52:59 +0000 (08:52 +0200)]
Updates stability attributes to the current nightly version

3 years agoAuto merge of #75974 - SkiFire13:peekmut-opt-sift, r=LukasKalbertodt
bors [Mon, 21 Sep 2020 05:31:01 +0000 (05:31 +0000)]
Auto merge of #75974 - SkiFire13:peekmut-opt-sift, r=LukasKalbertodt

Avoid useless sift_down when std::collections::binary_heap::PeekMut is never mutably dereferenced

If `deref_mut` is never called then it's not possible for the element to be mutated without internal mutability, meaning there's no need to call `sift_down`.

This could be a little improvement in cases where you want to mutate the biggest element of the heap only if it satisfies a certain predicate that needs only read access to the element.

3 years agoFix typo in rustc_lexer docs
LingMan [Mon, 21 Sep 2020 03:43:39 +0000 (05:43 +0200)]
Fix typo in rustc_lexer docs

Also add an Oxford comma while we're editing that line.

3 years agoAuto merge of #76806 - jethrogb:jb/update-llvm, r=cuviper
bors [Mon, 21 Sep 2020 03:32:01 +0000 (03:32 +0000)]
Auto merge of #76806 - jethrogb:jb/update-llvm, r=cuviper

Update LLVM

This (partially?) addresses rust-lang/rust#74632

r? `@cuviper`

3 years agoMoved all functions prefixed with 'check' to a separate file
Nicholas-Baron [Sat, 19 Sep 2020 20:51:59 +0000 (13:51 -0700)]
Moved all functions prefixed with 'check' to a separate file

3 years agoMoved the Expectation enum to its own file
Nicholas-Baron [Sat, 19 Sep 2020 20:00:39 +0000 (13:00 -0700)]
Moved the Expectation enum to its own file

3 years agoMoved the Diverges struct to its own file
Nicholas-Baron [Sat, 19 Sep 2020 19:45:14 +0000 (12:45 -0700)]
Moved the Diverges struct to its own file

3 years agoFormatted use statements for fewer lines
Nicholas-Baron [Sat, 19 Sep 2020 19:31:48 +0000 (12:31 -0700)]
Formatted use statements for fewer lines

3 years agoMoved Inherited struct to own file
Nicholas-Baron [Sat, 19 Sep 2020 12:05:42 +0000 (05:05 -0700)]
Moved Inherited struct to own file

3 years agoRemoved util.rs
Nicholas-Baron [Sat, 19 Sep 2020 11:25:30 +0000 (04:25 -0700)]
Removed util.rs

Per suggestion of @oli-obk.
This file was rather short and joining it did not cause mod.rs to become
significantly bigger.

3 years agoMoved the FnCtxt struct to its own file
Nicholas-Baron [Sat, 19 Sep 2020 11:00:29 +0000 (04:00 -0700)]
Moved the FnCtxt struct to its own file

3 years agoMoved GatherLocalsVisitor to its own file
Nicholas-Baron [Sat, 19 Sep 2020 08:45:28 +0000 (01:45 -0700)]
Moved GatherLocalsVisitor to its own file

3 years agoMoved a struct only need by util into util
Nicholas-Baron [Sat, 19 Sep 2020 08:20:05 +0000 (01:20 -0700)]
Moved a struct only need by util into util

3 years agoMoved another struct and used pub(super) to be explicit
Nicholas-Baron [Sat, 19 Sep 2020 08:09:45 +0000 (01:09 -0700)]
Moved another struct and used pub(super) to be explicit

3 years agoFormatter moved one use statement
Nicholas-Baron [Sat, 19 Sep 2020 07:50:54 +0000 (00:50 -0700)]
Formatter moved one use statement

3 years agoStart of moving some functionality to separate files
Nicholas-Baron [Sat, 19 Sep 2020 07:42:15 +0000 (00:42 -0700)]
Start of moving some functionality to separate files

3 years agoAuto merge of #76295 - mati865:remove-mmx, r=Amanieu,oli-obk
bors [Mon, 21 Sep 2020 00:43:26 +0000 (00:43 +0000)]
Auto merge of #76295 - mati865:remove-mmx, r=Amanieu,oli-obk

Remove MMX from Rust

Follow-up to https://github.com/rust-lang/stdarch/pull/890
This removes most of MMX from Rust (tests pass with small changes), keeping stable `is_x86_feature_detected!("mmx")` working.

3 years agoLet user see the full type of type-length limit error
Kornel Lesiński [Wed, 16 Sep 2020 02:45:58 +0000 (03:45 +0100)]
Let user see the full type of type-length limit error

3 years agoAuto merge of #76544 - Mark-Simulacrum:less-python, r=alexcrichton
bors [Sun, 20 Sep 2020 22:00:36 +0000 (22:00 +0000)]
Auto merge of #76544 - Mark-Simulacrum:less-python, r=alexcrichton

De-couple Python and bootstrap slightly

This revises rustbuild's entry points from Python to rely less on magic environment variables, preferring to use Cargo-provided environment variables where feasible.

Notably, BUILD_DIR and BOOTSTRAP_CONFIG are *not* moved, because both more-or-less have some non-trivial discovery logic and replicating it in rustbuild seems unfortunate; if it moved to Cargo that would be a different story.

Best reviewed by-commit.

3 years agoRemove `can_suggest` from Clippy.
Christiaan Dirkx [Sun, 20 Sep 2020 22:00:33 +0000 (00:00 +0200)]
Remove `can_suggest` from Clippy.

Removes `can_suggest` from as it is no longer used.
Reverts rust-clippy#5724.

3 years agoUpdate Clippy testcases
Christiaan Dirkx [Sun, 20 Sep 2020 21:59:34 +0000 (23:59 +0200)]
Update Clippy testcases

Update the test `redundant_pattern_matching`: check if `is_some` and `is_none` are suggested within const contexts.

3 years agoMove const tests for `Option` to `library\core`
Christiaan Dirkx [Thu, 3 Sep 2020 22:13:25 +0000 (00:13 +0200)]
Move const tests for `Option` to `library\core`

Part of #76268

3 years agoStabilize some Option methods as const
CDirkx [Mon, 31 Aug 2020 00:11:48 +0000 (02:11 +0200)]
Stabilize some Option methods as const

Stabilize the following methods of `Option` as const:
 - `is_some`
 - `is_none`
 - `as_ref`

Possible because of stabilization of #49146 (Allow if and match in constants).

3 years agoSpecify output directory for bootstrap tests
Mark Rousskov [Thu, 10 Sep 2020 14:52:27 +0000 (10:52 -0400)]
Specify output directory for bootstrap tests

3 years agoProvide bootstrap tools with RUSTC in environment
Mark Rousskov [Thu, 10 Sep 2020 14:17:32 +0000 (10:17 -0400)]
Provide bootstrap tools with RUSTC in environment

3 years agoAdd sample defaults for config.toml
Joshua Nelson [Sat, 12 Sep 2020 04:42:52 +0000 (00:42 -0400)]
Add sample defaults for config.toml

- Allow including defaults in `src/bootstrap/defaults` using `profile = "..."`
- Add default config files
- Combine config files using the merge dependency.
- Add comments to default config files
- Add a README asking to open an issue if the defaults are bad
- Give a loud error if trying to merge `.target`, since it's not
  currently supported
- Use an exhaustive match
- Use `<none>` in config.toml.example to avoid confusion
- Fix bugs in `Merge` derives

Previously, it would completely ignore the profile defaults if there
were any settings in `config.toml`. I sent an email to the `merge` maintainer
asking them to make the behavior in this commit the default.

This introduces a new dependency on `merge` that hasn't yet been vetted.

I want to improve the output when `include = "x"` isn't found:

```
thread 'main' panicked at 'fs::read_to_string(&file) failed with No such file or directory (os error 2) ("configuration file did not exist")', src/bootstrap/config.rs:522:28
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
failed to run: /home/joshua/rustc/build/bootstrap/debug/bootstrap test tidy
Build completed unsuccessfully in 0:00:00
```

However that seems like it could be fixed in a follow-up.

3 years agoDiscover Rust toolchain without Python
Mark Rousskov [Mon, 7 Sep 2020 16:02:50 +0000 (12:02 -0400)]
Discover Rust toolchain without Python

3 years agoRemove support for different src directory
Mark Rousskov [Mon, 7 Sep 2020 01:32:55 +0000 (21:32 -0400)]
Remove support for different src directory

This requires that bootstrap is run from the same worktree as the sources it'll
build, but this is basically required for the build to work anyway. You can
still run it from a different directory, just that the files it builds must be
beside it.

3 years agoSet BUILD_TRIPLE via build script
Mark Rousskov [Sun, 6 Sep 2020 23:57:07 +0000 (19:57 -0400)]
Set BUILD_TRIPLE via build script

This moves build triple discovery for rustbuild from bootstrap.py into a build
script, meaning it will "just work" if building rustbuild via Cargo rather than
Python.

3 years agoAuto merge of #76848 - RalfJung:miri, r=RalfJung
bors [Sun, 20 Sep 2020 20:00:17 +0000 (20:00 +0000)]
Auto merge of #76848 - RalfJung:miri, r=RalfJung

update Miri

Let's get https://github.com/rust-lang/miri/pull/1540 shipped.
Fixes https://github.com/rust-lang/rust/issues/76968.
Cc `@rust-lang/miri` r? `@ghost`