Commit graph

298901 commits

Author SHA1 Message Date
Chris Denton
92adbd323a
Rollup merge of #139533 - jogru0:130711, r=Mark-Simulacrum
add next_index to Enumerate

Proposal: https://github.com/rust-lang/libs-team/issues/435
Tracking Issue: #130711

This basically just reopens #130682 but squashed and with the new function and the feature gate renamed to `next_index.`

There are two questions I have already:
- Shouldn't we add test coverage for that? I'm happy to provide some, but I might need a pointer to where these test would be.
  - Maybe I could actually also add a doctest?
- For now, I just renamed the feature name in the unstable attribute to `next_index`, as well, so it matches the new name of the function. Is that okay? And can I just do that and use any string, or is there a sealed list of features defined somewhere where I also need to change the name?
2025-04-19 19:30:47 +00:00
Chris Denton
5d2375f789
Rollup merge of #139042 - compiler-errors:do-not-optimize-switchint, r=saethlin
Do not remove trivial `SwitchInt` in analysis MIR

This PR ensures that we don't prematurely remove trivial `SwitchInt` terminators which affects both the borrow-checking and runtime semantics (i.e. UB) of the code. Previously the `SimplifyCfg` optimization was removing `SwitchInt` terminators when they was "trivial", i.e. when all arms branched to the same basic block, even if that `SwitchInt` terminator had the side-effect of reading an operand which (for example) may not be initialized or may point to an invalid place in memory.

This behavior is unlike all other optimizations, which are only applied after "analysis" (i.e. borrow-checking) is finished, and which Miri disables to make sure the compiler doesn't silently remove UB.

Fixing this code "breaks" (i.e. unmasks) code that used to borrow-check but no longer does, like:

```rust
fn foo() {
    let x;
    let (0 | _) = x;
}
```

This match expression should perform a read because `_` does not shadow the `0` literal pattern, and the compiler should have to read the match scrutinee to compare it to 0. I've checked that this behavior does not actually manifest in practice via a crater run which came back clean: https://github.com/rust-lang/rust/pull/139042#issuecomment-2767436367

As a side-note, it may be tempting to suggest that this is actually a good thing or that we should preserve this behavior. If we wanted to make this work (i.e. trivially optimize out reads from matches that are redundant like `0 | _`), then we should be enabling this behavior *after* fixing this. However, I think it's kinda unprincipled, and for example other variations of the code don't even work today, e.g.:

```rust
fn foo() {
    let x;
    let (0.. | _) = x;
}
```
2025-04-19 19:30:46 +00:00
Chayim Refael Friedman
824d33dc7c
Merge pull request #19617 from ChayimFriedman2/more-actual
internal: Make `HirFileId`, `EditionedFileId` and macro files Salsa struct
2025-04-19 19:21:53 +00:00
Eric Huss
f3b7e2381a Switch exploit mitigations to mdbook footnotes
This updates the exploit mitigations chapter in the rustc book to use
the footnote feature of mdbook instead of manually implementing
footnotes with HTML.
2025-04-19 12:11:22 -07:00
Chayim Refael Friedman
5da9984040 Make HirFileId, EditionedFileId and macro files Salsa struct
And make more queries non-interned.

Also flip the default for queries, now the default is to not intern and to intern a query you need to say `invoke_interned`.
2025-04-19 22:10:52 +03:00
Guillaume Gomez
88a5e1ef68 Add regression test for #140026 2025-04-19 21:10:40 +02:00
Guillaume Gomez
e0437ec364 Fix error when an intra doc link is trying to resolve an empty associated item 2025-04-19 21:07:24 +02:00
Guillaume Gomez
ae4b6d6c65 Update docs for AssocItems::filter_by_name_unhygienic 2025-04-19 21:06:52 +02:00
Michael Goulet
47911eb677 Don't ICE on pending obligations from deep normalization in a loop 2025-04-19 17:34:00 +00:00
jyn
fdcc2faaa2 allow using null to unset an environment variable
this makes three changes:
- all callsites of `toolchain::command` are changed to use
  `command(path, extra_env)`, instead of manually adding the env after
  the fact.
- all `map<str, str>` are changed to `map<str, option<str>>`.
- `command` checks for None and calls `env_remove` if so.

this caught several places where environment variables weren't being
propagated:
- when running `rustc --print=target-libdir`
- when running `cargo rustc -- --print=target-spec-json`
- when running the custom DiscoverLinkedProjects config. I *think* this
  is for use with non-cargo build systems, so I didn't change it.
2025-04-19 12:15:22 -04:00
apiraino
1d87d14cdb
Add option for stable backport poll
skip-checks: true
2025-04-19 18:13:34 +02:00
bors
077cedc2af Auto merge of #140040 - ChrisDenton:rollup-56bzfuq, r=ChrisDenton
Rollup of 8 pull requests

Successful merges:

 - #137454 (not lint break with label and unsafe block)
 - #139297 (Deduplicate & clean up Nix shell)
 - #139535 (Implement `Default` for raw pointers)
 - #139919 (Make rustdoc JSON Span column 1-based, just like line numbers)
 - #139922 (fix incorrect type in cstr `to_string_lossy()` docs)
 - #140007 (Disable has_thread_local on i686-win7-windows-msvc)
 - #140016 (std: Use fstatat() on illumos)
 - #140025 (Re-remove `AdtFlags::IS_ANONYMOUS`)

r? `@ghost`
`@rustbot` modify labels: rollup
2025-04-19 16:03:34 +00:00
Tshepang Mbambo
021ebcc3c7
Merge pull request #2348 from rust-lang/tshepang-error-pattern-cleaning
error-pattern directive section cleaning
2025-04-19 18:01:18 +02:00
Tshepang Mbambo
48612702d9 improve readability by adding pauses 2025-04-19 17:58:12 +02:00
Tshepang Mbambo
d09b3c75de fix grammar 2025-04-19 17:58:12 +02:00
Tshepang Mbambo
6be60e83b5 needed a stronger pause 2025-04-19 17:51:41 +02:00
Cornelius Roemer
0b27121212 Fix clippy::version of elidable_lifetime_names to 1.87
The lint becomes part of stable in 1.87, not in 1.84
2025-04-19 17:20:26 +02:00
Chris Denton
f0a0efdcdc
Rollup merge of #139995 - spencer3035:clean-ui-tests-4-of-n, r=jieyouxu
Clean UI tests 4 of n

Cleaned up some tests that have `issue` in the title. I kept the commits to be one per "`issue`" cleanup/rename to make it easier to check. I can rebase to one commit once the changes are approved.

Related Issues:
#73494
#133895

r? jieyouxu
2025-04-19 15:09:36 +00:00
Chris Denton
56cef5ce58
Rollup merge of #139978 - Kobzol:ci-test-summary, r=jieyouxu
Add citool command for generating a test dashboard

