mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-22 06:44:35 +00:00
Rollup merge of #131706 - GKFX:fix-const-hacks, r=tgross35
Fix two const-hacks Fix two pieces of code marked `FIXME(const-hack)` related to const_option #67441.
This commit is contained in:
commit
83252bd780
@ -213,11 +213,9 @@ impl Duration {
|
|||||||
// SAFETY: nanos < NANOS_PER_SEC, therefore nanos is within the valid range
|
// SAFETY: nanos < NANOS_PER_SEC, therefore nanos is within the valid range
|
||||||
Duration { secs, nanos: unsafe { Nanoseconds(nanos) } }
|
Duration { secs, nanos: unsafe { Nanoseconds(nanos) } }
|
||||||
} else {
|
} else {
|
||||||
// FIXME(const-hack): use `.expect` once that is possible.
|
let secs = secs
|
||||||
let secs = match secs.checked_add((nanos / NANOS_PER_SEC) as u64) {
|
.checked_add((nanos / NANOS_PER_SEC) as u64)
|
||||||
Some(secs) => secs,
|
.expect("overflow in Duration::new");
|
||||||
None => panic!("overflow in Duration::new"),
|
|
||||||
};
|
|
||||||
let nanos = nanos % NANOS_PER_SEC;
|
let nanos = nanos % NANOS_PER_SEC;
|
||||||
// SAFETY: nanos % NANOS_PER_SEC < NANOS_PER_SEC, therefore nanos is within the valid range
|
// SAFETY: nanos % NANOS_PER_SEC < NANOS_PER_SEC, therefore nanos is within the valid range
|
||||||
Duration { secs, nanos: unsafe { Nanoseconds(nanos) } }
|
Duration { secs, nanos: unsafe { Nanoseconds(nanos) } }
|
||||||
|
@ -18,17 +18,6 @@ use crate::sys_common::AsInner;
|
|||||||
use crate::sys_common::wstr::WStrUnits;
|
use crate::sys_common::wstr::WStrUnits;
|
||||||
use crate::{fmt, io, iter, vec};
|
use crate::{fmt, io, iter, vec};
|
||||||
|
|
||||||
/// This is the const equivalent to `NonZero::new(n).unwrap()`
|
|
||||||
///
|
|
||||||
/// FIXME(const-hack): This can be removed once `Option::unwrap` is stably const.
|
|
||||||
/// See the `const_option` feature (#67441).
|
|
||||||
const fn non_zero_u16(n: u16) -> NonZero<u16> {
|
|
||||||
match NonZero::new(n) {
|
|
||||||
Some(n) => n,
|
|
||||||
None => panic!("called `unwrap` on a `None` value"),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn args() -> Args {
|
pub fn args() -> Args {
|
||||||
// SAFETY: `GetCommandLineW` returns a pointer to a null terminated UTF-16
|
// SAFETY: `GetCommandLineW` returns a pointer to a null terminated UTF-16
|
||||||
// string so it's safe for `WStrUnits` to use.
|
// string so it's safe for `WStrUnits` to use.
|
||||||
@ -66,10 +55,10 @@ fn parse_lp_cmd_line<'a, F: Fn() -> OsString>(
|
|||||||
lp_cmd_line: Option<WStrUnits<'a>>,
|
lp_cmd_line: Option<WStrUnits<'a>>,
|
||||||
exe_name: F,
|
exe_name: F,
|
||||||
) -> Vec<OsString> {
|
) -> Vec<OsString> {
|
||||||
const BACKSLASH: NonZero<u16> = non_zero_u16(b'\\' as u16);
|
const BACKSLASH: NonZero<u16> = NonZero::new(b'\\' as u16).unwrap();
|
||||||
const QUOTE: NonZero<u16> = non_zero_u16(b'"' as u16);
|
const QUOTE: NonZero<u16> = NonZero::new(b'"' as u16).unwrap();
|
||||||
const TAB: NonZero<u16> = non_zero_u16(b'\t' as u16);
|
const TAB: NonZero<u16> = NonZero::new(b'\t' as u16).unwrap();
|
||||||
const SPACE: NonZero<u16> = non_zero_u16(b' ' as u16);
|
const SPACE: NonZero<u16> = NonZero::new(b' ' as u16).unwrap();
|
||||||
|
|
||||||
let mut ret_val = Vec::new();
|
let mut ret_val = Vec::new();
|
||||||
// If the cmd line pointer is null or it points to an empty string then
|
// If the cmd line pointer is null or it points to an empty string then
|
||||||
|
Loading…
Reference in New Issue
Block a user