]> git.lizzy.rs Git - rust.git/blob - compiler/rustc_hir/src/tests.rs
Rollup merge of #86095 - GuillaumeGomez:search-description-codeblock, r=jsha
[rust.git] / compiler / rustc_hir / src / tests.rs
1 use crate::definitions::{DefKey, DefPathData, DisambiguatedDefPathData};
2 use rustc_data_structures::fingerprint::Fingerprint;
3 use rustc_span::crate_disambiguator::CrateDisambiguator;
4 use rustc_span::def_id::{DefPathHash, StableCrateId};
5
6 #[test]
7 fn def_path_hash_depends_on_crate_id() {
8     // This test makes sure that *both* halves of a DefPathHash depend on
9     // the crate-id of the defining crate. This is a desirable property
10     // because the crate-id can be more easily changed than the DefPath
11     // of an item, so, in the case of a crate-local DefPathHash collision,
12     // the user can simply "role the dice again" for all DefPathHashes in
13     // the crate by changing the crate disambiguator (e.g. via bumping the
14     // crate's version number).
15
16     let d0 = CrateDisambiguator::from(Fingerprint::new(12, 34));
17     let d1 = CrateDisambiguator::from(Fingerprint::new(56, 78));
18
19     let h0 = mk_test_hash("foo", d0);
20     let h1 = mk_test_hash("foo", d1);
21
22     assert_ne!(h0.stable_crate_id(), h1.stable_crate_id());
23     assert_ne!(h0.local_hash(), h1.local_hash());
24
25     fn mk_test_hash(crate_name: &str, crate_disambiguator: CrateDisambiguator) -> DefPathHash {
26         let stable_crate_id = StableCrateId::new(crate_name, crate_disambiguator);
27         let parent_hash = DefPathHash::new(stable_crate_id, 0);
28
29         let key = DefKey {
30             parent: None,
31             disambiguated_data: DisambiguatedDefPathData {
32                 data: DefPathData::CrateRoot,
33                 disambiguator: 0,
34             },
35         };
36
37         key.compute_stable_hash(parent_hash)
38     }
39 }