@@ -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