@@ -8,7 +8,7 @@ use hir_def::{
8
8
AdtId , EnumVariantId , LocalEnumVariantId , VariantId ,
9
9
} ;
10
10
use la_arena:: RawIdx ;
11
- use rustc_index :: vec :: IndexVec ;
11
+ use smallvec :: SmallVec ;
12
12
13
13
use crate :: { db:: HirDatabase , lang_items:: is_unsafe_cell, layout:: field_ty, Substitution } ;
14
14
@@ -34,13 +34,13 @@ pub fn layout_of_adt_query(
34
34
let ( variants, is_enum, is_union, repr) = match def {
35
35
AdtId :: StructId ( s) => {
36
36
let data = db. struct_data ( s) ;
37
- let mut r = IndexVec :: new ( ) ;
37
+ let mut r = SmallVec :: < [ _ ; 1 ] > :: new ( ) ;
38
38
r. push ( handle_variant ( s. into ( ) , & data. variant_data ) ?) ;
39
39
( r, false , false , data. repr . unwrap_or_default ( ) )
40
40
}
41
41
AdtId :: UnionId ( id) => {
42
42
let data = db. union_data ( id) ;
43
- let mut r = IndexVec :: new ( ) ;
43
+ let mut r = SmallVec :: new ( ) ;
44
44
r. push ( handle_variant ( id. into ( ) , & data. variant_data ) ?) ;
45
45
( r, false , true , data. repr . unwrap_or_default ( ) )
46
46
}
@@ -55,11 +55,12 @@ pub fn layout_of_adt_query(
55
55
& v. variant_data ,
56
56
)
57
57
} )
58
- . collect :: < Result < IndexVec < RustcEnumVariantIdx , _ > , _ > > ( ) ?;
58
+ . collect :: < Result < SmallVec < _ > , _ > > ( ) ?;
59
59
( r, true , false , data. repr . unwrap_or_default ( ) )
60
60
}
61
61
} ;
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 ] > > ( ) ;
63
64
let variants = variants. iter ( ) . map ( |x| x. iter ( ) . collect ( ) ) . collect ( ) ;
64
65
if is_union {
65
66
cx. layout_of_union ( & repr, & variants) . ok_or ( LayoutError :: Unknown )
0 commit comments