Skip to content

Commit 3a5c8e9

Browse files
committed
Auto merge of rust-lang#110393 - fee1-dead-contrib:rm-const-traits, r=oli-obk
Rm const traits in libcore See [zulip thread](https://rust-lang.zulipchat.com/#narrow/stream/146212-t-compiler.2Fconst-eval/topic/.60const.20Trait.60.20removal.20or.20rework) * [x] Bless ui tests * [ ] Re constify some unstable functions with workarounds if they are needed
2 parents d7f9e81 + 14d1e87 commit 3a5c8e9

File tree

180 files changed

+1460
-1953
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

180 files changed

+1460
-1953
lines changed

compiler/rustc_ast/src/lib.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@
1010
)]
1111
#![feature(associated_type_bounds)]
1212
#![feature(box_patterns)]
13-
#![feature(const_default_impls)]
1413
#![feature(const_trait_impl)]
1514
#![feature(if_let_guard)]
1615
#![feature(let_chains)]

compiler/rustc_ast/src/ptr.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,8 @@ impl<S: Encoder, T: Encodable<S>> Encodable<S> for P<T> {
126126
}
127127

128128
impl<T> P<[T]> {
129-
pub const fn new() -> P<[T]> {
129+
// FIXME(const-hack) make this const again
130+
pub fn new() -> P<[T]> {
130131
P { ptr: Box::default() }
131132
}
132133

compiler/rustc_const_eval/src/transform/check_consts/ops.rs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -610,10 +610,11 @@ pub struct RawPtrComparison;
610610
impl<'tcx> NonConstOp<'tcx> for RawPtrComparison {
611611
fn build_error(
612612
&self,
613-
_: &ConstCx<'_, 'tcx>,
613+
ccx: &ConstCx<'_, 'tcx>,
614614
span: Span,
615615
) -> DiagnosticBuilder<'tcx, ErrorGuaranteed> {
616-
span_bug!(span, "raw ptr comparison should already be caught in the trait system");
616+
// FIXME(const_trait_impl): revert to span_bug?
617+
ccx.tcx.sess.create_err(errors::RawPtrComparisonErr { span })
617618
}
618619
}
619620

library/alloc/src/boxed.rs

Lines changed: 11 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -576,8 +576,7 @@ impl<T, A: Allocator> Box<T, A> {
576576
///
577577
/// This conversion does not allocate on the heap and happens in place.
578578
#[unstable(feature = "box_into_boxed_slice", issue = "71582")]
579-
#[rustc_const_unstable(feature = "const_box", issue = "92521")]
580-
pub const fn into_boxed_slice(boxed: Self) -> Box<[T], A> {
579+
pub fn into_boxed_slice(boxed: Self) -> Box<[T], A> {
581580
let (raw, alloc) = Box::into_raw_with_allocator(boxed);
582581
unsafe { Box::from_raw_in(raw as *mut [T; 1], alloc) }
583582
}
@@ -809,9 +808,8 @@ impl<T, A: Allocator> Box<mem::MaybeUninit<T>, A> {
809808
/// assert_eq!(*five, 5)
810809
/// ```
811810
#[unstable(feature = "new_uninit", issue = "63291")]
812-
#[rustc_const_unstable(feature = "const_box", issue = "92521")]
813811
#[inline]
814-
pub const unsafe fn assume_init(self) -> Box<T, A> {
812+
pub unsafe fn assume_init(self) -> Box<T, A> {
815813
let (raw, alloc) = Box::into_raw_with_allocator(self);
816814
unsafe { Box::from_raw_in(raw as *mut T, alloc) }
817815
}
@@ -844,9 +842,8 @@ impl<T, A: Allocator> Box<mem::MaybeUninit<T>, A> {
844842
/// }
845843
/// ```
846844
#[unstable(feature = "new_uninit", issue = "63291")]
847-
#[rustc_const_unstable(feature = "const_box", issue = "92521")]
848845
#[inline]
849-
pub const fn write(mut boxed: Self, value: T) -> Box<T, A> {
846+
pub fn write(mut boxed: Self, value: T) -> Box<T, A> {
850847
unsafe {
851848
(*boxed).write(value);
852849
boxed.assume_init()
@@ -1090,9 +1087,8 @@ impl<T: ?Sized, A: Allocator> Box<T, A> {
10901087
///
10911088
/// [memory layout]: self#memory-layout
10921089
#[unstable(feature = "allocator_api", issue = "32838")]
1093-
#[rustc_const_unstable(feature = "const_box", issue = "92521")]
10941090
#[inline]
1095-
pub const fn into_raw_with_allocator(b: Self) -> (*mut T, A) {
1091+
pub fn into_raw_with_allocator(b: Self) -> (*mut T, A) {
10961092
let (leaked, alloc) = Box::into_unique(b);
10971093
(leaked.as_ptr(), alloc)
10981094
}
@@ -1102,10 +1098,9 @@ impl<T: ?Sized, A: Allocator> Box<T, A> {
11021098
issue = "none",
11031099
reason = "use `Box::leak(b).into()` or `Unique::from(Box::leak(b))` instead"
11041100
)]
1105-
#[rustc_const_unstable(feature = "const_box", issue = "92521")]
11061101
#[inline]
11071102
#[doc(hidden)]
1108-
pub const fn into_unique(b: Self) -> (Unique<T>, A) {
1103+
pub fn into_unique(b: Self) -> (Unique<T>, A) {
11091104
// Box is recognized as a "unique pointer" by Stacked Borrows, but internally it is a
11101105
// raw pointer for the type system. Turning it directly into a raw pointer would not be
11111106
// recognized as "releasing" the unique pointer to permit aliased raw accesses,
@@ -1163,9 +1158,8 @@ impl<T: ?Sized, A: Allocator> Box<T, A> {
11631158
/// assert_eq!(*static_ref, [4, 2, 3]);
11641159
/// ```
11651160
#[stable(feature = "box_leak", since = "1.26.0")]
1166-
#[rustc_const_unstable(feature = "const_box", issue = "92521")]
11671161
#[inline]
1168-
pub const fn leak<'a>(b: Self) -> &'a mut T
1162+
pub fn leak<'a>(b: Self) -> &'a mut T
11691163
where
11701164
A: 'a,
11711165
{
@@ -1234,8 +1228,7 @@ impl<T: Default> Default for Box<T> {
12341228

12351229
#[cfg(not(no_global_oom_handling))]
12361230
#[stable(feature = "rust1", since = "1.0.0")]
1237-
#[rustc_const_unstable(feature = "const_default_impls", issue = "87864")]
1238-
impl<T> const Default for Box<[T]> {
1231+
impl<T> Default for Box<[T]> {
12391232
#[inline]
12401233
fn default() -> Self {
12411234
let ptr: Unique<[T]> = Unique::<[T; 0]>::dangling();
@@ -1245,8 +1238,7 @@ impl<T> const Default for Box<[T]> {
12451238

12461239
#[cfg(not(no_global_oom_handling))]
12471240
#[stable(feature = "default_box_extra", since = "1.17.0")]
1248-
#[rustc_const_unstable(feature = "const_default_impls", issue = "87864")]
1249-
impl const Default for Box<str> {
1241+
impl Default for Box<str> {
12501242
#[inline]
12511243
fn default() -> Self {
12521244
// SAFETY: This is the same as `Unique::cast<U>` but with an unsized `U = str`.
@@ -1443,8 +1435,7 @@ impl<T> From<T> for Box<T> {
14431435
}
14441436

14451437
#[stable(feature = "pin", since = "1.33.0")]
1446-
#[rustc_const_unstable(feature = "const_box", issue = "92521")]
1447-
impl<T: ?Sized, A: Allocator> const From<Box<T, A>> for Pin<Box<T, A>>
1438+
impl<T: ?Sized, A: Allocator> From<Box<T, A>> for Pin<Box<T, A>>
14481439
where
14491440
A: 'static,
14501441
{
@@ -1880,8 +1871,7 @@ impl<T: ?Sized, A: Allocator> fmt::Pointer for Box<T, A> {
18801871
}
18811872

18821873
#[stable(feature = "rust1", since = "1.0.0")]
1883-
#[rustc_const_unstable(feature = "const_box", issue = "92521")]
1884-
impl<T: ?Sized, A: Allocator> const Deref for Box<T, A> {
1874+
impl<T: ?Sized, A: Allocator> Deref for Box<T, A> {
18851875
type Target = T;
18861876

18871877
fn deref(&self) -> &T {
@@ -1890,8 +1880,7 @@ impl<T: ?Sized, A: Allocator> const Deref for Box<T, A> {
18901880
}
18911881

18921882
#[stable(feature = "rust1", since = "1.0.0")]
1893-
#[rustc_const_unstable(feature = "const_box", issue = "92521")]
1894-
impl<T: ?Sized, A: Allocator> const DerefMut for Box<T, A> {
1883+
impl<T: ?Sized, A: Allocator> DerefMut for Box<T, A> {
18951884
fn deref_mut(&mut self) -> &mut T {
18961885
&mut **self
18971886
}

library/alloc/src/lib.rs

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,6 @@
106106
#![feature(coerce_unsized)]
107107
#![feature(const_align_of_val)]
108108
#![feature(const_box)]
109-
#![feature(const_convert)]
110109
#![feature(const_cow_is_borrowed)]
111110
#![feature(const_eval_select)]
112111
#![feature(const_maybe_uninit_as_mut_ptr)]
@@ -174,7 +173,6 @@
174173
#![feature(associated_type_bounds)]
175174
#![feature(c_unwind)]
176175
#![feature(cfg_sanitize)]
177-
#![feature(const_deref)]
178176
#![feature(const_mut_refs)]
179177
#![feature(const_precise_live_drops)]
180178
#![feature(const_ptr_write)]

library/alloc/src/string.rs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2247,8 +2247,7 @@ impl_eq! { Cow<'a, str>, &'b str }
22472247
impl_eq! { Cow<'a, str>, String }
22482248

22492249
#[stable(feature = "rust1", since = "1.0.0")]
2250-
#[rustc_const_unstable(feature = "const_default_impls", issue = "87864")]
2251-
impl const Default for String {
2250+
impl Default for String {
22522251
/// Creates an empty `String`.
22532252
#[inline]
22542253
fn default() -> String {

library/alloc/src/vec/mod.rs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3022,8 +3022,7 @@ unsafe impl<#[may_dangle] T, A: Allocator> Drop for Vec<T, A> {
30223022
}
30233023

30243024
#[stable(feature = "rust1", since = "1.0.0")]
3025-
#[rustc_const_unstable(feature = "const_default_impls", issue = "87864")]
3026-
impl<T> const Default for Vec<T> {
3025+
impl<T> Default for Vec<T> {
30273026
/// Creates an empty `Vec<T>`.
30283027
///
30293028
/// The vector will not allocate until elements are pushed onto it.

library/alloc/tests/boxed.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ fn box_deref_lval() {
6161

6262
pub struct ConstAllocator;
6363

64-
unsafe impl const Allocator for ConstAllocator {
64+
unsafe impl Allocator for ConstAllocator {
6565
fn allocate(&self, layout: Layout) -> Result<NonNull<[u8]>, AllocError> {
6666
match layout.size() {
6767
0 => Ok(NonNull::slice_from_raw_parts(layout.dangling(), 0)),

library/alloc/tests/const_fns.rs

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,16 @@
11
// Test const functions in the library
22

33
pub const MY_VEC: Vec<usize> = Vec::new();
4-
pub const MY_VEC2: Vec<usize> = Default::default();
4+
5+
// FIXME(#110395)
6+
// pub const MY_VEC2: Vec<usize> = Default::default();
57

68
pub const MY_STRING: String = String::new();
7-
pub const MY_STRING2: String = Default::default();
89

9-
pub const MY_BOXED_SLICE: Box<[usize]> = Default::default();
10-
pub const MY_BOXED_STR: Box<str> = Default::default();
10+
// pub const MY_STRING2: String = Default::default();
11+
12+
// pub const MY_BOXED_SLICE: Box<[usize]> = Default::default();
13+
// pub const MY_BOXED_STR: Box<str> = Default::default();
1114

1215
use std::collections::{BTreeMap, BTreeSet};
1316

@@ -23,11 +26,11 @@ pub const SET_IS_EMPTY: bool = SET.is_empty();
2326

2427
#[test]
2528
fn test_const() {
26-
assert_eq!(MY_VEC, MY_VEC2);
27-
assert_eq!(MY_STRING, MY_STRING2);
29+
assert_eq!(MY_VEC, /* MY_VEC */ vec![]);
30+
assert_eq!(MY_STRING, /* MY_STRING2 */ String::default());
2831

29-
assert_eq!(MY_VEC, *MY_BOXED_SLICE);
30-
assert_eq!(MY_STRING, *MY_BOXED_STR);
32+
// assert_eq!(MY_VEC, *MY_BOXED_SLICE);
33+
// assert_eq!(MY_STRING, *MY_BOXED_STR);
3134

3235
assert_eq!(MAP_LEN, 0);
3336
assert_eq!(SET_LEN, 0);

library/alloc/tests/lib.rs

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
#![feature(assert_matches)]
44
#![feature(btree_drain_filter)]
55
#![feature(cow_is_borrowed)]
6-
#![feature(const_convert)]
76
#![feature(const_cow_is_borrowed)]
87
#![feature(const_heap)]
98
#![feature(const_mut_refs)]
@@ -33,7 +32,6 @@
3332
#![feature(slice_partition_dedup)]
3433
#![feature(string_remove_matches)]
3534
#![feature(const_btree_len)]
36-
#![feature(const_default_impls)]
3735
#![feature(const_trait_impl)]
3836
#![feature(const_str_from_utf8)]
3937
#![feature(panic_update_hook)]

0 commit comments

Comments
 (0)