Skip to content

Rollup of 14 pull requests #141067

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 76 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
76 commits
Select commit Hold shift + click to select a range
80758c3
add rdg push git config entry for git protocol pushers
tshepang May 1, 2025
6e966d7
avoid duplicating commands
tshepang May 6, 2025
046bfb3
Preparing for merge from rustc
invalid-email-address May 8, 2025
659f0b6
Merge from rustc
invalid-email-address May 8, 2025
b2de3f4
Merge pull request #2374 from rust-lang/rustc-pull
tshepang May 8, 2025
47cd0e7
Fix minor typo in serialization.md
smanilov May 8, 2025
f52e1be
Merge pull request #2375 from smanilov/patch-4
tshepang May 8, 2025
b6c2a42
std: Make consistence between `From` and `Into`
xizheyin May 8, 2025
4101d90
std: Explain prefer `TryInto` over `TryFrom` when specifying traits b…
xizheyin May 8, 2025
d87763d
Remark test naming exception
smanilov May 8, 2025
f31bf4a
Merge pull request #2323 from smanilov/patch-2
BoxyUwU May 8, 2025
a07c71d
Fix minor typo in installation.md
smanilov May 8, 2025
079e0b4
Merge pull request #2377 from smanilov/patch-6
tshepang May 8, 2025
9eac7a3
move (and remove) impl Trait tests
lcnr May 9, 2025
3052683
Fix minor typo in rustdoc-internals.md
smanilov May 8, 2025
6831638
Merge pull request #2376 from smanilov/patch-5
tshepang May 9, 2025
0533ff7
more moved tests
lcnr May 9, 2025
90ec9da
Merge pull request #2369 from rust-lang/tshepang-patch-1
tshepang May 10, 2025
c1de624
link to chapter referred to
tshepang May 10, 2025
8c6c97d
use the right case
tshepang May 10, 2025
4e684a9
make more clear what is meant
tshepang May 10, 2025
9f07c1e
make more readable
tshepang May 10, 2025
2efa4e6
sembr
tshepang May 10, 2025
eb6749c
is a question
tshepang May 10, 2025
a82a329
fix broken links
tshepang May 10, 2025
5d8e19f
reduce clutter when reading source
tshepang May 10, 2025
7b9d7fc
sembr
tshepang May 10, 2025
f1d1ebc
last updated a year ago
tshepang May 10, 2025
52e4b4a
add missing word
tshepang May 10, 2025
927343e
no point versioning these
tshepang May 10, 2025
a9d6551
bump edition
tshepang May 10, 2025
63b3bf9
"cargo fmt"
tshepang May 10, 2025
58fa975
we are a collective
tshepang May 10, 2025
5a406be
noise
tshepang May 10, 2025
aeea472
Remove `stable` attribute from wasi fs (read_exact|write_all)_at
paolobarbolini May 10, 2025
2a0c72e
Remove obsolete reference to `unsized_tuple_coercion`
Zalathar May 12, 2025
53572cf
Merge pull request #2382 from Zalathar/no-tuple-unsize
JohnTitor May 12, 2025
436c363
Remove n.b. about parser refactoring
smanilov May 9, 2025
e983642
Merge pull request #2378 from smanilov/patch-7
jieyouxu May 12, 2025
b255ae2
remove dangling references
tshepang May 12, 2025
b9f4350
fix doc for UnixStream
mlowicki May 14, 2025
1267333
Improve ternary operator recovery
jamie-osec May 14, 2025
754b06f
Migrate to modern datetime API
emmanuel-ferdman May 14, 2025
e0b6363
wire up startupinfo methods
federico-terzi May 14, 2025
032f738
Merge pull request #2383 from rust-lang/tshepang-unused
tshepang May 14, 2025
b805dcb
Merge pull request #2380 from rust-lang/tshepang-crate-cleaning
tshepang May 14, 2025
30b54ad
Merge pull request #2379 from rust-lang/tshepang-which-chapter
tshepang May 14, 2025
05e7ce9
Merge pull request #2373 from rust-lang/tshepang-patch-2
tshepang May 14, 2025
3e051af
Add some negative test coverage for malformed `-Clink-self-contained`…
jieyouxu May 14, 2025
a716f1a
Add some negative test coverage for `-Zlinker-features` flag
jieyouxu May 14, 2025
5e3aa16
avoid upstream pull conflict
tshepang May 15, 2025
d016ed8
Merge pull request #2387 from rust-lang/tshepang-avoid-conflict
tshepang May 15, 2025
4adff2f
Preparing for merge from rustc
invalid-email-address May 15, 2025
1fd536c
Merge from rustc
invalid-email-address May 15, 2025
a3ce646
Merge pull request #2388 from rust-lang/rustc-pull
tshepang May 15, 2025
7b2dcf2
Async drop fix for dropee from another crate (#140858)
azhogin May 15, 2025
839534e
ci: split the dist-ohos job
marcoieni May 15, 2025
76a87d3
float: Add `f16` parsing and printing
tgross35 Aug 25, 2024
9146767
float: Add tests for `f16` conversions to and from decimal
tgross35 Mar 8, 2025
221d7f3
float: Add `f16` to `test-float-parse`
tgross35 Aug 25, 2024
a64ed16
Lowercase git url for rust-lang/enzyme.git
erickt May 15, 2025
cf878d8
HIR: explain in comment why `ExprKind::If` "then" is an `Expr`
samueltardieu May 15, 2025
e651599
Rollup merge of #127013 - tgross35:f16-format-parse, r=Mark-Simulacrum
hkBst May 16, 2025
9d36375
Rollup merge of #140791 - xizheyin:issue-140761, r=ibraheemdev
hkBst May 16, 2025
b2d122a
Rollup merge of #140834 - lcnr:apit-folder, r=compiler-errors
hkBst May 16, 2025
273cec7
Rollup merge of #140910 - paolobarbolini:wasi-fs-incorrect-stabilizat…
hkBst May 16, 2025
0c45701
Rollup merge of #140984 - mlowicki:patch-2, r=ibraheemdev
hkBst May 16, 2025
635d241
Rollup merge of #140997 - jieyouxu:link-flags-negative-tests, r=lqd
hkBst May 16, 2025
100f081
Rollup merge of #141003 - clubby789:ternary-improve, r=compiler-errors
hkBst May 16, 2025
9a01f2e
Rollup merge of #141009 - emmanuel-ferdman:master, r=marcoieni
hkBst May 16, 2025
3da241f
Rollup merge of #141013 - federico-terzi:feat/command_startupinfo_win…
hkBst May 16, 2025
35355bf
Rollup merge of #141026 - tshepang:rust-push, r=jieyouxu
hkBst May 16, 2025
9c3a2ee
Rollup merge of #141031 - azhogin:azhogin/async-drop-dependency-fix, …
hkBst May 16, 2025
ca99354
Rollup merge of #141036 - marcoieni:split-dist-ohos, r=Kobzol
hkBst May 16, 2025
6221dde
Rollup merge of #141056 - erickt:enzyme, r=Mark-Simulacrum
hkBst May 16, 2025
52f0282
Rollup merge of #141059 - samueltardieu:push-trvpulpskwwp, r=compiler…
hkBst May 16, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .gitmodules
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@
shallow = true
[submodule "src/tools/enzyme"]
path = src/tools/enzyme
url = https://github.com/rust-lang/Enzyme.git
url = https://github.com/rust-lang/enzyme.git
shallow = true
[submodule "src/gcc"]
path = src/gcc
Expand Down
2 changes: 2 additions & 0 deletions compiler/rustc_hir/src/hir.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2744,6 +2744,8 @@ pub enum ExprKind<'hir> {
///
/// The "then" expr is always `ExprKind::Block`. If present, the "else" expr is always
/// `ExprKind::Block` (for `else`) or `ExprKind::If` (for `else if`).
/// Note that using an `Expr` instead of a `Block` for the "then" part is intentional,
/// as it simplifies the type coercion machinery.
If(&'hir Expr<'hir>, &'hir Expr<'hir>, Option<&'hir Expr<'hir>>),
/// A conditionless loop (can be exited with `break`, `continue`, or `return`).
///
Expand Down
2 changes: 1 addition & 1 deletion compiler/rustc_middle/src/ty/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1184,7 +1184,7 @@ pub struct Destructor {
#[derive(Copy, Clone, Debug, HashStable, Encodable, Decodable)]
pub struct AsyncDestructor {
/// The `DefId` of the `impl AsyncDrop`
pub impl_did: LocalDefId,
pub impl_did: DefId,
}

#[derive(Clone, Copy, PartialEq, Eq, HashStable, TyEncodable, TyDecodable)]
Expand Down
2 changes: 1 addition & 1 deletion compiler/rustc_middle/src/ty/util.rs
Original file line number Diff line number Diff line change
Expand Up @@ -465,7 +465,7 @@ impl<'tcx> TyCtxt<'tcx> {
dtor_candidate = Some(impl_did);
}

Some(ty::AsyncDestructor { impl_did: dtor_candidate? })
Some(ty::AsyncDestructor { impl_did: dtor_candidate?.into() })
}

/// Returns the set of types that are required to be alive in
Expand Down
3 changes: 2 additions & 1 deletion compiler/rustc_parse/messages.ftl
Original file line number Diff line number Diff line change
Expand Up @@ -815,7 +815,6 @@ parse_switch_ref_box_order = switch the order of `ref` and `box`
.suggestion = swap them
parse_ternary_operator = Rust has no ternary operator
.help = use an `if-else` expression instead
parse_tilde_is_not_unary_operator = `~` cannot be used as a unary operator
.suggestion = use `!` to perform bitwise not
Expand Down Expand Up @@ -963,6 +962,8 @@ parse_use_empty_block_not_semi = expected { "`{}`" }, found `;`
parse_use_eq_instead = unexpected `==`
.suggestion = try using `=` instead
parse_use_if_else = use an `if-else` expression instead
parse_use_let_not_auto = write `let` instead of `auto` to introduce a new variable
parse_use_let_not_var = write `let` instead of `var` to introduce a new variable
Expand Down
20 changes: 19 additions & 1 deletion compiler/rustc_parse/src/errors.rs
Original file line number Diff line number Diff line change
Expand Up @@ -436,10 +436,28 @@ pub(crate) enum IfExpressionMissingThenBlockSub {

#[derive(Diagnostic)]
#[diag(parse_ternary_operator)]
#[help]
pub(crate) struct TernaryOperator {
#[primary_span]
pub span: Span,
/// If we have a span for the condition expression, suggest the if/else
#[subdiagnostic]
pub sugg: Option<TernaryOperatorSuggestion>,
/// Otherwise, just print the suggestion message
#[help(parse_use_if_else)]
pub no_sugg: bool,
}

#[derive(Subdiagnostic, Copy, Clone)]
#[multipart_suggestion(parse_use_if_else, applicability = "maybe-incorrect", style = "verbose")]
pub(crate) struct TernaryOperatorSuggestion {
#[suggestion_part(code = "if ")]
pub before_cond: Span,
#[suggestion_part(code = "{{")]
pub question: Span,
#[suggestion_part(code = "}} else {{")]
pub colon: Span,
#[suggestion_part(code = " }}")]
pub end: Span,
}

#[derive(Subdiagnostic)]
Expand Down
34 changes: 25 additions & 9 deletions compiler/rustc_parse/src/parser/diagnostics.rs
Original file line number Diff line number Diff line change
Expand Up @@ -41,8 +41,9 @@ use crate::errors::{
IncorrectSemicolon, IncorrectUseOfAwait, IncorrectUseOfUse, PatternMethodParamWithoutBody,
QuestionMarkInType, QuestionMarkInTypeSugg, SelfParamNotFirst, StructLiteralBodyWithoutPath,
StructLiteralBodyWithoutPathSugg, SuggAddMissingLetStmt, SuggEscapeIdentifier, SuggRemoveComma,
TernaryOperator, UnexpectedConstInGenericParam, UnexpectedConstParamDeclaration,
UnexpectedConstParamDeclarationSugg, UnmatchedAngleBrackets, UseEqInstead, WrapType,
TernaryOperator, TernaryOperatorSuggestion, UnexpectedConstInGenericParam,
UnexpectedConstParamDeclaration, UnexpectedConstParamDeclarationSugg, UnmatchedAngleBrackets,
UseEqInstead, WrapType,
};
use crate::parser::attr::InnerAttrPolicy;
use crate::{exp, fluent_generated as fluent};
Expand Down Expand Up @@ -497,7 +498,7 @@ impl<'a> Parser<'a> {
// If the user is trying to write a ternary expression, recover it and
// return an Err to prevent a cascade of irrelevant diagnostics.
if self.prev_token == token::Question
&& let Err(e) = self.maybe_recover_from_ternary_operator()
&& let Err(e) = self.maybe_recover_from_ternary_operator(None)
{
return Err(e);
}
Expand Down Expand Up @@ -1602,12 +1603,18 @@ impl<'a> Parser<'a> {
/// Rust has no ternary operator (`cond ? then : else`). Parse it and try
/// to recover from it if `then` and `else` are valid expressions. Returns
/// an err if this appears to be a ternary expression.
pub(super) fn maybe_recover_from_ternary_operator(&mut self) -> PResult<'a, ()> {
/// If we have the span of the condition, we can provide a better error span
/// and code suggestion.
pub(super) fn maybe_recover_from_ternary_operator(
&mut self,
cond: Option<Span>,
) -> PResult<'a, ()> {
if self.prev_token != token::Question {
return PResult::Ok(());
}

let lo = self.prev_token.span.lo();
let question = self.prev_token.span;
let lo = cond.unwrap_or(question).lo();
let snapshot = self.create_snapshot_for_diagnostic();

if match self.parse_expr() {
Expand All @@ -1620,11 +1627,20 @@ impl<'a> Parser<'a> {
}
} {
if self.eat_noexpect(&token::Colon) {
let colon = self.prev_token.span;
match self.parse_expr() {
Ok(_) => {
return Err(self
.dcx()
.create_err(TernaryOperator { span: self.token.span.with_lo(lo) }));
Ok(expr) => {
let sugg = cond.map(|cond| TernaryOperatorSuggestion {
before_cond: cond.shrink_to_lo(),
question,
colon,
end: expr.span.shrink_to_hi(),
});
return Err(self.dcx().create_err(TernaryOperator {
span: self.prev_token.span.with_lo(lo),
sugg,
no_sugg: sugg.is_none(),
}));
}
Err(err) => {
err.cancel();
Expand Down
7 changes: 6 additions & 1 deletion compiler/rustc_parse/src/parser/stmt.rs
Original file line number Diff line number Diff line change
Expand Up @@ -879,7 +879,12 @@ impl<'a> Parser<'a> {
{
// Just check for errors and recover; do not eat semicolon yet.

let expect_result = self.expect_one_of(&[], &[exp!(Semi), exp!(CloseBrace)]);
let expect_result =
if let Err(e) = self.maybe_recover_from_ternary_operator(Some(expr.span)) {
Err(e)
} else {
self.expect_one_of(&[], &[exp!(Semi), exp!(CloseBrace)])
};

// Try to both emit a better diagnostic, and avoid further errors by replacing
// the `expr` with `ExprKind::Err`.
Expand Down
2 changes: 2 additions & 0 deletions library/core/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -35,4 +35,6 @@ check-cfg = [
# and to stdarch `core_arch` crate which messes-up with Cargo list
# of declared features, we therefor expect any feature cfg
'cfg(feature, values(any()))',
# Internal features aren't marked known config by default
'cfg(target_has_reliable_f16)',
]
10 changes: 8 additions & 2 deletions library/core/src/convert/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -464,8 +464,8 @@ pub trait Into<T>: Sized {
/// orphaning rules.
/// See [`Into`] for more details.
///
/// Prefer using [`Into`] over using `From` when specifying trait bounds on a generic function.
/// This way, types that directly implement [`Into`] can be used as arguments as well.
/// Prefer using [`Into`] over [`From`] when specifying trait bounds on a generic function
/// to ensure that types that only implement [`Into`] can be used as well.
///
/// The `From` trait is also very useful when performing error handling. When constructing a function
/// that is capable of failing, the return type will generally be of the form `Result<T, E>`.
Expand Down Expand Up @@ -597,6 +597,9 @@ pub trait From<T>: Sized {
/// standard library. For more information on this, see the
/// documentation for [`Into`].
///
/// Prefer using [`TryInto`] over [`TryFrom`] when specifying trait bounds on a generic function
/// to ensure that types that only implement [`TryInto`] can be used as well.
///
/// # Implementing `TryInto`
///
/// This suffers the same restrictions and reasoning as implementing
Expand Down Expand Up @@ -636,6 +639,9 @@ pub trait TryInto<T>: Sized {
/// When the [`!`] type is stabilized [`Infallible`] and [`!`] will be
/// equivalent.
///
/// Prefer using [`TryInto`] over [`TryFrom`] when specifying trait bounds on a generic function
/// to ensure that types that only implement [`TryInto`] can be used as well.
///
/// `TryFrom<T>` can be implemented as follows:
///
/// ```
Expand Down
36 changes: 36 additions & 0 deletions library/core/src/fmt/float.rs
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,8 @@ macro_rules! impl_general_format {
}
}

#[cfg(target_has_reliable_f16)]
impl_general_format! { f16 }
impl_general_format! { f32 f64 }

// Don't inline this so callers don't use the stack space this function
Expand Down Expand Up @@ -231,6 +233,13 @@ macro_rules! floating {

floating! { f32 f64 }

#[cfg(target_has_reliable_f16)]
floating! { f16 }

// FIXME(f16_f128): A fallback is used when the backend+target does not support f16 well, in order
// to avoid ICEs.

#[cfg(not(target_has_reliable_f16))]
#[stable(feature = "rust1", since = "1.0.0")]
impl Debug for f16 {
#[inline]
Expand All @@ -239,6 +248,33 @@ impl Debug for f16 {
}
}

#[cfg(not(target_has_reliable_f16))]
#[stable(feature = "rust1", since = "1.0.0")]
impl Display for f16 {
#[inline]
fn fmt(&self, fmt: &mut Formatter<'_>) -> Result {
Debug::fmt(self, fmt)
}
}

#[cfg(not(target_has_reliable_f16))]
#[stable(feature = "rust1", since = "1.0.0")]
impl LowerExp for f16 {
#[inline]
fn fmt(&self, fmt: &mut Formatter<'_>) -> Result {
Debug::fmt(self, fmt)
}
}

#[cfg(not(target_has_reliable_f16))]
#[stable(feature = "rust1", since = "1.0.0")]
impl UpperExp for f16 {
#[inline]
fn fmt(&self, fmt: &mut Formatter<'_>) -> Result {
Debug::fmt(self, fmt)
}
}

#[stable(feature = "rust1", since = "1.0.0")]
impl Debug for f128 {
#[inline]
Expand Down
1 change: 1 addition & 0 deletions library/core/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -101,6 +101,7 @@
#![feature(bstr)]
#![feature(bstr_internals)]
#![feature(cfg_match)]
#![feature(cfg_target_has_reliable_f16_f128)]
#![feature(const_carrying_mul_add)]
#![feature(const_eval_select)]
#![feature(core_intrinsics)]
Expand Down
57 changes: 53 additions & 4 deletions library/core/src/num/dec2flt/float.rs
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ macro_rules! int {
}
}

int!(u32, u64);
int!(u16, u32, u64);

/// A helper trait to avoid duplicating basically all the conversion code for IEEE floats.
///
Expand Down Expand Up @@ -189,9 +189,14 @@ pub trait RawFloat:

/// Returns the mantissa, exponent and sign as integers.
///
/// That is, this returns `(m, p, s)` such that `s * m * 2^p` represents the original float.
/// For 0, the exponent will be `-(EXP_BIAS + SIG_BITS`, which is the
/// minimum subnormal power.
/// This returns `(m, p, s)` such that `s * m * 2^p` represents the original float. For 0, the
/// exponent will be `-(EXP_BIAS + SIG_BITS)`, which is the minimum subnormal power. For
/// infinity or NaN, the exponent will be `EXP_SAT - EXP_BIAS - SIG_BITS`.
///
/// If subnormal, the mantissa will be shifted one bit to the left. Otherwise, it is returned
/// with the explicit bit set but otherwise unshifted
///
/// `s` is only ever +/-1.
fn integer_decode(self) -> (u64, i16, i8) {
let bits = self.to_bits();
let sign: i8 = if bits >> (Self::BITS - 1) == Self::Int::ZERO { 1 } else { -1 };
Expand All @@ -213,6 +218,50 @@ const fn pow2_to_pow10(a: i64) -> i64 {
res as i64
}

#[cfg(target_has_reliable_f16)]
impl RawFloat for f16 {
type Int = u16;

const INFINITY: Self = Self::INFINITY;
const NEG_INFINITY: Self = Self::NEG_INFINITY;
const NAN: Self = Self::NAN;
const NEG_NAN: Self = -Self::NAN;

const BITS: u32 = 16;
const SIG_TOTAL_BITS: u32 = Self::MANTISSA_DIGITS;
const EXP_MASK: Self::Int = Self::EXP_MASK;
const SIG_MASK: Self::Int = Self::MAN_MASK;

const MIN_EXPONENT_ROUND_TO_EVEN: i32 = -22;
const MAX_EXPONENT_ROUND_TO_EVEN: i32 = 5;
const SMALLEST_POWER_OF_TEN: i32 = -27;

#[inline]
fn from_u64(v: u64) -> Self {
debug_assert!(v <= Self::MAX_MANTISSA_FAST_PATH);
v as _
}

#[inline]
fn from_u64_bits(v: u64) -> Self {
Self::from_bits((v & 0xFFFF) as u16)
}

fn pow10_fast_path(exponent: usize) -> Self {
#[allow(clippy::use_self)]
const TABLE: [f16; 8] = [1e0, 1e1, 1e2, 1e3, 1e4, 0.0, 0.0, 0.];
TABLE[exponent & 7]
}

fn to_bits(self) -> Self::Int {
self.to_bits()
}

fn classify(self) -> FpCategory {
self.classify()
}
}

impl RawFloat for f32 {
type Int = u32;

Expand Down
16 changes: 16 additions & 0 deletions library/core/src/num/dec2flt/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -171,9 +171,25 @@ macro_rules! from_str_float_impl {
}
};
}

#[cfg(target_has_reliable_f16)]
from_str_float_impl!(f16);
from_str_float_impl!(f32);
from_str_float_impl!(f64);

// FIXME(f16_f128): A fallback is used when the backend+target does not support f16 well, in order
// to avoid ICEs.

#[cfg(not(target_has_reliable_f16))]
impl FromStr for f16 {
type Err = ParseFloatError;

#[inline]
fn from_str(_src: &str) -> Result<Self, ParseFloatError> {
unimplemented!("requires target_has_reliable_f16")
}
}

/// An error which can be returned when parsing a float.
///
/// This error is used as the error type for the [`FromStr`] implementation
Expand Down
7 changes: 7 additions & 0 deletions library/core/src/num/flt2dec/decoder.rs
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,13 @@ pub trait DecodableFloat: RawFloat + Copy {
fn min_pos_norm_value() -> Self;
}

#[cfg(target_has_reliable_f16)]
impl DecodableFloat for f16 {
fn min_pos_norm_value() -> Self {
f16::MIN_POSITIVE
}
}

impl DecodableFloat for f32 {
fn min_pos_norm_value() -> Self {
f32::MIN_POSITIVE
Expand Down
9 changes: 9 additions & 0 deletions library/coretests/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -26,3 +26,12 @@ test = true
[dev-dependencies]
rand = { version = "0.9.0", default-features = false }
rand_xorshift = { version = "0.4.0", default-features = false }

[lints.rust.unexpected_cfgs]
level = "warn"
check-cfg = [
'cfg(bootstrap)',
# Internal features aren't marked known config by default, we use these to
# gate tests.
'cfg(target_has_reliable_f16)',
]
Loading
Loading