Skip to content

core: implement float conversion methods - #159954

Merged
rust-bors[bot] merged 1 commit into
rust-lang:mainfrom
valentynkit:float-conversions
Aug 22, 2026
Merged

core: implement float conversion methods#159954
rust-bors[bot] merged 1 commit into
rust-lang:mainfrom
valentynkit:float-conversions

Conversation

@valentynkit

@valentynkit valentynkit commented Jul 26, 2026

Copy link
Copy Markdown
Contributor

Implements the accepted ACP rust-lang/libs-team#810, adding float conversion methods on f16, f32, f64, and f128:

  • cast converts to the target float type (self as Flt, IEEE rounding).
  • to_int_saturating converts to an integer with as semantics: saturating, and NaN to 0.
  • to_int_checked truncates toward zero and returns None on NaN, infinity, or out of range.
  • to_int_strict is to_int_checked().unwrap().

Per the libs-api meetings on the ACP, to_float is named cast and to_int_saturating maps NaN to 0 rather than panicking (which the team noted makes rust-lang/libs-team#831 redundant).

The integer-to-float cast from the ACP is left out: it shares the cast method name on integer types with the integer-to-integer cast in rust-lang/libs-team#811 (being unified with the other integer cast methods in rust-lang/libs-team#833), so it needs a decision on how those fit together. Happy to follow up once that settles.

Tracking issue: #159913

r? libs

@rustbot rustbot added S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. T-libs Relevant to the library team, which will review and decide on the PR/issue. labels Jul 26, 2026
@rust-log-analyzer

This comment has been minimized.

@valentynkit

Copy link
Copy Markdown
Contributor Author

The Codegen Cranelift failure was a pre-existing cg_clif bug in f128 as {i8,i16,u8,u16}, unrelated to this PR.
Reported in #1680 fixed by rust-lang/rustc_codegen_cranelift@29b920534.
Probably need time to sync the fix from latest changes in rustc codegen cranelift?..

@rust-log-analyzer

This comment has been minimized.

@JohnTitor

Copy link
Copy Markdown
Member

Seems still failed, is it synced yet or any other issues happen?

@valentynkit

Copy link
Copy Markdown
Contributor Author

Seems still failed, is it synced yet or any other issues happen?

Not synced yet. The fix is rust-lang/rustc_codegen_cranelift@29b9205 and the last subtree sync was #159712.
So current CI failures, are still because of this bug, when it will be synced it should pass.
I re triggered the CI and expected it to be already synced, but it is not.

@JohnTitor

Copy link
Copy Markdown
Member

Alright, cc @bjorn3 for awareness
marking as blocked until it gets synced.

@JohnTitor JohnTitor added S-blocked Status: Blocked on something else such as an RFC or other implementation work. and removed S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. labels Aug 17, 2026
@rustbot

rustbot commented Aug 21, 2026

Copy link
Copy Markdown
Collaborator

This PR was rebased onto a different main commit. Here's a range-diff highlighting what actually changed.

Rebasing is a normal part of keeping PRs up to date, so no action is needed—this note is just to help reviewers.

@valentynkit

Copy link
Copy Markdown
Contributor Author

@rustbot ready
Unblocked

@rustbot rustbot added S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. and removed S-blocked Status: Blocked on something else such as an RFC or other implementation work. labels Aug 21, 2026

@JohnTitor JohnTitor left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@rust-bors

rust-bors Bot commented Aug 21, 2026

Copy link
Copy Markdown
Contributor

📌 Commit 3c55beb has been approved by JohnTitor

It is now in the queue for this repository.

@rust-bors rust-bors Bot added S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. and removed S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. labels Aug 21, 2026
JonathanBrouwer added a commit to JonathanBrouwer/rust that referenced this pull request Aug 21, 2026
…ohnTitor

core: implement float conversion methods

Implements the accepted ACP rust-lang/libs-team#810, adding float conversion methods on `f16`, `f32`, `f64`, and `f128`:

- `cast` converts to the target float type (`self as Flt`, IEEE rounding).
- `to_int_saturating` converts to an integer with `as` semantics: saturating, and `NaN` to 0.
- `to_int_checked` truncates toward zero and returns `None` on `NaN`, infinity, or out of range.
- `to_int_strict` is `to_int_checked().unwrap()`.

Per the libs-api meetings on the ACP, `to_float` is named `cast` and `to_int_saturating` maps `NaN` to 0 rather than panicking (which the team noted makes rust-lang/libs-team#831 redundant).

The integer-to-float `cast` from the ACP is left out: it shares the `cast` method name on integer types with the integer-to-integer `cast` in rust-lang/libs-team#811 (being unified with the other integer cast methods in rust-lang/libs-team#833), so it needs a decision on how those fit together. Happy to follow up once that settles.

Tracking issue: rust-lang#159913

r? libs
JonathanBrouwer added a commit to JonathanBrouwer/rust that referenced this pull request Aug 22, 2026
…ohnTitor

core: implement float conversion methods

Implements the accepted ACP rust-lang/libs-team#810, adding float conversion methods on `f16`, `f32`, `f64`, and `f128`:

- `cast` converts to the target float type (`self as Flt`, IEEE rounding).
- `to_int_saturating` converts to an integer with `as` semantics: saturating, and `NaN` to 0.
- `to_int_checked` truncates toward zero and returns `None` on `NaN`, infinity, or out of range.
- `to_int_strict` is `to_int_checked().unwrap()`.

Per the libs-api meetings on the ACP, `to_float` is named `cast` and `to_int_saturating` maps `NaN` to 0 rather than panicking (which the team noted makes rust-lang/libs-team#831 redundant).

The integer-to-float `cast` from the ACP is left out: it shares the `cast` method name on integer types with the integer-to-integer `cast` in rust-lang/libs-team#811 (being unified with the other integer cast methods in rust-lang/libs-team#833), so it needs a decision on how those fit together. Happy to follow up once that settles.

Tracking issue: rust-lang#159913

r? libs
rust-bors Bot pushed a commit that referenced this pull request Aug 22, 2026
…uwer

Rollup of 18 pull requests

Successful merges:

 - #151061 (Build rustc and codegen backends with -Zembed-metadata=no)
 - #157949 (Allow self in const generics)
 - #158588 (trait_selection: fix assumptions-on-binders diagnostics)
 - #159954 (core: implement float conversion methods)
 - #160136 (Add `Default` implementation for `std::sync::Once`)
 - #160835 (resolver diagnostics: don't swallow labels and point out  similar items as a note, not a label)
 - #161048 (Improve the ABI between the panic runtime and libstd)
 - #161292 (Add safety comments in alloc::Wtf8)
 - #161444 (Add some `rustc_type_ir` comments)
 - #161465 (Remove leftover immediate creation)
 - #152433 (Use `symlink_dir` to create junctions on Windows instead of trying to use symbolic links in `copy_link_internal`)
 - #159098 (Add Arc/Rc::strong_count_from_raw)
 - #159282 (Update documentation for `-Zdump-dep-graph`)
 - #161401 (Remove fields from TypeKind: Bool, Char, Float and Int)
 - #161431 (bootstrap: (offload) be stricter about selected compiler and paths)
 - #161451 (Avoid arming the Windows TLS destructor guard in fibers)
 - #161463 (Add myself to mailmap)
 - #161476 (Use bitset for locals_with_use_data)

Failed merges:

 - #161443 (add internal DSL for testing binders)
jhpratt added a commit to jhpratt/rust that referenced this pull request Aug 22, 2026
…ohnTitor

core: implement float conversion methods

Implements the accepted ACP rust-lang/libs-team#810, adding float conversion methods on `f16`, `f32`, `f64`, and `f128`:

- `cast` converts to the target float type (`self as Flt`, IEEE rounding).
- `to_int_saturating` converts to an integer with `as` semantics: saturating, and `NaN` to 0.
- `to_int_checked` truncates toward zero and returns `None` on `NaN`, infinity, or out of range.
- `to_int_strict` is `to_int_checked().unwrap()`.

Per the libs-api meetings on the ACP, `to_float` is named `cast` and `to_int_saturating` maps `NaN` to 0 rather than panicking (which the team noted makes rust-lang/libs-team#831 redundant).

The integer-to-float `cast` from the ACP is left out: it shares the `cast` method name on integer types with the integer-to-integer `cast` in rust-lang/libs-team#811 (being unified with the other integer cast methods in rust-lang/libs-team#833), so it needs a decision on how those fit together. Happy to follow up once that settles.

Tracking issue: rust-lang#159913

r? libs
JonathanBrouwer added a commit to JonathanBrouwer/rust that referenced this pull request Aug 22, 2026
…ohnTitor

core: implement float conversion methods

Implements the accepted ACP rust-lang/libs-team#810, adding float conversion methods on `f16`, `f32`, `f64`, and `f128`:

- `cast` converts to the target float type (`self as Flt`, IEEE rounding).
- `to_int_saturating` converts to an integer with `as` semantics: saturating, and `NaN` to 0.
- `to_int_checked` truncates toward zero and returns `None` on `NaN`, infinity, or out of range.
- `to_int_strict` is `to_int_checked().unwrap()`.

Per the libs-api meetings on the ACP, `to_float` is named `cast` and `to_int_saturating` maps `NaN` to 0 rather than panicking (which the team noted makes rust-lang/libs-team#831 redundant).

The integer-to-float `cast` from the ACP is left out: it shares the `cast` method name on integer types with the integer-to-integer `cast` in rust-lang/libs-team#811 (being unified with the other integer cast methods in rust-lang/libs-team#833), so it needs a decision on how those fit together. Happy to follow up once that settles.

Tracking issue: rust-lang#159913

r? libs
JonathanBrouwer added a commit to JonathanBrouwer/rust that referenced this pull request Aug 22, 2026
…ohnTitor

core: implement float conversion methods

Implements the accepted ACP rust-lang/libs-team#810, adding float conversion methods on `f16`, `f32`, `f64`, and `f128`:

- `cast` converts to the target float type (`self as Flt`, IEEE rounding).
- `to_int_saturating` converts to an integer with `as` semantics: saturating, and `NaN` to 0.
- `to_int_checked` truncates toward zero and returns `None` on `NaN`, infinity, or out of range.
- `to_int_strict` is `to_int_checked().unwrap()`.

Per the libs-api meetings on the ACP, `to_float` is named `cast` and `to_int_saturating` maps `NaN` to 0 rather than panicking (which the team noted makes rust-lang/libs-team#831 redundant).

The integer-to-float `cast` from the ACP is left out: it shares the `cast` method name on integer types with the integer-to-integer `cast` in rust-lang/libs-team#811 (being unified with the other integer cast methods in rust-lang/libs-team#833), so it needs a decision on how those fit together. Happy to follow up once that settles.

Tracking issue: rust-lang#159913

r? libs
rust-bors Bot pushed a commit that referenced this pull request Aug 22, 2026
…uwer

Rollup of 19 pull requests

Successful merges:

 - #151061 (Build rustc and codegen backends with -Zembed-metadata=no)
 - #154992 (Error on projection of dyn noncompat type in old trait solver)
 - #157949 (Allow self in const generics)
 - #158588 (trait_selection: fix assumptions-on-binders diagnostics)
 - #159954 (core: implement float conversion methods)
 - #160136 (Add `Default` implementation for `std::sync::Once`)
 - #160835 (resolver diagnostics: don't swallow labels and point out  similar items as a note, not a label)
 - #161048 (Improve the ABI between the panic runtime and libstd)
 - #161292 (Add safety comments in alloc::Wtf8)
 - #161444 (Add some `rustc_type_ir` comments)
 - #161465 (Remove leftover immediate creation)
 - #159098 (Add Arc/Rc::strong_count_from_raw)
 - #159282 (Update documentation for `-Zdump-dep-graph`)
 - #161401 (Remove fields from TypeKind: Bool, Char, Float and Int)
 - #161431 (bootstrap: (offload) be stricter about selected compiler and paths)
 - #161451 (Avoid arming the Windows TLS destructor guard in fibers)
 - #161463 (Add myself to mailmap)
 - #161476 (Use bitset for locals_with_use_data)
 - #161483 (Warn about running ui-fulldeps tests in stage 1)

Failed merges:

 - #161443 (add internal DSL for testing binders)
@rust-bors
rust-bors Bot merged commit f5ca205 into rust-lang:main Aug 22, 2026
13 checks passed
@rustbot rustbot added this to the 1.100.0 milestone Aug 22, 2026
rust-bors Bot pushed a commit that referenced this pull request Aug 22, 2026
Rollup merge of #159954 - valentynkit:float-conversions, r=JohnTitor

core: implement float conversion methods

Implements the accepted ACP rust-lang/libs-team#810, adding float conversion methods on `f16`, `f32`, `f64`, and `f128`:

- `cast` converts to the target float type (`self as Flt`, IEEE rounding).
- `to_int_saturating` converts to an integer with `as` semantics: saturating, and `NaN` to 0.
- `to_int_checked` truncates toward zero and returns `None` on `NaN`, infinity, or out of range.
- `to_int_strict` is `to_int_checked().unwrap()`.

Per the libs-api meetings on the ACP, `to_float` is named `cast` and `to_int_saturating` maps `NaN` to 0 rather than panicking (which the team noted makes rust-lang/libs-team#831 redundant).

The integer-to-float `cast` from the ACP is left out: it shares the `cast` method name on integer types with the integer-to-integer `cast` in rust-lang/libs-team#811 (being unified with the other integer cast methods in rust-lang/libs-team#833), so it needs a decision on how those fit together. Happy to follow up once that settles.

Tracking issue: #159913

r? libs
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. T-libs Relevant to the library team, which will review and decide on the PR/issue.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants