]> git.lizzy.rs Git - rust.git/log
rust.git
2 years agoAuto merge of #91125 - eskarn:llvm-passes-plugin-support, r=nagisa
bors [Thu, 30 Dec 2021 02:53:09 +0000 (02:53 +0000)]
Auto merge of #91125 - eskarn:llvm-passes-plugin-support, r=nagisa

Allow loading LLVM plugins with both legacy and new pass manager

Opening a draft PR to get feedback and start discussion on this feature. There is already a codegen option `passes` which allow giving a list of LLVM pass names, however we currently can't use a LLVM pass plugin (as described here : https://llvm.org/docs/WritingAnLLVMPass.html), the only available passes are the LLVM built-in ones.

The proposed modification would be to add another codegen option `pass-plugins`, which can be set with a list of paths to shared library files. These libraries are loaded using the LLVM function `PassPlugin::Load`, which calls the expected symbol `lvmGetPassPluginInfo`, and register the pipeline parsing and optimization callbacks.

An example usage with a single plugin and 3 passes would look like this in the `.cargo/config`:

```toml
rustflags = [
    "-C", "pass-plugins=/tmp/libLLVMPassPlugin",
    "-C", "passes=pass1 pass2 pass3",
]
```
This would give the same functionality as the opt LLVM tool directly integrated in rust build system.

Additionally, we can also not specify the `passes` option, and use a plugin which inserts passes in the optimization pipeline, as one could do using clang.

2 years agoAuto merge of #88354 - Jmc18134:hint-space-pauth-opt, r=nagisa
bors [Wed, 29 Dec 2021 22:35:11 +0000 (22:35 +0000)]
Auto merge of #88354 - Jmc18134:hint-space-pauth-opt, r=nagisa

Add codegen option for branch protection and pointer authentication on AArch64

The branch-protection codegen option enables the use of hint-space pointer
authentication code for AArch64 targets.

2 years agoAuto merge of #92244 - petrochenkov:alltraits, r=cjgillot
bors [Wed, 29 Dec 2021 19:22:33 +0000 (19:22 +0000)]
Auto merge of #92244 - petrochenkov:alltraits, r=cjgillot

rustc_metadata: Encode list of all crate's traits into metadata

While working on https://github.com/rust-lang/rust/pull/88679 I noticed that rustdoc is casually doing something quite expensive, something that is used only for error reporting in rustc - collecting all traits from all crates in the dependency tree.

This PR trades some minor extra time spent by metadata encoder in rustc for major gains for rustdoc (and for rustc runs with errors, which execute the `all_traits` query for better diagnostics).

2 years agoAuto merge of #92309 - ehuss:remove-check_lines, r=Mark-Simulacrum
bors [Wed, 29 Dec 2021 16:07:22 +0000 (16:07 +0000)]
Auto merge of #92309 - ehuss:remove-check_lines, r=Mark-Simulacrum

compiletest: Remove some vestigial code

The `check_lines` header is no longer parsed as a header, but instead inside the debuginfo tests. I believe this was changed in #13726.

2 years agoAuto merge of #92397 - matthiaskrgr:rollup-xnfou17, r=matthiaskrgr
bors [Wed, 29 Dec 2021 12:07:33 +0000 (12:07 +0000)]
Auto merge of #92397 - matthiaskrgr:rollup-xnfou17, r=matthiaskrgr

Rollup of 7 pull requests

Successful merges:

 - #92075 (rustdoc: Only special case struct fields for intra-doc links, not enum variants)
 - #92118 (Parse and suggest moving where clauses after equals for type aliases)
 - #92237 (Visit expressions in-order when resolving pattern bindings)
 - #92340 (rustdoc: Start cleaning up search index generation)
 - #92351 (Add long error explanation for E0227)
 - #92371 (Remove pretty printer space inside block with only outer attrs)
 - #92372 (Print space after formal generic params in fn type)

Failed merges:

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

2 years agoRollup merge of #92372 - dtolnay:fntype, r=jackh726
Matthias Krüger [Wed, 29 Dec 2021 09:17:13 +0000 (10:17 +0100)]
Rollup merge of #92372 - dtolnay:fntype, r=jackh726

Print space after formal generic params in fn type

Follow-up to #92238 fixing one of the FIXMEs.

```rust
macro_rules! repro {
    ($ty:ty) => {
        stringify!($ty)
    };
}

fn main() {
    println!("{}", repro!(for<'a> fn(&'a u8)));
}
```

Before:&ensp;`for<'a>fn(&'a u8)`
After:&ensp;`for<'a> fn(&'a u8)`

The pretty printer's `print_formal_generic_params` already prints formal generic params correctly with a space, we just need to call it when printing BareFn types instead of reimplementing the printing incorrectly without a space.

https://github.com/rust-lang/rust/blob/83b15bfe1c15f325bc186ebfe3691b729ed59f2b/compiler/rustc_ast_pretty/src/pprust/state.rs#L1394-L1400

2 years agoRollup merge of #92371 - dtolnay:attrblock, r=oli-obk
Matthias Krüger [Wed, 29 Dec 2021 09:17:12 +0000 (10:17 +0100)]
Rollup merge of #92371 - dtolnay:attrblock, r=oli-obk

Remove pretty printer space inside block with only outer attrs

Follow-up to #92238 fixing one of the FIXMEs.

```rust
macro_rules! repro {
    ($expr:expr) => {
        stringify!($expr)
    };
}

fn main() {
    println!("{}", repro!(#[attr] {}));
}
```

Before:&ensp;`#[attr] { }`
After:&ensp;`#[attr] {}`

2 years agoRollup merge of #92351 - TmLev:master, r=GuillaumeGomez
Matthias Krüger [Wed, 29 Dec 2021 09:17:11 +0000 (10:17 +0100)]
Rollup merge of #92351 - TmLev:master, r=GuillaumeGomez

Add long error explanation for E0227

Part of the #61137.

