@@ -5,7 +5,8 @@ use rustc_codegen_ssa::{
5
5
debuginfo:: { type_names:: compute_debuginfo_type_name, wants_c_like_enum_debuginfo} ,
6
6
traits:: ConstMethods ,
7
7
} ;
8
- use rustc_data_structures:: fx:: FxHashMap ;
8
+
9
+ use rustc_index:: vec:: IndexVec ;
9
10
use rustc_middle:: {
10
11
bug,
11
12
ty:: {
@@ -680,6 +681,7 @@ fn build_union_fields_for_direct_tag_generator<'ll, 'tcx>(
680
681
681
682
let common_upvar_names = closure_saved_names_of_captured_variables ( cx. tcx , generator_def_id) ;
682
683
let variant_range = generator_substs. variant_range ( generator_def_id, cx. tcx ) ;
684
+ let variant_count = ( variant_range. start . as_u32 ( ) ..variant_range. end . as_u32 ( ) ) . len ( ) ;
683
685
684
686
let tag_base_type = tag_base_type ( cx, generator_type_and_layout) ;
685
687
@@ -691,10 +693,17 @@ fn build_union_fields_for_direct_tag_generator<'ll, 'tcx>(
691
693
. map ( |variant_index| ( variant_index, GeneratorSubsts :: variant_name ( variant_index) ) ) ,
692
694
) ;
693
695
694
- let discriminants: FxHashMap < VariantIdx , DiscrResult > = generator_substs
695
- . discriminants ( generator_def_id, cx. tcx )
696
- . map ( |( variant_index, discr) | ( variant_index, DiscrResult :: Value ( discr. val ) ) )
697
- . collect ( ) ;
696
+ let discriminants: IndexVec < VariantIdx , DiscrResult > = {
697
+ let discriminants_iter = generator_substs. discriminants ( generator_def_id, cx. tcx ) ;
698
+ let mut discriminants: IndexVec < VariantIdx , DiscrResult > =
699
+ IndexVec :: with_capacity ( variant_count) ;
700
+ for ( variant_index, discr) in discriminants_iter {
701
+ // Assert that the index in the IndexMap matches up with the given VariantIdx.
702
+ assert_eq ! ( variant_index, discriminants. next_index( ) ) ;
703
+ discriminants. push ( DiscrResult :: Value ( discr. val ) ) ;
704
+ }
705
+ discriminants
706
+ } ;
698
707
699
708
// Build the type node for each field.
700
709
let variant_field_infos: SmallVec < VariantFieldInfo < ' ll > > = variant_range
@@ -721,7 +730,7 @@ fn build_union_fields_for_direct_tag_generator<'ll, 'tcx>(
721
730
variant_index,
722
731
variant_struct_type_di_node,
723
732
source_info,
724
- discr : discriminants[ & variant_index] ,
733
+ discr : discriminants[ variant_index] ,
725
734
}
726
735
} )
727
736
. collect ( ) ;
0 commit comments