about summary refs log tree commit diff
AgeCommit message (Collapse)AuthorLines
2023-10-26Auto merge of #117249 - matthiaskrgr:rollup-h4og5rv, r=matthiaskrgrbors-638/+784
Rollup of 6 pull requests Successful merges: - #116968 (Invalid `?` suggestion on mismatched `Ok(T)`) - #117032 (Enable cg_clif tests for riscv64gc) - #117106 (When expecting closure argument but finding block provide suggestion) - #117114 (Improve `stringify.rs` test) - #117188 (Avoid repeated interning of `env!("CFG_RELEASE")`) - #117243 (Explain implementation of mem::replace) r? `@ghost` `@rustbot` modify labels: rollup
2023-10-26Rollup merge of #117243 - chfogelman:replace-not-swap-comment, r=thomccMatthias Krüger-0/+4
Explain implementation of mem::replace This adds a comment to explain why `mem::replace` is not implemented in terms of `mem::swap` to prevent [naïfs like me](https://github.com/rust-lang/rust/pull/117189) from trying to "fix" it.
2023-10-26Rollup merge of #117188 - dtolnay:symbolenv, r=cjgillotMatthias Krüger-42/+134
Avoid repeated interning of `env!("CFG_RELEASE")` Implements `@cjgillot's` suggestion from https://github.com/rust-lang/rust/pull/117148#discussion_r1372117485.
2023-10-26Rollup merge of #117114 - nnethercote:improve-stringify-test, r=petrochenkovMatthias Krüger-559/+482
Improve `stringify.rs` test Best reviewed one commit at a time. r? `@petrochenkov`
2023-10-26Rollup merge of #117106 - estebank:issue-27300, r=petrochenkovMatthias Krüger-5/+117
When expecting closure argument but finding block provide suggestion Detect if there is a potential typo where the `{` meant to open the closure body was written before the body. ``` error[E0277]: expected a `FnOnce<({integer},)>` closure, found `Option<usize>` --> $DIR/ruby_style_closure_successful_parse.rs:3:31 | LL | let p = Some(45).and_then({|x| | ______________________--------_^ | | | | | required by a bound introduced by this call LL | | 1 + 1; LL | | Some(x * 2) | | ----------- this tail expression is of type `Option<usize>` LL | | }); | |_____^ expected an `FnOnce<({integer},)>` closure, found `Option<usize>` | = help: the trait `FnOnce<({integer},)>` is not implemented for `Option<usize>` note: required by a bound in `Option::<T>::and_then` --> $SRC_DIR/core/src/option.rs:LL:COL help: you might have meant to open the closure body instead of placing a closure within a block | LL - let p = Some(45).and_then({|x| LL + let p = Some(45).and_then(|x| { | ``` Detect the potential typo where the closure header is missing. ``` error[E0277]: expected a `FnOnce<(&bool,)>` closure, found `bool` --> $DIR/block_instead_of_closure_in_arg.rs:3:23 | LL | Some(true).filter({ | _________________------_^ | | | | | required by a bound introduced by this call LL | |/ if number % 2 == 0 { LL | || number == 0 LL | || } else { LL | || number != 0 LL | || } | ||_________- this tail expression is of type `bool` LL | | }); | |______^ expected an `FnOnce<(&bool,)>` closure, found `bool` | = help: the trait `for<'a> FnOnce<(&'a bool,)>` is not implemented for `bool` note: required by a bound in `Option::<T>::filter` --> $SRC_DIR/core/src/option.rs:LL:COL help: you might have meant to create the closure instead of a block | LL | Some(true).filter(|_| { | +++ ``` Partially address #27300. Fix #104690.
2023-10-26Rollup merge of #117032 - bjorn3:riscv64_enable_cg_clif_tests, r=petrochenkovMatthias Krüger-1/+4
Enable cg_clif tests for riscv64gc Cranelift now has support for riscv64 on Linux.
2023-10-26Rollup merge of #116968 - eopb:116967, r=petrochenkovMatthias Krüger-31/+43
Invalid `?` suggestion on mismatched `Ok(T)` fixes: #116967
2023-10-26Auto merge of #116581 - Kobzol:bootstrap-cmd-run, r=onur-ozkanbors-80/+158
Centralize command running in boostrap (part one) This PR tries to consolidate the various `run, try_run, run_quiet, run_quiet_delaying_failure, run_delaying_failure` etc. methods on `Builder`. This PR only touches command execution which doesn't produce output that would be later read by bootstrap, and it also only refactors spawning of commands that happens after a builder is created (commands executed during download & git submodule checkout are left as-is, for now). The `run_cmd` method is quite meaty, but I expect that it will be changing rapidly soon, so I considered it easy to kept everything in a single method, and only after things settle down a bit, then maybe again split it up a bit. I still kept the original shortcut methods like `run_quiet_delaying_failure`, but they now only delegate to `run_cmd`. I tried to keep the original behavior (or as close to it as possible) for all the various commands, but it is a giant mess, so there may be some deviations. Notably, `cmd.output()` is now always called, instead of just `status()`, which was called previously in some situations. Apart from the refactored methods, there is also `Config::try_run`, `check_run`, methods that run commands that produce output, oh my… that's left for follow-up PRs :) The driving goal of this (and following) refactors is to centralize command execution in bootstrap on a single place, to make command mocking feasible. r? `@onur-ozkan`
2023-10-26Allow ignoring the failure of command executionJakub Beránek-5/+18
2023-10-26Add comment to mem::replace to explain why it's not implemented via mem::swapCarter Hunt Fogelman-0/+4
2023-10-26Auto merge of #117228 - matthiaskrgr:rollup-23zzepv, r=matthiaskrgrbors-82/+278
Rollup of 8 pull requests Successful merges: - #116905 (refactor(compiler/resolve): simplify some code) - #117095 (Add way to differentiate argument locals from other locals in Stable MIR) - #117143 (Avoid unbounded O(n^2) when parsing nested type args) - #117194 (Minor improvements to `rustc_incremental`) - #117202 (Revert "Remove TaKO8Ki from reviewers") - #117207 (The value of `-Cinstrument-coverage=` doesn't need to be `Option`) - #117214 (Quietly fail if an error has already occurred) - #117221 (Rename type flag `HAS_TY_GENERATOR` to `HAS_TY_COROUTINE`) r? `@ghost` `@rustbot` modify labels: rollup
2023-10-26Rollup merge of #117221 - fmease:TypeFlags-HAS_TY_GENERATOR-to-COROUTINE, r=lqdMatthias Krüger-4/+4
Rename type flag `HAS_TY_GENERATOR` to `HAS_TY_COROUTINE` r? oli-obk
2023-10-26Rollup merge of #117214 - oli-obk:error_shenanigans, r=compiler-errorsMatthias Krüger-2/+73
Quietly fail if an error has already occurred fixes #117195
2023-10-26Rollup merge of #117207 - Zalathar:no-option, r=compiler-errorsMatthias Krüger-17/+15
The value of `-Cinstrument-coverage=` doesn't need to be `Option` (Extracted from #117199, since this is a purely internal cleanup that can land independently.) Not using this flag is identical to passing `-Cinstrument-coverage=off`, so there's no need to distinguish between `None` and `Some(Off)`.
2023-10-26Rollup merge of #117202 - TaKO8Ki:revert-remove-TaKO8Ki-from-reviewers, ↵Matthias Krüger-0/+2
r=Nilstrieb Revert "Remove TaKO8Ki from reviewers" ref #116061 It's been a month since this pull request, and I now have some available time for reviews. Would it be okay to revisit it as a reviewer? This reverts commit 8e06b25e3900b8b14d9043ff6d2b846199672b2b. r? `@Nilstrieb`
2023-10-26Rollup merge of #117194 - nnethercote:rustc_incremental, r=cjgillotMatthias Krüger-20/+17
Minor improvements to `rustc_incremental` Just some things I spotted while looking at this code. r? `@cjgillot`
2023-10-26Rollup merge of #117143 - estebank:issue-117080, r=wesleywiserMatthias Krüger-6/+55
Avoid unbounded O(n^2) when parsing nested type args When encountering code like `f::<f::<f::<f::<f::<f::<f::<f::<...` with unmatched closing angle brackets, add a linear check that avoids the exponential behavior of the parse recovery mechanism. Fix https://github.com/rust-lang/rust/issues/117080, fix https://github.com/rust-lang/rust/issues/115414.
2023-10-26Rollup merge of #117095 - klinvill:smir-fn-arg-count, r=oli-obkMatthias Krüger-22/+102
Add way to differentiate argument locals from other locals in Stable MIR This PR resolves rust-lang/project-stable-mir#47 which request a way to differentiate argument locals in a SMIR `Body` from other locals. Specifically, this PR exposes the `arg_count` field from the MIR `Body`. However, I'm opening this as a draft PR because I think there are a few outstanding questions on how this information should be exposed and described. Namely: - Is exposing `arg_count` the best way to surface this information to SMIR users? Would it be better to leave `arg_count` as a private field and add public methods (e.g. `fn arguments(&self) -> Iter<'_, LocalDecls>`) that may use the underlying `arg_count` info from the MIR body, but expose this information to users in a more convenient form? Or is it best to stick close to the current MIR convention? - If the answer to the above point is to stick with the current MIR convention (`arg_count`), is it reasonable to also commit to sticking to the current MIR convention that the first local is always the return local, while the next `arg_count` locals are always the (in-order) argument locals? - Should `Body` in SMIR only represent function bodies (as implied by the comment I added)? That seems to be the current case in MIR, but should this restriction always be the case for SMIR? r? `@celinval` r? `@oli-obk`
2023-10-26Rollup merge of #116905 - Fenex:refactor/compiler/resolve, r=petrochenkovMatthias Krüger-11/+10
refactor(compiler/resolve): simplify some code Removes unnecessary allocate and double-sorting the same vector, makes the code a little nicer.
2023-10-26Auto merge of #117171 - fee1-dead-contrib:deny-explicit-effect-params, r=oli-obkbors-5/+215
Deny providing explicit effect params r? `@oli-obk` cc https://github.com/rust-lang/rust/issues/110395
2023-10-26Replace type flag HAS_TY_GENERATOR with HAS_TY_COROUTINELeón Orell Valerian Liehr-4/+4
2023-10-26Auto merge of #113262 - Nilstrieb:rawr-casting, r=lcnrbors-37/+77
Never consider raw pointer casts to be trival HIR typeck tries to figure out which casts are trivial by doing them as coercions and seeing whether this works. Since HIR typeck is oblivious of lifetimes, this doesn't work for pointer casts that only change the lifetime of the pointee, which are, as borrowck will tell you, not trivial. This change makes it so that raw pointer casts are never considered trivial. This also incidentally fixes the "trivial cast" lint false positive on the same code. Unfortunately, "trivial cast" lints are now never emitted on raw pointer casts, even if they truly are trivial. This could be fixed by also doing the lint in borrowck for raw pointers specifically. fixes #113257
2023-10-26Quietly fail if an error has already occurredOli Scherer-2/+73
2023-10-26Auto merge of #112875 - compiler-errors:negative-coherence-rework, r=lcnrbors-143/+314
Rework negative coherence to properly consider impls that only partly overlap This PR implements a modified negative coherence that handles impls that only have partial overlap. It does this by: 1. taking both impl trait refs, instantiating them with infer vars 2. equating both trait refs 3. taking the equated trait ref (which represents the two impls' intersection), and resolving any vars 4. plugging all remaining infer vars with placeholder types these placeholder-plugged trait refs can then be used normally with the new trait solver, since we no longer have to worry about the issue with infer vars in param-envs. We use the **new trait solver** to reason correctly about unnormalized trait refs (due to deferred projection equality), since this avoid having to normalize anything under param-envs with infer vars in them. This PR then additionally: * removes the `FnPtr` knowable hack by implementing proper negative `FnPtr` trait bounds for rigid types. --- An example: Consider these two partially overlapping impls: ``` impl<T, U> PartialEq<&U> for &T where T: PartialEq<U> {} impl<F> PartialEq<F> for F where F: FnPtr {} ``` Under the old algorithm, we would take one of these impls and replace it with infer vars, then try unifying it with the other impl under identity substitutions. This is not possible in either direction, since it either sets `T = U`, or tries to equate `F = &?0`. Under the new algorithm, we try to unify `?0: PartialEq<?0>` with `&?1: PartialEq<&?2>`. This gives us `?0 = &?1 = &?2` and thus `?1 = ?2`. The intersection of these two trait refs therefore looks like: `&?1: PartialEq<&?1>`. After plugging this with placeholders, we get a trait ref that looks like `&!0: PartialEq<&!0>`, with the first impl having substs `?T = ?U = !0` and the second having substs `?F = &!0`[^1]. Then we can take the param-env from the first impl, and try to prove the negated where clause of the second. We know that `&!0: !FnPtr` never holds, since it's a rigid type that is also not a fn ptr, we successfully detect that these impls may never overlap. [^1]: For the purposes of this example, I just ignored lifetimes, since it doesn't really matter.
2023-10-26Use two slice expressions to save on an offset repetitionOli Scherer-1/+1
2023-10-26Fix symbols::tests::test_symbolsDavid Tolnay-1/+9
---- symbols::tests::test_symbols stdout ---- thread 'symbols::tests::test_symbols' panicked at library/proc_macro/src/bridge/client.rs:311:17: procedural macro API is used outside of a procedural macro
2023-10-26Pre-intern a symbol for env!("CFG_RELEASE")David Tolnay-9/+6
2023-10-26Improve span of env-related errorsDavid Tolnay-7/+7
2023-10-26Continue generating other symbols if an expr is not supportedDavid Tolnay-9/+14
2023-10-26Support environment variable for interned Symbol valueDavid Tolnay-4/+58
2023-10-26Move symbols macro map into a structDavid Tolnay-20/+32
2023-10-26Delete counter from symbols proc macro in favor of hashmap as source of truthDavid Tolnay-18/+24
2023-10-26Add a Parse impl for symbol ValueDavid Tolnay-2/+8
2023-10-26Represent symbol value as enum to prepare for supporting env varsDavid Tolnay-4/+10
2023-10-26Touch up syn parsing in symbols macroDavid Tolnay-4/+2
2023-10-26Auto merge of #116983 - Urgau:prepare-bootstrap-for-new-check-cfg, r=Kobzolbors-9/+34
Prepare the `bootstrap` tool for the new check-cfg syntax This PR prepare the `bootstrap` tool for the [new check-cfg syntax](https://github.com/rust-lang/rust/pull/111072) as well as the according [changes to Cargo](https://github.com/rust-lang/cargo/pull/12845). ~~Note that while the new syntax can technically available on stage > 2, we actually cannot use it since we need a cargo version that supports the new syntax which won't happen until the next beta bump (if I understand everything correctly).~~ r? bootstrap
2023-10-26Deny providing explicit effect paramsDeadbeef-5/+215
2023-10-26Auto merge of #117148 - dtolnay:sinceversion, r=cjgillotbors-121/+140
Store #[stable] attribute's `since` value in structured form Followup to https://github.com/rust-lang/rust/pull/116773#pullrequestreview-1680913901. Prior to this PR, if you wrote an improper `since` version in a `stable` attribute, such as `#[stable(feature = "foo", since = "wat.0")]`, rustc would emit a diagnostic saying **_'since' must be a Rust version number, such as "1.31.0"_** and then throw out the whole `stable` attribute as if it weren't there. This strategy had 2 problems, both fixed in this PR: 1. If there was also a `#[deprecated]` attribute on the same item, rustc would want to enforce that the stabilization version is older than the deprecation version. This involved reparsing the `stable` attribute's `since` version, with a diagnostic **_invalid stability version found_** if it failed to parse. Of course this diagnostic was unreachable because an invalid `since` version would have already caused the `stable` attribute to be thrown out. This PR deletes that unreachable diagnostic. 2. By throwing out the `stable` attribute when `since` is invalid, you'd end up with a second diagnostic saying **_function has missing stability attribute_** even though your function is not missing a stability attribute. This PR preserves the `stable` attribute even when `since` cannot be parsed, avoiding the misleading second diagnostic. Followups I plan to try next: - Do the same for the `since` value of `#[deprecated]`. - See whether it makes sense to also preserve `stable` and/or `unstable` attributes when they contain an invalid `feature`. What redundant/misleading diagnostics can this eliminate? What problems arise from not having a usable feature name for some API, in the situation that we're already failing compilation, so not concerned about anything that happens in downstream code?
2023-10-26Auto merge of #117115 - zetafunction:linking, r=bjorn3bors-33/+55
Mark .rmeta files as /SAFESEH on x86 Windows. Chrome links .rlibs with /WHOLEARCHIVE or -Wl,--whole-archive to prevent the linker from discarding static initializers. This works well, except on Windows x86, where lld complains: error: /safeseh: lib.rmeta is not compatible with SEH The fix is simply to mark the .rmeta as SAFESEH aware. This is trivially true, since the metadata file does not contain any executable code.
2023-10-26Revert "Remove TaKO8Ki from reviewers"Takayuki Maeda-0/+2
This reverts commit 8e06b25e3900b8b14d9043ff6d2b846199672b2b.
2023-10-26The value of `-Cinstrument-coverage=` doesn't need to be `Option`Zalathar-17/+15
Not using this flag is identical to passing `-Cinstrument-coverage=off`, so there's no need to distinguish between `None` and `Some(Off)`.
2023-10-26Auto merge of #116818 - Nilstrieb:stop-submitting-bug-reports, r=wesleywiserbors-27/+121
Stop telling people to submit bugs for internal feature ICEs This keeps track of usage of internal features, and changes the message to instead tell them that using internal features is not supported. I thought about several ways to do this but now used the explicit threading of an `Arc<AtomicBool>` through `Session`. This is not exactly incremental-safe, but this is fine, as this is set during macro expansion, which is pre-incremental, and also only affects the output of ICEs, at which point incremental correctness doesn't matter much anyways. See [MCP 620.](https://github.com/rust-lang/compiler-team/issues/596) ![image](https://github.com/rust-lang/rust/assets/48135649/be661f05-b78a-40a9-b01d-81ad2dbdb690)
2023-10-26Auto merge of #115872 - ferrocene:pa-remap-cargo-home, r=clubby789bors-1/+33
Remap Cargo dependencies to /rust/deps :warning: **This doesn't affect user-compiled programs, it only affects building the Rust compiler itself.** :warning: Right now, `rust.remap-debuginfo = true` doesn't completely remap all paths: while LLVM and rustc sources are properly remapped (respectively to `/rust/llvm` and `/rust/$commit`), Cargo dependencies still use absolute paths from the Cargo home. This never affected builds from CI much, because `CARGO_HOME=/cargo` in CI, so users see paths like this included in the precompiled binaries and libraries: ``` /cargo/registry/src/index.crates.io-6f17d22bba15001f/gimli-0.26.2/src/read/line.rs ``` Builds outside CI don't have remapping though, and it's confusing that the config flag doesn't fully do what it advertises. This PR fixes it by adding remapping for dependencies too. *All registries's* source directory are remapped to `/rust/deps`, to account for multiple registries being able to contain crates.io crates (sparse index vs git, and source replacement mirrors). This results in paths like this being included: ``` /rust/deps/gimli-0.26.2/src/read/line.rs ```
2023-10-26Add test for smir localsKirby Linvill-0/+31
2023-10-26Update Place and Operand to take slicesKirby Linvill-15/+15
The latest locals() method in stable MIR returns slices instead of vecs. This commit also includes fixes to the existing tests that previously referenced the private locals field.
2023-10-26Rename internal_locals to inner_localsKirby Linvill-4/+4
The word internal has connotations about information that's not exposed. It's more accurate to say that the remaining locals apply only to the inner part of the function, so I'm renaming them to inner locals.
2023-10-25Auto merge of #117193 - matthiaskrgr:rollup-bygfdcd, r=matthiaskrgrbors-320/+857
Rollup of 6 pull requests Successful merges: - #116401 (Return multiple object-safety violation errors and code improvements to the object-safety check) - #116553 (Do not suggest 'Trait<Assoc=arg>' when in trait impl) - #116931 (Improve the warning messages for the `#[diagnostic::on_unimplemented]`) - #117008 (Uplift `Canonical` to `rustc_type_ir`) - #117009 (On unresolved imports, suggest a disambiguated path if necessary to avoid collision with local items) - #117175 (Rename AsyncCoroutineKind to CoroutineSource) r? `@ghost` `@rustbot` modify labels: rollup
2023-10-26Reduce some function exposure.Nicholas Nethercote-5/+8
2023-10-26Tiny comment fixes.Nicholas Nethercote-3/+4
2023-10-26Move a `use` to a more sensible spot.Nicholas Nethercote-2/+2
I.e. in the source file where it's used.