2 years agoRollup merge of #92340 - camelid:search-index-cleanup, r=GuillaumeGomez
Matthias Krüger [Wed, 29 Dec 2021 09:17:11 +0000 (10:17 +0100)]
Rollup merge of #92340 - camelid:search-index-cleanup, r=GuillaumeGomez

rustdoc: Start cleaning up search index generation

I'm trying to simplify and clean up the code, partly to make #90779 easier.

r? `@GuillaumeGomez`

2 years agoRollup merge of #92237 - compiler-errors:issue-92100, r=cjgillot
Matthias Krüger [Wed, 29 Dec 2021 09:17:10 +0000 (10:17 +0100)]
Rollup merge of #92237 - compiler-errors:issue-92100, r=cjgillot

Visit expressions in-order when resolving pattern bindings

[edited:] Visit the pattern's sub-expressions before defining any bindings.

Otherwise, we might get into a case where a Lit/Range expression in a pattern has a qpath pointing to a Ident pattern that is defined after it, causing an ICE when lowering to HIR. I have a more detailed explanation in the issue linked.

Fixes #92100

2 years agoRollup merge of #92118 - jackh726:type-alias-position-error, r=petrochenkov
Matthias Krüger [Wed, 29 Dec 2021 09:17:08 +0000 (10:17 +0100)]
Rollup merge of #92118 - jackh726:type-alias-position-error, r=petrochenkov

Parse and suggest moving where clauses after equals for type aliases

~Mostly the same as #90076, but doesn't make any syntax changes.~ Whether or not we want to land the syntax changes, we should  parse the invalid where clause position and suggest moving.

r? `@nikomatsakis`
cc `@petrochenkov` you might have thoughts on implementation

2 years agoRollup merge of #92075 - jyn514:resolve-cleanup, r=camelid
Matthias Krüger [Wed, 29 Dec 2021 09:17:08 +0000 (10:17 +0100)]
Rollup merge of #92075 - jyn514:resolve-cleanup, r=camelid

rustdoc: Only special case struct fields for intra-doc links, not enum variants

Variants are already handled by `resolve_str_path_error`, rustdoc doesn't need to consider them separately. Thanks `@camelid` for catching this!

Eventually I'd like to fix the "combine this with `variant_field`" comment but that needs `resolve_field` to take a `ty_res` parameter to avoid it being super hacky (cc https://github.com/rust-lang/rust/issues/83761#issuecomment-813026026).

r? `@camelid`

2 years agoAuto merge of #92254 - krasimirgg:gsgdt-up, r=Mark-Simulacrum
bors [Wed, 29 Dec 2021 09:00:27 +0000 (09:00 +0000)]
Auto merge of #92254 - krasimirgg:gsgdt-up, r=Mark-Simulacrum

Bump `gsgdt` to 0.1.3

No functional changes intended.

The 0.1.2 -> 0.1.3 commit https://github.com/vn-ki/gsgdt-rs/commit/3e1dcec5398d281e1b33afb41e43dfb248321a1d renames `Node::new` to `Node::from_list`.

2 years agoAuto merge of #92291 - AngelicosPhosphoros:typeid_inline_revert_92135, r=joshtriplett
bors [Wed, 29 Dec 2021 05:53:19 +0000 (05:53 +0000)]
Auto merge of #92291 - AngelicosPhosphoros:typeid_inline_revert_92135, r=joshtriplett

Reverts #92135 because perf regression

Please, start a perf test for this.

r? `@joshtriplett` You approved original PR.

2 years agoAuto merge of #92283 - vacuus:print-generic-bounds, r=camelid,GuillaumeGomez
bors [Wed, 29 Dec 2021 02:49:34 +0000 (02:49 +0000)]
Auto merge of #92283 - vacuus:print-generic-bounds, r=camelid,GuillaumeGomez

rustdoc: Remove `String` allocation in iteration in `print_generic_bounds`

(I realized only after making the commit that maybe I shouldn't refer to iteration as looping, but it's close enough)

