@@ -19,6 +19,7 @@ use rustc_span::symbol::sym;
1919use  rustc_span:: SourceFileHashAlgorithm ; 
2020use  rustc_target:: spec:: { CodeModel ,  LinkerFlavor ,  MergeFunctions ,  PanicStrategy } ; 
2121use  rustc_target:: spec:: { RelocModel ,  RelroLevel ,  SanitizerSet ,  SplitDebuginfo ,  TlsModel } ; 
22+ 
2223use  std:: collections:: { BTreeMap ,  BTreeSet } ; 
2324use  std:: iter:: FromIterator ; 
2425use  std:: num:: NonZeroUsize ; 
@@ -74,6 +75,27 @@ fn mk_map<K: Ord, V>(entries: Vec<(K, V)>) -> BTreeMap<K, V> {
7475    BTreeMap :: from_iter ( entries. into_iter ( ) ) 
7576} 
7677
78+ fn  assert_same_clone ( x :  & Options )  { 
79+     assert_eq ! ( x. dep_tracking_hash( true ) ,  x. clone( ) . dep_tracking_hash( true ) ) ; 
80+     assert_eq ! ( x. dep_tracking_hash( false ) ,  x. clone( ) . dep_tracking_hash( false ) ) ; 
81+ } 
82+ 
83+ fn  assert_same_hash ( x :  & Options ,  y :  & Options )  { 
84+     assert_eq ! ( x. dep_tracking_hash( true ) ,  y. dep_tracking_hash( true ) ) ; 
85+     assert_eq ! ( x. dep_tracking_hash( false ) ,  y. dep_tracking_hash( false ) ) ; 
86+     // Check clone 
87+     assert_same_clone ( x) ; 
88+     assert_same_clone ( y) ; 
89+ } 
90+ 
91+ fn  assert_different_hash ( x :  & Options ,  y :  & Options )  { 
92+     assert_ne ! ( x. dep_tracking_hash( true ) ,  y. dep_tracking_hash( true ) ) ; 
93+     assert_ne ! ( x. dep_tracking_hash( false ) ,  y. dep_tracking_hash( false ) ) ; 
94+     // Check clone 
95+     assert_same_clone ( x) ; 
96+     assert_same_clone ( y) ; 
97+ } 
98+ 
7799// When the user supplies --test we should implicitly supply --cfg test 
78100#[ test]  
79101fn  test_switch_implies_cfg_test ( )  { 
@@ -130,14 +152,9 @@ fn test_output_types_tracking_hash_different_paths() {
130152    v2. output_types  = OutputTypes :: new ( & [ ( OutputType :: Exe ,  Some ( PathBuf :: from ( "/some/thing" ) ) ) ] ) ; 
131153    v3. output_types  = OutputTypes :: new ( & [ ( OutputType :: Exe ,  None ) ] ) ; 
132154
133-     assert ! ( v1. dep_tracking_hash( )  != v2. dep_tracking_hash( ) ) ; 
134-     assert ! ( v1. dep_tracking_hash( )  != v3. dep_tracking_hash( ) ) ; 
135-     assert ! ( v2. dep_tracking_hash( )  != v3. dep_tracking_hash( ) ) ; 
136- 
137-     // Check clone 
138-     assert_eq ! ( v1. dep_tracking_hash( ) ,  v1. clone( ) . dep_tracking_hash( ) ) ; 
139-     assert_eq ! ( v2. dep_tracking_hash( ) ,  v2. clone( ) . dep_tracking_hash( ) ) ; 
140-     assert_eq ! ( v3. dep_tracking_hash( ) ,  v3. clone( ) . dep_tracking_hash( ) ) ; 
155+     assert_different_hash ( & v1,  & v2) ; 
156+     assert_different_hash ( & v1,  & v3) ; 
157+     assert_different_hash ( & v2,  & v3) ; 
141158} 
142159
143160#[ test]  
@@ -155,10 +172,7 @@ fn test_output_types_tracking_hash_different_construction_order() {
155172        ( OutputType :: Exe ,  Some ( PathBuf :: from ( "./some/thing" ) ) ) , 
156173    ] ) ; 
157174
158-     assert_eq ! ( v1. dep_tracking_hash( ) ,  v2. dep_tracking_hash( ) ) ; 
159- 
160-     // Check clone 
161-     assert_eq ! ( v1. dep_tracking_hash( ) ,  v1. clone( ) . dep_tracking_hash( ) ) ; 
175+     assert_same_hash ( & v1,  & v2) ; 
162176} 
163177
164178#[ test]  
@@ -182,14 +196,9 @@ fn test_externs_tracking_hash_different_construction_order() {
182196        ( String :: from( "d" ) ,  new_public_extern_entry( vec![ "f" ,  "e" ] ) ) , 
183197    ] ) ) ; 
184198
185-     assert_eq ! ( v1. dep_tracking_hash( ) ,  v2. dep_tracking_hash( ) ) ; 
186-     assert_eq ! ( v1. dep_tracking_hash( ) ,  v3. dep_tracking_hash( ) ) ; 
187-     assert_eq ! ( v2. dep_tracking_hash( ) ,  v3. dep_tracking_hash( ) ) ; 
188- 
189-     // Check clone 
190-     assert_eq ! ( v1. dep_tracking_hash( ) ,  v1. clone( ) . dep_tracking_hash( ) ) ; 
191-     assert_eq ! ( v2. dep_tracking_hash( ) ,  v2. clone( ) . dep_tracking_hash( ) ) ; 
192-     assert_eq ! ( v3. dep_tracking_hash( ) ,  v3. clone( ) . dep_tracking_hash( ) ) ; 
199+     assert_same_hash ( & v1,  & v2) ; 
200+     assert_same_hash ( & v1,  & v3) ; 
201+     assert_same_hash ( & v2,  & v3) ; 
193202} 
194203
195204#[ test]  
@@ -219,14 +228,9 @@ fn test_lints_tracking_hash_different_values() {
219228        ( String :: from( "d" ) ,  Level :: Deny ) , 
220229    ] ; 
221230
222-     assert ! ( v1. dep_tracking_hash( )  != v2. dep_tracking_hash( ) ) ; 
223-     assert ! ( v1. dep_tracking_hash( )  != v3. dep_tracking_hash( ) ) ; 
224-     assert ! ( v2. dep_tracking_hash( )  != v3. dep_tracking_hash( ) ) ; 
225- 
226-     // Check clone 
227-     assert_eq ! ( v1. dep_tracking_hash( ) ,  v1. clone( ) . dep_tracking_hash( ) ) ; 
228-     assert_eq ! ( v2. dep_tracking_hash( ) ,  v2. clone( ) . dep_tracking_hash( ) ) ; 
229-     assert_eq ! ( v3. dep_tracking_hash( ) ,  v3. clone( ) . dep_tracking_hash( ) ) ; 
231+     assert_different_hash ( & v1,  & v2) ; 
232+     assert_different_hash ( & v1,  & v3) ; 
233+     assert_different_hash ( & v2,  & v3) ; 
230234} 
231235
232236#[ test]  
@@ -248,11 +252,7 @@ fn test_lints_tracking_hash_different_construction_order() {
248252        ( String :: from( "d" ) ,  Level :: Forbid ) , 
249253    ] ; 
250254
251-     assert_eq ! ( v1. dep_tracking_hash( ) ,  v2. dep_tracking_hash( ) ) ; 
252- 
253-     // Check clone 
254-     assert_eq ! ( v1. dep_tracking_hash( ) ,  v1. clone( ) . dep_tracking_hash( ) ) ; 
255-     assert_eq ! ( v2. dep_tracking_hash( ) ,  v2. clone( ) . dep_tracking_hash( ) ) ; 
255+     assert_same_hash ( & v1,  & v2) ; 
256256} 
257257
258258#[ test]  
@@ -292,15 +292,9 @@ fn test_search_paths_tracking_hash_different_order() {
292292    v4. search_paths . push ( SearchPath :: from_cli_opt ( "dependency=ghi" ,  JSON ) ) ; 
293293    v4. search_paths . push ( SearchPath :: from_cli_opt ( "framework=jkl" ,  JSON ) ) ; 
294294
295-     assert ! ( v1. dep_tracking_hash( )  == v2. dep_tracking_hash( ) ) ; 
296-     assert ! ( v1. dep_tracking_hash( )  == v3. dep_tracking_hash( ) ) ; 
297-     assert ! ( v1. dep_tracking_hash( )  == v4. dep_tracking_hash( ) ) ; 
298- 
299-     // Check clone 
300-     assert_eq ! ( v1. dep_tracking_hash( ) ,  v1. clone( ) . dep_tracking_hash( ) ) ; 
301-     assert_eq ! ( v2. dep_tracking_hash( ) ,  v2. clone( ) . dep_tracking_hash( ) ) ; 
302-     assert_eq ! ( v3. dep_tracking_hash( ) ,  v3. clone( ) . dep_tracking_hash( ) ) ; 
303-     assert_eq ! ( v4. dep_tracking_hash( ) ,  v4. clone( ) . dep_tracking_hash( ) ) ; 
295+     assert_same_hash ( & v1,  & v2) ; 
296+     assert_same_hash ( & v1,  & v3) ; 
297+     assert_same_hash ( & v1,  & v4) ; 
304298} 
305299
306300#[ test]  
@@ -338,15 +332,9 @@ fn test_native_libs_tracking_hash_different_values() {
338332        ( String :: from( "c" ) ,  None ,  NativeLibKind :: Unspecified ) , 
339333    ] ; 
340334
341-     assert ! ( v1. dep_tracking_hash( )  != v2. dep_tracking_hash( ) ) ; 
342-     assert ! ( v1. dep_tracking_hash( )  != v3. dep_tracking_hash( ) ) ; 
343-     assert ! ( v1. dep_tracking_hash( )  != v4. dep_tracking_hash( ) ) ; 
344- 
345-     // Check clone 
346-     assert_eq ! ( v1. dep_tracking_hash( ) ,  v1. clone( ) . dep_tracking_hash( ) ) ; 
347-     assert_eq ! ( v2. dep_tracking_hash( ) ,  v2. clone( ) . dep_tracking_hash( ) ) ; 
348-     assert_eq ! ( v3. dep_tracking_hash( ) ,  v3. clone( ) . dep_tracking_hash( ) ) ; 
349-     assert_eq ! ( v4. dep_tracking_hash( ) ,  v4. clone( ) . dep_tracking_hash( ) ) ; 
335+     assert_different_hash ( & v1,  & v2) ; 
336+     assert_different_hash ( & v1,  & v3) ; 
337+     assert_different_hash ( & v1,  & v4) ; 
350338} 
351339
352340#[ test]  
@@ -374,14 +362,9 @@ fn test_native_libs_tracking_hash_different_order() {
374362        ( String :: from( "b" ) ,  None ,  NativeLibKind :: Framework ) , 
375363    ] ; 
376364
377-     assert ! ( v1. dep_tracking_hash( )  == v2. dep_tracking_hash( ) ) ; 
378-     assert ! ( v1. dep_tracking_hash( )  == v3. dep_tracking_hash( ) ) ; 
379-     assert ! ( v2. dep_tracking_hash( )  == v3. dep_tracking_hash( ) ) ; 
380- 
381-     // Check clone 
382-     assert_eq ! ( v1. dep_tracking_hash( ) ,  v1. clone( ) . dep_tracking_hash( ) ) ; 
383-     assert_eq ! ( v2. dep_tracking_hash( ) ,  v2. clone( ) . dep_tracking_hash( ) ) ; 
384-     assert_eq ! ( v3. dep_tracking_hash( ) ,  v3. clone( ) . dep_tracking_hash( ) ) ; 
365+     assert_same_hash ( & v1,  & v2) ; 
366+     assert_same_hash ( & v1,  & v3) ; 
367+     assert_same_hash ( & v2,  & v3) ; 
385368} 
386369
387370#[ test]  
@@ -391,8 +374,9 @@ fn test_codegen_options_tracking_hash() {
391374
392375    macro_rules!  untracked { 
393376        ( $name:  ident,  $non_default_value:  expr)  => { 
377+             assert_ne!( opts. cg. $name,  $non_default_value) ; 
394378            opts. cg. $name = $non_default_value; 
395-             assert_eq! ( reference. dep_tracking_hash ( ) ,   opts. dep_tracking_hash ( ) ) ; 
379+             assert_same_hash ( & reference,   & opts) ; 
396380        } ; 
397381    } 
398382
@@ -416,8 +400,9 @@ fn test_codegen_options_tracking_hash() {
416400    macro_rules!  tracked { 
417401        ( $name:  ident,  $non_default_value:  expr)  => { 
418402            opts = reference. clone( ) ; 
403+             assert_ne!( opts. cg. $name,  $non_default_value) ; 
419404            opts. cg. $name = $non_default_value; 
420-             assert_ne! ( reference. dep_tracking_hash ( ) ,   opts. dep_tracking_hash ( ) ) ; 
405+             assert_different_hash ( & reference,   & opts) ; 
421406        } ; 
422407    } 
423408
@@ -454,15 +439,42 @@ fn test_codegen_options_tracking_hash() {
454439    tracked ! ( target_feature,  String :: from( "all the features, all of them" ) ) ; 
455440} 
456441
442+ #[ test]  
443+ fn  test_top_level_options_tracked_no_crate ( )  { 
444+     let  reference = Options :: default ( ) ; 
445+     let  mut  opts; 
446+ 
447+     macro_rules!  tracked { 
448+         ( $name:  ident,  $non_default_value:  expr)  => { 
449+             opts = reference. clone( ) ; 
450+             assert_ne!( opts. $name,  $non_default_value) ; 
451+             opts. $name = $non_default_value; 
452+             // The crate hash should be the same 
453+             assert_eq!( reference. dep_tracking_hash( true ) ,  opts. dep_tracking_hash( true ) ) ; 
454+             // The incremental hash should be different 
455+             assert_ne!( reference. dep_tracking_hash( false ) ,  opts. dep_tracking_hash( false ) ) ; 
456+         } ; 
457+     } 
458+ 
459+     // Make sure that changing a [TRACKED_NO_CRATE_HASH] option leaves the crate hash unchanged but changes the incremental hash. 
460+     // This list is in alphabetical order. 
461+     tracked ! ( remap_path_prefix,  vec![ ( "/home/bors/rust" . into( ) ,  "src" . into( ) ) ] ) ; 
462+     tracked ! ( 
463+         real_rust_source_base_dir, 
464+         Some ( "/home/bors/rust/.rustup/toolchains/nightly/lib/rustlib/src/rust" . into( ) ) 
465+     ) ; 
466+ } 
467+ 
457468#[ test]  
458469fn  test_debugging_options_tracking_hash ( )  { 
459470    let  reference = Options :: default ( ) ; 
460471    let  mut  opts = Options :: default ( ) ; 
461472
462473    macro_rules!  untracked { 
463474        ( $name:  ident,  $non_default_value:  expr)  => { 
475+             assert_ne!( opts. debugging_opts. $name,  $non_default_value) ; 
464476            opts. debugging_opts. $name = $non_default_value; 
465-             assert_eq! ( reference. dep_tracking_hash ( ) ,   opts. dep_tracking_hash ( ) ) ; 
477+             assert_same_hash ( & reference,   & opts) ; 
466478        } ; 
467479    } 
468480
@@ -471,7 +483,7 @@ fn test_debugging_options_tracking_hash() {
471483    untracked ! ( ast_json,  true ) ; 
472484    untracked ! ( ast_json_noexpand,  true ) ; 
473485    untracked ! ( borrowck,  String :: from( "other" ) ) ; 
474-     untracked ! ( deduplicate_diagnostics,  true ) ; 
486+     untracked ! ( deduplicate_diagnostics,  false ) ; 
475487    untracked ! ( dep_tasks,  true ) ; 
476488    untracked ! ( dont_buffer_diagnostics,  true ) ; 
477489    untracked ! ( dump_dep_graph,  true ) ; 
@@ -515,7 +527,7 @@ fn test_debugging_options_tracking_hash() {
515527    untracked ! ( self_profile_events,  Some ( vec![ String :: new( ) ] ) ) ; 
516528    untracked ! ( span_debug,  true ) ; 
517529    untracked ! ( span_free_formats,  true ) ; 
518-     untracked ! ( strip,  Strip :: None ) ; 
530+     untracked ! ( strip,  Strip :: Debuginfo ) ; 
519531    untracked ! ( terminal_width,  Some ( 80 ) ) ; 
520532    untracked ! ( threads,  99 ) ; 
521533    untracked ! ( time,  true ) ; 
@@ -532,8 +544,9 @@ fn test_debugging_options_tracking_hash() {
532544    macro_rules!  tracked { 
533545        ( $name:  ident,  $non_default_value:  expr)  => { 
534546            opts = reference. clone( ) ; 
547+             assert_ne!( opts. debugging_opts. $name,  $non_default_value) ; 
535548            opts. debugging_opts. $name = $non_default_value; 
536-             assert_ne! ( reference. dep_tracking_hash ( ) ,   opts. dep_tracking_hash ( ) ) ; 
549+             assert_different_hash ( & reference,   & opts) ; 
537550        } ; 
538551    } 
539552
0 commit comments