Commit Graph

264592 Commits

Author SHA1 Message Date
Nicholas Nethercote ac7a293336 Avoid repeated interning in `SelfArgVisitor`. 2024-08-30 13:35:41 +10:00
Nicholas Nethercote 8541b0f1f3 Use `let`/`else` to reduce some indentation. 2024-08-30 10:30:57 +10:00
Nicholas Nethercote 243109e006 Remove an unnecessary `continue`. 2024-08-30 10:30:57 +10:00
Nicholas Nethercote 590a02173b Factor out some repetitive code. 2024-08-30 10:30:57 +10:00
Nicholas Nethercote 408481f4d8 Remove some unnecessary constants.
These are just renamings of `CoroutineArgs` constants.
2024-08-30 10:30:57 +10:00
Nicholas Nethercote d7cb1181dc Merge `DerefArgVisitor` and `PinArgVisitor`.
They are almost identical, differing only in the `ProjectionElem` they
insert. This commit merges them into a new type `SelfArgVisitor`.
2024-08-30 10:30:57 +10:00
Nicholas Nethercote 5331280a2b Merge some `if`s.
For more concise code.
2024-08-30 10:30:57 +10:00
Nicholas Nethercote 3b6af9a451 Use a local variable. 2024-08-30 10:30:57 +10:00
Nicholas Nethercote 66b3585145 Simplify a pattern. 2024-08-30 10:30:57 +10:00
Nicholas Nethercote 2932e097f4 Simplify creation of a set. 2024-08-30 10:30:57 +10:00
Nicholas Nethercote fda52b8f63 Simplify a provider definition. 2024-08-30 10:30:57 +10:00
Nicholas Nethercote 016a709b24 Condense `use rustc_*` declarations.
No reason to have two of them listed separately, after modules.
2024-08-30 10:30:56 +10:00
Nicholas Nethercote 016a2e30a9 Remove unused features. 2024-08-30 10:30:56 +10:00
bors 0d634185df Auto merge of #129750 - GuillaumeGomez:rollup-gphsb7y, r=GuillaumeGomez
Rollup of 7 pull requests

Successful merges:

 - #123940 (debug-fmt-detail option)
 - #128166 (Improved `checked_isqrt` and `isqrt` methods)
 - #128970 (Add `-Zlint-llvm-ir`)
 - #129316 (riscv64imac: allow shadow call stack sanitizer)
 - #129690 (Add `needs-unwind` compiletest directive to `libtest-thread-limit` and replace some `Path` with `path` in `run-make`)
 - #129732 (Add `unreachable_pub`, round 3)
 - #129743 (Fix rustdoc clippy lints)

r? `@ghost`
`@rustbot` modify labels: rollup
2024-08-29 20:45:00 +00:00
bors 784d444733 Auto merge of #129714 - saethlin:half-a-recursion, r=compiler-errors
Use a reduced recursion limit in the MIR inliner's cycle breaker

This probably papers over https://github.com/rust-lang/rust/issues/128887, but primarily I'm opening this PR because multiple compiler people have thought about making this change which probably means it's a good idea.

r? compiler-errors
2024-08-29 16:15:41 +00:00
Guillaume Gomez 9c7ae1d4d8
Rollup merge of #129743 - GuillaumeGomez:fix-rustdoc-clippy, r=notriddle
Fix rustdoc clippy lints

Ran clippy on rustdoc and fixed the errors.

r? `@notriddle`
2024-08-29 16:21:50 +02:00
Guillaume Gomez 7e23a44495
Rollup merge of #129732 - nnethercote:unreachable_pub-3, r=Urgau
Add `unreachable_pub`, round 3

A follow-up to #129648.

r? `@Urgau`
2024-08-29 16:21:49 +02:00
Guillaume Gomez 7dc2caba7b
Rollup merge of #129690 - Oneirical:run-make-tidbits, r=jieyouxu
Add `needs-unwind` compiletest directive to `libtest-thread-limit` and replace some `Path` with `path` in `run-make`

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

This PR does two things:

