diff options
| author | Masaki Hara <ackie.h.gmai@gmail.com> | 2018-09-27 00:14:38 +0900 |
|---|---|---|
| committer | Masaki Hara <ackie.h.gmai@gmail.com> | 2018-10-24 21:59:07 +0900 |
| commit | 207531606476a1fa03de815c2a112f3909cda48a (patch) | |
| tree | e39135699e30e2f2793df10598b7e274a548ca67 /src/librustc_codegen_utils | |
| parent | 609cc26d3194f8198b1c500b33190c6213e28a89 (diff) | |
| download | rust-207531606476a1fa03de815c2a112f3909cda48a.tar.gz rust-207531606476a1fa03de815c2a112f3909cda48a.zip | |
Include InstanceDef's discriminant in the symbol hash.
Diffstat (limited to 'src/librustc_codegen_utils')
| -rw-r--r-- | src/librustc_codegen_utils/symbol_names.rs | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/src/librustc_codegen_utils/symbol_names.rs b/src/librustc_codegen_utils/symbol_names.rs index 27700bab245..0d95b0c7bbc 100644 --- a/src/librustc_codegen_utils/symbol_names.rs +++ b/src/librustc_codegen_utils/symbol_names.rs @@ -114,6 +114,7 @@ use rustc_mir::monomorphize::Instance; use syntax_pos::symbol::Symbol; use std::fmt::Write; +use std::mem::discriminant; pub fn provide(providers: &mut Providers) { *providers = Providers { @@ -220,8 +221,9 @@ fn get_symbol_hash<'a, 'tcx>( (&tcx.crate_disambiguator(instantiating_crate)).hash_stable(&mut hcx, &mut hasher); } - let is_vtable_shim = instance.is_vtable_shim(); - is_vtable_shim.hash_stable(&mut hcx, &mut hasher); + // We want to avoid accidental collision between different types of instances. + // Especially, VtableShim may overlap with its original instance without this. + discriminant(&instance.def).hash_stable(&mut hcx, &mut hasher); }); // 64 bits should be enough to avoid collisions. |