The string representation of a `clean::GenericBound` instance (evaluated [here](https://github.com/rust-lang/rust/blob/master/src/librustdoc/html/format.rs#L397)) is deterministic for a given `self` (the instance), `cx` and `f`, and since `cx` and `f` are constant (as far as I can tell) for a given invocation of `print_generic_bounds`, `self` is the determining factor. Therefore, using the data in `self` shouldn't differ in effect from using its string representation.

Given the totality of the function calls needed to evaluate the string representation as well as the actual allocation, at the very least, this shouldn't negatively affect performance.

2 years agoAuto merge of #92269 - vacuus:clean-generics-print, r=camelid
bors [Tue, 28 Dec 2021 23:38:54 +0000 (23:38 +0000)]
Auto merge of #92269 - vacuus:clean-generics-print, r=camelid

rustdoc: Remove `collect` call in `clean::Generics::print`

2 years agoAdd regression test for #59502
Noah Lev [Tue, 28 Dec 2021 21:15:02 +0000 (13:15 -0800)]
Add regression test for #59502

This issue was fixed using a hacky recursion "fuel" argument, but the
issue was never minimized nor was a regression test added. The
underlying bug is still unfixed, so this test should help with fixing it
and removing the `recurse` hack.

2 years agoExplain why struct fields are handled by assoc. item code
Noah Lev [Tue, 28 Dec 2021 19:40:06 +0000 (11:40 -0800)]
Explain why struct fields are handled by assoc. item code

2 years agoRemove unused parameter
Noah Lev [Tue, 28 Dec 2021 03:28:05 +0000 (19:28 -0800)]
Remove unused parameter

2 years agoPrint space after formal generic params in fn type
David Tolnay [Thu, 23 Dec 2021 20:31:37 +0000 (12:31 -0800)]
Print space after formal generic params in fn type

2 years agoOnly special case struct fields for intra-doc links, not enum variants
Joshua Nelson [Sat, 18 Dec 2021 15:48:51 +0000 (09:48 -0600)]
Only special case struct fields for intra-doc links, not enum variants

Variants are already handled by `resolve_str_path_error`, rustdoc doesn't need to consider them separately.

2 years agoRemove pretty printer space inside block with only outer attrs
David Tolnay [Tue, 28 Dec 2021 20:26:18 +0000 (12:26 -0800)]
Remove pretty printer space inside block with only outer attrs

2 years agoParse and suggest moving where clauses after equals for type aliases
Jack Huey [Mon, 20 Dec 2021 14:10:10 +0000 (09:10 -0500)]
Parse and suggest moving where clauses after equals for type aliases

2 years agoAuto merge of #92352 - matthiaskrgr:rollup-19fbq7u, r=matthiaskrgr
bors [Tue, 28 Dec 2021 16:59:56 +0000 (16:59 +0000)]
Auto merge of #92352 - matthiaskrgr:rollup-19fbq7u, r=matthiaskrgr

Rollup of 7 pull requests

Successful merges:

 - #92076 (Ignore other `PredicateKind`s in rustdoc auto trait finder)
 - #92219 (Remove VCVARS_BAT)
 - #92238 (Add a test suite for stringify macro)
 - #92330 (Add myself to .mailmap)
 - #92333 (Tighten span when suggesting lifetime on path)
 - #92335 (Document units for `std::column`)
 - #92344 (:arrow_up: rust-analyzer)

Failed merges:

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

2 years agoAuto merge of #92153 - petrochenkov:foreignchild, r=cjgillot
bors [Tue, 28 Dec 2021 13:47:22 +0000 (13:47 +0000)]
Auto merge of #92153 - petrochenkov:foreignchild, r=cjgillot

rustc_metadata: Merge items from `extern` blocks into their parent modules during metadata encoding rather than during metadata decoding

2 years agoRollup merge of #92344 - lnicola:rust-analyzer-2021-12-28, r=lnicola
Matthias Krüger [Tue, 28 Dec 2021 12:59:27 +0000 (13:59 +0100)]
Rollup merge of #92344 - lnicola:rust-analyzer-2021-12-28, r=lnicola

:arrow_up: rust-analyzer

r? ``@ghost``

2 years agoRollup merge of #92335 - ecstatic-morse:std-column-unicode, r=Manishearth
Matthias Krüger [Tue, 28 Dec 2021 12:59:26 +0000 (13:59 +0100)]
Rollup merge of #92335 - ecstatic-morse:std-column-unicode, r=Manishearth

Document units for `std::column`

Fixes #92301.

r? ``@Manishearth`` (for the terminology and the Chinese)

2 years agoRollup merge of #92333 - compiler-errors:elided-lifetime-spans, r=cjgillot
Matthias Krüger [Tue, 28 Dec 2021 12:59:25 +0000 (13:59 +0100)]
Rollup merge of #92333 - compiler-errors:elided-lifetime-spans, r=cjgillot

Tighten span when suggesting lifetime on path

This is kind of a hack.

Really the issue here is that we want to suggest the segment's span if the path resolves to something defined outside of the macro, and the macro's span if it resolves to something defined within.. I'll look into seeing if we can do something like that.

Fixes #92324

r? `@cjgillot`

2 years agoRollup merge of #92330 - wesleywiser:mailmap, r=Mark-Simulacrum
Matthias Krüger [Tue, 28 Dec 2021 12:59:24 +0000 (13:59 +0100)]
Rollup merge of #92330 - wesleywiser:mailmap, r=Mark-Simulacrum

Add myself to .mailmap

2 years agoRollup merge of #92238 - dtolnay:stringifytest, r=Mark-Simulacrum
Matthias Krüger [Tue, 28 Dec 2021 12:59:24 +0000 (13:59 +0100)]
Rollup merge of #92238 - dtolnay:stringifytest, r=Mark-Simulacrum

Add a test suite for stringify macro

This attempts to cover the behavior of `stringify!` on various interpolated syntax tree nodes.

The pretty printer has a history of unsightly whitespace (double spaces, missing spaces, spaces where there shouldn't be spaces) &mdash; #91437, #91562, #91568. There are several such issues left; the test cases that I consider to be currently behaving incorrectly are marked with `// FIXME` in the PR.

2 years agoRollup merge of #92219 - ehuss:remove-vcvars, r=Mark-Simulacrum
Matthias Krüger [Tue, 28 Dec 2021 12:59:23 +0000 (13:59 +0100)]
Rollup merge of #92219 - ehuss:remove-vcvars, r=Mark-Simulacrum

Remove VCVARS_BAT

This environment variable is no longer used.  It was used in the original Azure Pipelines configuration (#60777). When GitHub Actions were added (#70190), it was no longer used, and I suspect it was just an oversight while transitioning the configuration.

2 years agoRollup merge of #92076 - Aaron1011:rustdoc-auto-trait-ignore, r=cjgillot
Matthias Krüger [Tue, 28 Dec 2021 12:59:22 +0000 (13:59 +0100)]
Rollup merge of #92076 - Aaron1011:rustdoc-auto-trait-ignore, r=cjgillot

Ignore other `PredicateKind`s in rustdoc auto trait finder

Fixes #92073

There's not really anything we can do with them, and they're
causing ICEs. I'm not using a wildcard match, as we should check
that any new `PredicateKind`s are handled properly by rustdoc.

2 years agodocs(error-codes): Add long error explanation for E0227
TmLev [Tue, 28 Dec 2021 12:46:20 +0000 (15:46 +0300)]
docs(error-codes): Add long error explanation for E0227

2 years agorustc_metadata: Encode list of all crate's traits into metadata
Vadim Petrochenkov [Fri, 24 Dec 2021 03:09:32 +0000 (11:09 +0800)]
rustc_metadata: Encode list of all crate's traits into metadata

2 years ago:arrow_up: rust-analyzer
Laurențiu Nicola [Tue, 28 Dec 2021 07:44:21 +0000 (09:44 +0200)]
:arrow_up: rust-analyzer

2 years agoTighten span when suggesting lifetime on path
Michael Goulet [Mon, 27 Dec 2021 22:10:59 +0000 (14:10 -0800)]
Tighten span when suggesting lifetime on path

2 years agoAuto merge of #92159 - petrochenkov:decoditer, r=cjgillot
bors [Tue, 28 Dec 2021 07:32:43 +0000 (07:32 +0000)]
Auto merge of #92159 - petrochenkov:decoditer, r=cjgillot

rustc_metadata: Switch crate data iteration from a callback to iterator

The iteration looks more conventional this way, and some allocations are avoided.

2 years agorustc_metadata: Merge items from `extern` blocks into their parent modules
Vadim Petrochenkov [Tue, 21 Dec 2021 06:37:38 +0000 (14:37 +0800)]
rustc_metadata: Merge items from `extern` blocks into their parent modules

during metadata encoding rather than during metadata decoding

2 years agoAuto merge of #92088 - camelid:intra-doc-cleanup, r=Manishearth
bors [Tue, 28 Dec 2021 04:19:01 +0000 (04:19 +0000)]
Auto merge of #92088 - camelid:intra-doc-cleanup, r=Manishearth

intra-doc: Use an enum to represent URL fragments

This is a step in the direction of computing the links more lazily,
which I think will simplify the implementation of intra-doc links.
This will also make it easier to eventually use the actual `Res` for
associated items, enum variants, and fields, rather than their HTML
page's `Res`.

r? `@jyn514`

2 years agoGive clearer names to several search index functions
Noah Lev [Tue, 28 Dec 2021 03:19:56 +0000 (19:19 -0800)]
Give clearer names to several search index functions

2 years agoCoalesce two arguments as `&Function`
Noah Lev [Tue, 28 Dec 2021 03:16:33 +0000 (19:16 -0800)]
Coalesce two arguments as `&Function`

2 years agoMake `search_index` functions private where possible
Noah Lev [Tue, 28 Dec 2021 02:59:27 +0000 (18:59 -0800)]
Make `search_index` functions private where possible

Now the only two crate-public items are `build_index` and
`get_index_search_type` (because for some reason the latter is also used
in `formats::cache`).

2 years agoMove `ExternalLocation` to `clean::types`
Noah Lev [Tue, 28 Dec 2021 02:57:07 +0000 (18:57 -0800)]
Move `ExternalLocation` to `clean::types`

It was previously defined in `render::search_index` but wasn't used at
all there. `clean::types` seems like a better fit since that's where
`ExternalCrate` is defined.

2 years agorustdoc: Remove some unnecessary `cache` parameters
Noah Lev [Tue, 28 Dec 2021 02:53:00 +0000 (18:53 -0800)]
rustdoc: Remove some unnecessary `cache` parameters

Based on
https://github.com/rust-lang/rust/pull/80883#issuecomment-774437832.
The `tcx` parameters do seem to be used though, so I only removed the
`cache` parameters.

2 years agoRename `rustdoc::html::render::cache` to `search_index`
Noah Lev [Tue, 28 Dec 2021 02:39:35 +0000 (18:39 -0800)]
Rename `rustdoc::html::render::cache` to `search_index`

The old name wasn't very clear, while the new one makes it clear that
this is the code responsible for creating the search index.

2 years agointra-doc: Use an enum to represent URL fragments
Noah Lev [Sat, 18 Dec 2021 21:33:01 +0000 (13:33 -0800)]
intra-doc: Use an enum to represent URL fragments

This is a step in the direction of computing the links more lazily,
which I think will simplify the implementation of intra-doc links.
This will also make it easier to eventually use the actual `Res` for
associated items, enum variants, and fields, rather than their HTML
page's `Res`.

2 years agoRemove needless `return`
Noah Lev [Sat, 18 Dec 2021 01:14:53 +0000 (17:14 -0800)]
Remove needless `return`

2 years agoAuto merge of #92130 - Kobzol:stable-hash-str, r=cjgillot
bors [Tue, 28 Dec 2021 01:04:33 +0000 (01:04 +0000)]
Auto merge of #92130 - Kobzol:stable-hash-str, r=cjgillot

Use hash_stable for hashing str

This seemed like an oversight. With this change the hash can go through the `HashStable` machinery directly.

2 years agoDocument units for `std::column`
Dylan MacKenzie [Mon, 27 Dec 2021 23:35:01 +0000 (15:35 -0800)]
Document units for `std::column`

2 years agoAuto merge of #92329 - matthiaskrgr:rollup-l3b4fl1, r=matthiaskrgr
bors [Mon, 27 Dec 2021 21:55:52 +0000 (21:55 +0000)]
Auto merge of #92329 - matthiaskrgr:rollup-l3b4fl1, r=matthiaskrgr

Rollup of 7 pull requests

Successful merges:

 - #90586 (Relax priv-in-pub lint on generic bounds and where clauses of trait impls.)
 - #92112 (Fix the error of checking `base_expr` twice in type_changing_struct_update)
 - #92147 (rustc_builtin_macros: make asm mod public for rustfmt)
 - #92161 (resolve: Minor miscellaneous cleanups from #89059)
 - #92264 (Remove `maybe_uninit_extra` feature from Vec docs)
 - #92303 (Add test cases for issue #26186)
 - #92307 (Fix minor typos)

Failed merges:

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

2 years agoRollup merge of #92307 - hiroshi-maybe:fix-minor-typos, r=camelid
Matthias Krüger [Mon, 27 Dec 2021 20:42:30 +0000 (21:42 +0100)]
Rollup merge of #92307 - hiroshi-maybe:fix-minor-typos, r=camelid

Fix minor typos

2 years agoRollup merge of #92303 - Patrick-Poitras:issue-26186, r=jackh726
Matthias Krüger [Mon, 27 Dec 2021 20:42:29 +0000 (21:42 +0100)]
Rollup merge of #92303 - Patrick-Poitras:issue-26186, r=jackh726

Add test cases for issue #26186

Closes #26186

It seems that issue #26186 has been solved at some point since the issue has been last updated. I've merged together the examples that were supplied by `@Osspial,` `@Mark-Simulacrum,` `@Diggsey,` `@eefriedman` and `@shepmaster,` so that we can add this to the testing suite and prevent these issues from re-occurring.

2 years agoRollup merge of #92264 - Shadlock0133:patch-1, r=the8472
Matthias Krüger [Mon, 27 Dec 2021 20:42:28 +0000 (21:42 +0100)]
Rollup merge of #92264 - Shadlock0133:patch-1, r=the8472

Remove `maybe_uninit_extra` feature from Vec docs

In `Vec`, two doc tests are using `MaybeUninit::write` , stabilized in 1.55. This makes docs' usage of `maybe_uninit_extra` feature unnecessary.

2 years agoRollup merge of #92161 - petrochenkov:misclean, r=cjgillot
Matthias Krüger [Mon, 27 Dec 2021 20:42:27 +0000 (21:42 +0100)]
Rollup merge of #92161 - petrochenkov:misclean, r=cjgillot

resolve: Minor miscellaneous cleanups from #89059

`@bors` rollup=always

2 years agoRollup merge of #92147 - calebcartwright:publicize-builtin_macro-asm, r=cjgillot
Matthias Krüger [Mon, 27 Dec 2021 20:42:26 +0000 (21:42 +0100)]
Rollup merge of #92147 - calebcartwright:publicize-builtin_macro-asm, r=cjgillot

rustc_builtin_macros: make asm mod public for rustfmt

Follow up to #92016, as I'd completely missed that the mod we needed was internal

2 years agoRollup merge of #92112 - SparrowLii:issue92010, r=cjgillot
Matthias Krüger [Mon, 27 Dec 2021 20:42:25 +0000 (21:42 +0100)]
Rollup merge of #92112 - SparrowLii:issue92010, r=cjgillot

Fix the error of checking `base_expr` twice in type_changing_struct_update

Fixes #92010

2 years agoRollup merge of #90586 - jswrenn:relax-privacy-lints, r=petrochenkov
Matthias Krüger [Mon, 27 Dec 2021 20:42:25 +0000 (21:42 +0100)]
Rollup merge of #90586 - jswrenn:relax-privacy-lints, r=petrochenkov

Relax priv-in-pub lint on generic bounds and where clauses of trait impls.

The priv-in-pub lint is a legacy mechanism of the compiler, supplanted by a reachability-based [type privacy](https://github.com/rust-lang/rfcs/blob/master/text/2145-type-privacy.md) analysis. This PR does **not** relax type privacy; it only relaxes the lint (as proposed by the type privacy RFC) in the case of trait impls.

## Current Behavior
On public trait impls, it's currently an **error** to have a `where` bound constraining a private type with a trait:
```rust
pub trait Trait {}
pub struct Type {}

struct Priv {}
impl Trait for Priv {}

impl Trait for Type
where
    Priv: Trait // ERROR
{}
```

...and it's a **warning** to have have a public type constrained by a private trait:
```rust
pub trait Trait {}
pub struct Type {}

pub struct Pub {}
trait Priv {}
impl Priv for Pub {}

impl Trait for Type
where
    Pub: Priv // WARNING
{}
```

This lint applies to `where` clauses in other contexts, too; e.g. on free functions:
```rust
struct Priv<T>(T);
pub trait Pub {}
impl<T: Pub> Pub for Priv<T> {}

pub fn function<T>()
where
    Priv<T>: Pub // WARNING
{}
```

**These constraints could be relaxed without issue.**

## New Behavior
This lint is relaxed for `where` clauses on trait impls, such that it's okay to have a `where` bound constraining a private type with a trait:
```rust
pub trait Trait {}
pub struct Type {}

struct Priv {}
impl Trait for Priv {}

impl Trait for Type
where
    Priv: Trait // OK
{}
```

...and it's okay to have a public type constrained by a private trait:
```rust
pub trait Trait {}
pub struct Type {}

pub struct Pub {}
trait Priv {}
impl Priv for Pub {}

impl Trait for Type
where
    Pub: Priv // OK
{}
```

## Rationale
While the priv-in-pub lint is not essential for soundness, it *can* help programmers avoid pitfalls that would make their libraries difficult to use by others. For instance, such a lint *is* useful for free functions; e.g. if a downstream crate tries to call the `function` in the previous snippet in a generic context:
```rust
fn callsite<T>()
where
    Priv<T>: Pub // ERROR: omitting this bound is a compile error, but including it is too
{
    function::<T>()
}
```
...it cannot do so without repeating `function`'s `where` bound, which we cannot do because `Priv` is out-of-scope. A lint for this case is arguably helpful.

However, this same reasoning **doesn't** hold for trait impls. To call an unconstrained method on a public trait impl with private bounds, you don't need to forward those private bounds, you can forward the public trait:
```rust
mod upstream {
    pub trait Trait {
        fn method(&self) {}
    }
    pub struct Type<T>(T);

    pub struct Pub<T>(T);
    trait Priv {}
    impl<T: Priv> Priv for Pub<T> {}

    impl<T> Trait for Type<T>
    where
        Pub<T>: Priv // WARNING
    {}
}

mod downstream {
    use super::upstream::*;

    fn function<T>(value: Type<T>)
    where
        Type<T>: Trait // <- no private deets!
    {
        value.method();
    }
}
```

**This PR only eliminates the lint on trait impls.** It leaves it intact for all other contexts, including trait definitions, inherent impls, and function definitions. It doesn't need to exist in those cases either, but I figured I'd first target a case where it's mostly pointless.

## Other Notes
- See discussion [on zulip](https://rust-lang.zulipchat.com/#narrow/stream/213817-t-lang/topic/relax.20priv-in-pub.20lint.20for.20trait.20impl.20.60where.60.20bounds/near/222458397).
- This PR effectively reverts #79291.

2 years agoAdd myself to .mailmap
Wesley Wiser [Mon, 27 Dec 2021 20:37:12 +0000 (15:37 -0500)]
Add myself to .mailmap

2 years agoVisit patterns' literal expressions before binding new idents
Michael Goulet [Fri, 24 Dec 2021 00:03:30 +0000 (16:03 -0800)]
Visit patterns' literal expressions before binding new idents

2 years agocompiletest: Remove some vestigial code
Eric Huss [Mon, 27 Dec 2021 04:33:10 +0000 (20:33 -0800)]
compiletest: Remove some vestigial code

2 years agofix typo: intialized -> initialized
Hiroshi Kori [Mon, 27 Dec 2021 00:20:38 +0000 (16:20 -0800)]
fix typo: intialized -> initialized

2 years agofix typo: the use f.pad -> then use f.pad
Hiroshi Kori [Mon, 27 Dec 2021 00:03:17 +0000 (16:03 -0800)]
fix typo: the use f.pad -> then use f.pad

2 years agorelax priv-in-pub lint on generic bounds and where clauses in trait impls
Jack Wrenn [Thu, 4 Nov 2021 16:31:18 +0000 (16:31 +0000)]
relax priv-in-pub lint on generic bounds and where clauses in trait impls

2 years agoAdd test cases for issue #26186
PFPoitras [Sun, 26 Dec 2021 20:59:25 +0000 (16:59 -0400)]
Add test cases for issue #26186

2 years agoReverts #92135 because perf regression
AngelicosPhosphoros [Sun, 26 Dec 2021 13:02:33 +0000 (16:02 +0300)]
Reverts #92135 because perf regression

2 years agoAuto merge of #92257 - fee1-dead:fix_env_further_bounds, r=oli-obk
bors [Sun, 26 Dec 2021 08:52:31 +0000 (08:52 +0000)]
Auto merge of #92257 - fee1-dead:fix_env_further_bounds, r=oli-obk

normalize env constness for nested obligations

Closes #92230.

2 years agoRemove unneeded call to `collect`
Roc Yu [Sun, 26 Dec 2021 02:35:05 +0000 (21:35 -0500)]
Remove unneeded call to `collect`

2 years agoRemove `String` allocation in loop
Roc Yu [Sun, 26 Dec 2021 00:41:19 +0000 (19:41 -0500)]
Remove `String` allocation in loop

2 years agoAuto merge of #92262 - notriddle:notriddle/unused-hash, r=jyn514
bors [Sat, 25 Dec 2021 19:41:11 +0000 (19:41 +0000)]
Auto merge of #92262 - notriddle:notriddle/unused-hash, r=jyn514

rustdoc: remove unused Hash impl

2 years agoAuto merge of #92227 - Kobzol:rustdoc-doc-hidden, r=jyn514
bors [Sat, 25 Dec 2021 14:47:12 +0000 (14:47 +0000)]
Auto merge of #92227 - Kobzol:rustdoc-doc-hidden, r=jyn514

Rustdoc: use `is_doc_hidden` method on more places

While profiling `rustdoc`, I noticed that finding out if some item is marked with `#[doc(hidden)]` is relatively hot, so I tried to optimize it.

I noticed that there is already a method called `is_doc_hidden` on `TyCtxt`, but it wasn't used much, so I replaced the manual calls to `attrs(...).has_word(...)` with this method. Just by doing that, perf. was improved locally, although I'm not sure if the semantics of the previous calls and this method are the same?

As another step, I tried to querify `is_doc_hidden`, but I didn't include that here until we see the perf. results from the first commit and until I find whether this change is OK at all :)

Can I ask for a perf. run? Thanks.

r? `@jyn514`

2 years agoAuto merge of #92247 - lnicola:rust-analyzer-2021-12-24, r=lnicola
bors [Sat, 25 Dec 2021 02:19:48 +0000 (02:19 +0000)]
Auto merge of #92247 - lnicola:rust-analyzer-2021-12-24, r=lnicola

:arrow_up: rust-analyzer

r? `@ghost`

2 years agoAuto merge of #92229 - fee1-dead:fix-rustdoc-const-drop, r=dtolnay
bors [Fri, 24 Dec 2021 23:12:14 +0000 (23:12 +0000)]
Auto merge of #92229 - fee1-dead:fix-rustdoc-const-drop, r=dtolnay

Do not display `~const Drop` in rustdoc

Although `T: ~const Drop` is still at an experimental stage, we have already begun inserting these bounds in libstd. This change hides them from rustdoc because 1. `~const` should not be documented in general as it is not yet official syntax; 2. users are not expected to know what `~const Drop` means yet.

2 years agoRemove `maybe_uninit_extra` feature from Vec docs
Shadlock0133 [Fri, 24 Dec 2021 22:04:10 +0000 (23:04 +0100)]
Remove `maybe_uninit_extra` feature from Vec docs

In `Vec`, two doc tests are using `MaybeUninit::write` , stabilized in 1.55. This makes docs' usage of `maybe_uninit_extra` feature unnecessary.

2 years agorustdoc: remove unused Hash impl
Michael Howell [Fri, 24 Dec 2021 20:23:03 +0000 (13:23 -0700)]
rustdoc: remove unused Hash impl

2 years agoAuto merge of #92135 - AngelicosPhosphoros:typeid_inline_74362, r=dtolnay
bors [Fri, 24 Dec 2021 20:06:15 +0000 (20:06 +0000)]
Auto merge of #92135 - AngelicosPhosphoros:typeid_inline_74362, r=dtolnay

Add `#[inline]` modifier to `TypeId::of`

It was already inlined but it happened only in 4th InlinerPass on my testcase.
With `#[inline]` modifier it happens on 2nd pass.

Closes #74362

2 years agobless ui test
Deadbeef [Fri, 24 Dec 2021 17:15:03 +0000 (01:15 +0800)]
bless ui test

2 years agoAuto merge of #92156 - petrochenkov:ctorkind, r=davidtwco
bors [Fri, 24 Dec 2021 17:09:21 +0000 (17:09 +0000)]
Auto merge of #92156 - petrochenkov:ctorkind, r=davidtwco

rustc_metadata: Merge `get_ctor_def_id` and `get_ctor_kind`

Also avoid decoding the whole `ty::AssocItem` to get a `has_self` flag.

A small optimization and cleanup extracted from https://github.com/rust-lang/rust/pull/89059.

2 years agonormalize env constness for nested obligations
Deadbeef [Fri, 24 Dec 2021 16:33:23 +0000 (00:33 +0800)]
normalize env constness for nested obligations

2 years agoAuto merge of #92253 - RalfJung:miri, r=RalfJung
bors [Fri, 24 Dec 2021 13:15:21 +0000 (13:15 +0000)]
Auto merge of #92253 - RalfJung:miri, r=RalfJung

update Miri

Fixes https://github.com/rust-lang/rust/issues/92246
r? `@ghost`

2 years agoBump `gsgdt` to 0.1.3
Krasimir Georgiev [Fri, 24 Dec 2021 12:46:37 +0000 (13:46 +0100)]
Bump `gsgdt` to 0.1.3

No functional changes intended.

The 0.1.2 -> 0.1.3 commit https://github.com/vn-ki/gsgdt-rs/commit/3e1dcec5398d281e1b33afb41e43dfb248321a1d
renames `Node::new` to `Node::from_list`.

2 years agoupdate Miri
Ralf Jung [Fri, 24 Dec 2021 12:04:15 +0000 (13:04 +0100)]
update Miri

2 years agoAuto merge of #92226 - woppopo:const_black_box, r=joshtriplett
bors [Fri, 24 Dec 2021 10:02:54 +0000 (10:02 +0000)]
Auto merge of #92226 - woppopo:const_black_box, r=joshtriplett

Constify `core::intrinsics::black_box` and `core::hint::black_box`.

`core::intrinsics::black_box` is already constified, but it wasn't marked as const (see: https://github.com/rust-lang/rust/blob/master/compiler/rustc_const_eval/src/interpret/intrinsics.rs#L471).

Tracking issue: None

2 years ago:arrow_up: rust-analyzer
Laurențiu Nicola [Fri, 24 Dec 2021 09:20:13 +0000 (11:20 +0200)]
:arrow_up: rust-analyzer

2 years agoAuto merge of #91342 - RalfJung:fn-abi, r=eddyb,oli-obk
bors [Fri, 24 Dec 2021 04:59:05 +0000 (04:59 +0000)]
Auto merge of #91342 - RalfJung:fn-abi, r=eddyb,oli-obk

CTFE eval_fn_call: use FnAbi to determine argument skipping and compatibility

This makes use of the `FnAbi` type in CTFE/Miri, which `@eddyb` has been saying for years is what we should do.^^ `FnAbi` is used to
- determine which arguments to skip (rather than the previous heuristic of skipping ZST arguments with the Rust ABI)
- impose further restrictions on whether caller and callee are consistent in how a given argument is passed

I was hoping it would also simplify the code, but that is not the case -- the previous type compatibility checks are still required (AFAIK), only the ZST skipping is gone and that took barely any code. We also need some hacks because `FnAbi` assumes a certain way of implementing `caller_location` (by passing extra arguments), but Miri can just read the caller location from the call stack so it doesn't need those arguments. (The fact that every backend has to separately implement support for these arguments seems suboptimal -- looks like this might have been better implemented on the MIR level.) To avoid having to implement those unnecessary arguments in Miri, we just compute *whether* the argument is present on the caller/callee side, but don't actually pass that argument around.

I have no idea if this looks the way `@eddyb` thinks it should look... but it makes Miri's test suite pass. ;)
One of rustc's tests fails unfortunately (`ui/const-generics/issues/issue-67739.rs`), some const generic code that is evaluated too early -- I think that should raise `TooGeneric` but instead it ICEs. My assumption is this is some FnAbi code that has not been properly tested on polymorphic code, but it might also be me calling that FnAbi code the wrong way.

r? `@oli-obk` `@eddyb`
Fixes https://github.com/rust-lang/rust/issues/56166
Miri PR at https://github.com/rust-lang/miri/pull/1928

2 years agoAuto merge of #92220 - nnethercote:RawVec-dont-recompute-capacity, r=joshtriplett
bors [Fri, 24 Dec 2021 01:54:56 +0000 (01:54 +0000)]
Auto merge of #92220 - nnethercote:RawVec-dont-recompute-capacity, r=joshtriplett

RawVec: don't recompute capacity after allocating.

Currently it sets the capacity to `ptr.len() / mem::size_of::<T>()`
after any buffer allocation/reallocation. This would be useful if
allocators ever returned a `NonNull<[u8]>` with a size larger than
requested. But this never happens, so it's not useful.

Removing this slightly reduces the size of generated LLVM IR, and
slightly speeds up the hot path of `RawVec` growth.

r? `@ghost`

2 years agoFix tidy line length lint in stringify tests
David Tolnay [Fri, 24 Dec 2021 00:51:24 +0000 (16:51 -0800)]
Fix tidy line length lint in stringify tests

2 years agoFormat with rust-lang/rust's rustfmt settings
David Tolnay [Fri, 24 Dec 2021 00:53:30 +0000 (16:53 -0800)]
Format with rust-lang/rust's rustfmt settings

2 years agoAdd a test suite for stringify macro
David Tolnay [Thu, 23 Dec 2021 21:02:31 +0000 (13:02 -0800)]
Add a test suite for stringify macro

2 years agoAuto merge of #92222 - nnethercote:rm-global_allocator-rustc-rustdoc, r=alexcrichton
bors [Thu, 23 Dec 2021 22:34:13 +0000 (22:34 +0000)]
Auto merge of #92222 - nnethercote:rm-global_allocator-rustc-rustdoc, r=alexcrichton

Remove useless `#[global_allocator]` from rustc and rustdoc.

This was added in #83152, which has several errors in its comments.

This commit also fix up the comments, which are quite wrong and
misleading.

r? `@alexcrichton`

2 years agoAuto merge of #92232 - matthiaskrgr:rollup-eqdac7z, r=matthiaskrgr
bors [Thu, 23 Dec 2021 19:43:04 +0000 (19:43 +0000)]
Auto merge of #92232 - matthiaskrgr:rollup-eqdac7z, r=matthiaskrgr

Rollup of 5 pull requests

Successful merges:

 - #90625 (Add `UnwindSafe` to `Once`)
 - #92121 (disable test with self-referential generator on Miri)
 - #92166 (Fixed a small typo in ui test comments)
 - #92203 (Store a `DefId` instead of an `AdtDef` in `AggregateKind::Adt`)
 - #92231 (Update books)

Failed merges:

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

2 years agoRollup merge of #92231 - ehuss:update-books, r=ehuss
Matthias Krüger [Thu, 23 Dec 2021 16:48:32 +0000 (17:48 +0100)]
Rollup merge of #92231 - ehuss:update-books, r=ehuss

Update books

## nomicon

1 commits in 49681ea4a9fa81173dbe9ffed74b4d4a35eae9e3..c05c452b36358821bf4122f9c418674edd1d713d
2021-11-24 16:27:28 +0900 to 2021-12-13 15:23:48 +0900
- Update the guidance on uninitialized data with ptr::addr_of_mut (rust-lang/nomicon#325)

## reference

3 commits in 954f3d441ad880737a13e241108f791a4d2a38cd..06f9e61931bcf58b91dfe6c924057e42ce273ee1
2021-11-29 11:11:30 -0800 to 2021-12-17 07:31:40 -0800
- keep consistent for primitive types (rust-lang/reference#1118)
- README.md: link to mdbook docs (rust-lang/reference#1117)
- Say that `...` range patterns are rejected in the 2021 edition (rust-lang/reference#1114)

## book

4 commits in 5f9358faeb1f46e19b8a23a21e79fd7fe150491e..8a0bb3c96e71927b80fa2286d7a5a5f2547c6aa4
2021-12-05 21:33:16 -0500 to 2021-12-22 20:54:27 -0500
- Propagate edits back
- Fix number disagreement. Fixes rust-lang/book#2858.
- Wrap some code in main to make scopes clearer. Fixes rust-lang/book#2830.
- Respond to ch5 nostarch edits

## rustc-dev-guide

9 commits in a374e7d8bb6b79de45b92295d06b4ac0ef35bc09..9bf0028b557798ddd07a6f652e4d0c635d3d6620
2021-12-03 09:26:47 -0800 to 2021-12-20 21:53:57 +0900
- remove rustfix item in test intro (rust-lang/rustc-dev-guide#1277)
- Move date-check comment to fix Markdown syntax
- Update humor docs for special-casing ferris emoji
- Fix some broken links (rust-lang/rustc-dev-guide#1274)
- Update rustdoc internals
- Update HIR chapter to use `HirId` instead of `NodeId`
- Fix some broken links
- Update src/getting-started.md
- Improve documentation on r?

2 years agoRollup merge of #92203 - Aaron1011:mir-adt-def, r=oli-obk
Matthias Krüger [Thu, 23 Dec 2021 16:48:31 +0000 (17:48 +0100)]
Rollup merge of #92203 - Aaron1011:mir-adt-def, r=oli-obk

Store a `DefId` instead of an `AdtDef` in `AggregateKind::Adt`

The `AggregateKind` enum ends up in the final mir `Body`. Currently,
any changes to `AdtDef` (regardless of how significant they are)
will legitimately cause the overall result of `optimized_mir` to change,
invalidating any codegen re-use involving that mir.

This will get worse once we start hashing the `Span` inside `FieldDef`
(which is itself contained in `AdtDef`).

To try to reduce these kinds of invalidations, this commit changes
`AggregateKind::Adt` to store just the `DefId`, instead of the full
`AdtDef`. This allows the result of `optimized_mir` to be unchanged
if the `AdtDef` changes in a way that doesn't actually affect any
of the MIR we build.

2 years agoRollup merge of #92166 - fee1-dead:patch-2, r=jyn514
Matthias Krüger [Thu, 23 Dec 2021 16:48:30 +0000 (17:48 +0100)]
Rollup merge of #92166 - fee1-dead:patch-2, r=jyn514

Fixed a small typo in ui test comments

2 years agoRollup merge of #92121 - RalfJung:miri-core-test, r=kennytm
Matthias Krüger [Thu, 23 Dec 2021 16:48:30 +0000 (17:48 +0100)]
Rollup merge of #92121 - RalfJung:miri-core-test, r=kennytm

disable test with self-referential generator on Miri

Running the libcore test suite in Miri currently fails due to the known incompatibility of self-referential generators with Miri's aliasing checks (https://github.com/rust-lang/unsafe-code-guidelines/issues/148). So let's disable that test in Miri for now.

2 years agoRollup merge of #90625 - Milo123459:ref-unwind-safe, r=dtolnay
Matthias Krüger [Thu, 23 Dec 2021 16:48:29 +0000 (17:48 +0100)]
Rollup merge of #90625 - Milo123459:ref-unwind-safe, r=dtolnay

Add `UnwindSafe` to `Once`

Fixes #43469

2 years agoUpdate books
Eric Huss [Thu, 23 Dec 2021 16:44:14 +0000 (08:44 -0800)]
Update books

2 years agoAuto merge of #92110 - nagisa:def-inlining, r=nikic
bors [Thu, 23 Dec 2021 16:12:23 +0000 (16:12 +0000)]
Auto merge of #92110 - nagisa:def-inlining, r=nikic

Backport LLVM changes to disable deferred inlining

Fixes #91128

I was thinking of how to best add the test case from the issue, and I think rust perf infrastructure would probably be the best place for something like it.

2 years agoDo not display `~const Drop` in rustdoc
Deadbeef [Thu, 23 Dec 2021 14:52:34 +0000 (22:52 +0800)]
Do not display `~const Drop` in rustdoc

2 years agoAuto merge of #92177 - GuillaumeGomez:pattern-matching-outside-loop, r=camelid
bors [Thu, 23 Dec 2021 12:11:27 +0000 (12:11 +0000)]
Auto merge of #92177 - GuillaumeGomez:pattern-matching-outside-loop, r=camelid

Move pattern matching outside of the loop

Not sure if worth it but it's been bugging me for a while now.

r? `@camelid`

2 years agoConstify `core::intrinsics::black_box`
woppopo [Thu, 23 Dec 2021 11:07:41 +0000 (20:07 +0900)]
Constify `core::intrinsics::black_box`