Commit Graph

7152 Commits

Author SHA1 Message Date
Jubilee Young
c147805a6a library: outline VaList into ffi::va_list
and reexport
2024-07-04 20:34:37 -07:00
bors
51917ba8f2 Auto merge of #126171 - RalfJung:simd_bitmask_multibyte, r=workingjubilee
simd_bitmask intrinsic: add a non-power-of-2 multi-byte example

r? `@calebzulawski` `@workingjubilee`
2024-07-05 01:58:22 +00:00
Celina G. Val
f27023ad8d Document safety of a few intrinsics 2024-07-04 14:04:11 -07:00
Celina G. Val
52fb17a256 Move a few intrinsics to use Rust abi
Move a few more intrinsic functions to the convention added in #121192
where they have Rust abi but are tagged with `rustc_intrinsic`.
2024-07-04 14:04:06 -07:00
Bennet Bleßmann
eb799cf634 mark can_not_overflow as #[rustc_const_stable(...)]
see https://github.com/rust-lang/rust/pull/124941#discussion_r1664676739
2024-07-04 21:27:51 +02:00
Skgland
c90b6b8d29 stabilize const_int_from_str 2024-07-04 21:27:51 +02:00
mu001999
0adb82528f Improve dead code analysis 2024-07-04 22:05:00 +08:00
Ralf Jung
9ba492f279 also remove redundant requirements from offset() 2024-07-04 14:14:18 +02:00
Ralf Jung
273d253ce6 offset_from: "the difference must fit in an isize" is a corollary
also, isize::MIN is an impossible distance
2024-07-04 14:12:23 +02:00
cuishuang
b50e915578 chore: remove repeat words
Signed-off-by: cuishuang <imcusg@gmail.com>
2024-07-04 14:56:08 +08:00
bors
f6fa358a18 Auto merge of #127226 - mat-1:optimize-siphash-round, r=nnethercote
Optimize SipHash by reordering compress instructions

