bors [Thu, 8 Dec 2022 03:04:51 +0000 (03:04 +0000)]
Auto merge of #105425 - matthiaskrgr:rollup-3ngvxmt, r=matthiaskrgr
Rollup of 6 pull requests
Successful merges:
- #105267 (Don't ICE in ExprUseVisitor on FRU for non-existent struct)
- #105343 (Simplify attribute handling in rustc_ast_lowering)
- #105368 (Remove more `ref` patterns from the compiler)
- #105400 (normalize before handling simple checks for evaluatability of `ty::Const`)
- #105403 (rustdoc: simplify CSS selectors for item table `.stab`)
- #105418 (fix: remove hack from link.rs)
Matthias Krüger [Wed, 7 Dec 2022 14:39:08 +0000 (15:39 +0100)]
Rollup merge of #105400 - BoxyUwU:braced_param_evaluatability, r=oli-obk
normalize before handling simple checks for evaluatability of `ty::Const`
`{{{{{{{ N }}}}}}}` is desugared into a `ConstKind::Unevaluated` for an anonymous `const` item so when calling `is_const_evaluatable` on it we skip the `ConstKind::Param(_) => Ok(())` arm which is incorrect.
Matthias Krüger [Wed, 7 Dec 2022 14:39:07 +0000 (15:39 +0100)]
Rollup merge of #105343 - nbdd0121:hir, r=fee1-dead
Simplify attribute handling in rustc_ast_lowering
Given that attributes is stored in a separate BTreeMap, it's not necessary to pass it in when constructing `hir::Expr`. We can just construct `hir::Expr` and then call `self.lower_attrs` later if it needs attributes.
As most desugaring code don't use attributes, this allows some code cleanup.
bors [Wed, 7 Dec 2022 13:52:52 +0000 (13:52 +0000)]
Auto merge of #103459 - ChrisDenton:propagate-nulls, r=thomcc
Pass on null handle values to child process
Fixes #101645
In Windows, stdio handles are (semantically speaking) `Option<Handle>` where `Handle` is a non-zero value. When spawning a process with `Stdio::Inherit`, Rust currently turns zero values into `-1` values. This has the unfortunate effect of breaking console subprocesses (which typically need stdio) that are spawned from gui applications (that lack stdio by default) because the console process won't be assigned handles from the newly created console (as they usually would in that situation). Worse, `-1` is actually [a valid handle](https://doc.rust-lang.org/std/os/windows/io/struct.OwnedHandle.html) which means "the current process". So if a console process, for example, waits on stdin and it has a `-1` value then the process will end up waiting on itself.
This PR fixes it by propagating the nulls instead of converting them to `-1`.
While I think the current behaviour is a mistake, changing it (however justified) is an API change so I think this PR should at least have some input from t-libs-api. So choosing at random...
bors [Wed, 7 Dec 2022 06:16:19 +0000 (06:16 +0000)]
Auto merge of #105395 - sunfishcode:sunfishcode/update-wasi, r=pietroalbini
Update the wasi toolchain.
Update the WASI build to LLVM 15.0 and the wasi-libc version from [wasi-sdk-17].
This will require a ci-mirrors.rust-lang.org file load. Specifically, we need [this LLVM release tarball] uploaded to be downloadable from [this URL].
The biggest change in wasi-sdk-17 is that user exports no longer automatically run constructor functions. More details at: https://github.com/WebAssembly/WASI/issues/493.
bors [Wed, 7 Dec 2022 03:52:19 +0000 (03:52 +0000)]
Auto merge of #105291 - nnethercote:remove-LintPassObjects, r=cjgillot
Remove `{Early,Late}LintPassObjects`.
`EarlyContextAndPass` wraps a single early lint pass. We aggregate multiple passes into that single pass by using `EarlyLintPassObjects`.
This commit removes `EarlyLintPassObjects` by changing `EarlyContextAndPass` into `EarlyContextAndPasses`. I.e. it just removes a level of indirection. This makes the code simpler and slightly faster.
bors [Wed, 7 Dec 2022 00:32:57 +0000 (00:32 +0000)]
Auto merge of #105397 - matthiaskrgr:rollup-xv5imz8, r=matthiaskrgr
Rollup of 6 pull requests
Successful merges:
- #105298 (llvm-wrapper: adapt for an LLVM API change)
- #105358 (Add a test for #104260)
- #105380 (add const generics ping files things for me)
- #105382 (remove an excess `this`)
- #105388 (rustdoc: remove redundant CSS `.import-item .stab { font-size }`)
- #105390 (unstable-book: Add `ignore` to `abi_efiapi` example code)
Matthias Krüger [Tue, 6 Dec 2022 22:13:52 +0000 (23:13 +0100)]
Rollup merge of #105390 - nicholasbishop:bishop-example-ignore, r=ehuss
unstable-book: Add `ignore` to `abi_efiapi` example code
This example doesn't compile on targets that don't support UEFI, as reported here:
https://github.com/rust-lang/rust/pull/104793#issuecomment-1339783727
This sets the exact same font size that `.stab` has by default anyway. It used to be slightly different, but dd5ff428edbc7cd4fa600b81f27bbec28589704f made it identical.
Found via our experimental rust + llvm @ HEAD bot: https://buildkite.com/llvm-project/rust-llvm-integrate-prototype/builds/15404#0184d95d-5a68-4db6-ad32-51ddbc3ab543/202-571
Nicholas Bishop [Tue, 6 Dec 2022 19:22:56 +0000 (14:22 -0500)]
unstable-book: Add `ignore` to `abi_efiapi` example code
This example doesn't compile on targets that don't support UEFI, as
reported here:
https://github.com/rust-lang/rust/pull/104793#issuecomment-1339783727
This sets the exact same font size that `.stab` has by default anyway.
It used to be slightly different, but dd5ff428edbc7cd4fa600b81f27bbec28589704f made it identical.
bors [Tue, 6 Dec 2022 18:51:14 +0000 (18:51 +0000)]
Auto merge of #105378 - matthiaskrgr:rollup-fjeorw5, r=matthiaskrgr
Rollup of 9 pull requests
Successful merges:
- #104898 (Put all cached values into a central struct instead of just the stable hash)
- #105004 (Fix `emit_unused_delims_expr` ICE)
- #105174 (Suggest removing struct field from destructive binding only in shorthand scenario)
- #105250 (Replace usage of `ResumeTy` in async lowering with `Context`)
- #105286 (Add -Z maximal-hir-to-mir-coverage flag)
- #105320 (rustdoc: simplify CSS selectors on top-doc and non-exhaustive toggles)
- #105349 (Point at args in associated const fn pointers)
- #105362 (Cleanup macro-expanded code in `rustc_type_ir`)
- #105370 (Remove outdated syntax from trait alias pretty printing)
Matthias Krüger [Tue, 6 Dec 2022 15:54:55 +0000 (16:54 +0100)]
Rollup merge of #105286 - willcrichton:maximal-hir-to-mir-coverage, r=cjgillot
Add -Z maximal-hir-to-mir-coverage flag
This PR adds a new unstable flag `-Z maximal-hir-to-mir-coverage` that changes the behavior of `maybe_lint_level_root_bounded`, pursuant to [a discussion on Zulip](https://rust-lang.zulipchat.com/#narrow/stream/131828-t-compiler/topic/Mapping.20MIR.20to.20HIR). When enabled, this function will not search upwards for a lint root, but rather immediately return the provided HIR node ID. This change increases the granularity of the mapping between MIR locations and HIR nodes inside the `SourceScopeLocalData` data structures. This increase in granularity is useful for rustc consumers like [Flowistry](https://github.com/willcrichton/flowistry) that rely on getting source-mapping information about the MIR CFG that is as precise as possible.
A test `maximal_mir_to_hir_coverage.rs` has been added to verify that this flag does not break anything.
Matthias Krüger [Tue, 6 Dec 2022 15:54:54 +0000 (16:54 +0100)]
Rollup merge of #105250 - Swatinem:async-rm-resumety, r=oli-obk
Replace usage of `ResumeTy` in async lowering with `Context`
Replaces using `ResumeTy` / `get_context` in favor of using `&'static mut Context<'_>`.
Usage of the `'static` lifetime here is technically "cheating", and replaces the raw pointer in `ResumeTy` and the `get_context` fn that pulls the correct lifetimes out of thin air.
fixes https://github.com/rust-lang/rust/issues/104828 and https://github.com/rust-lang/rust/pull/104321#issuecomment-1336363077
bors [Tue, 6 Dec 2022 15:35:55 +0000 (15:35 +0000)]
Auto merge of #105229 - saethlin:zst-writes-to-unions, r=oli-obk
Re-enable removal of ZST writes to unions
This was previously disabled because Miri was lazily allocating unsized locals. But we aren't doing that anymore since https://github.com/rust-lang/rust/pull/98831, so we can have this optimization back.
bors [Tue, 6 Dec 2022 12:29:38 +0000 (12:29 +0000)]
Auto merge of #105365 - matthiaskrgr:rollup-g0mrrt7, r=matthiaskrgr
Rollup of 11 pull requests
Successful merges:
- #104439 (Add prototype to generate `COPYRIGHT` from REUSE metadata)
- #105005 (On E0195 point at where clause lifetime bounds)
- #105098 (propagate the error from parsing enum variant to the parser and emit out)
- #105243 (remove no-op 'let _ = ')
- #105254 (Recurse into nested impl-trait when computing variance.)
- #105287 (Synthesize substitutions for bad auto traits in dyn types)
- #105310 (Be more careful about unresolved exprs in suggestion)
- #105318 (Make `get_impl_future_output_ty` work with AFIT)
- #105339 (support `ConstKind::Expr` in `is_const_evaluatable` and `WfPredicates::compute`)
- #105340 (Avoid ICE by accounting for missing type)
- #105342 (Make `note_obligation_cause_code` take a `impl ToPredicate` for predicate)
Matthias Krüger [Tue, 6 Dec 2022 12:27:45 +0000 (13:27 +0100)]
Rollup merge of #105342 - compiler-errors:note_cause_code-takes-predicate, r=fee1-dead
Make `note_obligation_cause_code` take a `impl ToPredicate` for predicate
The only usecase that wasn't `impl ToPredicate` was noting overflow errors while revealing opaque types, which passed in an `Obligation<'tcx, Ty<'tcx>>`... Since this only happens in a `RevealAll` environment, which is after typeck (and probably primarily within `normalize_erasing_regions`) we're unlikely to display anything useful while noting this code, evidenced by the lack of UI test changes.
Matthias Krüger [Tue, 6 Dec 2022 12:27:44 +0000 (13:27 +0100)]
Rollup merge of #105339 - BoxyUwU:wf_ct_kind_expr, r=TaKO8Ki
support `ConstKind::Expr` in `is_const_evaluatable` and `WfPredicates::compute`
Fixes #105205
Currently we haven't implemented a way to evaluate `ConstKind::Expr(Expr::Binop(Add, 1, 2))` so I just left that with a `FIXME` and a `delay_span_bug` since I have no idea how to do that and it would make this a much larger (and more complicated) PR :P
Matthias Krüger [Tue, 6 Dec 2022 12:27:43 +0000 (13:27 +0100)]
Rollup merge of #105287 - compiler-errors:issue-105275, r=eholk
Synthesize substitutions for bad auto traits in dyn types
Auto traits are stored as just `DefId`s inside a `dyn Trait`'s existential predicates list. This is usually fine, since auto traits are forbidden to have generics -- but this becomes a problem for an ill-formed auto trait.
But since this will always result in an error, just synthesize some dummy (error) substitutions which are used at least to keep trait selection code happy about the number of substs in a trait ref.
Matthias Krüger [Tue, 6 Dec 2022 12:27:42 +0000 (13:27 +0100)]
Rollup merge of #105243 - RalfJung:no-op-let, r=Mark-Simulacrum
remove no-op 'let _ = '
Also see the discussion at https://github.com/rust-lang/rust/pull/93563#discussion_r1034057555.
I don't know why these `Drop` implementations exist to begin with, given that their body does literally nothing, but did not want to change that. (It might affect dropck.)
Matthias Krüger [Tue, 6 Dec 2022 12:27:41 +0000 (13:27 +0100)]
Rollup merge of #105098 - lyming2007:issue-103869-fix, r=eholk
propagate the error from parsing enum variant to the parser and emit out
While parsing enum variant, the error message always disappear
Because the error message that emit out is from main error of parser
The information of enum variant disappears while parsing enum variant with error
We only check the syntax of expecting token, i.e, in case https://github.com/rust-lang/rust/issues/103869
It will error it without telling the message that this error is from pasring enum variant.
Propagate the sub-error from parsing enum variant to the main error of parser by chaining it with map_err
Check the sub-error before emitting the main error of parser and attach it.
Fix https://github.com/rust-lang/rust/issues/103869
Matthias Krüger [Tue, 6 Dec 2022 12:27:40 +0000 (13:27 +0100)]
Rollup merge of #104439 - ferrocene:pa-generate-copyright, r=pnkfelix
Add prototype to generate `COPYRIGHT` from REUSE metadata
This PR adds a prototype to generate the `COPYRIGHT` file from the metadata gathered with REUSE. There are two new tools:
* `src/tools/collect-license-metadata` invokes REUSE, parses its output and stores a concise JSON representation of the metadata in `src/etc/license-metadata.json`.
* `src/tools/generate-copyright` parses the metadata generated above, (in the future will) gather crate dependencies metadata, and renders the `COPYRIGHT.md` file.
Note that since the contents of those files are currently incorrect, rather than outputting in the paths above, the files will be stored in `build/` and not committed. This will be changed once we're confident about the metadata.
Eventually, `src/etc/license-metadata.json` will be committed into the repository and verified to be up to date by CI (similar to our GitHub Actions configuration), to avoid having people install REUSE on their local machine in most cases.
bors [Tue, 6 Dec 2022 09:21:49 +0000 (09:21 +0000)]
Auto merge of #105175 - michaelwoerister:add-stable-ord-trait, r=nagisa
Add StableOrd trait as proposed in MCP 533.
The `StableOrd` trait can be used to mark types as having a stable sort order across compilation sessions. Collections that sort their items in a stable way can safely implement HashStable by hashing items in sort order.
See https://github.com/rust-lang/compiler-team/issues/533 for more information.
Arpad Borsos [Sun, 4 Dec 2022 11:32:15 +0000 (12:32 +0100)]
Replace usage of `ResumeTy` in async lowering with `Context`
Replaces using `ResumeTy` / `get_context` in favor of using `&'static mut Context<'_>`.
Usage of the `'static` lifetime here is technically "cheating", and replaces
the raw pointer in `ResumeTy` and the `get_context` fn that pulls the
correct lifetimes out of thin air.
bors [Tue, 6 Dec 2022 06:34:13 +0000 (06:34 +0000)]
Auto merge of #105348 - JohnTitor:rollup-q9bichr, r=JohnTitor
Rollup of 10 pull requests
Successful merges:
- #104967 (Fix UI issues with Rustdoc scrape-examples feature.)
- #105207 (interpret: clobber return place when calling function)
- #105246 (Fix --pass in compiletest)
- #105256 (Add small comment explaining what `method-margins.goml` test is about)
- #105289 (Fix dupe word typos)
- #105309 (rustdoc: remove no-op mobile CSS `.sidebar { margin: 0; padding: 0 }`)
- #105313 (Update books)
- #105315 (Normalize inherent associated types after substitution)
- #105324 (Point at GAT `where` clause when an obligation is unsatisfied)
- #105338 (Tweak "the following other types implement trait")
- start/hardware.md: Fix typo (rust-embedded/book#336)
- doc: Fix `arm-none-eabi-gdb` installation instruction for Fedora 27 or newer to just use `gdb` (rust-embedded/book#335)
- Update singletons.md (rust-embedded/book#334)
- Remove incorrect claim HashMap is avail in no_std (rust-embedded/book#333)
- Document that type parameter `Self` is unsized by default (rust-lang/reference#1285)
- replace `crateid` term with `crate_name` (rust-lang/reference#1310)
- Document native library modifier `verbatim` (rust-lang/reference#1299)
- Update literal suffix docs for rust-lang/rust#102944 (rust-lang/reference#1305)
- update aliasing rules section of the reference (rust-lang/reference#1290)
- Document RFC 2867: instruction_set attribute (rust-lang/reference#1253)
- Fix a minor typo in the "Higher-ranked trait bounds" section (rust-lang/reference#1288)
- Disallow newline directly following `//` (rust-lang/reference#1294)
- Add an anchor to the "forwarding macro fragments" paragraph (rust-lang/reference#1300)
- Migrate from highfive to triagebot (rust-lang/rust-by-example#1647)
- Simpler version of the read_lines script. (rust-lang/rust-by-example#1641)
- Fix comment in "Formatted print" example code (rust-lang/rust-by-example#1638)
- Added a missing backtick in a comment in chapter 15.4. (rust-lang/rust-by-example#1642)
- Clarify the confusing closure example #1611 (rust-lang/rust-by-example#1643)
- Remove duplicate paragraph (rust-lang/rustc-dev-guide#1523)
- clarify subtree tool policy (rust-lang/rustc-dev-guide#1518)
- Typo (rust-lang/rustc-dev-guide#1520)
- Link directly to the section on `--keep-stage` (rust-lang/rustc-dev-guide#1515)
- do an actual link to detect if it breaks in future (rust-lang/rustc-dev-guide#1517)
- Triage some date-check items (rust-lang/rustc-dev-guide#1513)
- Update path for `try_mark_green` implementation (rust-lang/rustc-dev-guide#1512)
- Fix a broken design docs link about unused substs bug (rust-lang/rustc-dev-guide#1511)
- updating-llvm: keep a calm tone (rust-lang/rustc-dev-guide#1449)
- date-check: updating-llvm (rust-lang/rustc-dev-guide#1424)
- rewrite the section about regions in the trait solver (rust-lang/rustc-dev-guide#1508)
- Consistent ordered list indexing (rust-lang/rustc-dev-guide#1509)
- Document multiple alternative suggestions on diagnostic structs (rust-lang/rustc-dev-guide#1486)
Yuki Okushi [Tue, 6 Dec 2022 03:48:50 +0000 (12:48 +0900)]
Rollup merge of #105207 - RalfJung:interpret-clobber-return, r=oli-obk
interpret: clobber return place when calling function
Makes sure the callee cannot observe the previous contents of the return place, and the caller cannot read any of the old return place contents even if the function unwinds.
I don't think we can test for this though, that would require some strange hand-written MIR.
Yuki Okushi [Tue, 6 Dec 2022 03:48:50 +0000 (12:48 +0900)]
Rollup merge of #104967 - willcrichton:fix-scrape-examples, r=notriddle
Fix UI issues with Rustdoc scrape-examples feature.
A few regressions have been introduced into scrape-examples in the last few months. This commit fixes those regressions:
* Help file was being loaded from the wrong place (introduced in f9e1f6ffdf03ec33cb29e20c88fc7bcc938c7f42).
* CSS selector in JS has a typo (introduced in 14897180ae6a0506a5ad0a9f6a30ae1f75916179).
* Line numbers in scraped example code snippets are overflowing (not sure if this was ever fixed). Changing from flexbox to grid display fixed this issue.
bors [Tue, 6 Dec 2022 03:47:41 +0000 (03:47 +0000)]
Auto merge of #105220 - oli-obk:feeding, r=cjgillot
feed resolver_for_lowering instead of storing it in a field
r? `@cjgillot`
opening this as
* a discussion for `no_hash` + `feedable` queries. I think we'll want those, but I don't quite understand why they are rejected beyond a double check of the stable hashes for situations where the query is fed but also read from incremental caches.
* and a discussion on removing all untracked fields from TyCtxt and setting it up so that they are fed queries instead
Gary Guo [Tue, 6 Dec 2022 01:01:42 +0000 (01:01 +0000)]
Simplify attribute handling in rustc_ast_lowering
Given that attributes is stored in a separate BTreeMap, it's not necessary
to pass it in when constructing `hir::Expr`. We can just construct
`hir::Expr` and then call `self.lower_attrs` later if it needs attributes.
As most desugaring code don't use attributes, this allows some code cleanup.
bors [Tue, 6 Dec 2022 00:53:01 +0000 (00:53 +0000)]
Auto merge of #105119 - JakobDegen:inline-experiments, r=cjgillot
Disable top down MIR inlining
The current MIR inliner has exponential behavior in some cases: <https://godbolt.org/z/7jnWah4fE>. The cause of this is top-down inlining, where we repeatedly do inlining like `call_a() => { call_b(); call_b(); }`. Each decision on its own seems to make sense, but the result is exponential.
Disabling top-down inlining fundamentally prevents this. Each call site in the original, unoptimized source code is now considered for inlining exactly one time, which means that the total growth in MIR size is limited to number of call sites * inlining threshold.
Top down inlining may be worth re-introducing at some point, but it needs to be accompanied with a principled way to prevent this kind of behavior.
Move linkage type check to HIR analysis and fix semantics issues.
This ensures that the error is printed even for unused variables,
as well as unifying the handling between the LLVM and GCC backends.
This also fixes unusual behavior around exported Rust-defined variables
with linkage attributes. With the previous behavior, it appears to be
impossible to define such a variable such that it can actually be imported
and used by another crate. This is because on the importing side, the
variable is required to be a pointer, but on the exporting side, the
type checker rejects static variables of pointer type because they do
not implement `Sync`. Even if it were possible to import such a type, it
appears that code generation on the importing side would add an unexpected
additional level of pointer indirection, which would break type safety.
This highlighted that the semantics of linkage on Rust-defined variables
is different to linkage on foreign items. As such, we now model the
difference with two different codegen attributes: linkage for Rust-defined
variables, and import_linkage for foreign items.
This change gives semantics to the test
src/test/ui/linkage-attr/auxiliary/def_illtyped_external.rs which was
previously expected to fail to compile. Therefore, convert it into a
test that is expected to successfully compile.
The update to the GCC backend is speculative and untested.
bors [Mon, 5 Dec 2022 21:46:58 +0000 (21:46 +0000)]
Auto merge of #105328 - matthiaskrgr:rollup-qnfksmq, r=matthiaskrgr
Rollup of 8 pull requests
Successful merges:
- #104912 (PartialEq: PERs are homogeneous)
- #104952 (Streamline the user experience for `x.py setup`)
- #104953 (Ensure required submodules at the same time as updating existing submodules)
- #105180 (Use proper HirId for async track_caller attribute check)
- #105222 (std update libc version and freebsd image build dependencies)
- #105223 (suggest parenthesis around ExprWithBlock BinOp ExprWithBlock)
- #105230 (Skip recording resolution for duplicated generic params.)
- #105301 (update Miri)
Matthias Krüger [Mon, 5 Dec 2022 19:43:42 +0000 (20:43 +0100)]
Rollup merge of #104953 - jyn514:fewer-submodule-updates, r=Mark-Simulacrum
Ensure required submodules at the same time as updating existing submodules
In practice, this would always happen at the same time, but putting them next to each other makes that more obvious and ensures it doesn't change in the future. It also avoids the difference affecting `cargo metadata` somehow.
This is based on https://github.com/rust-lang/rust/pull/104952 for convenience to avoid merge conflicts, but doesn't depend on that PR.