diff options
| author | Mazdak Farrokhzad <twingoow@gmail.com> | 2019-12-20 12:17:18 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2019-12-20 12:17:18 +0100 |
| commit | 57da9d32693e960f401003a206adfcc32364452c (patch) | |
| tree | 95d774c63e7d6dba54db5934f138f27dbd296414 /src/liballoc | |
| parent | 696735f71b4408302ba166d148e9d474c51416d2 (diff) | |
| parent | 7d268119f07aeb41a1abe093c3fd2434743ac228 (diff) | |
| download | rust-57da9d32693e960f401003a206adfcc32364452c.tar.gz rust-57da9d32693e960f401003a206adfcc32364452c.zip | |
Rollup merge of #66755 - mark-i-m:const-vec-new, r=ecstatic-morse
Remove a const-if-hack in RawVec r? @ecstatic-morse cc @Centril
Diffstat (limited to 'src/liballoc')
| -rw-r--r-- | src/liballoc/lib.rs | 1 | ||||
| -rw-r--r-- | src/liballoc/raw_vec.rs | 21 |
2 files changed, 4 insertions, 18 deletions
diff --git a/src/liballoc/lib.rs b/src/liballoc/lib.rs index 0137275bc15..be46e632be4 100644 --- a/src/liballoc/lib.rs +++ b/src/liballoc/lib.rs @@ -85,6 +85,7 @@ #![feature(const_generic_impls_guard)] #![feature(const_generics)] #![feature(const_in_array_repeat_expressions)] +#![feature(const_if_match)] #![feature(cow_is_borrowed)] #![feature(dispatch_from_dyn)] #![feature(core_intrinsics)] diff --git a/src/liballoc/raw_vec.rs b/src/liballoc/raw_vec.rs index ee75fc288fe..3201c702abb 100644 --- a/src/liballoc/raw_vec.rs +++ b/src/liballoc/raw_vec.rs @@ -52,15 +52,12 @@ impl<T, A: Alloc> RawVec<T, A> { /// Like `new`, but parameterized over the choice of allocator for /// the returned `RawVec`. pub const fn new_in(a: A) -> Self { - // `!0` is `usize::MAX`. This branch should be stripped at compile time. - // FIXME(mark-i-m): use this line when `if`s are allowed in `const`: - //let cap = if mem::size_of::<T>() == 0 { !0 } else { 0 }; + let cap = if mem::size_of::<T>() == 0 { core::usize::MAX } else { 0 }; // `Unique::empty()` doubles as "unallocated" and "zero-sized allocation". RawVec { ptr: Unique::empty(), - // FIXME(mark-i-m): use `cap` when ifs are allowed in const - cap: [0, !0][(mem::size_of::<T>() == 0) as usize], + cap, a, } } @@ -132,19 +129,7 @@ impl<T> RawVec<T, Global> { /// `RawVec` with capacity `usize::MAX`. Useful for implementing /// delayed allocation. pub const fn new() -> Self { - // FIXME(Centril): Reintegrate this with `fn new_in` when we can. - - // `!0` is `usize::MAX`. This branch should be stripped at compile time. - // FIXME(mark-i-m): use this line when `if`s are allowed in `const`: - //let cap = if mem::size_of::<T>() == 0 { !0 } else { 0 }; - - // `Unique::empty()` doubles as "unallocated" and "zero-sized allocation". - RawVec { - ptr: Unique::empty(), - // FIXME(mark-i-m): use `cap` when ifs are allowed in const - cap: [0, !0][(mem::size_of::<T>() == 0) as usize], - a: Global, - } + Self::new_in(Global) } /// Creates a `RawVec` (on the system heap) with exactly the |