1. Add this to `libtest-thread-limit` ([Why?](https://github.com/rust-lang/rust/pull/128507#issuecomment-2315158014))
```
//@ needs-unwind
// Reason: this should be ignored in cg_clif (Cranelift) CI and anywhere
// else that uses panic=abort.
```

2. Use `path` instead of `Path` to simplify multiple run-make tests.
2024-08-29 16:21:48 +02:00
Guillaume Gomez a65404aba4
Rollup merge of #129316 - dingxiangfei2009:riscv64-imac-scs, r=nnethercote
riscv64imac: allow shadow call stack sanitizer

cc `@Darksonn` for shadow call stack sanitizer support on RV64IMAC and RV64GC
2024-08-29 16:21:47 +02:00
Guillaume Gomez d5c40d03dc
Rollup merge of #128970 - DianQK:lint-llvm-ir, r=nikic
Add `-Zlint-llvm-ir`

This flag is similar to `-Zverify-llvm-ir` and allows us to lint the generated IR.

r? compiler
2024-08-29 16:21:47 +02:00
Guillaume Gomez 4b08b2e400
Rollup merge of #128166 - ChaiTRex:isqrt, r=tgross35
Improved `checked_isqrt` and `isqrt` methods

### Improved tests of `isqrt` and `checked_isqrt` implementations

* Inputs chosen more thoroughly and systematically.
* Checks that `isqrt` and `checked_isqrt` have equivalent results for signed types, either equivalent numerically or equivalent as a panic and a `None`.
* Checks that `isqrt` has numerically-equivalent results for unsigned types and their `NonZero` counterparts.

### Added benchmarks for `isqrt` implementations

### Greatly sped up `checked_isqrt` and `isqrt` methods

* Uses a lookup table for 8-bit integers and then the Karatsuba square root algorithm for larger integers.
* Includes optimization hints that give the compiler the exact numeric range of results.

### Feature tracking issue

`isqrt` is an unstable feature tracked at #116226.

<details><summary>Benchmarked improvements</summary>

### Command used to benchmark

    ./x bench library/core -- int_sqrt

### Before

    benchmarks:
        num::int_sqrt::i128::isqrt           439591.65/iter  +/- 6652.70
        num::int_sqrt::i16::isqrt              5302.97/iter   +/- 160.93
        num::int_sqrt::i32::isqrt             62999.11/iter  +/- 2022.05
        num::int_sqrt::i64::isqrt            125248.81/iter  +/- 1674.43
        num::int_sqrt::i8::isqrt                123.56/iter     +/- 1.87
        num::int_sqrt::isize::isqrt          125356.56/iter  +/- 1017.03
        num::int_sqrt::non_zero_u128::isqrt  437443.75/iter  +/- 3535.43
        num::int_sqrt::non_zero_u16::isqrt     8604.58/iter    +/- 94.76
        num::int_sqrt::non_zero_u32::isqrt    62933.33/iter   +/- 517.30
        num::int_sqrt::non_zero_u64::isqrt   125076.38/iter +/- 11340.61
        num::int_sqrt::non_zero_u8::isqrt       221.51/iter     +/- 1.58
        num::int_sqrt::non_zero_usize::isqrt 136005.21/iter  +/- 2020.35
        num::int_sqrt::u128::isqrt           439014.55/iter  +/- 3920.45
        num::int_sqrt::u16::isqrt              8575.08/iter   +/- 148.06
        num::int_sqrt::u32::isqrt             63008.89/iter   +/- 803.67
        num::int_sqrt::u64::isqrt            125088.09/iter   +/- 879.29
        num::int_sqrt::u8::isqrt                230.18/iter     +/- 2.04
        num::int_sqrt::usize::isqrt          125237.51/iter  +/- 4747.83
### After

    benchmarks:
        num::int_sqrt::i128::isqrt           105184.89/iter +/- 1171.38
        num::int_sqrt::i16::isqrt              1910.26/iter   +/- 78.50
        num::int_sqrt::i32::isqrt             34260.34/iter  +/- 960.84
        num::int_sqrt::i64::isqrt             45939.19/iter +/- 2525.65
        num::int_sqrt::i8::isqrt                 22.87/iter    +/- 0.45
        num::int_sqrt::isize::isqrt           45884.17/iter  +/- 595.49
        num::int_sqrt::non_zero_u128::isqrt  106344.27/iter  +/- 780.99
        num::int_sqrt::non_zero_u16::isqrt     2790.19/iter   +/- 53.43
        num::int_sqrt::non_zero_u32::isqrt    33613.99/iter  +/- 362.96
        num::int_sqrt::non_zero_u64::isqrt    46235.42/iter  +/- 429.69
        num::int_sqrt::non_zero_u8::isqrt        31.78/iter    +/- 0.75
        num::int_sqrt::non_zero_usize::isqrt  46208.75/iter  +/- 375.27
        num::int_sqrt::u128::isqrt           106385.94/iter +/- 1649.95
        num::int_sqrt::u16::isqrt              2747.69/iter   +/- 28.72
        num::int_sqrt::u32::isqrt             33627.09/iter  +/- 475.68
        num::int_sqrt::u64::isqrt             46182.29/iter  +/- 311.16
        num::int_sqrt::u8::isqrt                 33.10/iter    +/- 0.30
        num::int_sqrt::usize::isqrt           46165.00/iter  +/- 388.41

</details>

Tracking Issue for {u8,i8,...}::isqrt #116226

try-job: test-various
2024-08-29 16:21:46 +02:00
Guillaume Gomez 015e9371e0
Rollup merge of #123940 - kornelski:remove-derived-debug, r=Urgau
debug-fmt-detail option

I'd like to propose a new option that makes `#[derive(Debug)]` generate no-op implementations that don't print anything, and makes `{:?}` in format strings a no-op.

There are a couple of motivations for this:

1. A more thorough stripping of debug symbols. Binaries stripped of debug symbols still retain some of them through `Debug` implementations. It's hard to avoid that without compiler's help, because debug formatting can be used in many places, including dependencies, and their loggers, asserts, panics, etc.
   * In my testing it gives about 2% binary size reduction on top of all other binary-minimizing best practices (including `panic_immediate_abort`). There are targets like Web WASM or embedded where users pay attention to binary sizes.
   * Users distributing closed-source binaries may not want to "leak" any symbol names as a matter of principle.
2. Adds ability to test whether code depends on specifics of the `Debug` format implementation in unwise ways (e.g. trying to get data unavailable via public interface, or using it as a serialization format). Because current Rust's debug implementation doesn't change, there's a risk of it becoming a fragile de-facto API that [won't be possible to change in the future](https://www.hyrumslaw.com/). An option that "breaks" it can act as a [grease](https://www.rfc-editor.org/rfc/rfc8701.html).

This implementation is a `-Z fmt-debug=opt` flag that takes:

* `full` — the default, current state.
* `none` — makes derived `Debug` and `{:?}` no-ops. Explicit `impl Debug for T` implementations are left unharmed, but `{:?}` format won't use them, so they may get dead-code eliminated if they aren't invoked directly.
* `shallow` — makes derived `Debug` print only the type's name, without recursing into fields. Fieldless enums print their variant names. `{:?}` works.

The `shallow` option is a compromise between minimizing the `Debug` code, and compatibility. There are popular proc-macro crates that use `Debug::fmt` as a way to convert enum values into their Rust source code.

There's a corresponding `cfg` flag: `#[cfg(fmt_debug = "none")]` that can be used in user code to react to this setting to minimize custom `Debug` implementations or remove unnecessary formatting helper functions.
2024-08-29 16:21:46 +02:00
Oneirical 65cb5deedb Use path instead of Path in some run-make tests 2024-08-29 10:15:17 -04:00
Oneirical da43f95dd3 Add needs-unwind compiletest directive to libtest-thread-limit 2024-08-29 10:13:48 -04:00
Ding Xiang Fei 9c29b33c7e
riscv64imac: allow shadow call stack sanitizer 2024-08-29 21:48:48 +08:00
Nicholas Nethercote 7a71a914f6 Add `warn(unreachable_pub)` to `rustc_resolve`. 2024-08-29 20:18:44 +10:00
Nicholas Nethercote afc58beebe Add `warn(unreachable_pub)` to `rustc_query_system`. 2024-08-29 20:18:44 +10:00
Nicholas Nethercote 2eea2d2cf1 Add `warn(unreachable_pub)` to `rustc_query_impl`. 2024-08-29 20:18:44 +10:00
Nicholas Nethercote 71bffef4f9 Add `warn(unreachable_pub)` to `rustc_privacy`. 2024-08-29 20:18:44 +10:00
Nicholas Nethercote 653ee7bc3a Add `warn(unreachable_pub)` to `rustc_pattern_analysis`. 2024-08-29 20:18:44 +10:00
Nicholas Nethercote f77821203f Add `warn(unreachable_pub)` to `rustc_passes`. 2024-08-29 20:18:40 +10:00
Guillaume Gomez 8683439a20 Fix clippy lints 2024-08-29 12:14:41 +02:00
Nicholas Nethercote 76bd802403 Add `warn(unreachable_pub)` to `rustc_parse_format`. 2024-08-29 20:13:06 +10:00
Nicholas Nethercote cac04a1cb9 Add `warn(unreachable_pub)` to `rustc_parser`. 2024-08-29 20:13:06 +10:00
Nicholas Nethercote 46ea798a94 Add `warn(unreachable_pub)` to `rustc_next_trait_solver`. 2024-08-29 20:13:06 +10:00
Nicholas Nethercote e3062147de Add `warn(unreachable_pub)` to `rustc_monomorphize`. 2024-08-29 20:13:06 +10:00
Nicholas Nethercote 8a8dd3f33e Add `warn(unreachable_pub)` to `rustc_mir_dataflow`. 2024-08-29 20:13:06 +10:00
Nicholas Nethercote c16e2899dc Add `warn(unreachable_pub)` to `rustc_mir_build`. 2024-08-29 20:13:06 +10:00
Nicholas Nethercote 938daf6033 Add `warn(unreachable_pub)` to `rustc_middle`.
I am surprised the diff is so small for this enormous crate.
2024-08-29 20:13:06 +10:00
Nicholas Nethercote 05e07381d0 Add `warn(unreachable_pub)` to `rustc_metadata`. 2024-08-29 20:13:06 +10:00
Nicholas Nethercote 4b92682530 Add `warn(unreachable_pub)` to `rustc_macros`. 2024-08-29 20:13:06 +10:00
DianQK 9589eb95d2
Add `-Zlint-llvm-ir` 2024-08-29 18:12:31 +08:00
Chai T. Rex 7af8e218da Speed up `checked_isqrt` and `isqrt` methods
* Use a lookup table for 8-bit integers and the Karatsuba square root
  algorithm for larger integers.
* Include optimization hints that give the compiler the exact numeric
  range of results.
2024-08-28 23:07:04 -04:00
Chai T. Rex 0cac915211 Improve `isqrt` tests and add benchmarks
* Choose test inputs more thoroughly and systematically.
* Check that `isqrt` and `checked_isqrt` have equivalent results for
  signed types, either equivalent numerically or equivalent as a panic
  and a `None`.
* Check that `isqrt` has numerically-equivalent results for unsigned
  types and their `NonZero` counterparts.
* Reuse `ilog10` benchmarks, plus benchmarks that use a uniform
  distribution.
2024-08-28 23:06:54 -04:00
bors 6cf068db56 Auto merge of #129721 - workingjubilee:rollup-y2o1mnp, r=workingjubilee
Rollup of 14 pull requests

Successful merges:

 - #128192 (rustc_target: Add various aarch64 features)
 - #129170 (Add an ability to convert between `Span` and `visit::Location`)
 - #129343 (Emit specific message for time<=0.3.35)
 - #129378 (Clean up cfg-gating of ProcessPrng extern)
 - #129401 (Partially stabilize `feature(new_uninit)`)
 - #129467 (derive(SmartPointer): assume pointee from the single generic and better error messages)
 - #129494 (format code in tests/ui/threads-sendsync)
 - #129617 (Update books)
 - #129673 (Add fmt::Debug to sync::Weak<T, A>)
 - #129683 (copysign with sign being a NaN can have non-portable results)
 - #129689 (Move `'tcx` lifetime off of impl and onto methods for `CrateMetadataRef`)
 - #129695 (Fix path to run clippy on rustdoc)
 - #129712 (Correct trusty targets to be tier 3)
 - #129715 (Update `compiler_builtins` to `0.1.123`)

r? `@ghost`
`@rustbot` modify labels: rollup
2024-08-29 02:38:32 +00:00
Jubilee bd66fadd79
Rollup merge of #129715 - Amjad50:update-compiler-builtins, r=tgross35
Update `compiler_builtins` to `0.1.123`

Includes https://github.com/rust-lang/compiler-builtins/pull/680 and fixes https://github.com/rust-lang/rust/issues/128386.

Fixed by not including math symbols of `compiler_builtins` into any `unix` target or `wasi`, old behavior is restored

r? tgross35
2024-08-28 19:12:56 -07:00
Jubilee 2ac56db8a2
Rollup merge of #129712 - randomPoison:trusty-tier-3-fix, r=saethlin
Correct trusty targets to be tier 3

The Trusty targets were added in https://github.com/rust-lang/rust/pull/129490, but in that PR I accidentally marked them as tier 2. This PR corrects the target metadata to mark them as tier 3.
2024-08-28 19:12:55 -07:00
Jubilee ac5be35d58
Rollup merge of #129695 - GuillaumeGomez:fix-clippy-rustdoc-path, r=onur-ozkan
Fix path to run clippy on rustdoc

Took me a while to find out that the path clippy expected was `src/tools/rustdoc` and not `src/librustdoc`. I think it makes more sense this way as most commands rely on source paths.

r? ```@Kobzol```
2024-08-28 19:12:55 -07:00
Jubilee 472d164a49
Rollup merge of #129689 - compiler-errors:impl-lifetime, r=michaelwoerister
Move `'tcx` lifetime off of impl and onto methods for `CrateMetadataRef`

Unconstrained type and const variables are not allowed, but unconstrained lifetimes are. This is not very good style, though, and it leads to unnecessary captures of a lifetime in edition 2024 (not that it matters, but it does trigger the edition migration lint).
2024-08-28 19:12:54 -07:00
Jubilee dfe66cf529
Rollup merge of #129683 - RalfJung:copysign, r=thomcc
copysign with sign being a NaN can have non-portable results

Follow-up to https://github.com/rust-lang/rust/pull/129559.
Cc ```@tgross35``` ```@beetrees```

There's no portable variant we can recommend instead here, is there? Something with a semantics like "if `sign` is a NaN, then return `self` unaltered, otherwise return `self` with the sign changed to that of `sign`"?
2024-08-28 19:12:54 -07:00