Commit Graph

259784 Commits

Author SHA1 Message Date
bors
aa1d4f6826 Auto merge of #127044 - Oneirical:fantestic-journey, r=Kobzol,jieyouxu
Migrate `dylib-chain`, `rlib-chain`, `issue-47384`, `msvc-opt-minsize` and `test-harness` `run-make` tests to ui/rmake

Part of #121876 and the associated [Google Summer of Code project](https://blog.rust-lang.org/2024/05/01/gsoc-2024-selected-projects.html).

try-job: x86_64-msvc
try-job: aarch64-apple
2024-07-03 21:10:31 +00:00
Liu Dingming
a9194f30eb Use IndexVec for coroutine local mapping 2024-07-04 05:09:23 +08:00
Zanie Blue
dd509c7a63 Add more test cases for path comparisons 2024-07-03 22:35:10 +02:00
Zanie Blue
a7372372f6 Add test case demonstrating equality of paths "foo/bar" and "foobar" 2024-07-03 22:35:10 +02:00
Rémy Rakic
529a3f4ce6 cache type sizes in type-size limit visitor 2024-07-03 20:32:54 +00:00
Alona Enraght-Moony
7e8aac553e rustdoc-json: Better representation of lifetime bounds in where clauses.
As suggested [on zulip][1], there's no need to use `GenericBound` here,
as the only bound a lifetime can have is that it outlives other
lifetimes.

While we're making breaking changes here, I also renamed it from using
"region" to "lifetime", as this is more user-aligned. See [this
comment][2] for details.

[1]: https://rust-lang.zulipchat.com/#narrow/stream/266220-t-rustdoc/topic/.60ItemEnum.3A.3AOpaqueTy.60/near/448871430
[2]: https://github.com/rust-lang/rust/issues/100961#issuecomment-2206565556
2024-07-03 20:00:56 +00:00
Alona Enraght-Moony
ccc8baf08a jsondocck: Use correct index for error message.
If you misused a count command like `@count $some.selector '"T'"`, you would panic with OOB:

```
thread 'main' panicked at src/tools/jsondocck/src/main.rs:76:92:
index out of bounds: the len is 2 but the index is 2
```

Fixing this typo, we now get.

```
Invalid command: Second argument to @count must be a valid usize (got `"T"`) on line 20
```

As some point I want to rewrite this code to avoid indexing in general, but this is a nice small fix.
2024-07-03 19:38:19 +00:00
Jakub Beránek
54952b4445 Rebase on master 2024-07-03 21:14:46 +02:00
Jakub Beránek
b618fea358 Simplify and generalize implementation of output mode 2024-07-03 21:13:56 +02:00
Jakub Beránek
b90129dd21 Review changes 2024-07-03 21:13:55 +02:00
Jakub Beránek
70b6e04452 Handle execution of dry run commands 2024-07-03 21:13:55 +02:00
Jakub Beránek
60c20bfe0c Refactor command outcome handling
To handle the case of failing to start a `BootstrapCommand`.
2024-07-03 21:13:55 +02:00
Jakub Beránek
e8c8860142 Allow unused Tool variants 2024-07-03 21:13:55 +02:00
Jakub Beránek
3ef77cc42c Remove various usages of the output function 2024-07-03 21:13:55 +02:00
Jakub Beránek
b14ff77c04 Remove temporary BootstrapCommand trait impls 2024-07-03 21:13:55 +02:00
Jakub Beránek
a34d0a8d5f Make git helper return BootstrapCmd 2024-07-03 21:13:55 +02:00
Jakub Beránek
9192479dc3 Improve documentation 2024-07-03 21:13:55 +02:00
bors
2b90614e94 Auto merge of #127036 - cjgillot:sparse-state, r=oli-obk
Make jump threading state sparse

Continuation of https://github.com/rust-lang/rust/pull/127024

