mirror of
				https://github.com/rust-lang/rust.git
				synced 2025-10-31 13:04:42 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			46 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Rust
		
	
	
	
	
	
			
		
		
	
	
			46 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Rust
		
	
	
	
	
	
| #![allow(rustc::symbol_intern_string_literal)]
 | |
| 
 | |
| use rustc_hashes::Hash64;
 | |
| use rustc_span::def_id::{DefPathHash, StableCrateId};
 | |
| use rustc_span::edition::Edition;
 | |
| use rustc_span::{Symbol, create_session_globals_then};
 | |
| 
 | |
| use crate::definitions::{DefKey, DefPathData, DisambiguatedDefPathData};
 | |
| 
 | |
| #[test]
 | |
| fn def_path_hash_depends_on_crate_id() {
 | |
|     // This test makes sure that *both* halves of a DefPathHash depend on
 | |
|     // the crate-id of the defining crate. This is a desirable property
 | |
|     // because the crate-id can be more easily changed than the DefPath
 | |
|     // of an item, so, in the case of a crate-local DefPathHash collision,
 | |
|     // the user can simply "roll the dice again" for all DefPathHashes in
 | |
|     // the crate by changing the crate disambiguator (e.g. via bumping the
 | |
|     // crate's version number).
 | |
| 
 | |
|     create_session_globals_then(Edition::Edition2024, &[], None, || {
 | |
|         let id0 = StableCrateId::new(Symbol::intern("foo"), false, vec!["1".to_string()], "");
 | |
|         let id1 = StableCrateId::new(Symbol::intern("foo"), false, vec!["2".to_string()], "");
 | |
| 
 | |
|         let h0 = mk_test_hash(id0);
 | |
|         let h1 = mk_test_hash(id1);
 | |
| 
 | |
|         assert_ne!(h0.stable_crate_id(), h1.stable_crate_id());
 | |
|         assert_ne!(h0.local_hash(), h1.local_hash());
 | |
| 
 | |
|         fn mk_test_hash(stable_crate_id: StableCrateId) -> DefPathHash {
 | |
|             let parent_hash =
 | |
|                 DefPathHash::new(stable_crate_id, Hash64::new(stable_crate_id.as_u64()));
 | |
| 
 | |
|             let key = DefKey {
 | |
|                 parent: None,
 | |
|                 disambiguated_data: DisambiguatedDefPathData {
 | |
|                     data: DefPathData::CrateRoot,
 | |
|                     disambiguator: 0,
 | |
|                 },
 | |
|             };
 | |
| 
 | |
|             key.compute_stable_hash(parent_hash)
 | |
|         }
 | |
|     })
 | |
| }
 | 
