Rollup merge of #102197 - Nilstrieb:const-new-🌲, r=Mark-Simulacrum
Stabilize const `BTree{Map,Set}::new` The FCP was completed in #71835. Since `len` and `is_empty` are not const stable yet, this also creates a new feature for them since they previously used the same `const_btree_new` feature.
This commit is contained in:
commit
c69edba515
@ -367,10 +367,21 @@ fn is_const_fn(tcx: TyCtxt<'_>, def_id: DefId, msrv: Option<RustcVersion>) -> bo
|
|||||||
// Checking MSRV is manually necessary because `rustc` has no such concept. This entire
|
// Checking MSRV is manually necessary because `rustc` has no such concept. This entire
|
||||||
// function could be removed if `rustc` provided a MSRV-aware version of `is_const_fn`.
|
// function could be removed if `rustc` provided a MSRV-aware version of `is_const_fn`.
|
||||||
// as a part of an unimplemented MSRV check https://github.com/rust-lang/rust/issues/65262.
|
// as a part of an unimplemented MSRV check https://github.com/rust-lang/rust/issues/65262.
|
||||||
|
|
||||||
|
// HACK(nilstrieb): CURRENT_RUSTC_VERSION can return versions like 1.66.0-dev. `rustc-semver` doesn't accept
|
||||||
|
// the `-dev` version number so we have to strip it off.
|
||||||
|
let short_version = since
|
||||||
|
.as_str()
|
||||||
|
.split('-')
|
||||||
|
.next()
|
||||||
|
.expect("rustc_attr::StabilityLevel::Stable::since` is empty");
|
||||||
|
|
||||||
|
let since = rustc_span::Symbol::intern(short_version);
|
||||||
|
|
||||||
crate::meets_msrv(
|
crate::meets_msrv(
|
||||||
msrv,
|
msrv,
|
||||||
RustcVersion::parse(since.as_str())
|
RustcVersion::parse(since.as_str())
|
||||||
.expect("`rustc_attr::StabilityLevel::Stable::since` is ill-formatted"),
|
.unwrap_or_else(|err| panic!("`rustc_attr::StabilityLevel::Stable::since` is ill-formatted: `{since}`, {err:?}")),
|
||||||
)
|
)
|
||||||
} else {
|
} else {
|
||||||
// Unstable const fn with the feature enabled.
|
// Unstable const fn with the feature enabled.
|
||||||
|
@ -1,13 +1,13 @@
|
|||||||
// This test requires a feature gated const fn and will stop working in the future.
|
// This test requires a feature gated const fn and will stop working in the future.
|
||||||
|
|
||||||
#![feature(const_btree_new)]
|
#![feature(const_btree_len)]
|
||||||
|
|
||||||
use std::collections::BTreeMap;
|
use std::collections::BTreeMap;
|
||||||
|
|
||||||
struct Foo(BTreeMap<i32, i32>);
|
struct Foo(usize);
|
||||||
impl Foo {
|
impl Foo {
|
||||||
fn new() -> Self {
|
fn new() -> Self {
|
||||||
Self(BTreeMap::new())
|
Self(BTreeMap::len(&BTreeMap::<u8, u8>::new()))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user