Commit graph

298901 commits

Author SHA1 Message Date
bors
d6c1e454aa Auto merge of #140127 - ChrisDenton:rollup-2kye32h, r=ChrisDenton
Rollup of 11 pull requests

Successful merges:

 - #134213 (Stabilize `naked_functions`)
 - #139711 (Hermit: Unify `std::env::args` with Unix)
 - #139795 (Clarify why SGX code specifies linkage/symbol names for certain statics)
 - #140036 (Advent of `tests/ui` (misc cleanups and improvements) [4/N])
 - #140047 (remove a couple clones)
 - #140052 (Fix error when an intra doc link is trying to resolve an empty associated item)
 - #140074 (rustdoc-json: Improve test for auto-trait impls)
 - #140076 (jsondocck: Require command is at start of line)
 - #140107 (rustc-dev-guide subtree update)
 - #140111 (cleanup redundant pattern instances)
 - #140118 ({B,C}Str: minor cleanup)

r? `@ghost`
`@rustbot` modify labels: rollup
2025-04-21 19:28:16 +00:00
Guillaume Gomez
da2b32925a Use correct annotation for CSS pseudo elements 2025-04-21 21:11:56 +02:00
Chris Denton
1cb9a0d450
Rollup merge of #140118 - tamird:cstr-cleanup, r=joboet
{B,C}Str: minor cleanup

(hopefully) uncontroversial bits extracted from #139994.
2025-04-21 18:53:21 +00:00
Chris Denton
8ecaf148e7
Rollup merge of #140111 - jogru0:redundant_pattern, r=compiler-errors
cleanup redundant pattern instances

Just two small code cleanups.
2025-04-21 18:53:20 +00:00
Chris Denton
ef167557b6
Rollup merge of #140107 - tshepang:rdg-push, r=jieyouxu
rustc-dev-guide subtree update

r? ``@ghost``
2025-04-21 18:53:20 +00:00
Chris Denton
df9e15e69f
Rollup merge of #140076 - aDotInTheVoid:jsondocline, r=GuillaumeGomez
jsondocck: Require command is at start of line

In one place we use `///``@``` instead of `//``@`.`` The test-runner allowed it, but it probably shouldn't. Ran into by ``@lolbinarycat`` in https://github.com/rust-lang/rust/pull/132748#issuecomment-2816469322:

