| Age | Commit message (Collapse) | Author | Lines |
|
Simplify `thir::PatKind::ExpandedConstant`
I made it a bit less ad-hoc. In particular, I removed `is_inline: bool` that was just caching the output of `tcx.def_kind(def_id)`. This makes inline consts a tiny bit less special in patterns.
r? `@oli-obk`
cc `@Zalathar`
|
|
Add new `PatKind::Missing` variants
To avoid some ugly uses of `kw::Empty` when handling "missing" patterns, e.g. in bare fn tys. Helps with #137978. Details in the individual commits.
r? ``@oli-obk``
|
|
Rollup of 5 pull requests
Successful merges:
- #138314 (fix usage of `autodiff` macro with inner functions)
- #139426 (Make the UnifyKey and UnifyValue imports non-nightly)
- #139431 (Remove LLVM 18 inline ASM span fallback)
- #139456 (style guide: add let-chain rules)
- #139467 (More trivial tweaks)
r? `@ghost`
`@rustbot` modify labels: rollup
|
|
More trivial tweaks
Found some really tiny nits when trying to find places that span tracking caused queries to be recomputed in incremental; these probably don't need a perf run b/c they're so simple.
r? oli-obk
|
|
style guide: add let-chain rules
Reopens #110568
refs #53667 and I suppose #132833 as well
This reflects the style rules that the style team had already agreed upon back in 2023, with the addition of literals in the lhs being permissible for single line formatting, and the removal of unnecessary language/example snippets around non-`&&` operators that was a small hiccup in the original PR.
It also reflects current formatting behavior implemented in rustfmt (though note that the adjustment to include literals has been implemented & merged, but is still pending a sync to nightly)
|
|
Remove LLVM 18 inline ASM span fallback
The minimum supported LLVM version is now 19, so this fallback is no longer required.
|
|
Make the UnifyKey and UnifyValue imports non-nightly
Explicitly depend on ena in rustc_type_ir and import types from there.
This is required for rust-analyzer to use the new solver.
r? types
|
|
fix usage of `autodiff` macro with inner functions
This PR adds additional handling into the expansion step of the `std::autodiff` macro (in `compiler/rustc_builtin_macros/src/autodiff.rs`), which allows the macro to be applied to inner functions.
```rust
#![feature(autodiff)]
use std::autodiff::autodiff;
fn main() {
#[autodiff(d_inner, Forward, Dual, DualOnly)]
fn inner(x: f32) -> f32 {
x * x
}
}
```
Previously, the compiler didn't allow this due to only handling `Annotatable::Item` and `Annotatable::AssocItem` and missing the handling of `Annotatable::Stmt`. This resulted in the rather generic error
```
error: autodiff must be applied to function
--> src/main.rs:6:5
|
6 | / fn inner(x: f32) -> f32 {
7 | | x * x
8 | | }
| |_____^
error: could not compile `enzyme-test` (bin "enzyme-test") due to 1 previous error
```
This issue was originally reported [here](https://github.com/EnzymeAD/rust/issues/184).
Quick question: would it make sense to add a ui test to ensure there is no regression on this?
This is my first contribution, so I'm extra grateful for any piece of feedback!! :D
r? `@oli-obk`
Tracking issue for autodiff: #124509
|
|
|
|
coverage: Deal with unused functions and their names in one place
When coverage codegen creates dummy instances and covfun records for unused functions, we already know that they are unused, so we might as well set up the special array of unused function names at the same time.
---
The first commit only moves code around; all significant changes are in the second commit.
There should be no change in compiler output.
|
|
|
|
Replace last `usize` -> `ptr` transmute in `alloc` with strict provenance API
This replaces the `usize -> ptr` transmute in `RawVecInner::new_in` with a strict provenance API (`NonNull::without_provenance`).
The API is changed to take an `Alignment` which encodes the non-null constraint needed for `Unique` and allows us to do the construction safely.
Two internal-only APIs were added to let us avoid UB-checking in this hot code: `Layout::alignment` to get the `Alignment` type directly rather than as a `usize`, and `Unique::from_non_null` to create `Unique` in const context without a transmute.
|
|
|
|
Weekly `cargo update`
Automation to keep dependencies in `Cargo.lock` current.
The following is the output from `cargo update`:
```txt
compiler & tools dependencies:
Locking 11 packages to latest compatible versions
Updating blake3 v1.8.0 -> v1.8.1
Updating ctrlc v3.4.5 -> v3.4.6
Updating env_logger v0.11.7 -> v0.11.8
Updating errno v0.3.10 -> v0.3.11
Updating flate2 v1.1.0 -> v1.1.1
Updating indexmap v2.8.0 -> v2.9.0
Updating miniz_oxide v0.8.5 -> v0.8.7
Updating openssl-sys v0.9.106 -> v0.9.107
Updating redox_syscall v0.5.10 -> v0.5.11
Updating smallvec v1.14.0 -> v1.15.0
Updating tokio v1.44.1 -> v1.44.2
note: pass `--verbose` to see 40 unchanged dependencies behind latest
library dependencies:
Locking 1 package to latest compatible version
Updating miniz_oxide v0.8.5 -> v0.8.7
note: pass `--verbose` to see 4 unchanged dependencies behind latest
rustbook dependencies:
Locking 30 packages to latest compatible versions
Updating cc v1.2.17 -> v1.2.18
Updating clap v4.5.32 -> v4.5.35
Updating clap_builder v4.5.32 -> v4.5.35
Updating darling v0.20.10 -> v0.20.11
Updating darling_core v0.20.10 -> v0.20.11
Updating darling_macro v0.20.10 -> v0.20.11
Updating env_logger v0.11.7 -> v0.11.8
Updating errno v0.3.10 -> v0.3.11
Updating flate2 v1.1.0 -> v1.1.1
Updating iana-time-zone v0.1.61 -> v0.1.63
Updating icu_locid_transform_data v1.5.0 -> v1.5.1
Updating icu_normalizer_data v1.5.0 -> v1.5.1
Updating icu_properties_data v1.5.0 -> v1.5.1
Updating indexmap v2.8.0 -> v2.9.0
Updating log v0.4.26 -> v0.4.27
Updating miniz_oxide v0.8.5 -> v0.8.7
Updating once_cell v1.21.1 -> v1.21.3
Updating pest v2.7.15 -> v2.8.0
Updating pest_derive v2.7.15 -> v2.8.0
Updating pest_generator v2.7.15 -> v2.8.0
Updating pest_meta v2.7.15 -> v2.8.0
Updating redox_syscall v0.5.10 -> v0.5.11
Updating rustix v1.0.3 -> v1.0.5
Updating smallvec v1.14.0 -> v1.15.0
Updating string_cache v0.8.8 -> v0.8.9
Updating windows-core v0.52.0 -> v0.61.0
Adding windows-implement v0.60.0
Adding windows-interface v0.59.1
Adding windows-result v0.3.2
Adding windows-strings v0.4.0
```
|
|
Verify that the expanded `inline` and `rustc_autodiff` macros are not
duplicated.
|
|
|
|
- fix errors caused by the move of `ast::Item::ident` (see #138740)
- move the logic of getting `sig`, `vis`, and `ident` from two seperate
`match` statements into one (less repetition especially with the
nested `match`)
|
|
UnifyValue imports non-nightly
|
|
Rollup of 6 pull requests
Successful merges:
- #138562 (Optimize slice {Chunks,Windows}::nth)
- #138876 (Trusty: Implement `write_vectored` for stdio )
- #139072 (Add `slice::align_to_uninit_mut`)
- #139367 (Add `*_value` methods to proc_macro lib)
- #139391 (Check if merged attributes list is empty in expr)
- #139414 (Fix typo in `RawList`'s documentation)
r? `@ghost`
`@rustbot` modify labels: rollup
|
|
Fix typo in `RawList`'s documentation
|
|
r=jdonszelmann
Check if merged attributes list is empty in expr
Fixes #139373
In the example code, an [`UnrecognizedReprHint`](https://github.com/rust-lang/rust/blob/6b5ccfc87f59ab017032e430d4d358b4989735da/compiler/rustc_attr_parsing/src/attributes/repr.rs#L155) error is output, and the list of merged attributes becomes empty. This causes a [panic](https://github.com/rust-lang/rust/blob/6b5ccfc87f59ab017032e430d4d358b4989735da/compiler/rustc_ast_lowering/src/lib.rs#L618) to occur. So, it's necessary to check if merged attributes list is empty as other functions do.
ref: https://github.com/rust-lang/rust/blob/6b5ccfc87f59ab017032e430d4d358b4989735da/compiler/rustc_ast_lowering/src/lib.rs#L896
|
|
Add `*_value` methods to proc_macro lib
This is the (re-)implementation of https://github.com/rust-lang/libs-team/issues/459.
It allows to get the actual value (unescaped) of the different string literals.
It was originally done in https://github.com/rust-lang/rust/pull/136355 but it broke the artifacts build so we decided to move the crate to crates.io to go around this limitation.
Part of https://github.com/rust-lang/rust/issues/136652.
Considering this is a copy-paste of the originally approved PR, no need to go through the whole process again. \o/
r? `@Urgau`
|
|
Add `slice::align_to_uninit_mut`
Add new `slice::align_to_uninit_mut` method.
Tracking issue: https://github.com/rust-lang/rust/issues/139062
ACP: https://github.com/rust-lang/libs-team/issues/564
|
|
Trusty: Implement `write_vectored` for stdio
Currently, `write` for stdout and stderr on Trusty is implemented with the semantics of `write_all`. Instead, call the underlying syscall only once in `write` and use the default implementation of `write_all` like other platforms. Also, implement `write_vectored` by adding support for `IoSlice`.
Refactor stdin to reuse the unsupported type like https://github.com/rust-lang/rust/pull/136769.
It requires #138875 to fix the build for Trusty, though they do not conflict and can merge in either order.
cc `@randomPoison`
|
|
Optimize slice {Chunks,Windows}::nth
I've noticed that the `nth` functions on slice iters had non-optimized-out bounds checks.
The new implementation even generates branchless code.
|
|
|
|
|
|
|
|
|
|
|
|
Update cargo
17 commits in a6c604d1b8a2f2a8ff1f3ba6092f9fda42f4b7e9..0e93c5bf6a1d5ee7bc2af63d1afb16cd28793601
2025-03-26 18:11:00 +0000 to 2025-04-05 00:00:24 +0000
- chore(deps): bump openssl from 0.10.71 to 0.10.72 (rust-lang/cargo#15394)
- chore(ci): restore cargo-util semver check (rust-lang/cargo#15389)
- docs(changelog): polish changelog items (rust-lang/cargo#15379)
- chore(deps): update msrv (1 version) to v1.86 (rust-lang/cargo#15381)
- chore: add aarch64 linux runner (rust-lang/cargo#15077)
- Added `build_directory` field to cargo metadata output (rust-lang/cargo#15377)
- chore(deps): update rust crate rusqlite to 0.34.0 (rust-lang/cargo#15373)
- Prevent undeclared public network access (rust-lang/cargo#15368)
- rename the `author` field to be `authors` in book.toml (rust-lang/cargo#15362)
- move modules from kebab-case to snake_case (rust-lang/cargo#14439)
- chore: bump to 0.89.0; update changelog (rust-lang/cargo#15372)
- docs(unstable): update `-Zrustdoc-depinfo` tracking issue link (rust-lang/cargo#15371)
- fix(tree): Make output more deterministic (rust-lang/cargo#15369)
- feat: rustdoc depinfo rebuild detection via -Zrustdoc-depinfo (rust-lang/cargo#15359)
- Rename the gc config table (rust-lang/cargo#15367)
- Revert "Temporarily ignore cargo_test_doctest_xcompile_ignores" (rust-lang/cargo#15357)
- Don't canonicalize executable path in `cargo_exe` (rust-lang/cargo#15355)
r? ghost
|
|
Refactor Apple version handling in the compiler
Move various Apple version handling code in the compiler out `rustc_codegen_ssa` and into a place where it can be accessed by `rustc_attr_parsing`, which I found to be necessary when doing https://github.com/rust-lang/rust/pull/136867. Thought I'd split it out to make it easier to land, and to make further changes like https://github.com/rust-lang/rust/pull/131477 have fewer conflicts / PR dependencies.
There should be no functional changes in this PR.
`@rustbot` label O-apple
r? rust-lang/compiler
|
|
Rollup of 3 pull requests
Successful merges:
- #139123 (tidy: Fix paths to `coretests` and `alloctests`)
- #139347 (Only build `rust_test_helpers` for `{incremental,ui}` test suites)
- #139438 (Prevent a test from seeing forbidden numbers in the rustc version)
r? `@ghost`
`@rustbot` modify labels: rollup
|
|
Prevent a test from seeing forbidden numbers in the rustc version
The final CHECK-NOT directive in this test was able to see past the end of the enclosing function, and find the substring `753` or `754` in the git hash in the rustc version number, causing false failures in CI whenever the git hash happens to contain those digits in sequence.
Adding an explicit check for `ret` prevents the CHECK-NOT directive from seeing past the end of the function.
---
Manually tested by adding `// CHECK-NOT: rustc` after the existing CHECK-NOT directives, and demonstrating that the new check prevents it from seeing the rustc version string.
|
|
Only build `rust_test_helpers` for `{incremental,ui}` test suites
Only build `rust_test_helpers` for `{incremental,ui}` test suites.
Context: Trying to see what test suites actually need `rust_test_helpers`, because this was causing unnecessary local failures when trying to run `./x test tests/run-make --target=wasm32-unknown-unknown` when `run-make` tests don't need `rust_test_helpers` at all.
r? `@ghost`
try-job: armhf-gnu
try-job: test-various
try-job: x86_64-apple-1
try-job: aarch64-apple
try-job: x86_64-msvc-1
try-job: i686-msvc-1
try-job: x86_64-mingw-1
try-job: i686-mingw-1
|
|
tidy: Fix paths to `coretests` and `alloctests`
Following `#135937` and `#136642`, tests for core and alloc are in coretests and alloctests. Fix tidy to lint for the new paths. Also, update comments referring to the old locations.
Some context for changes which don't match that pattern:
- `library/std/src/thread/local/dynamic_tests.rs` and `library/std/src/sync/mpsc/sync_tests.rs` were moved under `library/std/tests/` in 332fb7e6f1d (Move std::thread_local unit tests to integration tests, 2025-01-17) and b8ae372e483 (Move std::sync unit tests to integration tests, 2025-01-17), respectively, so are no longer special cases.
- There never was a `library/core/tests/fmt.rs` file. That comment previously referred to `src/test/ui/ifmt.rs`, which was folded into `library/alloc/tests/fmt.rs` in 949c96660c3 (move format! interface tests, 2020-09-08).
Now, the only matches for `(alloc|core)/tests` are in `compiler/rustc_codegen_{cranelift,gcc}/patches`. I don't know why CI hasn't broken because those patches can't apply. Or maybe they somehow still can apply?
r? `@bjorn3`
|
|
|
|
|
|
|
|
The final CHECK-NOT directive in this test was able to see past the end of the
enclosing function, and find the substring 753 or 754 in the git hash in the
rustc version number, causing false failures in CI.
Adding an explicit check for `ret` prevents the CHECK-NOT directive from seeing
past the end of the function.
|
|
r=compiler-errors
In `simplify_repeated_aggregate`, don't test first element against itself
r? `@saethlin`
Noticed that in `InstSimplifyContext::simplify_repeated_aggregate`, we're accidentally evaluating the first element's value twice, and then comparing it with itself, instead of just checking whether the rest of the elements are equal to the first one.
This will probably save very few cycles, but since `InstSimplify` is always enabled, this might improve perf by a bit.
|
|
|
|
compiler & tools dependencies:
Locking 11 packages to latest compatible versions
Updating blake3 v1.8.0 -> v1.8.1
Updating ctrlc v3.4.5 -> v3.4.6
Updating env_logger v0.11.7 -> v0.11.8
Updating errno v0.3.10 -> v0.3.11
Updating flate2 v1.1.0 -> v1.1.1
Updating indexmap v2.8.0 -> v2.9.0
Updating miniz_oxide v0.8.5 -> v0.8.7
Updating openssl-sys v0.9.106 -> v0.9.107
Updating redox_syscall v0.5.10 -> v0.5.11
Updating smallvec v1.14.0 -> v1.15.0
Updating tokio v1.44.1 -> v1.44.2
note: pass `--verbose` to see 40 unchanged dependencies behind latest
library dependencies:
Locking 1 package to latest compatible version
Updating miniz_oxide v0.8.5 -> v0.8.7
note: pass `--verbose` to see 4 unchanged dependencies behind latest
rustbook dependencies:
Locking 30 packages to latest compatible versions
Updating cc v1.2.17 -> v1.2.18
Updating clap v4.5.32 -> v4.5.35
Updating clap_builder v4.5.32 -> v4.5.35
Updating darling v0.20.10 -> v0.20.11
Updating darling_core v0.20.10 -> v0.20.11
Updating darling_macro v0.20.10 -> v0.20.11
Updating env_logger v0.11.7 -> v0.11.8
Updating errno v0.3.10 -> v0.3.11
Updating flate2 v1.1.0 -> v1.1.1
Updating iana-time-zone v0.1.61 -> v0.1.63
Updating icu_locid_transform_data v1.5.0 -> v1.5.1
Updating icu_normalizer_data v1.5.0 -> v1.5.1
Updating icu_properties_data v1.5.0 -> v1.5.1
Updating indexmap v2.8.0 -> v2.9.0
Updating log v0.4.26 -> v0.4.27
Updating miniz_oxide v0.8.5 -> v0.8.7
Updating once_cell v1.21.1 -> v1.21.3
Updating pest v2.7.15 -> v2.8.0
Updating pest_derive v2.7.15 -> v2.8.0
Updating pest_generator v2.7.15 -> v2.8.0
Updating pest_meta v2.7.15 -> v2.8.0
Updating redox_syscall v0.5.10 -> v0.5.11
Updating rustix v1.0.3 -> v1.0.5
Updating smallvec v1.14.0 -> v1.15.0
Updating string_cache v0.8.8 -> v0.8.9
Updating windows-core v0.52.0 -> v0.61.0
Adding windows-implement v0.60.0
Adding windows-interface v0.59.1
Adding windows-result v0.3.2
Adding windows-strings v0.4.0
|
|
Update the minimum external LLVM to 19
With this change, we'll have stable support for LLVM 19 and 20.
For reference, the previous increase to LLVM 18 was #130487.
cc `@rust-lang/wg-llvm`
r? nikic
|
|
Following `#135937` and `#136642`, tests for core and alloc are in
coretests and alloctests. Fix tidy to lint for the new paths. Also,
update comments referring to the old locations.
Some context for changes which don't match that pattern:
* library/std/src/thread/local/dynamic_tests.rs and
library/std/src/sync/mpsc/sync_tests.rs were moved under
library/std/tests/ in 332fb7e6f1d (Move std::thread_local unit tests
to integration tests, 2025-01-17) and b8ae372e483 (Move std::sync unit
tests to integration tests, 2025-01-17), respectively, so are no
longer special cases.
* There never was a library/core/tests/fmt.rs file. That comment
previously referred to src/test/ui/ifmt.rs, which was folded into
library/alloc/tests/fmt.rs in 949c96660c3 (move format! interface
tests, 2020-09-08).
|
|
Rollup of 5 pull requests
Successful merges:
- #136877 (Fix missing const for inherent pointer `replace` methods)
- #138797 (Fix `ProvenVia` for global where clauses)
- #139121 (Rename internal module from `statik` to `no_threads`)
- #139319 (StableMIR: Prepare for refactoring)
- #139404 (Small smir cleanup)
r? `@ghost`
`@rustbot` modify labels: rollup
|
|
|
|
|
|
Small smir cleanup
First commit might have small positive perf effect, second one is just to make code a bit shorter
|
|
StableMIR: Prepare for refactoring
Temporarily make `stable_mir` "parasitic" on the `rustc_smir` crate.
It aims to resolve the circular dependency that would arise if we directly invert the dependency order between `rustc_smir` and `stable_mir`.
Once the refactoring is complete (`rustc_smir` does not depend on `stable_mir`), we will migrate it back to the `stable_mir` crate. See more details: [here](https://hackmd.io/jBRkZLqAQL2EVgwIIeNMHg).
|