@@ -8,7 +8,7 @@ use hir_def::{
88 AdtId , EnumVariantId , LocalEnumVariantId , VariantId ,
99} ;
1010use la_arena:: RawIdx ;
11- use rustc_index :: vec :: IndexVec ;
11+ use smallvec :: SmallVec ;
1212
1313use crate :: { db:: HirDatabase , lang_items:: is_unsafe_cell, layout:: field_ty, Substitution } ;
1414
@@ -34,13 +34,13 @@ pub fn layout_of_adt_query(
3434 let ( variants, is_enum, is_union, repr) = match def {
3535 AdtId :: StructId ( s) => {
3636 let data = db. struct_data ( s) ;
37- let mut r = IndexVec :: new ( ) ;
37+ let mut r = SmallVec :: < [ _ ; 1 ] > :: new ( ) ;
3838 r. push ( handle_variant ( s. into ( ) , & data. variant_data ) ?) ;
3939 ( r, false , false , data. repr . unwrap_or_default ( ) )
4040 }
4141 AdtId :: UnionId ( id) => {
4242 let data = db. union_data ( id) ;
43- let mut r = IndexVec :: new ( ) ;
43+ let mut r = SmallVec :: new ( ) ;
4444 r. push ( handle_variant ( id. into ( ) , & data. variant_data ) ?) ;
4545 ( r, false , true , data. repr . unwrap_or_default ( ) )
4646 }
@@ -55,11 +55,12 @@ pub fn layout_of_adt_query(
5555 & v. variant_data ,
5656 )
5757 } )
58- . collect :: < Result < IndexVec < RustcEnumVariantIdx , _ > , _ > > ( ) ?;
58+ . collect :: < Result < SmallVec < _ > , _ > > ( ) ?;
5959 ( r, true , false , data. repr . unwrap_or_default ( ) )
6060 }
6161 } ;
62- let variants = variants. iter ( ) . map ( |x| x. iter ( ) . collect :: < Vec < _ > > ( ) ) . collect :: < Vec < _ > > ( ) ;
62+ let variants =
63+ variants. iter ( ) . map ( |x| x. iter ( ) . collect :: < Vec < _ > > ( ) ) . collect :: < SmallVec < [ _ ; 1 ] > > ( ) ;
6364 let variants = variants. iter ( ) . map ( |x| x. iter ( ) . collect ( ) ) . collect ( ) ;
6465 if is_union {
6566 cx. layout_of_union ( & repr, & variants) . ok_or ( LayoutError :: Unknown )
0 commit comments