```
error: unknown disambiguator `?(`
##[error] --> /checkout/tests/rustdoc-json/fns/return_type_alias.rs:3:25
  |
3 | ///@ set foo = "$.index[?(``@.name=='Foo')].id"``
  |                         ^^
  |
```

Maybe it's also worth erroring on this like we added in #137103

r? ``@GuillaumeGomez``
2025-04-21 18:53:19 +00:00
Chris Denton
a37f4236cd
Rollup merge of #140074 - aDotInTheVoid:auto-test, r=GuillaumeGomez
rustdoc-json: Improve test for auto-trait impls

The TODO is fixable now due-to #138763. While I was here I realized there's probably a a few more things we should also test.

r? ```@GuillaumeGomez```
2025-04-21 18:53:18 +00:00
Chris Denton
96ac7d8b5e
Rollup merge of #140052 - GuillaumeGomez:fix-140026, r=nnethercote
Fix error when an intra doc link is trying to resolve an empty associated item

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

Assigning ```@nnethercote``` since they're the one who wrote the initial change.

I updated rustdoc code instead of compiler's because I think it makes more sense that the caller ensures on their side that the name they're looking for isn't empty.

r? ```@nnethercote```
2025-04-21 18:53:18 +00:00
Chris Denton
b3a0104ddb
Rollup merge of #140047 - matthiaskrgr:clo, r=compiler-errors
remove a couple clones
2025-04-21 18:53:17 +00:00
Chris Denton
204e9a0a8d
Rollup merge of #140036 - jieyouxu:ui-cleanup-4, r=compiler-errors
Advent of `tests/ui` (misc cleanups and improvements) [4/N]

Some `tests/ui/` housekeeping, to trim down number of tests directly under `tests/ui/`. Part of #133895.

### Review advice

- Best reviewed commit-by-commit.
- I can squash commits before merge, commits are separate to make it easier to review.
2025-04-21 18:53:17 +00:00
Chris Denton
cac8bc3d1f
Rollup merge of #139795 - jethrogb:jb/sgx-linkage-comments, r=joboet
Clarify why SGX code specifies linkage/symbol names for certain statics

Specifying linkage/symbol name is solely to ensure a single instance between the `std` crate and its unit tests.

Also update the symbol names as items have moved around a bit. The actual name isn't that important, it just needs to be unique. But for debugging it can be useful for it to point to the right place.
2025-04-21 18:53:16 +00:00
Chris Denton
5779843eda
Rollup merge of #139711 - thaliaarchi:hermit-args, r=jhpratt
Hermit: Unify `std::env::args` with Unix

The only differences between these implementations of `std::env::args` are that Unix uses relaxed ordering, but Hermit uses acquire/release, and Unix truncates `argv` at the first null pointer, but Hermit doesn't. Since Hermit aims for Unix compatibility, unify it with Unix.

The atomic orderings were established in https://github.com/rust-lang/rust/pull/74006 (cc `@euclio)` for Unix and https://github.com/rust-lang/rust/pull/100579 (cc `@joboet)` for Hermit and, before those, they used mutexes and non-atomic statics. I think the difference in orderings is simply from them being changed at different times. The commented explanation for using acquire/release for Hermit is “to broadcast writes by the OS”. I'm not experienced enough with atomics to accurately judge, but I think acquire/release is stronger than needed. Either way, they should match.

Truncating at the first null pointer seems desirable, though I don't know whether it is necessary in practice on Hermit.

cc `@mkroening` `@stlankes` for Hermit
2025-04-21 18:53:16 +00:00
Chris Denton
1ca5e4f1c1
Rollup merge of #134213 - folkertdev:stabilize-naked-functions, r=tgross35,Amanieu,traviscross
Stabilize `naked_functions`

tracking issue: https://github.com/rust-lang/rust/issues/90957
request for stabilization on tracking issue: https://github.com/rust-lang/rust/issues/90957#issuecomment-2539270352
reference PR: https://github.com/rust-lang/reference/pull/1689

# Request for Stabilization

Two years later, we're ready to try this again. Even though this issue is already marked as having passed FCP, given the amount of time that has passed and the changes in implementation strategy, we should follow the process again.

## Summary

The `naked_functions` feature has two main parts: the `#[naked]` function attribute, and the `naked_asm!` macro.

An example of a naked function:

```rust
const THREE: usize = 3;

#[naked]
pub extern "sysv64" fn add_n(number: usize) -> usize {
    // SAFETY: the validity of the used registers
    // is guaranteed according to the "sysv64" ABI
    unsafe {
        core::arch::naked_asm!(
            "add rdi, {}",
            "mov rax, rdi",
            "ret",
            const THREE,
        )
    }
}
```

When the `#[naked]` attribute is applied to a function, the compiler won't emit a [function prologue](https://en.wikipedia.org/wiki/Function_prologue_and_epilogue) or epilogue when generating code for this function. This attribute is analogous to [`__attribute__((naked))`](https://developer.arm.com/documentation/100067/0608/Compiler-specific-Function--Variable--and-Type-Attributes/--attribute----naked---function-attribute) in C. The use of this feature allows the programmer to have precise control over the assembly that is generated for a given function.

The body of a naked function must consist of a single `naked_asm!` invocation, a heavily restricted variant of the `asm!` macro: the only legal operands are `const` and `sym`, and the only legal options are `raw` and `att_syntax`. In lieu of specifying operands, the `naked_asm!` within a naked function relies on the function's calling convention to determine the validity of registers.

## Documentation

The Rust Reference: https://github.com/rust-lang/reference/pull/1689
(Previous PR: https://github.com/rust-lang/reference/pull/1153)

## Tests

* [tests/run-make/naked-symbol-visiblity](https://github.com/rust-lang/rust/tree/master/tests/codegen/naked-fn) verifies that `pub`, `#[no_mangle]` and `#[linkage = "..."]` work correctly for naked functions
* [tests/codegen/naked-fn](https://github.com/rust-lang/rust/tree/master/tests/codegen/naked-fn) has tests for function alignment, use of generics, and validates the exact assembly output on linux, macos, windows and thumb
* [tests/ui/asm/naked-*](https://github.com/rust-lang/rust/tree/master/tests/ui/asm) tests for incompatible attributes, generating errors around incorrect use of `naked_asm!`, etc

## Interaction with other (unstable) features

### [fn_align](https://github.com/rust-lang/rust/issues/82232)

Combining `#[naked]` with `#[repr(align(N))]` works well, and is tested e.g. here

- https://github.com/rust-lang/rust/blob/master/tests/codegen/naked-fn/aligned.rs
- https://github.com/rust-lang/rust/blob/master/tests/codegen/naked-fn/min-function-alignment.rs

It's tested extensively because we do need to explicitly support the `repr(align)` attribute (and make sure we e.g. don't mistake powers of two for number of bytes).

## History

This feature was originally proposed in [RFC 1201](https://github.com/rust-lang/rfcs/pull/1201), filed on 2015-07-10 and accepted on 2016-03-21. Support for this feature was added in [#32410](https://github.com/rust-lang/rust/pull/32410), landing on 2016-03-23. Development languished for several years as it was realized that the semantics given in RFC 1201 were insufficiently specific. To address this, a minimal subset of naked functions was specified by [RFC 2972](https://github.com/rust-lang/rfcs/pull/2972), filed on 2020-08-07 and accepted on 2021-11-16. Prior to the acceptance of RFC 2972, all of the stricter behavior specified by RFC 2972 was implemented as a series of warn-by-default lints that would trigger on existing uses of the `naked` attribute; these lints became hard errors in [#93153](https://github.com/rust-lang/rust/pull/93153) on 2022-01-22. As a result, today RFC 2972 has completely superseded RFC 1201 in describing the semantics of the `naked` attribute.

More recently, the `naked_asm!` macro was added to replace the earlier use of a heavily restricted `asm!` invocation. The `naked_asm!` name is clearer in error messages, and provides a place for documenting the specific requirements of inline assembly in naked functions.

The implementation strategy was changed to emitting a global assembly block. In effect, an extern function

```rust
extern "C" fn foo() {
    core::arch::naked_asm!("ret")
}
```

is emitted as something similar to

```rust
core::arch::global_asm!(
    "foo:",
    "ret"
);

extern "C" {
    fn foo();
}
```

The codegen approach was chosen over the llvm naked function attribute because:

- the rust compiler can guarantee the behavior (no sneaky additional instructions, no inlining, etc.)
- behavior is the same on all backends (llvm, cranelift, gcc, etc)

Finally, there is now an allow list of compatible attributes on naked functions, so that e.g. `#[inline]` is rejected with an error. The `#[target_feature]` attribute on naked functions was later made separately unstable, because implementing it is complex and we did not want to block naked functions themselves on how target features work on them. See also https://github.com/rust-lang/rust/issues/138568.

relevant PRs for these recent changes

- https://github.com/rust-lang/rust/pull/127853
- https://github.com/rust-lang/rust/pull/128651
- https://github.com/rust-lang/rust/pull/128004
- https://github.com/rust-lang/rust/pull/138570
-
### Various historical notes

#### `noreturn`
[RFC 2972](https://github.com/rust-lang/rfcs/blob/master/text/2972-constrained-naked.md) mentions that naked functions

> must have a body which contains only a single asm!() statement which:
> iii. must contain the noreturn option.

Instead of `asm!`, the current implementation mandates that the body contain a single `naked_asm!` statement. The `naked_asm!` macro is a heavily restricted version of the `asm!` macro, making it easier to talk about and document the rules of assembly in naked functions and give dedicated error messages.

For `naked_asm!`, the behavior of the `asm!`'s `noreturn` option is implicit. The `noreturn` option means that it is UB for control flow to fall through the end of the assembly block. With `asm!`, this option is usually used for blocks that diverge (and thus have no return and can be typed as `!`). With `naked_asm!`, the intent is different: usually naked funtions do return, but they must do so from within the assembly block. The `noreturn` option was used so that the compiler would not itself also insert a `ret` instruction at the very end.

#### padding / `ud2`

A `naked_asm!` block that violates the safety assumption that control flow must not fall through the end of the assembly block is UB. Because no return instruction is emitted, whatever bytes follow the naked function will be executed, resulting in truly undefined behavior. There has been discussion whether rustc should emit an invalid instruction (e.g. `ud2`  on x86) after the `naked_asm!` block to at least fail early in the case of an invalid `naked_asm!`. It was however decided that it is more useful to guarantee that `#[naked]` functions NEVER contain any instructions besides those in the `naked_asm!` block.

# unresolved questions

None

r? ``@Amanieu``

I've validated the tests on x86_64 and aarch64
2025-04-21 18:53:15 +00:00
Ralf Jung
1e3c5e3c99 use 'unadjusted' ABI for wasm LLVM intrinsics 2025-04-21 17:59:41 +00:00
Alexey Semenyuk
7a4d523200 Fix question_mark suggesting when type is behind Deref include parentheses 2025-04-21 22:25:36 +05:00
Kivooeo
834e476a0c Add diagnostics and suggestions for raw pointer arithmetic assignments 2025-04-21 22:14:44 +05:00
rustbot
b70763e306 Update books 2025-04-21 19:00:50 +02:00
bors
8f2819b0e3 Auto merge of #140122 - ChrisDenton:rollup-qsj6xu0, r=ChrisDenton
Rollup of 8 pull requests

Successful merges:

 - #139946 (fix missing word in comment)
 - #139982 (SystemTime doc tweaks)
 - #140009 (docs(LocalKey<T>): clarify that T's Drop shouldn't panic)
 - #140021 (Don't ICE on pending obligations from deep normalization in a loop)
 - #140029 (Relocate tests in `tests/ui`)
 - #140030 (Fix autodiff debug builds)
 - #140120 (Use `output_base_dir` for `mir_dump_dir`)
 - #140121 (Document why CodeStats::type_sizes is public)

r? `@ghost`
`@rustbot` modify labels: rollup
2025-04-21 16:14:10 +00:00
Chris Denton
77325f5200
Rollup merge of #140121 - blyxyas:code_stats_pub_docs, r=jieyouxu
Document why CodeStats::type_sizes is public

As indicated in [this comment](https://github.com/rust-lang/rust/pull/139876#issuecomment-2808932673) from #139876
> Need some comment, otherwise this pub can be eventually removed as unused.

r? `@nnethercote`
2025-04-21 15:56:00 +00:00
Chris Denton
280aa4ab1a
Rollup merge of #140120 - ChrisDenton:mir-opt-dump-rev, r=jieyouxu
Use `output_base_dir` for `mir_dump_dir`

It just occurred to me that the problem might be due to multiple revisions using the same dump directory (and therefore deleting the other revision's dir). This fixes that by simply using the normal per-test output directory, which is revision safe.
2025-04-21 15:55:59 +00:00
Chris Denton
c43b82f576
Rollup merge of #140030 - EnzymeAD:autodiff-debug, r=jieyouxu
Fix autodiff debug builds

r? `@oli-obk`

closes: #139704

Tracking:

- https://github.com/rust-lang/rust/issues/124509
2025-04-21 15:55:59 +00:00
Chris Denton
f8c67c6d15
Rollup merge of #140029 - reddevilmidzy:move-test, r=jieyouxu
Relocate tests in `tests/ui`

Part of #133895

Moved tests from a top-level directory into a more appropriate subdirectory.
If there is anything else that could be improved, please let me know!

r? jieyouxu
2025-04-21 15:55:58 +00:00
Chris Denton
f79eef91df
Rollup merge of #140021 - compiler-errors:no-deep-norm-ice, r=lcnr
Don't ICE on pending obligations from deep normalization in a loop

See the comment I left inline in `compiler/rustc_trait_selection/src/traits/normalize.rs`.

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

r? lcnr
2025-04-21 15:55:58 +00:00
Chris Denton
24bd5649b1
Rollup merge of #140009 - ShE3py:tls-abort, r=thomcc
docs(LocalKey<T>): clarify that T's Drop shouldn't panic

Clarify that should a TLS destructor panics, the process will abort.

Also, an abort may be obfuscated as the process can be terminated with `SIGSEGV` or [`STATUS_STACK_BUFFER_OVERRUN`](https://devblogs.microsoft.com/oldnewthing/20190108-00/?p=100655) (i.e., `SIGABRT` is not guaranteed), so explicitly prints that the process was aborted.

Context:
https://users.rust-lang.org/t/status-stack-buffer-overrun-on-windows-without-any-usage-of-unsafe/128417

``@rustbot`` label -T-compiler
2025-04-21 15:55:57 +00:00
Chris Denton
10e17dc3a4
Rollup merge of #139982 - coolreader18:time-doc-tweak, r=jhpratt
SystemTime doc tweaks

* Change the `UNIX_EPOCH` link in the `SystemTime` docs to point to the associated constant, not the module level constant. The former seems to be the recommended way to access it, since aiui the only reason the module constant exists in the first place is that associated constants weren't stable yet at the time.
* Reword the comment in the `SystemTime` example - "an error occurred!" is a tad misleading; I feel like it implies a system error out of our control while `SystemTimeError` is more of a logic error.

I was originally just gonna do the first thing but I noticed the second and figured I may as well.

I'm also somewhat surprised that there aren't more in-depth module level docs for `std::time`; they don't even mention `SystemTime` at all. I might make another PR for that but mainly just wanted to flag it.
2025-04-21 15:55:57 +00:00
Chris Denton
6925d2ff22
Rollup merge of #139946 - mumbleskates:any-fix-missing-word, r=jhpratt
fix missing word in comment

a very simple fix, rectifying a situation in which a word was accidentally .
2025-04-21 15:55:56 +00:00
blyxyas
619ed1540a Document why CodeStats::type_sizes is public 2025-04-21 17:36:36 +02:00
bjorn3
de372d3fff Update to Cranelift 0.119 2025-04-21 15:24:18 +00:00
Chris Denton
5e202a3c71
Use output dir for mir_dump_dir 2025-04-21 15:18:39 +00:00
Lukas Wirth
4a5ec88596
Merge pull request #19655 from Veykril/push-kunlloxnyksr
refactor: Fold hygiene map into bindings themselves
2025-04-21 15:04:24 +00:00
Lukas Wirth
832f70fa1f refactor: Fold hygiene map into bindings themselves
`HygieneId` fits into `Binding`'s padding.
2025-04-21 16:53:06 +02:00
Tamir Duberstein
aedbd2d1ec
Replace colon with parentheses, add missing period 2025-04-21 10:48:46 -04:00
Timo
083ea7e6c4
manual_ok_err: don't lint subpatterns (#14661)
Fixes https://github.com/rust-lang/rust-clippy/issues/14660

changelog: none
2025-04-21 14:47:02 +00:00
Timo
cc00c77607
Replace interning of string literals with preinterned symbols (#14650)
On
8ddf3676d1
it's a slight improvement

```
$ hyperfine -w 2 -r 100 -p 'touch src/cargo/lib.rs' 'cargo +master clippy' 'cargo +preintern clippy'
Benchmark 1: cargo +master clippy
  Time (mean ± σ):      6.908 s ±  0.063 s    [User: 6.134 s, System: 0.690 s]
  Range (min … max):    6.757 s …  7.045 s    100 runs

Benchmark 2: cargo +preintern clippy
  Time (mean ± σ):      6.815 s ±  0.065 s    [User: 6.039 s, System: 0.692 s]
  Range (min … max):    6.653 s …  6.968 s    100 runs

Summary
  cargo +preintern clippy ran
    1.01 ± 0.01 times faster than cargo +master clippy
```

Part 1 of removing `Symbol <-> str` conversions

changelog: none
2025-04-21 14:38:52 +00:00
dianqk
5881b7c68b
mir-opt: execute MatchBranchSimplification after GVN
This can provide more opportunities for MatchBranchSimplification.
2025-04-21 21:46:44 +08:00
dswij
f829f8cd5b
Make borrow_as_ptr flag implicit casts as well (#14408)
While I like replacing `&x` by `&raw const x` and `&mut x` by `&raw mut
x`, I'm less sure I like the suggested reborrows such as `&raw const
*p`. There was one in Clippy sources, see the PR diff.

@RalfJung, any opinion on this?

Fix #14406

changelog: [`borrow_as_ptr`]: lint implicit casts as well
2025-04-21 12:38:11 +00:00
Lukas Wirth
b6eb883b1f
Merge pull request #19644 from ChayimFriedman2/const-syms
internal: Make predefined symbols `const` instead of `static`
2025-04-21 12:34:59 +00:00
Lukas Wirth
d7ddec67f2
Merge pull request #19604 from WtzLAS/fix-issue-19601
Add semicolon to use
2025-04-21 12:34:07 +00:00
Lukas Wirth
af324f248c
Merge pull request #19629 from jyn514/unset-env
allow using `null` to unset an environment variable
2025-04-21 12:22:26 +00:00
Lukas Wirth
3fc93c0c27
Merge pull request #19643 from ChayimFriedman2/generic-const-items
feat: Parse generic consts
2025-04-21 12:17:08 +00:00
Jonathan Gruner
2039b36f90 cleanup redundant pattern instances 2025-04-21 14:15:32 +02:00
bors
c8f9423028 Auto merge of #139727 - rust-lang:cargo_update, r=Mark-Simulacrum
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 bstr v1.11.3 -> v1.12.0
    Updating clap v4.5.35 -> v4.5.36
    Updating clap_builder v4.5.35 -> v4.5.36
    Updating crossbeam-channel v0.5.14 -> v0.5.15
    Updating jiff v0.2.5 -> v0.2.6
    Updating jiff-static v0.2.5 -> v0.2.6
    Updating jsonpath-rust v1.0.0 -> v1.0.1
    Updating linux-raw-sys v0.9.3 -> v0.9.4
    Updating miniz_oxide v0.8.7 -> v0.8.8
    Updating self_cell v1.1.0 -> v1.2.0
    Updating winnow v0.7.4 -> v0.7.6
note: pass `--verbose` to see 38 unchanged dependencies behind latest

library dependencies:
     Locking 1 package to latest compatible version
    Updating miniz_oxide v0.8.7 -> v0.8.8
note: pass `--verbose` to see 4 unchanged dependencies behind latest

rustbook dependencies:
     Locking 9 packages to latest compatible versions
    Updating bstr v1.11.3 -> v1.12.0
    Updating cc v1.2.18 -> v1.2.19
    Updating clap v4.5.35 -> v4.5.36
    Updating clap_builder v4.5.35 -> v4.5.36
    Updating jiff v0.2.5 -> v0.2.6
    Updating jiff-static v0.2.5 -> v0.2.6
    Updating linux-raw-sys v0.9.3 -> v0.9.4
    Updating miniz_oxide v0.8.7 -> v0.8.8
    Updating winnow v0.7.4 -> v0.7.6
```
2025-04-21 12:07:02 +00:00
Lukas Wirth
3310726864
Merge pull request #19653 from Veykril/push-lmrprywtztzt
feat: parse `super let`
2025-04-21 11:58:36 +00:00
Lukas Wirth
ade6329dcd
Merge pull request #19651 from roife/enhance-notable-trait-render
minor: simplify and enhance notable traits rendering
2025-04-21 11:48:43 +00:00
Lukas Wirth
7ff957818c
Merge pull request #19634 from Veykril/push-mnpmxxrprymo
feat: Allow unsetting env vars in `server.extraEnv` config
2025-04-21 11:48:41 +00:00
Lukas Wirth
fb5d3c36cd feat: parse super let 2025-04-21 13:47:42 +02:00
roifewu
d47fdc11fa minor: simplify and enhance notable traits rendering 2025-04-21 19:03:35 +08:00
bjorn3
91114bd289 Fix rustc test suite 2025-04-21 10:48:40 +00:00
bjorn3
4cfecfdfa6 Rustup to rustc 1.88.0-nightly (b8c54d635 2025-04-20) 2025-04-21 10:37:10 +00:00
bjorn3
934931b079 Sync from rust b8c54d6358 2025-04-21 10:21:28 +00:00