@@ -2491,3 +2491,58 @@ fn inner_use_enum_rename() {
24912491 "# ] ] ,
24922492 )
24932493}
2494+
2495+ #[ test]
2496+ fn box_into_vec ( ) {
2497+ check_infer (
2498+ r#"
2499+ #[lang = "sized"]
2500+ pub trait Sized {}
2501+
2502+ #[lang = "unsize"]
2503+ pub trait Unsize<T: ?Sized> {}
2504+
2505+ #[lang = "coerce_unsized"]
2506+ pub trait CoerceUnsized<T> {}
2507+
2508+ pub unsafe trait Allocator {}
2509+
2510+ pub struct Global;
2511+ unsafe impl Allocator for Global {}
2512+
2513+ #[lang = "owned_box"]
2514+ #[fundamental]
2515+ pub struct Box<T: ?Sized, A: Allocator = Global>;
2516+
2517+ impl<T: ?Sized + Unsize<U>, U: ?Sized, A: Allocator> CoerceUnsized<Box<U, A>> for Box<T, A> {}
2518+
2519+ pub struct Vec<T, A: Allocator = Global> {}
2520+
2521+ #[lang = "slice"]
2522+ impl<T> [T] {}
2523+
2524+ #[lang = "slice_alloc"]
2525+ impl<T> [T] {
2526+ pub fn into_vec<A: Allocator>(self: Box<Self, A>) -> Vec<T, A> {
2527+ unimplemented!()
2528+ }
2529+ }
2530+
2531+ fn test() {
2532+ let vec = <[_]>::into_vec(box [1i32]);
2533+ }
2534+ "# ,
2535+ expect ! [ [ r#"
2536+ 569..573 'self': Box<[T], A>
2537+ 602..634 '{ ... }': Vec<T, A>
2538+ 612..628 'unimpl...ted!()': Vec<T, A>
2539+ 648..694 '{ ...2]); }': ()
2540+ 658..661 'vec': Vec<i32, Global>
2541+ 664..679 '<[_]>::into_vec': fn into_vec<i32, Global>(Box<[i32], Global>) -> Vec<i32, Global>
2542+ 664..691 '<[_]>:...1i32])': Vec<i32, Global>
2543+ 680..690 'box [1i32]': Box<[i32; _], Global>
2544+ 684..690 '[1i32]': [i32; _]
2545+ 685..689 '1i32': i32
2546+ "# ] ] ,
2547+ )
2548+ }
0 commit comments