]> git.lizzy.rs Git - rust.git/log
rust.git
4 years agolibstd: remove some mutable statics in sys::unix
Andy Russell [Fri, 3 Jul 2020 18:13:22 +0000 (14:13 -0400)]
libstd: remove some mutable statics in sys::unix

4 years agoAuto merge of #73897 - ehuss:update-cargo, r=ehuss
bors [Fri, 3 Jul 2020 07:09:45 +0000 (07:09 +0000)]
Auto merge of #73897 - ehuss:update-cargo, r=ehuss

Update cargo, rls

## cargo
14 commits in c26576f9adddd254b3dd63aecba176434290a9f6..fede83ccf973457de319ba6fa0e36ead454d2e20
2020-06-23 16:21:21 +0000 to 2020-07-02 21:51:34 +0000
- Fix overflow error on 32-bit. (rust-lang/cargo#8446)
- Exclude the target directory from backups using CACHEDIR.TAG (rust-lang/cargo#8378)
- CONTRIBUTING.md: Link to Zulip rather than Discord (rust-lang/cargo#8436)
- Update built-in help for features (rust-lang/cargo#8433)
- Update core-foundation requirement from 0.7.0 to 0.9.0 (rust-lang/cargo#8432)
- Parse `# env-dep` directives in dep-info files (rust-lang/cargo#8421)
- Move string interning to util (rust-lang/cargo#8419)
- Expose built cdylib artifacts in the Compilation structure (rust-lang/cargo#8418)
- Remove unused serde_derive dependency from the crates.io crate (rust-lang/cargo#8416)
- Remove unused remove_dir_all dependency (rust-lang/cargo#8412)
- Improve git error messages a bit (rust-lang/cargo#8409)
- Improve the description of Config.home_path (rust-lang/cargo#8408)
- Improve support for non-`master` main branches (rust-lang/cargo#8364)
- Document that OUT_DIR in JSON messages is an absolute path (rust-lang/cargo#8403)

## rls
2020-06-19 15:36:00 +0200 to 2020-06-30 23:34:52 +0200
- Update cargo (rust-lang-nursery/rls#1686)

4 years agoAuto merge of #73882 - nnethercote:avoid-unwrap_or_else-in-allocate_in, r=Amanieu
bors [Fri, 3 Jul 2020 03:18:28 +0000 (03:18 +0000)]
Auto merge of #73882 - nnethercote:avoid-unwrap_or_else-in-allocate_in, r=Amanieu

Avoid `unwrap_or_else` in `RawVec::allocate_in`.

This reduces the amount of LLVM IR generated by up to 1 or 2%.

r? @Amanieu

4 years agoUpdate cargo
Eric Huss [Thu, 2 Jul 2020 23:37:28 +0000 (16:37 -0700)]
Update cargo

4 years agoAuto merge of #73977 - Manishearth:rollup-2x4s7c6, r=Manishearth
bors [Thu, 2 Jul 2020 23:18:15 +0000 (23:18 +0000)]
Auto merge of #73977 - Manishearth:rollup-2x4s7c6, r=Manishearth

Rollup of 8 pull requests

Successful merges:

 - #73454 (Move contributing.md to rustc-dev-guide and point at getting started)
 - #73724 (Use WASM's saturating casts if they are available)
 - #73726 (resolve: disallow labelled breaks/continues through closures/async blocks)
 - #73753 (Use 'tcx for references to AccessLevels wherever possible.)
 - #73781 (Update psm version)
 - #73952 (Add option for local docker testing.)
 - #73957 (disable BTree min_max test in Miri for now)
 - #73975 (Document rustc_ast::ast::Pat)

Failed merges:

r? @ghost

4 years agoUpdate rls
Eric Huss [Tue, 30 Jun 2020 21:52:16 +0000 (14:52 -0700)]
Update rls

4 years agoUpdate cargo
Eric Huss [Tue, 30 Jun 2020 17:39:05 +0000 (10:39 -0700)]
Update cargo

4 years agoRollup merge of #73975 - pierwill:patch-3, r=jonas-schievink
Manish Goregaokar [Thu, 2 Jul 2020 22:56:03 +0000 (15:56 -0700)]
Rollup merge of #73975 - pierwill:patch-3, r=jonas-schievink

Document rustc_ast::ast::Pat

4 years agoRollup merge of #73957 - RalfJung:btree-min-max, r=shepmaster
Manish Goregaokar [Thu, 2 Jul 2020 22:56:01 +0000 (15:56 -0700)]
Rollup merge of #73957 - RalfJung:btree-min-max, r=shepmaster

disable BTree min_max test in Miri for now

Until https://github.com/rust-lang/rust/issues/73915 is fixed, better skip this test in Miri so that we can test the others at least.

4 years agoRollup merge of #73952 - ehuss:docker-dev, r=Mark-Simulacrum
Manish Goregaokar [Thu, 2 Jul 2020 22:55:59 +0000 (15:55 -0700)]
Rollup merge of #73952 - ehuss:docker-dev, r=Mark-Simulacrum

Add option for local docker testing.

This adds the option `--dev` to `src/ci/docker/run.sh` so that it will enter an interactive environment for local testing. I have often needed this for testing things, but I always needed to edit this script. I wanted the ability to interact in the environment, run different commands, inspect errors, etc.

4 years agoRollup merge of #73781 - nagisa:psm-up, r=Mark-Simulacrum
Manish Goregaokar [Thu, 2 Jul 2020 22:55:57 +0000 (15:55 -0700)]
Rollup merge of #73781 - nagisa:psm-up, r=Mark-Simulacrum

Update psm version

This new version includes a fix for building on aarch64 windows.

cc #72881

4 years agoRollup merge of #73753 - eddyb:extraneous-lifetime, r=Manishearth
Manish Goregaokar [Thu, 2 Jul 2020 22:55:55 +0000 (15:55 -0700)]
Rollup merge of #73753 - eddyb:extraneous-lifetime, r=Manishearth

Use 'tcx for references to AccessLevels wherever possible.

Most of the changes are just fallout from removing a lifetime parameter from structs, and mostly in clippy.

r? @Manishearth

4 years agoRollup merge of #73726 - davidtwco:issue-73541-labelled-break-through-closure-async...
Manish Goregaokar [Thu, 2 Jul 2020 22:55:53 +0000 (15:55 -0700)]
Rollup merge of #73726 - davidtwco:issue-73541-labelled-break-through-closure-async, r=petrochenkov

resolve: disallow labelled breaks/continues through closures/async blocks

Fixes #73541.

This PR modifies name resolution to prohibit labelled breaks/continues through closures or async blocks, fixing an ICE. In addition, it improves the diagnostics surrounding labelled breaks/continues through closures or async blocks by informing the user if the label exists in an parent scope and telling them that won't work.

r? @petrochenkov (resolve)
cc @estebank (diagnostic changes) @tmandry (issue is from `wg-async-foundations`)

4 years agoRollup merge of #73724 - CryZe:wasm-saturating-casts, r=alexcrichton
Manish Goregaokar [Thu, 2 Jul 2020 22:55:52 +0000 (15:55 -0700)]
Rollup merge of #73724 - CryZe:wasm-saturating-casts, r=alexcrichton

Use WASM's saturating casts if they are available

WebAssembly supports saturating floating point to integer casts behind a target feature. The feature is already available on many browsers. Beginning with 1.45 Rust will start defining the behavior of floating point to integer casts to be saturating as well. For this Rust constructs additional checks on top of the `fptoui` / `fptosi` instructions it emits. Here we introduce the possibility for the codegen backend to construct saturating casts itself and only fall back to constructing the checks ourselves if that is not possible.

Resolves part of #73591

4 years agoRollup merge of #73454 - mark-i-m:contributing, r=nikomatsakis
Manish Goregaokar [Thu, 2 Jul 2020 22:55:50 +0000 (15:55 -0700)]
Rollup merge of #73454 - mark-i-m:contributing, r=nikomatsakis

Move contributing.md to rustc-dev-guide and point at getting started

See description on https://github.com/rust-lang/rustc-dev-guide/pull/753

4 years agoDocument rustc_ast::ast::Pat
pierwill [Thu, 2 Jul 2020 22:11:03 +0000 (15:11 -0700)]
Document rustc_ast::ast::Pat

4 years agoUse 'tcx for references to AccessLevels wherever possible.
Eduard-Mihai Burtescu [Thu, 25 Jun 2020 20:41:36 +0000 (23:41 +0300)]
Use 'tcx for references to AccessLevels wherever possible.

4 years agoAuto merge of #73751 - eddyb:no-empty-tables, r=nikomatsakis
bors [Thu, 2 Jul 2020 16:33:00 +0000 (16:33 +0000)]
Auto merge of #73751 - eddyb:no-empty-tables, r=nikomatsakis

Remove `TypeckTables::empty(None)` and make hir_owner non-optional.

Each commit before the last one removes uses of `TypeckTables::empty(None)`, replacing the empty tables with having `Option` around the `&'tcx TypeckTables<'tcx>` that HIR visitors kept track of.

The last commit removes the concept of "empty `TypeckTables`" altogether, guaranteeing that every `TypeckTables` corresponds to a HIR body owner.

r? @nikomatsakis

4 years agoRemove `TypeckTables::empty(None)` and make hir_owner non-optional.
Eduard-Mihai Burtescu [Fri, 26 Jun 2020 03:34:43 +0000 (06:34 +0300)]
Remove `TypeckTables::empty(None)` and make hir_owner non-optional.

4 years agorustc_lint: avoid using TypeckTables::empty for LateContext.
Eduard-Mihai Burtescu [Fri, 26 Jun 2020 02:55:23 +0000 (05:55 +0300)]
rustc_lint: avoid using TypeckTables::empty for LateContext.

4 years agorustc_save_analysis: avoid using TypeckTables::empty for SaveContext.
Eduard-Mihai Burtescu [Thu, 25 Jun 2020 19:53:34 +0000 (22:53 +0300)]
rustc_save_analysis: avoid using TypeckTables::empty for SaveContext.

4 years agorustc_privacy: avoid using TypeckTables::empty for {Name,Type}PrivacyVisitor.
Eduard-Mihai Burtescu [Thu, 25 Jun 2020 19:23:41 +0000 (22:23 +0300)]
rustc_privacy: avoid using TypeckTables::empty for {Name,Type}PrivacyVisitor.

4 years agorustc_passes/dead: avoid using TypeckTables::empty for MarkSymbolVisitor.
Eduard-Mihai Burtescu [Thu, 25 Jun 2020 17:58:33 +0000 (20:58 +0300)]
rustc_passes/dead: avoid using TypeckTables::empty for MarkSymbolVisitor.

4 years agorustc_passes/reachable: avoid using TypeckTables::empty for ReachableContext.
Eduard-Mihai Burtescu [Thu, 25 Jun 2020 17:25:46 +0000 (20:25 +0300)]
rustc_passes/reachable: avoid using TypeckTables::empty for ReachableContext.

4 years agorustc_driver/pretty: avoid using TypeckTables::empty for TypedAnnotation.
Eduard-Mihai Burtescu [Thu, 25 Jun 2020 17:17:45 +0000 (20:17 +0300)]
rustc_driver/pretty: avoid using TypeckTables::empty for TypedAnnotation.

4 years agoresolve: disallow label use through closure/async
David Wood [Thu, 25 Jun 2020 14:16:38 +0000 (15:16 +0100)]
resolve: disallow label use through closure/async

This commit modifies resolve to disallow `break`/`continue` to labels
through closures or async blocks. This doesn't make sense and should
have been prohibited anyway.

Signed-off-by: David Wood <david@davidtw.co>
4 years agoAuto merge of #73954 - Manishearth:rollup-8qvh170, r=Manishearth
bors [Thu, 2 Jul 2020 12:35:08 +0000 (12:35 +0000)]
Auto merge of #73954 - Manishearth:rollup-8qvh170, r=Manishearth

Rollup of 10 pull requests

Successful merges:

 - #73414 (Implement `slice_strip` feature)
 - #73564 (linker: Create GNU_EH_FRAME header by default when producing ELFs)
 - #73622 (Deny unsafe ops in unsafe fns in libcore)
 - #73684 (add spans to injected coverage counters, extract with CoverageData query)
 - #73812 (ast_pretty: Pass some token streams and trees by reference)
 - #73853 (Add newline to rustc MultiSpan docs)
 - #73883 (Compile rustdoc less often.)
 - #73885 (Fix wasm32 being broken due to a NodeJS version bump)
 - #73903 (Changes required for rustc/cargo to build for iOS targets)
 - #73938 (Optimise fast path of checked_ops with `unlikely`)

Failed merges:

r? @ghost

4 years agoAuto merge of #73950 - Manishearth:rollup-0dtxnit, r=Manishearth
bors [Thu, 2 Jul 2020 08:35:53 +0000 (08:35 +0000)]
Auto merge of #73950 - Manishearth:rollup-0dtxnit, r=Manishearth

Rollup of 16 pull requests

Successful merges:

 - #72569 (Remove legacy InnoSetup GUI installer)
 - #73306 (Don't implement Fn* traits for #[target_feature] functions)
 - #73345 (expand: Stop using nonterminals for passing tokens to attribute and derive macros)
 - #73449 (Provide more information on duplicate lang item error.)
 - #73569 (Handle `macro_rules!` tokens consistently across crates)
 - #73803 (Recover extra trailing angle brackets in struct definition)
 - #73839 (Split and expand nonstandard-style lints unicode unit test.)
 - #73841 (Remove defunct `-Z print-region-graph`)
 - #73848 (Fix markdown rendering in librustc_lexer docs)
 - #73865 (Fix Zulip topic format)
 - #73892 (Clean up E0712 explanation)
 - #73898 (remove duplicate test for #61935)
 - #73906 (Add missing backtick in `ty_error_with_message`)
 - #73909 (`#[deny(unsafe_op_in_unsafe_fn)]` in libstd/fs.rs)
 - #73910 (Rewrite a few manual index loops with while-let)
 - #73929 (Fix comment typo)

Failed merges:

r? @ghost

4 years agodisable BTree min_max test in Miri for now
Ralf Jung [Thu, 2 Jul 2020 08:25:04 +0000 (10:25 +0200)]
disable BTree min_max test in Miri for now

4 years agoAddress review comments and add UI test
Christopher Serr [Tue, 30 Jun 2020 19:44:44 +0000 (21:44 +0200)]
Address review comments and add UI test

4 years agoAdd comments and format the code
Christopher Serr [Sat, 27 Jun 2020 12:03:32 +0000 (14:03 +0200)]
Add comments and format the code

4 years agoAdd codegen tests
Christopher Serr [Sat, 27 Jun 2020 11:26:30 +0000 (13:26 +0200)]
Add codegen tests

4 years agoCheck for feature with pre-interned symbol
Christopher Serr [Fri, 26 Jun 2020 15:53:52 +0000 (17:53 +0200)]
Check for feature with pre-interned symbol

4 years agoUse WASM's saturating casts if they are available
Christopher Serr [Thu, 25 Jun 2020 15:05:12 +0000 (17:05 +0200)]
Use WASM's saturating casts if they are available

WebAssembly supports saturating floating point to integer casts behind a
target feature. The feature is already available on many browsers.
Beginning with 1.45 Rust will start defining the behavior of floating
point to integer casts to be saturating as well. For this Rust
constructs additional checks on top of the `fptoui` / `fptosi`
instructions it emits. Here we introduce the possibility for the codegen
backend to construct saturating casts itself and only fall back to
constructing the checks ourselves if that is not possible.

4 years agoRollup merge of #73938 - nbdd0121:checked_opt, r=nagisa
Manish Goregaokar [Thu, 2 Jul 2020 07:16:41 +0000 (00:16 -0700)]
Rollup merge of #73938 - nbdd0121:checked_opt, r=nagisa

Optimise fast path of checked_ops with `unlikely`

This PR marks paths returning `None` in checked_ops as unlikely to improvde codegen.

Fixes #73731

4 years agoRollup merge of #73903 - luxxxxy:ios-rustc, r=nikomatsakis
Manish Goregaokar [Thu, 2 Jul 2020 07:16:40 +0000 (00:16 -0700)]
Rollup merge of #73903 - luxxxxy:ios-rustc, r=nikomatsakis

Changes required for rustc/cargo to build for iOS targets

cargo, rustc, clippy, rust-src, and rust-analysis successfully build for `aarch64-apple-ios` with these changes.

NOTE: cargo required arm64-ios openssl/libcurl to be linked.

![image](https://user-images.githubusercontent.com/65794972/86178510-75d78080-baf6-11ea-9c17-b74bd6c85272.png)
![image](https://user-images.githubusercontent.com/65794972/86178525-7bcd6180-baf6-11ea-9974-f99980cbdb24.png)

4 years agoRollup merge of #73885 - pietroalbini:ci-fix-wasm32, r=kennytm
Manish Goregaokar [Thu, 2 Jul 2020 07:16:38 +0000 (00:16 -0700)]
Rollup merge of #73885 - pietroalbini:ci-fix-wasm32, r=kennytm

Fix wasm32 being broken due to a NodeJS version bump

Emscripten's SDK [recently bumped the version of NodeJS they shipped](https://github.com/emscripten-core/emsdk/pull/529), but our Dockerfile for the wasm32 builder hardcoded the version number. This will cause consistent CI failures once the currently cached image is rebuilt (either due to a change or due to the cache expiring).

This PR fixes the problem by finding the latest version of NodeJS in the Emscripten SDK and symlinking it to a "latest" directory, which is then added to the `PATH`.

4 years agoRollup merge of #73883 - ehuss:rustdoc-stage-previous, r=Mark-Simulacrum
Manish Goregaokar [Thu, 2 Jul 2020 07:16:36 +0000 (00:16 -0700)]
Rollup merge of #73883 - ehuss:rustdoc-stage-previous, r=Mark-Simulacrum

Compile rustdoc less often.

Previously rustdoc was built 3 times with `x.py test`:

1. stage2 (using stage1 compiler) for compiletest tests (stage1-tools copied to stage2).
2. stage1 (using stage0 compiler) for std crate tests (stage0-tools copied to stage1).
3. stage2 test (using stage2 compiler) for rustdoc crate tests and error_index_generator (stage2-tools).

This PR removes the majority of number 3, where it will instead use the stage1 compiler, which will share the artifacts from number 1.

This matches the behavior of the libstd crate tests. I don't think it is entirely necessary to run the tests using stage2.

At `-j2`, the last build step goes from about 300s to 70s on my machine. It's not a huge win, but shaving 4 minutes isn't bad.

The other two builds would be pretty difficult (or undesired or impossible) to unify. It looks like std tests use stage1 very intentionally (see `force_use_stage1` and its history), and compiletests use the top stage very intentionally.

Unfortunately the linkchecker builds all docs at stage2 (stage2-tools), which means a few build script artifacts are not shared. It's not really clear to me how to fix that (because it uses `default_doc`, there doesn't seem to be any control over the stages).

---

For `x.py doc`, rustdoc was previously built three times (with compiler-docs):

1. stage2 (using stage1 compiler) for normal documentation output (stage1-tools copied to stage2).
2. stage1 (using stage0 compiler) for compiler-docs
3. stage2 (using stage2 compiler) for error_index_generator (stage2-tools)

This PR combines these so that they consistently use the "top stage" rustdoc. I don't know why the compiler-docs was written to use stage minus one, but it seems better to be consistent across the doc steps.

---

I've tried to test this with a variety of commands (`x.py doc`, `x.py test`, different `--stage` flags, `full-bootstrap`, setting `--target`, etc.) to try to make sure there aren't significant regressions here. It's tricky since there are so many variables, and this stuff is difficult for me to fully understand.

Closes #70799 (I think)

4 years agoRollup merge of #73853 - pierwill:pierwill-multispan-doc, r=jonas-schievink
Manish Goregaokar [Thu, 2 Jul 2020 07:16:34 +0000 (00:16 -0700)]
Rollup merge of #73853 - pierwill:pierwill-multispan-doc, r=jonas-schievink

Add newline to rustc MultiSpan docs

Also adds back-ticks when referring to the contents of this collection.

4 years agoRollup merge of #73812 - petrochenkov:prettyref, r=varkor
Manish Goregaokar [Thu, 2 Jul 2020 07:16:32 +0000 (00:16 -0700)]
Rollup merge of #73812 - petrochenkov:prettyref, r=varkor

ast_pretty: Pass some token streams and trees by reference

Salvaged from an intermediate version of https://github.com/rust-lang/rust/pull/73345.

4 years agoRollup merge of #73684 - richkadel:llvm-coverage-map-gen-2, r=wesleywiser
Manish Goregaokar [Thu, 2 Jul 2020 07:16:30 +0000 (00:16 -0700)]
Rollup merge of #73684 - richkadel:llvm-coverage-map-gen-2, r=wesleywiser

add spans to injected coverage counters, extract with CoverageData query

This is the next iteration on the Rust Coverage implementation, and follows PR #73488

@tmandry @wesleywiser

I came up with an approach for coverage spans, pushing them through the Call terminator as additional args so they can be extracted by the CoverageData query.

I'm using an IndexVec to store them in CoverageData such that there can be only one per index (even if parts of the MIR get duplicated during optimization).

If this approach works for you, I can quickly expand on this to build a separate IndexVec for counter expressions, using a separate call that will be ignored during code generation, but from which I can extract the counter expression values.

Let me know your thoughts. Thanks!

r? @tmandry

Rust compiler MCP rust-lang/compiler-team#278
Relevant issue: #34701 - Implement support for LLVMs code coverage instrumentation

4 years agoRollup merge of #73622 - LeSeulArtichaut:unsafe-libcore, r=nikomatsakis
Manish Goregaokar [Thu, 2 Jul 2020 07:16:28 +0000 (00:16 -0700)]
Rollup merge of #73622 - LeSeulArtichaut:unsafe-libcore, r=nikomatsakis

Deny unsafe ops in unsafe fns in libcore

After `liballoc`, It's time for `libcore` :D

I planned to do this bit by bit to avoid having a big chunk of diffs, so to make reviews easier, and to make the unsafe blocks narrower and take the time to document them properly.

r? @nikomatsakis cc @RalfJung

4 years agoRollup merge of #73564 - petrochenkov:ehdr, r=Amanieu
Manish Goregaokar [Thu, 2 Jul 2020 07:16:26 +0000 (00:16 -0700)]
Rollup merge of #73564 - petrochenkov:ehdr, r=Amanieu

linker: Create GNU_EH_FRAME header by default when producing ELFs

Do it in a centralized way in `link.rs` instead of individual target specs.

The opt-out is `-Clink-arg=(-Wl,)--no-eh-frame-hdr` if necessary.

Fixes https://github.com/rust-lang/rust/issues/73451
cc https://github.com/rust-lang/rust/pull/73483

4 years agoRollup merge of #73414 - lzutao:slice_strip, r=dtolnay
Manish Goregaokar [Thu, 2 Jul 2020 07:16:24 +0000 (00:16 -0700)]
Rollup merge of #73414 - lzutao:slice_strip, r=dtolnay

Implement `slice_strip` feature

Tracking issue: #73413

4 years agoAdd option for local docker testing.
Eric Huss [Thu, 2 Jul 2020 04:03:14 +0000 (21:03 -0700)]
Add option for local docker testing.

4 years agoRollup merge of #73929 - kraai:fix-comment-typo, r=jonas-schievink
Manish Goregaokar [Thu, 2 Jul 2020 03:36:10 +0000 (20:36 -0700)]
Rollup merge of #73929 - kraai:fix-comment-typo, r=jonas-schievink

Fix comment typo

4 years agoRollup merge of #73910 - cuviper:while-indexing, r=oli-obk
Manish Goregaokar [Thu, 2 Jul 2020 03:36:08 +0000 (20:36 -0700)]
Rollup merge of #73910 - cuviper:while-indexing, r=oli-obk

Rewrite a few manual index loops with while-let

There were a few instances of this pattern:

```rust
while index < vec.len() {
    let item = &vec[index];
    // ...
}
```

These can be indexed at once:

```rust
while let Some(item) = vec.get(index) {
    // ...
}
```

Particularly in `ObligationForest::process_obligations`, this mitigates
a codegen regression found with LLVM 11 (#73526).

4 years agoRollup merge of #73909 - eltonlaw:unsafe-libstd-fs-rs, r=sfackler
Manish Goregaokar [Thu, 2 Jul 2020 03:36:06 +0000 (20:36 -0700)]
Rollup merge of #73909 - eltonlaw:unsafe-libstd-fs-rs, r=sfackler

`#[deny(unsafe_op_in_unsafe_fn)]` in libstd/fs.rs

The `libstd/fs.rs` part of https://github.com/rust-lang/rust/issues/73904 . Wraps the two calls to an unsafe fn `Initializer::nop()` in an `unsafe` block.

Followed instructions in parent issue, ran `./x.py check src/libstd/` after adding the lint and two warnings were given. After adding these changes, those disappear.

4 years agoRollup merge of #73906 - JohnTitor:missing-bt, r=jonas-schievink
Manish Goregaokar [Thu, 2 Jul 2020 03:36:04 +0000 (20:36 -0700)]
Rollup merge of #73906 - JohnTitor:missing-bt, r=jonas-schievink

Add missing backtick in `ty_error_with_message`

4 years agoRollup merge of #73898 - lcnr:issue61383, r=jonas-schievink
Manish Goregaokar [Thu, 2 Jul 2020 03:36:02 +0000 (20:36 -0700)]
Rollup merge of #73898 - lcnr:issue61383, r=jonas-schievink

remove duplicate test for #61935

Apparently I somehow messed up the issue number in #67890
which caused us to add this test twice, both as https://github.com/rust-lang/rust/blob/master/src/test/ui/const-generics/issues/issue-61935.rs and https://github.com/rust-lang/rust/blob/master/src/test/ui/const-generics/lazy-normalization/issue-71922.rs

#61935 is the actually fixed issue while #71922 is still not working, as it depends on lazy norm of repeat expressions

4 years agoRollup merge of #73892 - GuillaumeGomez:cleanup-e0712, r=Dylan-DPC
Manish Goregaokar [Thu, 2 Jul 2020 03:36:00 +0000 (20:36 -0700)]
Rollup merge of #73892 - GuillaumeGomez:cleanup-e0712, r=Dylan-DPC

Clean up E0712 explanation

r? @Dylan-DPC

4 years agoRollup merge of #73865 - LeSeulArtichaut:patch-1, r=Dylan-DPC
Manish Goregaokar [Thu, 2 Jul 2020 03:35:58 +0000 (20:35 -0700)]
Rollup merge of #73865 - LeSeulArtichaut:patch-1, r=Dylan-DPC

Fix Zulip topic format

Yet another instance of me making a mistake after copy-pasting :D
r? @Dylan-DPC

4 years agoRollup merge of #73848 - pierwill:pierwill-lexer-block-doc, r=jonas-schievink
Manish Goregaokar [Thu, 2 Jul 2020 03:35:56 +0000 (20:35 -0700)]
Rollup merge of #73848 - pierwill:pierwill-lexer-block-doc, r=jonas-schievink

Fix markdown rendering in librustc_lexer docs

Use back-ticks instead of quotation marks in docs for the block comment variant of TokenKind.

## [Before](https://doc.rust-lang.org/nightly/nightly-rustc/rustc_lexer/enum.TokenKind.html#variant.BlockComment) and after

<img width="1103" alt="Screen Shot 2020-06-28 at 1 22 30 PM" src="https://user-images.githubusercontent.com/19642016/85957562-446a8380-b943-11ea-913a-442cf7744083.png">

<img width="1015" alt="Screen Shot 2020-06-28 at 1 28 29 PM" src="https://user-images.githubusercontent.com/19642016/85957566-4af8fb00-b943-11ea-8fef-a09c1d586772.png">

## Question

For visual consistency, should we use back-ticks throughout the docs for these enum variants?

4 years agoRollup merge of #73841 - tmiasko:print-region-graph, r=Mark-Simulacrum
Manish Goregaokar [Thu, 2 Jul 2020 03:35:54 +0000 (20:35 -0700)]
Rollup merge of #73841 - tmiasko:print-region-graph, r=Mark-Simulacrum

Remove defunct `-Z print-region-graph`

4 years agoRollup merge of #73839 - crlf0710:snapshot_the_reality, r=Manishearth
Manish Goregaokar [Thu, 2 Jul 2020 03:35:52 +0000 (20:35 -0700)]
Rollup merge of #73839 - crlf0710:snapshot_the_reality, r=Manishearth

Split and expand nonstandard-style lints unicode unit test.

RFC 2457 requested that the `nonstandard_style` series of linted be adjusted to cover the non_ascii_identifier case. However when i read the code of those implementations, it seems they're already supporting non_ascii_identifiers. But the exact rules is a little different than what's proposed in RFC 2457.

So I splitted and expanded the existing test case to try to exercise every branch in the code. I think it'll also be easier to examine the cases in these unit tests to see whether it's ok to just leave them as is, or some adjustments are needed.

r? @Manishearth

4 years agoRollup merge of #73803 - Aaron1011:feature/angle-field-recovery, r=matthewjasper
Manish Goregaokar [Thu, 2 Jul 2020 03:35:50 +0000 (20:35 -0700)]
Rollup merge of #73803 - Aaron1011:feature/angle-field-recovery, r=matthewjasper

Recover extra trailing angle brackets in struct definition

This commit applies the existing 'extra angle bracket recovery' logic
when parsing fields in struct definitions. This allows us to continue
parsing the struct's fields, avoiding spurious 'missing field' errors in
code that tries to use the struct.

4 years agoRollup merge of #73569 - Aaron1011:fix/macro-rules-group, r=petrochenkov
Manish Goregaokar [Thu, 2 Jul 2020 03:35:48 +0000 (20:35 -0700)]
Rollup merge of #73569 - Aaron1011:fix/macro-rules-group, r=petrochenkov

Handle `macro_rules!` tokens consistently across crates

When we serialize a `macro_rules!` macro, we used a 'lowered' `TokenStream` for its body, which has all `Nonterminal`s expanded in-place via `nt_to_tokenstream`. This matters when an 'outer' `macro_rules!` macro expands to an 'inner' `macro_rules!` macro - the inner macro may use tokens captured from the 'outer' macro in its definition.

This means that invoking a foreign `macro_rules!` macro may use a different body `TokenStream` than when the same `macro_rules!` macro is invoked in the same crate. This difference is observable by proc-macros invoked by a `macro_rules!` macro - a `None`-delimited group will be seen in the same-crate case (inserted when convering `Nonterminal`s to the `proc_macro` crate's structs), but no `None`-delimited group in the cross-crate case.

To fix this inconsistency, we now insert `None`-delimited groups when 'lowering' a `Nonterminal` `macro_rules!` body, just as we do in `proc_macro_server`. Additionally, we no longer print extra spaces for `None`-delimited groups - as far as pretty-printing is concerned, they don't exist (only their contents do). This ensures that `Display` output of a `TokenStream` does not depend on which crate a `macro_rules!` macro was invoked from.

This PR is necessary in order to patch the `solana-genesis-programs` for the upcoming hygiene serialization breakage (https://github.com/rust-lang/rust/pull/72121#issuecomment-646924847). The `solana-genesis-programs` crate will need to use a proc macro to re-span certain tokens in a nested `macro_rules!`, which requires us to consistently use a `None`-delimited group.

See `src/test/ui/proc-macro/nested-macro-rules.rs` for an example of the kind of nested `macro_rules!` affected by this crate.

4 years agoRollup merge of #73449 - ehuss:duplicate-lang-item, r=matthewjasper
Manish Goregaokar [Thu, 2 Jul 2020 03:35:46 +0000 (20:35 -0700)]
Rollup merge of #73449 - ehuss:duplicate-lang-item, r=matthewjasper

Provide more information on duplicate lang item error.

This gives some notes on the location of the files where the lang items were loaded from. Some duplicate lang item errors can be a little confusing, and this might help in diagnosing what has happened.

Here's an example when hitting a bug with Cargo's build-std:

```
error: duplicate lang item in crate `core` (which `rustc_std_workspace_core` depends on): `try`.
  |
  = note: the lang item is first defined in crate `core` (which `z10` depends on)
  = note: first definition in `core` loaded from /Users/eric/Proj/rust/cargo/scratch/z10/target/target/debug/deps/libcore-a764da499c7385f4.rmeta
  = note: second definition in `core` loaded from /Users/eric/Proj/rust/cargo/scratch/z10/target/target/debug/deps/libcore-5b082675aea34986.rmeta
```

4 years agoRollup merge of #73345 - petrochenkov:nointerp, r=Aaron1011
Manish Goregaokar [Thu, 2 Jul 2020 03:35:44 +0000 (20:35 -0700)]
Rollup merge of #73345 - petrochenkov:nointerp, r=Aaron1011

expand: Stop using nonterminals for passing tokens to attribute and derive macros

Make one more step towards fully token-based expansion and fix issues described in https://github.com/rust-lang/rust/issues/72545#issuecomment-640276791.

Now `struct S;` is passed to `foo!(struct S;)` and `#[foo] struct S;` in the same way - as a token stream `struct S ;`, rather than a single non-terminal token `NtItem` which is then broken into parts later.

The cost is making pretty-printing of token streams less pretty.
Some of the pretty-printing regressions will be recovered by keeping jointness with each token, which we will need to do anyway.

Unfortunately, this is not exactly the same thing as https://github.com/rust-lang/rust/pull/73102.
One more observable effect is how `$crate` is printed in the attribute input.
Inside `NtItem` was printed as `crate` or `that_crate`, now as a part of a token stream it's printed as `$crate` (there are good reasons for these differences, see https://github.com/rust-lang/rust/pull/62393 and related PRs).
This may break old proc macros (custom derives) written before the main portion of the proc macro API (macros 1.2) was stabilized, those macros did `input.to_string()` and reparsed the result, now that result can contain `$crate` which cannot be reparsed.

So, I think we should do this regardless, but we need to run crater first.
r? @Aaron1011

4 years agoRollup merge of #73306 - calebzulawski:target-feature-11-fn-trait-soundness, r=nikoma...
Manish Goregaokar [Thu, 2 Jul 2020 03:35:43 +0000 (20:35 -0700)]
Rollup merge of #73306 - calebzulawski:target-feature-11-fn-trait-soundness, r=nikomatsakis

Don't implement Fn* traits for #[target_feature] functions

Closes #72012.

4 years agoRollup merge of #72569 - ChrisDenton:remove-innosetup, r=nikomatsakis
Manish Goregaokar [Thu, 2 Jul 2020 03:35:41 +0000 (20:35 -0700)]
Rollup merge of #72569 - ChrisDenton:remove-innosetup, r=nikomatsakis

Remove legacy InnoSetup GUI installer

On Windows the InnoSetup `.exe` installer was superseded by the MSI installer long ago. It's no longer needed.

The `.exe` installer hasn't been linked from the [other installation methods](https://forge.rust-lang.org/infra/other-installation-methods.html#standalone) page in many years. As far as I can tell the intent was always to remove this installer once the MSI proved itself. Though admittedly both installers feel very "legacy" at this point.

Removing this would mean we only maintain one Windows GUI installer and would speed up the distribution phase.

As a result of removing InnoSetup, this closes #24397

4 years agoTests for number of times rustdoc is built with x.py test and doc.
Eric Huss [Wed, 1 Jul 2020 22:51:35 +0000 (15:51 -0700)]
Tests for number of times rustdoc is built with x.py test and doc.

4 years agoAuto merge of #72053 - Mark-Simulacrum:32bitcheck, r=pietroalbini
bors [Wed, 1 Jul 2020 21:01:36 +0000 (21:01 +0000)]
Auto merge of #72053 - Mark-Simulacrum:32bitcheck, r=pietroalbini

Test UI tests for pass=check

I'm going to just compare the builder times since I wasn't able to get this working nicely locally (hit some obscure linker error).

Fixes part of #69823

4 years agoOptimise fast path of checked_ops with `unlikely`
Gary Guo [Fri, 26 Jun 2020 12:20:41 +0000 (13:20 +0100)]
Optimise fast path of checked_ops with `unlikely`

4 years agoAdd an issue number for the pretty_printing_compatibility_hack FIXME
Vadim Petrochenkov [Wed, 1 Jul 2020 17:23:06 +0000 (20:23 +0300)]
Add an issue number for the pretty_printing_compatibility_hack FIXME

4 years agoExplicitly check for iOS/tvOS.
aspen [Wed, 1 Jul 2020 17:19:09 +0000 (13:19 -0400)]
Explicitly check for iOS/tvOS.

4 years agoHandle `None`-delimited groups when parsing `macro_rules!` macro
Aaron Hill [Mon, 29 Jun 2020 13:55:28 +0000 (09:55 -0400)]
Handle `None`-delimited groups when parsing `macro_rules!` macro

When a `macro_rules!` macro expands to another `macro_rules!` macro, we
may see `None`-delimited groups in odd places when another crate
deserializes the 'inner' macro. This commit 'unwraps' an outer
`None`-delimited group to avoid breaking existing code.

See https://github.com/rust-lang/rust/pull/73569#issuecomment-650860457
for more details.

The proper fix is to handle `None`-delimited groups systematically
throughout the parser, but that will require significant work. In the
meantime, this hack lets us fix important hygiene bugs in macros

4 years agoDon't print additional spaces when pretty-printing NoDelim groups
Aaron Hill [Sun, 21 Jun 2020 20:56:10 +0000 (16:56 -0400)]
Don't print additional spaces when pretty-printing NoDelim groups

4 years agoInsert NoDelim groups around nonterminals when lowering macro_rules
Aaron Hill [Sun, 21 Jun 2020 00:59:04 +0000 (20:59 -0400)]
Insert NoDelim groups around nonterminals when lowering macro_rules

4 years agoAlso document iphoneos-version-min.
aspen [Wed, 1 Jul 2020 16:21:48 +0000 (12:21 -0400)]
Also document iphoneos-version-min.

4 years agoDocument the CMake defines.
aspen [Wed, 1 Jul 2020 16:15:24 +0000 (12:15 -0400)]
Document the CMake defines.

4 years agoFix comment typo
KRAAI, MATTHEW [VISUS] [Wed, 1 Jul 2020 15:35:09 +0000 (08:35 -0700)]
Fix comment typo

4 years agoAuto merge of #73924 - Manishearth:rollup-8r51ld9, r=Manishearth
bors [Wed, 1 Jul 2020 14:45:56 +0000 (14:45 +0000)]
Auto merge of #73924 - Manishearth:rollup-8r51ld9, r=Manishearth

Rollup of 17 pull requests

Successful merges:

 - #72071 (Added detailed error code explanation for issue E0687 in Rust compiler.)
 - #72369 (Bring net/parser.rs up to modern up to date with modern rust patterns)
 - #72445 (Stabilize `#[track_caller]`.)
 - #73466 (impl From<char> for String)
 - #73548 (remove rustdoc warnings)
 - #73649 (Fix sentence structure)
 - #73678 (Update Box::from_raw example to generalize better)
 - #73705 (stop taking references in Relate)
 - #73716 (Document the static keyword)
 - #73752 (Remap Windows ERROR_INVALID_PARAMETER to ErrorKind::InvalidInput from Other)
 - #73776 (Move terminator to new module)
 - #73778 (Make `likely` and `unlikely` const, gated by feature `const_unlikely`)
 - #73805 (Document the type keyword)
 - #73806 (Use an 'approximate' universal upper bound when reporting region errors)
 - #73828 (Fix wording for anonymous parameter name help)
 - #73846 (Fix comma in debug_assert! docs)
 - #73847 (Edit cursor.prev() method docs in lexer)

Failed merges:

r? @ghost

4 years agoRollup merge of #73847 - pierwill:pierwill-cursor-doc, r=matthewjasper
Manish Goregaokar [Wed, 1 Jul 2020 14:43:02 +0000 (07:43 -0700)]
Rollup merge of #73847 - pierwill:pierwill-cursor-doc, r=matthewjasper

Edit cursor.prev() method docs in lexer

Fix missing punctuation

4 years agoRollup merge of #73846 - pierwill:pierwill-patch-2, r=joshtriplett
Manish Goregaokar [Wed, 1 Jul 2020 14:43:00 +0000 (07:43 -0700)]
Rollup merge of #73846 - pierwill:pierwill-patch-2, r=joshtriplett

Fix comma in debug_assert! docs

4 years agoRollup merge of #73828 - nop:fix/parameter-name-help, r=estebank
Manish Goregaokar [Wed, 1 Jul 2020 14:42:58 +0000 (07:42 -0700)]
Rollup merge of #73828 - nop:fix/parameter-name-help, r=estebank

Fix wording for anonymous parameter name help

```
 --> exercises/functions/functions2.rs:8:15
  |
8 | fn call_me(num) {
  |               ^ expected one of `:`, `@`, or `|`
  |
  = note: anonymous parameters are removed in the 2018 edition (see RFC 1685)
help: if this is a `self` type, give it a parameter name
  |
8 | fn call_me(self: num) {
  |            ^^^^^^^^^
help: if this was a parameter name, give it a type
  |
8 | fn call_me(num: TypeName) {
  |            ^^^^^^^^^^^^^
help: if this is a type, explicitly ignore the parameter name
  |
8 | fn call_me(_: num) {
  |
```
This commit changes "if this was a parameter name" to "if this is a parameter name" to match the wording of similar errors.

4 years agoRollup merge of #73806 - Aaron1011:feature/approx-universal-upper, r=estebank
Manish Goregaokar [Wed, 1 Jul 2020 14:42:56 +0000 (07:42 -0700)]
Rollup merge of #73806 - Aaron1011:feature/approx-universal-upper, r=estebank

Use an 'approximate' universal upper bound when reporting region errors

Fixes #67765

When reporting errors during MIR region inference, we sometimes use
`universal_upper_bound` to obtain a named universal region that we
can display to the user. However, this is not always possible - in a
case like `fn foo<'a, 'b>() { .. }`, the only upper bound for a region
containing `'a` and `'b` is `'static`. When displaying diagnostics, it's
usually better to display *some* named region (even if there are
multiple involved) rather than fall back to a generic error involving
`'static`.

This commit adds a new `approx_universal_upper_bound` method, which
uses the lowest-numbered universal region if the only alternative is to
return `'static`.

4 years agoRollup merge of #73805 - poliorcetics:type-keyword, r=kennytm
Manish Goregaokar [Wed, 1 Jul 2020 14:42:54 +0000 (07:42 -0700)]
Rollup merge of #73805 - poliorcetics:type-keyword, r=kennytm

Document the type keyword

Partial fix of #34601.

Two small examples, one clarifying that `type` only defines an alias, not a completely new type, the other explaining the use in traits.

@rustbot modify labels: T-doc,C-enhancement

4 years agoRollup merge of #73778 - nbdd0121:const_likely, r=oli-obk
Manish Goregaokar [Wed, 1 Jul 2020 14:42:52 +0000 (07:42 -0700)]
Rollup merge of #73778 - nbdd0121:const_likely, r=oli-obk

Make `likely` and `unlikely` const, gated by feature `const_unlikely`

This PR also contains a fix to allow `#[allow_internal_unstable]` to work properly with `#[rustc_const_unstable]`.

cc @RalfJung @nagisa

r? @oli-obk

4 years agoRollup merge of #73776 - aszenz:refactor_mir_module, r=wesleywiser
Manish Goregaokar [Wed, 1 Jul 2020 14:42:50 +0000 (07:42 -0700)]
Rollup merge of #73776 - aszenz:refactor_mir_module, r=wesleywiser

Move terminator to new module

Moves terminator types from `librustc_middle/mir/mod.rs` into submodule
Fixes #73723

4 years agoRollup merge of #73752 - TyPR124:invalid-parameter-error, r=LukasKalbertodt
Manish Goregaokar [Wed, 1 Jul 2020 14:42:48 +0000 (07:42 -0700)]
Rollup merge of #73752 - TyPR124:invalid-parameter-error, r=LukasKalbertodt

Remap Windows ERROR_INVALID_PARAMETER to ErrorKind::InvalidInput from Other

I don't know if this is acceptable or how likely it is to break existing code, but it seem to me ERROR_INVALID_PARAMETER "The parameter is incorrect" should map to ErrorKind::InvalidInput "A parameter was incorrect". Previously this value fell through to ErrorKind::Other.

I can't speak for anyone but myself, but I instinctively thought it would be InvalidInput.

4 years agoRollup merge of #73716 - poliorcetics:static-keyword, r=LukasKalbertodt
Manish Goregaokar [Wed, 1 Jul 2020 14:42:46 +0000 (07:42 -0700)]
Rollup merge of #73716 - poliorcetics:static-keyword, r=LukasKalbertodt

Document the static keyword

Partial fix of #34601.

This documents the `static` keyword. It's basically a simplified version of the reference with more examples.

@rustbot modify labels: T-doc,C-enhancement

4 years agoRollup merge of #73705 - lcnr:skip_binder, r=nikomatsakis
Manish Goregaokar [Wed, 1 Jul 2020 14:42:44 +0000 (07:42 -0700)]
Rollup merge of #73705 - lcnr:skip_binder, r=nikomatsakis

stop taking references in Relate

Adds a `Copy` bound to `Relate` and changes the type signatures to `T` from `&T`. While the `Copy` bound is not strictly necessary (i.e. the `Clone` bound of `TypeRelation` would be good enough), we don't need non `Copy` types and it simplifies the implementation.

Removes the afaict unused impls for `Vec<ty::PolyExistentialProjection<'tcx>>`, `Rc<T>` and `Box<T>`. If they end up being relevant again the bound of `Relate` can be reduced to `T: Clone`.

This also changes signature of `Binder::skip_binder` to `fn skip_binder(self) -> T`.

`TypeError::ProjectionBoundsLength` was never used and is also removed in this PR.

r? @nikomatsakis maybe :thinking: feel free to reassign

4 years agoRollup merge of #73678 - Keno:patch-1, r=LukasKalbertodt
Manish Goregaokar [Wed, 1 Jul 2020 14:42:42 +0000 (07:42 -0700)]
Rollup merge of #73678 - Keno:patch-1, r=LukasKalbertodt

Update Box::from_raw example to generalize better

I know very little about rust, so I saw the example here
```
use std::alloc::{alloc, Layout};

unsafe {
    let ptr = alloc(Layout::new::<i32>()) as *mut i32;
    *ptr = 5;
    let x = Box::from_raw(ptr);
}
```
and tried to generalize it by writing,
```
    let layout = Layout::new::<T>();
    let new_obj = unsafe {
        let ptr = alloc(layout) as *mut T;
        *ptr = obj;
        Box::from_raw(ptr)
    };
```
for some more complicated `T`, which ended up crashing with SIGSEGV,
because it tried to `drop_in_place` the previous object in `ptr` which is
of course garbage. I think that changing this example to use `.write` instead
would be a good idea to suggest the correct generalization. It is also more
consistent with other documentation items in this file, which use `.write`.
I also added a comment to explain it, but I'm not too attached to that,
and can see it being too verbose in this place.

4 years agoRollup merge of #73649 - Anirban166:patch-1, r=steveklabnik
Manish Goregaokar [Wed, 1 Jul 2020 14:42:40 +0000 (07:42 -0700)]
Rollup merge of #73649 - Anirban166:patch-1, r=steveklabnik

Fix sentence structure

Fixed grammar and sentence structure on appropriate instances.

4 years agoRollup merge of #73548 - tshepang:fix-rustdoc-warnings, r=ecstatic-morse
Manish Goregaokar [Wed, 1 Jul 2020 14:42:38 +0000 (07:42 -0700)]
Rollup merge of #73548 - tshepang:fix-rustdoc-warnings, r=ecstatic-morse

remove rustdoc warnings

4 years agoRollup merge of #73466 - matthiaskrgr:char_into_string, r=dtolnay
Manish Goregaokar [Wed, 1 Jul 2020 14:42:36 +0000 (07:42 -0700)]
Rollup merge of #73466 - matthiaskrgr:char_into_string, r=dtolnay

impl From<char> for String

This allows us to write

````rust
fn char_to_string() -> String {
    'a'.into()
}
````

which was not possible before.

4 years agoRollup merge of #72445 - anp:stabilize-track-caller, r=oli-obk
Manish Goregaokar [Wed, 1 Jul 2020 14:42:33 +0000 (07:42 -0700)]
Rollup merge of #72445 - anp:stabilize-track-caller, r=oli-obk

Stabilize `#[track_caller]`.

# Stabilization Report

RFC: [2091]
Tracking issue: https://github.com/rust-lang/rust/issues/47809

## Summary

From the [rustc-dev-guide chapter][dev-guide]:

> Take this example program:

```rust
fn main() {
    let foo: Option<()> = None;
    foo.unwrap(); // this should produce a useful panic message!
}
```

> Prior to Rust 1.42, panics like this `unwrap()` printed a location in libcore:

```
$ rustc +1.41.0 example.rs; example.exe
thread 'main' panicked at 'called `Option::unwrap()` on a `None` value',...core\macros\mod.rs:15:40
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace.
```

> As of 1.42, we get a much more helpful message:

```
$ rustc +1.42.0 example.rs; example.exe
thread 'main' panicked at 'called `Option::unwrap()` on a `None` value', example.rs:3:5
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
```

> These error messages are achieved through a combination of changes to `panic!` internals to make use of `core::panic::Location::caller` and a number of `#[track_caller]` annotations in the standard library which propagate caller information.

The attribute adds an implicit caller location argument to the ABI of annotated functions, but does not affect the type or MIR of the function. We implement the feature entirely in codegen and in the const evaluator.

## Bottom Line

This PR stabilizes the use of `#[track_caller]` everywhere, including traits and extern blocks. It also stabilizes `core::panic::Location::caller`, although the use of that function in a const context remains gated by `#![feature(const_caller_location)]`.

The implementation for the feature already changed the output of panic messages for a number of std functions, as described in the [1.42 release announcement]. The attribute's use in `Index` and `IndexMut` traits is visible to users since 1.44.

## Tests

All of the tests for this feature live under [src/test/ui/rfc-2091-track-caller][tests] in the repo.

Noteworthy cases:

* [use of attr in std]
  * validates user-facing benefit of the feature
* [trait attribute inheritance]
  * covers subtle behavior designed during implementation and not RFC'd
* [const/codegen equivalence]
  * this was the result of a suspected edge case and investigation
* [diverging function support]
  * covers an unresolved question from the RFC
* [fn pointers and shims]
  * covers important potential sources of unsoundness

## Documentation

The rustc-dev-guide now has a chapter on [Implicit Caller Location][dev-guide].

I have an [open PR to the reference][attr-reference-pr] documenting the attribute.

The intrinsic's [wrapper] includes some examples as well.

## Implementation History

* 2019-10-02: [`#[track_caller]` feature gate (RFC 2091 1/N) #65037](https://github.com/rust-lang/rust/pull/65037)
  * Picked up the patch that @ayosec had started on the feature gate.
* 2019-10-13: [Add `Instance::resolve_for_fn_ptr` (RFC 2091 #2/N) #65182](https://github.com/rust-lang/rust/pull/65182)
* 2019-10-20: ~~[WIP Add MIR argument for #[track_caller] (RFC 2091 3/N) #65258](https://github.com/rust-lang/rust/pull/65258)~~
  * Abandoned approach to send location as a MIR argument.
* 2019-10-28: [`std::panic::Location` is a lang_item, add `core::intrinsics::caller_location` (RFC 2091 3/N) #65664](https://github.com/rust-lang/rust/pull/65664)
* 2019-12-07: [Implement #[track_caller] attribute. (RFC 2091 4/N) #65881](https://github.com/rust-lang/rust/pull/65881)
* 2020-01-04: [libstd uses `core::panic::Location` where possible. #67137](https://github.com/rust-lang/rust/pull/67137)
* 2020-01-08: [`Option::{expect,unwrap}` and `Result::{expect, expect_err, unwrap, unwrap_err}` have `#[track_caller]` #67887](https://github.com/rust-lang/rust/pull/67887)
* 2020-01-20: [Fix #[track_caller] and function pointers #68302](https://github.com/rust-lang/rust/pull/68302) (fixed #68178)
* 2020-03-23: [#[track_caller] in traits #69251](https://github.com/rust-lang/rust/pull/69251)
* 2020-03-24: [#[track_caller] on core::ops::{Index, IndexMut}. #70234](https://github.com/rust-lang/rust/pull/70234)
* 2020-04-08 [Support `#[track_caller]` on functions in `extern "Rust" { ... }` #70916](https://github.com/rust-lang/rust/pull/70916)

## Unresolveds

### From the RFC

> Currently the RFC simply prohibit applying #[track_caller] to trait methods as a future-proofing
> measure.

**Resolved.** See the dev-guide documentation and the tests section above.

> Diverging functions should be supported.

**Resolved.** See the tests section above.

> The closure foo::{{closure}} should inherit most attributes applied to the function foo, ...

**Resolved.** This unknown was related to specifics of the implementation which were made irrelevant by the final implementation.

### Binary Size

I [instrumented track_caller to use custom sections][measure-size] in a local build and discovered relatively minor binary size usage for the feature overall. I'm leaving the issue open to discuss whether we want to upstream custom section support.

There's an [open issue to discuss mitigation strategies][mitigate-size]. Some decisions remain about the "right" strategies to reduce size without overly constraining the compiler implementation. I'd be excited to see someone carry that work forward but my opinion is that we shouldn't block stabilization on implementing compiler flags for redaction.

### Specialization

There's an [open issue][specialization] on the semantics of the attribute in specialization chains. I'm inclined to move forward with stabilization without an exact resolution here given that specialization is itself unstable, but I also think it should be an easy question to resolve.

### Location only points to the start of a call span

https://github.com/rust-lang/rust/issues/69977 was resolved by https://github.com/rust-lang/rust/pull/73182, and the next step should probably be to [extend `Location` with a notion of the end of a call](https://github.com/rust-lang/rust/issues/73554).

### Regression of std's panic messages

#70963 should be resolved by serializing span hygeine to crate metadata: https://github.com/rust-lang/rust/issues/68686.

[2091]: https://github.com/rust-lang/rfcs/blob/master/text/2091-inline-semantic.md
[dev-guide]: https://rustc-dev-guide.rust-lang.org/codegen/implicit-caller-location.html
[specialization]: https://github.com/rust-lang/rust/issues/70293
[measure-size]: https://github.com/rust-lang/rust/issues/70579
[mitigate-size]: https://github.com/rust-lang/rust/issues/70580
[attr-reference-pr]: https://github.com/rust-lang/reference/pull/742
[wrapper]: https://doc.rust-lang.org/nightly/core/panic/struct.Location.html#method.caller
[tests]: https://github.com/rust-lang/rust/tree/master/src/test/ui/rfc-2091-track-caller
[const/codegen equivalence]: https://github.com/rust-lang/rust/blob/master/src/test/ui/rfc-2091-track-caller/caller-location-fnptr-rt-ctfe-equiv.rs
[diverging function support]: https://github.com/rust-lang/rust/blob/master/src/test/ui/rfc-2091-track-caller/diverging-caller-location.rs
[use of attr in std]: https://github.com/rust-lang/rust/blob/master/src/test/ui/rfc-2091-track-caller/std-panic-locations.rs
[fn pointers and shims]: https://github.com/rust-lang/rust/blob/master/src/test/ui/rfc-2091-track-caller/tracked-fn-ptr-with-arg.rs
[trait attribute inheritance]: https://github.com/rust-lang/rust/blob/master/src/test/ui/rfc-2091-track-caller/tracked-trait-impls.rs
[1.42 release announcement]: https://blog.rust-lang.org/2020/03/12/Rust-1.42.html#useful-line-numbers-in-option-and-result-panic-messages

4 years agoRollup merge of #72369 - Lucretiel:socketaddr-parse, r=dtolnay
Manish Goregaokar [Wed, 1 Jul 2020 14:42:32 +0000 (07:42 -0700)]
Rollup merge of #72369 - Lucretiel:socketaddr-parse, r=dtolnay

Bring net/parser.rs up to modern up to date with modern rust patterns

The current implementation of IP address parsing is very unidiomatic; it's full of `if` / `return` / `is_some` / `is_none` instead of `?`, `loop` with manual index tracking; etc. Went through and did and cleanup to try to bring it in line with modern sensibilities.

The obvious concern with making changes like this is "make sure you understand why it's written that way before changing it". Looking through the commit history for this file, there are several much smaller commits that make similar changes (For instance, https://github.com/rust-lang/rust/commit/3024c1434a667425d30e4b0785857381323712aa, https://github.com/rust-lang/rust/commit/4f3ab4986ec96d9c93f34dc53d0a4a1279288451, https://github.com/rust-lang/rust/commit/79f876495b2853d1b78ba953ceb3114b8019100f), and there don't seem to be any commits in the history that indicate that this lack of idiomaticity is related to specific performance needs (ie, there aren't any commits that replace a `for` loop with a `loop` and a manual index count). In fact, the basic shape of the file is essentially unchanged from its initial commit back in 2015.

Made the following changes throughout the IP address parser:
- Replaced all uses of `is_some()` / `is_none()` with `?`.
- "Upgraded" loops wherever possible; ie, replace `while` with `for`, etc.
    - Removed all cases of manual index tracking / incrementing.
- Renamed several single-character variables with more expressive names.
- Replaced several manual control flow segments with equivalent adapters (such as `Option::filter`).
- Removed `read_seq_3`; replaced with simple sequences of `?`.
- Parser now reslices its state when consuming, rather than carrying a separate state and index variable.
- `read_digit` now uses `char::to_digit`.
- Added comments throughout, especially in the complex IPv6 parsing logic.
- Added comprehensive local unit tests for the parser to validate these changes.

4 years agoRollup merge of #72071 - PankajChaudhary5:ErrorCode-E0687, r=davidtwco
Manish Goregaokar [Wed, 1 Jul 2020 14:42:27 +0000 (07:42 -0700)]
Rollup merge of #72071 - PankajChaudhary5:ErrorCode-E0687, r=davidtwco

Added detailed error code explanation for issue E0687 in Rust compiler.

Added proper error explanation for issue E0687 in the Rust compiler.
Error Code E0687

Sub Part of Issue #61137

r? @GuillaumeGomez

4 years agoVerify UI tests work in pass=check mode
Mark Rousskov [Sat, 9 May 2020 17:26:18 +0000 (13:26 -0400)]
Verify UI tests work in pass=check mode

We do not test cross-compilation here as the PR builder lacks a sufficiently
recent LLVM to cross-compile to 32-bit linux. Once we bump the minimum LLVM
version to LLVM 9, this can use normal 32-bit linux.

4 years agoImplement slice_strip feature
Lzu Tao [Wed, 1 Jul 2020 12:36:42 +0000 (12:36 +0000)]
Implement slice_strip feature

4 years agoRemove `token::FlattenGroup`
Vadim Petrochenkov [Wed, 1 Jul 2020 10:16:49 +0000 (13:16 +0300)]
Remove `token::FlattenGroup`

4 years agoAuto merge of #73863 - pietroalbini:revert-8bc3122311d, r=Mark-Simulacrum
bors [Wed, 1 Jul 2020 10:17:39 +0000 (10:17 +0000)]
Auto merge of #73863 - pietroalbini:revert-8bc3122311d, r=Mark-Simulacrum

Revert "ci: allow gating gha on everything but macOS"

The macOS issue on GHA's side seems to be fixed, so this is not needed anymore.

r? @Mark-Simulacrum

4 years agoexpand: Stop using nonterminals for passing tokens to attribute and derive macros
Vadim Petrochenkov [Sun, 14 Jun 2020 11:30:42 +0000 (14:30 +0300)]
expand: Stop using nonterminals for passing tokens to attribute and derive macros

4 years agoStabilize `#[track_caller]`.
Adam Perry [Thu, 21 May 2020 23:43:39 +0000 (16:43 -0700)]
Stabilize `#[track_caller]`.

Does not yet make its constness stable, though. Use of
`Location::caller` in const contexts is still gated by
`#![feature(const_caller_location)]`.

4 years agoenable unsafe_op_in_unsafe_fn lint
Elton Law [Wed, 1 Jul 2020 03:09:06 +0000 (23:09 -0400)]
enable unsafe_op_in_unsafe_fn lint

4 years ago`#[deny(unsafe_op_in_unsafe_fn)]` in libstd/fs.rs
Elton Law [Wed, 1 Jul 2020 02:51:28 +0000 (22:51 -0400)]
`#[deny(unsafe_op_in_unsafe_fn)]` in libstd/fs.rs

4 years agoAuto merge of #73706 - Aaron1011:fix/proc-macro-foreign-span, r=petrochenkov
bors [Wed, 1 Jul 2020 01:04:31 +0000 (01:04 +0000)]
Auto merge of #73706 - Aaron1011:fix/proc-macro-foreign-span, r=petrochenkov

Serialize all foreign `SourceFile`s into proc-macro crate metadata

Normally, we encode a `Span` that references a foreign `SourceFile` by
encoding information about the foreign crate. When we decode this
`Span`, we lookup the foreign crate in order to decode the `SourceFile`.

However, this approach does not work for proc-macro crates. When we load
a proc-macro crate, we do not deserialzie any of its dependencies (since
a proc-macro crate can only export proc-macros). This means that we
cannot serialize a reference to an upstream crate, since the associated
metadata will not be available when we try to deserialize it.

This commit modifies foreign span handling so that we treat all foreign
`SourceFile`s as local `SourceFile`s when serializing a proc-macro.
All `SourceFile`s will be stored into the metadata of a proc-macro
crate, allowing us to cotinue to deserialize a proc-macro crate without
needing to load any of its dependencies.

Since the number of foreign `SourceFile`s that we load during a
compilation session may be very large, we only serialize a `SourceFile`
if we have also serialized a `Span` which requires it.

4 years agoRewrite a few manual index loops with while-let
Josh Stone [Wed, 1 Jul 2020 00:53:45 +0000 (17:53 -0700)]
Rewrite a few manual index loops with while-let

There were a few instances of this pattern:

```rust
while index < vec.len() {
    let item = &vec[index];
    // ...
}
```

These can be indexed at once:

```rust
while let Some(item) = vec.get(index) {
    // ...
}
```

Particularly in `ObligationForest::process_obligations`, this mitigates
a codegen regression found with LLVM 11 (#73526).