Both dataflow const-prop and jump threading involve cloning the state vector a lot. This PR replaces the data structure by a sparse vector, considering:
- that jump threading state is typically very sparse (at most 1 or 2 set entries);
- that dataflow const-prop is disabled by default;
- that place/value map is very eager, and prone to creating an overly large state.

The first commit is shared with the previous PR to avoid needless conflicts.

r? `@oli-obk`
2024-07-03 18:52:04 +00:00
Ana Hobden
403e2e2bbd
Disable rmake test rustdoc-io-error on riscv64gc-gnu 2024-07-03 10:12:39 -07:00
bors
1cfd47fe0b Auto merge of #127278 - matthiaskrgr:rollup-fjexkdr, r=matthiaskrgr
Rollup of 8 pull requests

Successful merges:

 - #126803 (Change `asm-comments` to `verbose-asm`, always emit user comments)
 - #127050 (Make mtime of reproducible tarballs dependent on git commit)
 - #127145 (Add `as_lang_item` to `LanguageItems`, new trait solver)
 - #127202 (Remove global error count checks from typeck)
 - #127233 (Some parser cleanups)
 - #127248 (Add parse fail test using safe trait/impl trait)
 - #127264 (Small `run-make-support` API improvements)
 - #127270 (bootstrap: pass correct struct size to winapi)

r? `@ghost`
`@rustbot` modify labels: rollup
2024-07-03 16:31:16 +00:00
Matthias Krüger
b212cd054e
Rollup merge of #127270 - klensy:PROCESS_MEMORY_COUNTERS, r=Kobzol
bootstrap: pass correct struct size to winapi

Into K32GetProcessMemoryInfo (https://learn.microsoft.com/en-us/windows/win32/api/psapi/nf-psapi-getprocessmemoryinfo) passed in pointer to PROCESS_MEMORY_COUNTERS, but size of PROCESS_MEMORY_COUNTERS_EX, whoops.
2024-07-03 17:26:57 +02:00
Matthias Krüger
06fba4fb0d
Rollup merge of #127264 - GuillaumeGomez:run-make-support-api-improvements, r=Kobzol
Small `run-make-support` API improvements

r? `@Kobzol`
2024-07-03 17:26:56 +02:00
Matthias Krüger
ce991da721
Rollup merge of #127248 - spastorino:unsafe-extern-tests, r=compiler-errors
Add parse fail test using safe trait/impl trait

Added 2 more tests to be sure that nothing weird happens using `safe` on items.
Needed to do this in separate tests as they give parsing errors.
2024-07-03 17:26:56 +02:00
Matthias Krüger
7fdb2f5cab
Rollup merge of #127233 - nnethercote:parser-cleanups, r=petrochenkov
Some parser cleanups

Cleanups I made while looking closely at this code.

r? ``@petrochenkov``
2024-07-03 17:26:55 +02:00
Matthias Krüger
9b05e7b66e
Rollup merge of #127202 - oli-obk:do_not_count_errors, r=wesleywiser
Remove global error count checks from typeck

Some of these are not reachable anymore, others can now rely on information local to the current typeck run. One check was actually invalid, because it was relying on wfcheck running before typeck, which is not guaranteed in the query system and usually easy to create ICEing examples for via const eval (which runs typeck before wfcheck)
2024-07-03 17:26:55 +02:00
Matthias Krüger
02916a3193
Rollup merge of #127145 - compiler-errors:as_lang_item, r=lcnr
Add `as_lang_item` to `LanguageItems`, new trait solver

Add `as_lang_item` which turns `DefId` into a `TraitSolverLangItem` in the new trait solver, so we can turn the large chain of if statements in `assemble_builtin_impl_candidates` into a match instead.

r? lcnr
2024-07-03 17:26:54 +02:00
Matthias Krüger
444a0ff64e
Rollup merge of #127050 - Kobzol:reproducibility-git, r=onur-ozkan
Make mtime of reproducible tarballs dependent on git commit

Since https://github.com/rust-lang/rust/pull/123246, our tarballs should be fully reproducible. That means that the mtime of all files and directories in the tarballs is set to the date of the first Rust commit (from 2006). However, this is causing some mtime invalidation issues (https://github.com/rust-lang/rust/issues/125578#issuecomment-2141068906).

Ideally, we would like to keep the mtime reproducible, but still update it with new versions of Rust. That's what this PR does. It modifies the tarball installer bootstrap invocation so that if the current rustc directory is managed by git, we will set the UTC timestamp of the latest commit as the mtime for all files in the archive. This means that the archive should be still fully reproducible from a given commit SHA, but it will also be changed with new beta bumps and `download-rustc` versions.

Note that only files are set to this mtime, directories are still set to the year 2006, because the `tar` library used by `rust-installer` doesn't allow us to selectively override mtime for directories (or at least I haven't found it). We could work around that by doing all the mtime modifications in bootstrap, but that would require more changes. I think/hope that just modifying the file mtimes should be enough. It should at least fix cargo `rustc` mtime invalidation.

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

