@@ -15,7 +15,7 @@ use rustc::hir::def_id::LOCAL_CRATE;
15
15
use rustc:: middle:: exported_symbols:: SymbolExportLevel ;
16
16
use rustc:: session:: config:: { self , Lto } ;
17
17
use rustc:: util:: common:: time_ext;
18
- use rustc_data_structures:: fx:: FxHashMap ;
18
+ use rustc_data_structures:: fx:: { FxHashSet , FxHashMap } ;
19
19
use rustc_codegen_ssa:: { RLIB_BYTECODE_EXTENSION , ModuleCodegen , ModuleKind } ;
20
20
21
21
use std:: ffi:: { CStr , CString } ;
@@ -584,13 +584,11 @@ fn thin_lto(cgcx: &CodegenContext<LlvmCodegenBackend>,
584
584
fn equivalent_as_sets ( a : & [ String ] , b : & [ String ] ) -> bool {
585
585
// cheap path: unequal lengths means cannot possibly be set equivalent.
586
586
if a. len ( ) != b. len ( ) { return false ; }
587
- // fast path: before sorting , check if inputs are equivalent as is.
587
+ // fast path: before building new things , check if inputs are equivalent as is.
588
588
if a == b { return true ; }
589
- // slow path: compare sorted contents
590
- let mut a: Vec < & str > = a. iter ( ) . map ( |s| s. as_str ( ) ) . collect ( ) ;
591
- let mut b: Vec < & str > = b. iter ( ) . map ( |s| s. as_str ( ) ) . collect ( ) ;
592
- a. sort ( ) ;
593
- b. sort ( ) ;
589
+ // slow path: general set comparison.
590
+ let a: FxHashSet < & str > = a. iter ( ) . map ( |s| s. as_str ( ) ) . collect ( ) ;
591
+ let b: FxHashSet < & str > = b. iter ( ) . map ( |s| s. as_str ( ) ) . collect ( ) ;
594
592
a == b
595
593
}
596
594
0 commit comments