This PR implements an initial version of a test suite dashboard, which shows which tests were executed on CI and which tests were ignored. This was discussed [here](https://rust-lang.zulipchat.com/#narrow/channel/238009-t-compiler.2Fmeetings/topic/.5Bsteering.5D.202025-04-11.20Dealing.20with.20disabled.20tests/with/512799036). The dashboard is still quite bare-bones, but I think that it could already be useful.

The next step is to create a job index, similarly to the post-merge report, and link from the individual tests to the job that executed them.

You can try it locally like this:
```bash
$ cargo run --manifest-path src/ci/citool/Cargo.toml --release \
    -- test-dashboard 38c560ae68 --output-dir dashboard
```
and then open `dashboard/index.html` in a web browser.

CC ````@wesleywiser````

r? ````@jieyouxu````
2025-04-19 15:09:36 +00:00
Chris Denton
709f4fee50
Rollup merge of #139868 - thaliaarchi:move-env-consts-pal, r=joboet
Move `pal::env` to `std::sys::env_consts`

Combine the `std::env::consts` platform implementations as a single file. Use the Unix file as the base, since it has 28 entries, and fold the 8 singleton platforms into it. The Unix file was roughly grouped into Linux, Apple, BSD, and everything else, roughly in alphabetical order. Alphabetically order them to make it easier to maintain and discard the Unix-specific groups to generalize it to all platforms.

I'd prefer to have no fallback implementation, as I consider it a bug; however TEEOS, Trusty, and Xous have no definitions here. Since they otherwise have `pal` abstractions, that indicates that there are several platforms without `pal` abstractions which are also missing here. To support unsupported, create a little macro to handle the fallback case and not introduce ordering between the `cfg`s like `cfg_if!`.

I've named the module `std::sys::env_consts`, because they are used in `std::env::consts` and I intend to use the name `std::sys::env` for the combination of `Args` and `Vars`.

cc `@joboet` `@ChrisDenton`

Tracked in #117276.
2025-04-19 15:09:35 +00:00
Chris Denton
2d4f1130a2
Rollup merge of #139834 - ChrisDenton:spf, r=WaffleLapkin
Don't canonicalize crate paths

When printing paths in diagnostic we should favour printing the paths that were passed in rather than resolving all symlinks.

This PR changes the form of the crate path but it should only really affect diagnostics as filesystem functions won't care which path is used. The uncanonicalized path was already used as a fallback for when canonicalization failed.

This is a partial alternative to #139823.
2025-04-19 15:09:35 +00:00
Chris Denton
688478fe45
Rollup merge of #139762 - compiler-errors:non-env, r=lcnr
Don't assemble non-env/bound candidates if projection is rigid

Putting this up for an initial review, it's still missing comments, clean-up, and possibly a tweak to deal with ambiguities in the `BestObligation` folder.

This PR fixes https://github.com/rust-lang/trait-system-refactor-initiative/issues/173. Specifically, we're creating an unnecessary query cycle in normalization by assembling an *impl candidate* even if we know later on during `merge_candidates` that we'll be filtering out that impl candidate.

This PR adjusts the `merge_candidates` to assemble *only* env/bound candidates if we have `TraitGoalProvenVia::ParamEnv | TraitGoalProvenVia::AliasBound`.

I'll leave some thoughts/comments in the code.

r? lcnr
2025-04-19 15:09:34 +00:00
Chris Denton
1a5e486068
Rollup merge of #139753 - folkertdev:naked-function-unsafe-attribute, r=tgross35,traviscross
Make `#[naked]` an unsafe attribute

tracking issue: https://github.com/rust-lang/rust/issues/138997

Per https://github.com/rust-lang/rust/pull/134213#issuecomment-2755984503, the `#[naked]` attribute is now an unsafe attribute (in any edition).

This can only be merged when the above PRs are merged, I'd just like to see if there are any CI surprises here, and maybe there is early review feedback too.

r? ``@traviscross``
2025-04-19 15:09:34 +00:00
Chris Denton
aad59a30de
Rollup merge of #139091 - mejrs:format, r=compiler-errors
Rewrite on_unimplemented format string parser.

This PR rewrites the format string parser for `rustc_on_unimplemented` and `diagnostic::on_unimplemented`. I plan on moving this code (and more) into the new attribute parsing system soon and wanted to PR it separately.

This PR introduces some minor differences though:
- `rustc_on_unimplemented` on trait *implementations* is no longer checked/used - this is actually never used (outside of some tests) so I plan on removing it in the future.
- for `rustc_on_unimplemented`, it introduces the `{This}` argument in favor of `{ThisTraitname}` (to be removed later). It'll be easier to parse.
- for `rustc_on_unimplemented`, `Self` can now consistently be used as a filter, rather than just `_Self`. It used to not match correctly on for example `Self = "[{integer}]"`
- Some error messages now have better spans.

Fixes https://github.com/rust-lang/rust/issues/130627
2025-04-19 15:09:33 +00:00
Chris Denton
237064a0c4
Rollup merge of #138934 - onur-ozkan:extended-config-profiles, r=Kobzol
support config extensions

_Copied from the `rustc-dev-guide` addition:_

>When working on different tasks, you might need to switch between different bootstrap >configurations.
>Sometimes you may want to keep an old configuration for future use. But saving raw config >values in
>random files and manually copying and pasting them can quickly become messy, especially if >you have a
>long history of different configurations.
>
>To simplify managing multiple configurations, you can create config extensions.
>
>For example, you can create a simple config file named `cross.toml`:
>
>```toml
>[build]
>build = "x86_64-unknown-linux-gnu"
>host = ["i686-unknown-linux-gnu"]
>target = ["i686-unknown-linux-gnu"]
>
>
>[llvm]
>download-ci-llvm = false
>
>[target.x86_64-unknown-linux-gnu]
>llvm-config = "/path/to/llvm-19/bin/llvm-config"
>```
>
>Then, include this in your `bootstrap.toml`:
>
>```toml
>include = ["cross.toml"]
>```
>
>You can also include extensions within extensions recursively.
>
>**Note:** In the `include` field, the overriding logic follows a right-to-left order. For example,
in `include = ["a.toml", "b.toml"]`, extension `b.toml` overrides `a.toml`. Also, parent extensions
always overrides the inner ones.

try-job: x86_64-mingw-2
2025-04-19 15:09:32 +00:00
Lukas Wirth
6adf7f3be0
Merge pull request #19628 from jyn514/warn-bad-config
don't ignore config values that fail to parse
2025-04-19 14:20:05 +00:00
许杰友 Jieyou Xu (Joe)
976d13fe49
Merge pull request #2346 from folkertdev/bootstrap-in-dependencies 2025-04-19 22:13:41 +08:00
Folkert de Vries
1ab497b3f4
document #[cfg(bootstrap)] in dependencies 2025-04-19 16:09:18 +02:00
jyn
10a7468360 don't ignore config values that fail to parse
previously, these would just silently be ignored. now they give a
warning such as:
```
invalid config values: /completion/snippets/custom: invalid type: null, expected a map; /cargo/extraEnv: invalid type: null, expected a string;
```
2025-04-19 10:08:05 -04:00
Tshepang Mbambo
b886a8e654
Merge pull request #2347 from rust-lang/rustc-pull
Rustc pull update
2025-04-19 16:06:07 +02:00
Tshepang Mbambo
07b7f00a9e fix broken link 2025-04-19 16:04:22 +02:00
Chris Denton
9ebc73e2b6
Rollup merge of #140025 - Sky9x:re-remove-adtflags-anon, r=compiler-errors
Re-remove `AdtFlags::IS_ANONYMOUS`

Removed in #138296.
I accidentally re-added it in #137043 while resolving merge conflicts. This PR re-removes it.

r? ``@compiler-errors`` (sorry)
2025-04-19 14:01:40 +00:00
Chris Denton
995114908d
Rollup merge of #140016 - pfmooney:illumos-fstatat, r=jhpratt
std: Use fstatat() on illumos
2025-04-19 14:01:40 +00:00
Chris Denton
67a97bad94
Rollup merge of #140007 - roblabla:fix-win7, r=ChrisDenton
Disable has_thread_local on i686-win7-windows-msvc

On Windows 7 32-bit, the alignment characteristic of the TLS Directory don't appear to be respected by the PE Loader, leading to crashes. As a result, let's disable has_thread_local to make sure TLS goes through the emulation layer.

Fixes #138903
2025-04-19 14:01:39 +00:00
Chris Denton
3c5aef3625
Rollup merge of #139922 - jnqnfe:cstr_doc_fix, r=jhpratt
fix incorrect type in cstr `to_string_lossy()` docs

Restoring what it said prior to commit 67065fe in which it was changed incorrectly with no supporting explanation.

Closes #139835.
2025-04-19 14:01:39 +00:00
Chris Denton
d49361a798
Rollup merge of #139919 - GuillaumeGomez:rustdoc-json-1-indexed, r=aDotInTheVoid
Make rustdoc JSON Span column 1-based, just like line numbers

Fixes https://github.com/rust-lang/rust/issues/139906.

This PR does two things:
 1. It makes column 1-indexed as well, just like lines.
 2. It updates documentation about them to mention that they are 1-indexed.

I think it's better for coherency to have them both 1-indexed instead of the weird mix we used to have. Docs for `line` and `col` fields can be found [here](https://doc.rust-lang.org/nightly/nightly-rustc/rustc_span/struct.Loc.html#structfield.line).

And finally: it adds a regression test to ensure they are indeed 1-indexed.

r? `@aDotInTheVoid`
2025-04-19 14:01:38 +00:00
Chris Denton
dff14f0634
Rollup merge of #139535 - ChrisDenton:default-ptr, r=tgross35
Implement `Default` for raw pointers

ACP: https://github.com/rust-lang/libs-team/issues/571

This is instantly stable so we will need an FCP here.

Closes https://github.com/rust-lang/rfcs/issues/2464
2025-04-19 14:01:37 +00:00
Chris Denton
103be60afe
Rollup merge of #139297 - RossSmyth:NixClean, r=WaffleLapkin
Deduplicate & clean up Nix shell

1. Deduplicate the flake and shell files
2. Remove flake-utils
3. Remove `with` statements
They are considered bad practice nowadays because the slow down the evalulator and have weird shadowing rules.
4. Use `env`
:3
5. use `callPackage`
It's the recommended way for derivations like these.
6. Use `packages` in the shell
There is no reason to use `buildInputs` for a mkShell (except in funny cases that will not be seen here), so the  `packages` attr is recommended now days.

r? WaffleLapkin
2025-04-19 14:01:37 +00:00
Chris Denton
db98b72e34
Rollup merge of #137454 - mu001999-contrib:fix-137414, r=wesleywiser
not lint break with label and unsafe block

fixes #137414

we can't label unsafe blocks, so that we can do not lint them
2025-04-19 14:01:36 +00:00
The rustc-dev-guide Cronjob Bot
3b2302ec0d Merge from rustc 2025-04-19 13:53:12 +00:00
The rustc-dev-guide Cronjob Bot
a0c64dce0d Preparing for merge from rustc 2025-04-19 13:53:05 +00:00
Tshepang Mbambo
1b5f2aa2a7 toolchain version does not need to be specified
- Rust backcompat removes the need to specify the version here
- Using these commands can result in a needless toolchain getting
  downloaded, like in the case where user only has Nightly installed
2025-04-19 13:34:13 +02:00
A4-Tacks
4869403d3a
Fix replace_string_with_char escaped char quote 2025-04-19 19:16:44 +08:00
Tshepang Mbambo
52616fa902
Merge pull request #2344 from rust-lang/tshepang-patch-1
readme: be copy-paste friendly
2025-04-19 13:09:15 +02:00
Tshepang Mbambo
311ef44dca
readme: be copy-paste friendly 2025-04-19 13:08:43 +02:00
Jieyou Xu
b47fe51610
tests: adjust tests/ui/auto-instantiate.rs
- Reformat the test.
- Document test intention.
- Move test under `tests/ui/inference/`.
2025-04-19 18:42:24 +08:00
Jieyou Xu
40b73322b9
tests: adjust some augmented-assignment* tests
- `tests/ui/augmented-assignment-feature-gate-cross.rs`:
  - This was *originally* to feature-gate overloaded OpAssign
    cross-crate, but now let's keep it as a smoke test.
  - Renamed as `augmented-assignment-cross-crate.rs`.
  - Relocated under `tests/ui/binop/`.
-  `tests/ui/augmented-assignments.rs`:
  - Documented test intent.
  - Moved under `tests/ui/borrowck/`.
- `tests/ui/augmented-assignment-rpass.rs`:
  - Renamed to drop the `-rpass` suffix, since this was leftover from
    when `run-pass` test suite was a thing.
  - Moved under `tests/ui/binop/`.
2025-04-19 18:42:24 +08:00
Jieyou Xu
a86df238d3
tests: rework amdgpu-require-explicit-cpu.rs
- Reworked the test as a *centralized* version of checking that certain
  targets correctly require `-C target-cpu` being specified.
- Document test intention.
- Move `amdgpu-require-explicit-cpu.rs` under new dir
  `tests/ui/target-cpu/`
  - No other ui subdir really fits this "requires `-Ctarget-cpu`" check.
2025-04-19 18:42:23 +08:00
Jonathan Gruner
f121c7c360 added test for Enumerate::next_index on empty iterator 2025-04-19 12:29:47 +02:00
Jonathan Gruner
5a71fabe29 added doctest for Enumerate::next_index 2025-04-19 12:29:47 +02:00