This PR optimizes hashing by changing the order of instructions in the sip.rs `compress` macro so the CPU can parallelize it better. The new order is taken directly from Fig 2.1 in [the SipHash paper](https://eprint.iacr.org/2012/351.pdf) (but with the xors moved which makes it a little faster). I attempted to optimize it some more after this, but I think this might be the optimal instruction order. Note that this shouldn't change the behavior of hashing at all, only statements that don't depend on each other were reordered.

It appears like the current order hasn't changed since its [original implementation from 2012](fada46c421 (diff-b751133c229259d7099bbbc7835324e5504b91ab1aded9464f0c48cd22e5e420R35)) which doesn't look like it was written with data dependencies in mind.

Running `./x bench library/core --stage 0 --test-args hash` before and after this change shows the following results:

Before:
```
benchmarks:
    hash::sip::bench_bytes_4             7.20/iter +/- 0.70
    hash::sip::bench_bytes_7             9.01/iter +/- 0.35
    hash::sip::bench_bytes_8             8.12/iter +/- 0.10
    hash::sip::bench_bytes_a_16         10.07/iter +/- 0.44
    hash::sip::bench_bytes_b_32         13.46/iter +/- 0.71
    hash::sip::bench_bytes_c_128        37.75/iter +/- 0.48
    hash::sip::bench_long_str          121.18/iter +/- 3.01
    hash::sip::bench_str_of_8_bytes     11.20/iter +/- 0.25
    hash::sip::bench_str_over_8_bytes   11.20/iter +/- 0.26
    hash::sip::bench_str_under_8_bytes   9.89/iter +/- 0.59
    hash::sip::bench_u32                 9.57/iter +/- 0.44
    hash::sip::bench_u32_keyed           6.97/iter +/- 0.10
    hash::sip::bench_u64                 8.63/iter +/- 0.07
```
After:
```
benchmarks:
    hash::sip::bench_bytes_4             6.64/iter +/- 0.14
    hash::sip::bench_bytes_7             8.19/iter +/- 0.07
    hash::sip::bench_bytes_8             8.59/iter +/- 0.68
    hash::sip::bench_bytes_a_16          9.73/iter +/- 0.49
    hash::sip::bench_bytes_b_32         12.70/iter +/- 0.06
    hash::sip::bench_bytes_c_128        32.38/iter +/- 0.20
    hash::sip::bench_long_str          102.99/iter +/- 0.82
    hash::sip::bench_str_of_8_bytes     10.71/iter +/- 0.21
    hash::sip::bench_str_over_8_bytes   11.73/iter +/- 0.17
    hash::sip::bench_str_under_8_bytes  10.33/iter +/- 0.41
    hash::sip::bench_u32                10.41/iter +/- 0.29
    hash::sip::bench_u32_keyed           9.50/iter +/- 0.30
    hash::sip::bench_u64                 8.44/iter +/- 1.09
```
I ran this on my computer so there's some noise, but you can tell at least `bench_long_str` is significantly faster (~18%).

Also, I noticed the same compress function from the library is used in the compiler as well, so I took the liberty of copy-pasting this change to there as well.

Thanks `@semisol` for porting SipHash for another project which led me to notice this issue in Rust, and for helping investigate. <3
2024-07-04 04:03:45 +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
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
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
Nick Fitzgerald
91af6b5122 Add edge-case examples to {count,leading,trailing}_{ones,zeros} methods
Some architectures (i386) do not define a "count leading zeros" instruction,
they define a "find first set bit" instruction (`bsf`) whose result is undefined
when given zero (ie none of the bits are set). Of this family of bitwise
operations, I always forget which of these things is potentially undefined for
zero, and I'm also not 100% sure that Rust provides a hard guarantee for the
results of these methods when given zero. So I figured there are others who have
these same uncertainties, and it would be good to resolve them and answer the
question via extending these doc examples/tests.

See https://en.wikipedia.org/wiki/Find_first_set#Hardware_support for more info
on i386 and `bsf` on zero.
2024-07-02 15:00:09 -07:00
Matthias Krüger
a10c231118 Rollup merge of #127230 - hattizai:patch01, r=saethlin
chore: remove duplicate words

remove duplicate words in comments to improve readability.
2024-07-02 17:47:50 +02:00
hattizai
ada9fda7c3 chore: remove duplicate words 2024-07-02 11:25:31 +08:00
mat
16fc41cedc Optimize SipHash by reordering compress instructions 2024-07-01 22:36:40 +00:00
Guillaume Gomez
f5810c4a51 Rollup merge of #127128 - elomatreb:elomatreb/stabilize-duration_abs_diff, r=joboet
Stabilize `duration_abs_diff`

Stabilize `duration_abs_diff` following FCP in #117618. Closes #117618.
2024-07-01 20:29:58 +02:00
Guillaume Gomez
61db24d15d Rollup merge of #126732 - StackOverflowExcept1on:master, r=m-ou-se
Stabilize `PanicInfo::message()` and `PanicMessage`

Resolves #66745

This stabilizes the [`PanicInfo::message()`](https://doc.rust-lang.org/nightly/core/panic/struct.PanicInfo.html#method.message) and [`PanicMessage`](https://doc.rust-lang.org/nightly/core/panic/struct.PanicMessage.html).

Demonstration of [custom panic handler](https://github.com/StackOverflowExcept1on/panicker):
```rust
#![no_std]
#![no_main]

extern crate libc;

#[no_mangle]
extern "C" fn main() -> libc::c_int {
    panic!("I just panic every time");
}

#[panic_handler]
fn my_panic(panic_info: &core::panic::PanicInfo) -> ! {
    use arrayvec::ArrayString;
    use core::fmt::Write;

    let message = panic_info.message();
    let location = panic_info.location().unwrap();

    let mut debug_msg = ArrayString::<1024>::new();
    let _ = write!(&mut debug_msg, "panicked with '{message}' at '{location}'");

    if debug_msg.try_push_str("\0").is_ok() {
        unsafe {
            libc::puts(debug_msg.as_ptr() as *const _);
        }
    }

    unsafe { libc::exit(libc::EXIT_FAILURE) }
}
```
```
$ cargo +stage1 run --release
panicked with 'I just panic every time' at 'src/main.rs:8:5'
```

- [x] FCP: https://github.com/rust-lang/rust/issues/66745#issuecomment-2198143725

r? libs-api
2024-07-01 20:29:55 +02:00
dimi
860729ea39 Stabilize atomic_bool_fetch_not 2024-07-01 14:14:22 +02:00
Matthias Krüger
c9276ad27d Rollup merge of #127182 - danielhuang:patch-4, r=Nilstrieb
Fix error in documentation for IpAddr::to_canonical and Ipv6Addr::to_canonical
2024-07-01 08:53:08 +02:00
bors
b8d7dd8d69 Auto merge of #127026 - Urgau:cleanup-bootstrap-check-cfg, r=Kobzol
Cleanup bootstrap check-cfg

This PR cleanup many custom `check-cfg` in bootstrap that have been accumulated over the years.

As well as updating some outdated comments.
2024-06-30 22:27:29 +00:00
Daniel Huang
af3d7f869b Update ip_addr.rs 2024-06-30 14:54:05 -04:00
Trevor Gross
69446e301c Print TypeId as hex for debugging
In <https://github.com/rust-lang/rust/pull/127134>, the `Debug` impl for
`TypeId` was changed to print a single integer rather than a tuple.
Change this again to print as hex for more concise and consistent
formatting, as was suggested.

Result:

    TypeId(0x1378bb1c0a0202683eb65e7c11f2e4d7)
2024-06-30 13:36:44 -04:00
Matthias Krüger
7a43417c36 Rollup merge of #127069 - Sky9x:fmt-pointer-use-addr, r=Nilstrieb
small correction to fmt::Pointer impl

~~The `addr` method does not require `T: Sized`, and is preferred for use over `expose_provenance`.~~
`expose_provenance` does not require `T: Sized`.
2024-06-30 18:25:34 +02:00
Matthias Krüger
5f43a89815 Rollup merge of #126895 - betelgeuse:improve_simd_gather_documentation, r=Amanieu
Fix simd_gather documentation

There is no idx in the function signature.
2024-06-30 18:25:32 +02:00
Matthias Krüger
f2c287f744 Rollup merge of #127134 - tgross35:typeid-debug, r=Nilstrieb
Print `TypeId` as a `u128` for `Debug`

Since <https://github.com/rust-lang/rust/pull/121358>, `TypeId` is represented as a `(u64, u64)`. This also made the debug implementation a lot larger, which is especially apparent with pretty formatting.

Change this to convert the inner value back to a `u128` and then print as a tuple struct to make this less noisy.

Current:

    TypeId { t: (1403077013027291752, 4518903163082958039) }
    TypeId {
        t: (
            1403077013027291752,
            4518903163082958039,
        ),
    }

New:

    TypeId(25882202575019293479932656973818029271)
    TypeId(
        25882202575019293479932656973818029271,
    )
2024-06-30 10:39:48 +02:00
Matthias Krüger
fe1f83ccd7 Rollup merge of #126906 - GrigorenkoPV:fixme-split_at_first, r=Mark-Simulacrum
Small fixme in core now that split_first has no codegen issues

https://github.com/rust-lang/rust/issues/109328#issuecomment-1677366881

BTW, I have a crate implementing exactly this kind of an iterator: https://github.com/GrigorenkoPV/head-tail-iter and I was wondering if it would be worthwhile to try and make an ACP for it to get it included in std (or maybe itertools). My only doubt is that it kinda incentives writing O(n^2) algorithms and is not the hard to replace with a `while let` loop (just as in this PR).
2024-06-30 10:39:47 +02:00
Matthias Krüger
b2d46036c5 Rollup merge of #126705 - safinaskar:panic, r=Mark-Simulacrum
Updated docs on `#[panic_handler]` in `library/core/src/lib.rs`
2024-06-30 10:39:46 +02:00
bors
716752ebe6 Auto merge of #127133 - matthiaskrgr:rollup-jxkp3yf, r=matthiaskrgr
Rollup of 9 pull requests

Successful merges:

 - #123237 (Various rustc_codegen_ssa cleanups)
 - #126960 (Improve error message in tidy)
 - #127002 (Implement `x perf` as a separate tool)
 - #127081 (Add a run-make test that LLD is not being used by default on the x64 beta/stable channel)
 - #127106 (Improve unsafe extern blocks diagnostics)
 - #127110 (Fix a error suggestion for E0121 when using placeholder _ as return types on function signature.)
 - #127114 (fix: prefer `(*p).clone` to `p.clone` if the `p` is a raw pointer)
 - #127118 (Show `used attribute`'s kind for user when find it isn't applied to a `static` variable.)
 - #127122 (Remove uneccessary condition in `div_ceil`)

r? `@ghost`
`@rustbot` modify labels: rollup
2024-06-30 02:20:01 +00:00
Trevor Gross
682e7c1174 Print TypeId as a u128 for Debug
Since <https://github.com/rust-lang/rust/pull/121358>, `TypeId` is
represented as a `(u64, u64)`. This also made the debug implementation a
lot larger, which is especially apparent with pretty formatting.

Make this less noisy by converting the inner value back to a `u128` then
printing as a tuple struct.

Current:

    TypeId { t: (1403077013027291752, 4518903163082958039) }
    TypeId {
        t: (
            1403077013027291752,
            4518903163082958039,
        ),
    }

New:

    TypeId(25882202575019293479932656973818029271)
    TypeId(
        25882202575019293479932656973818029271,
    )
2024-06-29 16:39:48 -04:00
Matthias Krüger
c79e08d3a6 Rollup merge of #127122 - TDecking:div_ceil, r=Nilstrieb
Remove uneccessary condition in `div_ceil`

Previously, `div_ceil` for unsigned integers had a `rhs > 0` for rounding. That condition however is always fulfilled, since `rhs == 0` would mean a division by zero earlier.
2024-06-29 22:10:59 +02:00
bors
ba1d7f4a08 Auto merge of #120639 - fee1-dead-contrib:new-effects-desugaring, r=oli-obk
Implement new effects desugaring

cc `@rust-lang/project-const-traits.` Will write down notes once I have finished.

* [x] See if we want `T: Tr` to desugar into `T: Tr, T::Effects: Compat<true>`
* [x] Fix ICEs on `type Assoc: ~const Tr` and `type Assoc<T: ~const Tr>`
* [ ] add types and traits to minicore test
* [ ] update rustc-dev-guide

Fixes #119717
Fixes #123664
Fixes #124857
Fixes #126148
2024-06-29 20:08:10 +00:00
Ole Bertram
7f383d098a Stabilize duration_abs_diff 2024-06-29 21:03:12 +02:00
Sky
35f209361f small correction to fmt::Pointer impl
the `expose_provenance` method does not require `T: Sized`
2024-06-29 10:33:45 -04:00
Tobias Decking
5dece2b2bd Remove uneccessary condition in div_ceil 2024-06-29 15:08:59 +02:00
Askar Safin
28ba5e4124 Updated docs on #[panic_handler] in library/core/src/lib.rs 2024-06-29 15:59:52 +03:00
Guillaume Gomez
0886faaeea Rollup merge of #127073 - Sky9x:unnecessary-seqcst, r=Nilstrieb
Remove unnecessary SeqCst in `impl fmt::Pointer for AtomicPtr`

Unnecessarily strict ordering.
2024-06-29 14:07:22 +02:00
Guillaume Gomez
e9594b504d Rollup merge of #127072 - Sky9x:docs-includes-vs-does-include, r=scottmcm
docs: say "includes" instead of "does include"

Provides more visual difference between the negative ("does not include") and the positive ("includes"). Both phrases have the same meaning.
2024-06-29 14:07:22 +02:00
Matthias Krüger
69996b5ac7 Rollup merge of #127071 - Sky9x:remove-ptr-to-from-bits, r=scottmcm
Remove (deprecated & unstable) {to,from}_bits pointer methods

These unstable methods have been deprecated for more than a year (since #95583). Remove them.

See https://github.com/rust-lang/rust/issues/91126#issuecomment-1835796457 and https://github.com/rust-lang/rust/pull/110441/files#r1169574509.

Closes #91126.

r? `@scottmcm`
2024-06-28 22:04:20 +02:00
Matthias Krüger
6499b9c340 Rollup merge of #127070 - Sky9x:unit-const-param-ty, r=BoxyUwU
add () to the marker_impls macro for ConstParamTy

Seems to have escaped bootstrap
2024-06-28 22:04:19 +02:00
Matthias Krüger
afde8485df Rollup merge of #127055 - shepmaster:hash-finish-must-use, r=dtolnay
Mark Hasher::finish as #[must_use]
2024-06-28 22:04:18 +02:00
Deadbeef
65a0bee0b7 address review comments 2024-06-28 15:44:20 +00:00
Deadbeef
0a2330630d general fixups and turn TODOs into FIXMEs 2024-06-28 10:57:35 +00:00
Deadbeef
c7d27a15d0 Implement Min trait in new solver 2024-06-28 10:57:35 +00:00
Deadbeef
72e8244e64 implement new effects desugaring 2024-06-28 10:57:35 +00:00
Matthias Krüger
c4d0c08925 Rollup merge of #126956 - joboet:fmt_no_extern_ty, r=RalfJung
core: avoid `extern type`s in formatting infrastructure

```@RalfJung``` [said](https://rust-lang.zulipchat.com/#narrow/stream/219381-t-libs/topic/Use.20of.20.60extern.20type.60.20in.20formatting.20machinery/near/446552837):

>How attached are y'all to using `extern type` in the formatting machinery?
Seems like this was introduced a [long time ago](34ef8f5441). However, it's also [not really compatible with Stacked Borrows](https://github.com/rust-lang/unsafe-code-guidelines/issues/256), and only works currently because we effectively treat references-to-extern-type almost like raw pointers in Stacked Borrows -- which of course is unsound, it's not how LLVM works. I was planning to make Miri emit a warning when this happens to avoid cases like [this](https://github.com/rust-lang/rust/issues/126814#issuecomment-2183816373) where people use extern type specifically to silence Miri without realizing what happens. but with the formatting machinery using  extern type, this warning would just show up everywhere...
>
> The "proper" way to do this in Stacked Borrows is to use raw pointers (or `NonNull`).

This PR does just that.

r? ```@RalfJung```
2024-06-28 08:34:08 +02:00
Sky
df7331fcd2 Remove unnecessary SeqCst in impl fmt::Pointer for AtomicPtr 2024-06-28 00:20:35 -04:00
Sky
9bbf3d9805 docs: say "includes" instead of "does include" 2024-06-28 00:01:32 -04:00