r? ``@onur-ozkan``

try-job: x86_64-gnu-distcheck
2024-07-03 17:26:54 +02:00
Matthias Krüger
c74d620635
Rollup merge of #126803 - tgross35:verbose-asm, r=Amanieu
Change `asm-comments` to `verbose-asm`, always emit user comments

Implements what is described in https://github.com/rust-lang/compiler-team/issues/762

Tracking issue: https://github.com/rust-lang/rust/issues/126802
2024-07-03 17:26:53 +02:00
Santiago Pastorino
8b6435d5ce
Add parse fail test using safe trait/impl trait 2024-07-03 12:08:56 -03:00
bors
1086affd98 Auto merge of #126094 - petrochenkov:libsearch, r=michaelwoerister
linker: Link dylib crates by path

Linkers seem to support linking dynamic libraries by path.
Not sure why the previous scheme with splitting the path into a directory (passed with `-L`) and a name (passed with `-l`) was used (upd: likely due to https://github.com/rust-lang/rust/pull/126094#issuecomment-2155063414).

When we split a library path `some/dir/libfoo.so` into `-L some/dir` and `-l foo` we add `some/dir` to search directories for *all* libraries looked up by the linker, not just `foo`, and `foo` is also looked up in *all* search directories not just `some/dir`.
Technically we may find some unintended libraries this way.
Therefore linking dylibs via a full path is both simpler and more reliable.

It also makes the set of search directories more easily reproducible when we need to lookup some native library manually (like in https://github.com/rust-lang/rust/pull/123436).
2024-07-03 14:15:31 +00:00
bors
c872a1418a Auto merge of #125507 - compiler-errors:type-length-limit, r=lcnr
Re-implement a type-size based limit

r? lcnr

This PR reintroduces the type length limit added in #37789, which was accidentally made practically useless by the caching changes to `Ty::walk` in #72412, which caused the `walk` function to no longer walk over identical elements.

Hitting this length limit is not fatal unless we are in codegen -- so it shouldn't affect passes like the mir inliner which creates potentially very large types (which we observed, for example, when the new trait solver compiles `itertools` in `--release` mode).

This also increases the type length limit from `1048576 == 2 ** 20` to `2 ** 24`, which covers all of the code that can be reached with craterbot-check. Individual crates can increase the length limit further if desired.

Perf regression is mild and I think we should accept it -- reinstating this limit is important for the new trait solver and to make sure we don't accidentally hit more type-size related regressions in the future.

Fixes #125460
2024-07-03 11:56:36 +00:00
Martin Nordholts
6f9ec578cb core: Limit four f16 doctests to x86_64 linux
These tests have link errors on many platforms, so limit
them to only x86_64 linux for now. There are many other f16
non-doctests, so we don't need to run these particular ones
widely.
2024-07-03 13:52:15 +02:00
Martin Nordholts
310d4efca2 std: Set has_reliable_f16 to false for MIPS targets in build.rs
To avoid this linker error:

    $ sudo apt install libc6-mips-cross gcc-mips-linux-gnu
    $ CC_mips_unknown_linux_gnu=mips-linux-gnu-gcc \
      CARGO_TARGET_MIPS_UNKNOWN_LINUX_GNU_LINKER=mips-linux-gnu-gcc \
      ./x test library/std --target mips-unknown-linux-gnu
    undefined reference to `__gnu_f2h_ieee'

You get the same linker error also with mipsel, mips64 and
mips64el toolchains.
2024-07-03 13:52:06 +02:00
Martin Nordholts
e8df637c61 library/std/build.rs: "powerpc64le" is not a target_arch
The target_arch of `powerpc64le` is `powerpc64`, so
`powerpc64le` can be removed from a match arm in build.rs
related to f16.

You can check available `target_arch`:s with:

    $ rustc +nightly -Zunstable-options --print all-target-specs-json \
            | grep powerpc | grep arch | sort | uniq
        "arch": "powerpc",
        "arch": "powerpc64",
2024-07-03 13:46:31 +02:00
klensy
bcbcbfff44 bootstrap: pass correct struct size to winapi 2024-07-03 14:23:09 +03:00
bors
b0d791d3cf Auto merge of #3726 - TDecking:vzero, r=RalfJung
Implement the `_mm256_zeroupper` and `_mm256_zeroall` intrinsics

These two intrinsics were missing from the original implementation of the AVX intrinsics.
Fortunately their implementation is trivial.
2024-07-03 11:17:57 +00:00
Guillaume Gomez
9e71c7b5a9 Small run-make-support API improvements 2024-07-03 11:34:39 +02:00
Tobias Decking
d982844b47
Implement the _mm256_zeroupper and _mm256_zeroall intrinsics 2024-07-03 11:08:23 +02:00
bors
2db4ff40af Auto merge of #127261 - jhpratt:rollup-cpoayvr, r=jhpratt
Rollup of 8 pull requests

Successful merges:

 - #123588 (Stabilize `hint::assert_unchecked`)
 - #126403 (Actually report normalization-based type errors correctly for alias-relate obligations in new solver)
 - #126917 (Disable rmake test `inaccessible-temp-dir` on riscv64)
 - #127115 (unreferenced-used-static: run test everywhere)
 - #127204 (Stabilize atomic_bool_fetch_not)
 - #127239 (remove unnecessary ignore-endian-big from stack-overflow-trait-infer …)
 - #127245 (Add a test for `generic_const_exprs`)
 - #127246 (Give remote-test-client a longer timeout)

r? `@ghost`
`@rustbot` modify labels: rollup
2024-07-03 08:36:39 +00:00
Jacob Pratt
d801730872
Rollup merge of #127246 - ferrocene:hoverbear/remote-test-client-has-longer-timeout, r=Mark-Simulacrum
Give remote-test-client a longer timeout

In https://github.com/rust-lang/rust/pull/126959, ``@Mark-Simulacrum`` suggested we simply extend the timeout of the `remote-test-client` instead of making it configurable. This is acceptable for my use case.

I'm doing some work with a remote host running tests using `x.py`'s remote test runner system.

After building the `remote-test-server` with:

```bash
./x build src/tools/remote-test-server --target aarch64-unknown-linux-gnu
```

I can transfer the `remote-test-server` to the remote and set up a port forwarded SSH connection, then I run:

```bash
TEST_DEVICE_ADDR=127.0.0.1:12345 ./x.py test library/core --target aarch64-unknown-linux-gnu
```

This works great if the host is nearby, however if the average round trip time is over 100ms (the timeout), it creates problems as it silently trips the timeout.

This PR extends that timeout to a less strict 2s.

r? ``@Mark-Simulacrum``
2024-07-03 03:03:17 -04:00
Jacob Pratt
24eadb2cf1
Rollup merge of #127245 - BoxyUwU:gce_hang_test, r=Nilstrieb
Add a test for `generic_const_exprs`

Fixes #103770

r? ``@Nilstrieb``
2024-07-03 03:03:16 -04:00
Jacob Pratt
ce016f1a3f
Rollup merge of #127239 - RalfJung:big-endian, r=Nadrieril
remove unnecessary ignore-endian-big from stack-overflow-trait-infer …

Follow-up to [this](https://github.com/rust-lang/rust/pull/122895#discussion_r1632206218) discussion
2024-07-03 03:03:16 -04:00
Jacob Pratt
8a33f7e5ba
Rollup merge of #127204 - dimpolo:stabilize_atomic_bool_fetch_not, r=jhpratt
Stabilize atomic_bool_fetch_not

closes #98485

`@rustbot` modify labels: +T-libs-api
2024-07-03 03:03:15 -04:00
Jacob Pratt
18ec452b24
Rollup merge of #127115 - RalfJung:unreferenced-used-static, r=lqd,ChrisDenton
unreferenced-used-static: run test everywhere

Follow-up to https://github.com/rust-lang/rust/pull/127099.
2024-07-03 03:03:15 -04:00
Jacob Pratt
3e6f6deddf
Rollup merge of #126917 - ferrocene:hoverbear/riscv64-inaccessible-temp-dir-resolution, r=jieyouxu
Disable rmake test `inaccessible-temp-dir` on riscv64

In https://github.com/rust-lang/rust/pull/126279 the `inaccessible-temp-dir` test was moved to rmake, I followed up with a 'fix' derived from https://github.com/rust-lang/rust/pull/126355 in https://github.com/rust-lang/rust/pull/126707.

That 'fix' was misguided and hiding the true issue of the linker being incorrect for `riscv64gc-unknown-linux-gnu` (addressed in https://github.com/rust-lang/rust/pull/126916).

Unfortunately, even with the linker fixed, this test doesn't work. I asked myself why this appeared to work on other platforms and investigated why. Both the containers for `armhf-gnu` and `riscv64gc` run their tests as `root` and have `NO_CHANGE_USER` set:

553a69030e/src/ci/docker/host-x86_64/disabled/riscv64gc-gnu/Dockerfile (L99)

This means the tests are run as `root`. As `root`, it's perfectly normal and reasonable to violate permission checks this way:

```bash
$ sudo mkdir scratch
$ sudo chmod o-w scratch
$ sudo mkdir scratch/backs
$
```

Because of this, this PR makes the test ignored on `riscv64gc` for now.

As an alternative, I believe the best long-term strategy would be to not run the tests as `root` for this job.

## Testing

> [!NOTE]
> `riscv64gc-unknown-linux-gnu` is a [**Tier 2 with Host Tools** platform](https://doc.rust-lang.org/beta/rustc/platform-support.html), all tests may not necessarily pass! This change should only ignore `inaccessible-temp-dir` and not affect other tests.

You can test out the job locally:

```sh
mv src/ci/docker/host-x86_64/disabled/riscv64gc-gnu src/ci/docker/host-x86_64/riscv64gc-gnu
DEPLOY=1 ./src/ci/docker/run.sh riscv64gc-gnu
```
2024-07-03 03:03:14 -04:00
Jacob Pratt
b1b9804f5a
Rollup merge of #126403 - compiler-errors:better-type-errors, r=lcnr
Actually report normalization-based type errors correctly for alias-relate obligations in new solver

We have some special casing to report type mismatch errors that come from projection predicates, but we don't do that for alias-relate obligations. This PR implements that. There's a bit of code duplication, but 🤷

Best reviewed without whitespace.

r? lcnr
2024-07-03 03:03:14 -04:00
Jacob Pratt
db592253a6
Rollup merge of #123588 - tgross35:stabilize-assert_unchecked, r=dtolnay
Stabilize `hint::assert_unchecked`

Make the following API stable, including const:

```rust
// core::hint, std::hint

pub const unsafe fn assert_unchecked(p: bool);
```

This PR also reworks some of the documentation and adds an example.

Tracking issue: https://github.com/rust-lang/rust/issues/119131
FCP: https://github.com/rust-lang/rust/issues/119131#issuecomment-1906394087. The docs update should resolve the remaining concern.
2024-07-03 03:03:13 -04:00
B I Mohammed Abbas
a6c03ae6fe Fall back on remove dir implementation for vxworks 2024-07-03 11:46:24 +05:30
bors
d68fe4eaa8 Auto merge of #127258 - weihanglo:update-cargo, r=weihanglo
Update cargo

23 commits in 4ed7bee47f7dd4416b36fada1909e9a62c546246..a515d463427b3912ec0365d106791f88c1c14e1b
2024-06-25 16:28:22 +0000 to 2024-07-02 20:53:36 +0000
- test: migrate rust_version and rustc* to snapbox (rust-lang/cargo#14177)
- test: mirgate fix* and future_incompat_report to snapbox (rust-lang/cargo#14173)
- test:migrate `edition/error` to snapbox (rust-lang/cargo#14175)
- chore(deps): update compatible (rust-lang/cargo#14174)
- refactor(source): Clean up after PathSource/RecursivePathSource split (rust-lang/cargo#14169)
- test: Migrate some files to snapbox (rust-lang/cargo#14132)
- test:  fix several assertions (rust-lang/cargo#14167)
- test: replace glob with explicit unordered calls (rust-lang/cargo#14166)
- Make it clear that `CARGO_CFG_TARGET_FAMILY` is multi-valued (rust-lang/cargo#14165)
- Document `CARGO_CFG_TARGET_ABI` (rust-lang/cargo#14164)
- test: Migrate git to snapbox (rust-lang/cargo#14159)
- test: migrate some files to snapbox (rust-lang/cargo#14158)
- test: migrate registry and registry_auth to snapbox (rust-lang/cargo#14149)
- gix: remove `revision` feature from cargo (rust-lang/cargo#14160)
- test: migrate package* and publish* to snapbox (rust-lang/cargo#14130)
- More `update --breaking` tests (rust-lang/cargo#14049)
- test: migrate clean to snapbox (rust-lang/cargo#14096)
- Allow `unexpected_builtin_cfgs` lint in `user_specific_cfgs` test (rust-lang/cargo#14153)
- test: migrate search, source_replacement and standard_lib to snapbox (rust-lang/cargo#14151)
- Docs: Update config summary to include missing keys. (rust-lang/cargo#14145)
- test: migrate `dep_info/diagnostics/direct_minimal_versions` to snapbox (rust-lang/cargo#14143)
- Docs: Remove duplicate `strip` section. (rust-lang/cargo#14146)
- Docs: Fix curly quotes in config docs. (rust-lang/cargo#14144)
2024-07-03 06:05:17 +00:00
bors
d163e5e515 Auto merge of #123737 - compiler-errors:alias-wf, r=lcnr
Check alias args for WF even if they have escaping bound vars

#### What

This PR stops skipping arguments of aliases if they have escaping bound vars, instead recursing into them and only discarding the resulting obligations referencing bounds vars.

#### An example:

From the test:
```
trait Trait {
    type Gat<U: ?Sized>;
}

fn test<T>(f: for<'a> fn(<&'a T as Trait>::Gat<&'a [str]>)) where for<'a> &'a T: Trait {}
//~^ ERROR the size for values of type `[()]` cannot be known at compilation time

fn main() {}
```

We now prove that `str: Sized` in order for `&'a [str]` to be well-formed. We were previously unconditionally skipping over `&'a [str]` as it referenced a buond variable. We now recurse into it and instead only discard the `[str]: 'a` obligation because of the escaping bound vars.

#### Why?

This is a change that improves consistency about proving well-formedness earlier in the pipeline, which is necessary for future work on where-bounds in binders and correctly handling higher-ranked implied bounds. I don't expect this to fix any unsoundness.

#### What doesn't it fix?

Specifically, this doesn't check projection predicates' components are well-formed, because there are too many regressions: https://github.com/rust-lang/rust/pull/123737#issuecomment-2052198478
2024-07-03 03:48:06 +00:00