about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorMichael Woerister <michaelwoerister@posteo>2017-12-15 16:50:07 -0600
committerMichael Woerister <michaelwoerister@posteo>2017-12-15 16:50:07 -0600
commitc7e5b703cd5c4926b477fe1ded13df42d31a62da (patch)
treef4ab0a465ecef6c8123307a14c40f8da486745ff /src
parent77efd6800c57ba83923dddbbabf03c7afa6a34a4 (diff)
downloadrust-c7e5b703cd5c4926b477fe1ded13df42d31a62da.tar.gz
rust-c7e5b703cd5c4926b477fe1ded13df42d31a62da.zip
incr.comp.: Revert hashing optimization that caused regression.
Diffstat (limited to 'src')
-rw-r--r--src/librustc/ich/hcx.rs2
-rw-r--r--src/librustc/ich/impls_syntax.rs2
-rw-r--r--src/librustc/ty/maps/on_disk_cache.rs2
-rw-r--r--src/librustc_metadata/decoder.rs2
-rw-r--r--src/libsyntax/codemap.rs26
-rw-r--r--src/libsyntax_pos/lib.rs33
6 files changed, 24 insertions, 43 deletions
diff --git a/src/librustc/ich/hcx.rs b/src/librustc/ich/hcx.rs
index f9fb668110b..7099b951129 100644
--- a/src/librustc/ich/hcx.rs
+++ b/src/librustc/ich/hcx.rs
@@ -341,7 +341,7 @@ impl<'gcx> HashStable<StableHashingContext<'gcx>> for Span {
         std_hash::Hash::hash(&TAG_VALID_SPAN, hasher);
         // We truncate the stable_id hash and line and col numbers. The chances
         // of causing a collision this way should be minimal.
-        std_hash::Hash::hash(&(file_lo.stable_id.0 as u64), hasher);
+        std_hash::Hash::hash(&file_lo.name, hasher);
 
         let col = (col_lo.0 as u64) & 0xFF;
         let line = ((line_lo as u64) & 0xFF_FF_FF) << 8;
diff --git a/src/librustc/ich/impls_syntax.rs b/src/librustc/ich/impls_syntax.rs
index dfb90a5d27f..c25aa10eb1e 100644
--- a/src/librustc/ich/impls_syntax.rs
+++ b/src/librustc/ich/impls_syntax.rs
@@ -394,8 +394,6 @@ impl<'gcx> HashStable<StableHashingContext<'gcx>> for FileMap {
             // Do not hash the source as it is not encoded
             src: _,
             src_hash,
-            // The stable id is just a hash of other fields
-            stable_id: _,
             external_src: _,
             start_pos,
             end_pos: _,
diff --git a/src/librustc/ty/maps/on_disk_cache.rs b/src/librustc/ty/maps/on_disk_cache.rs
index 7d583a35477..079b518efd8 100644
--- a/src/librustc/ty/maps/on_disk_cache.rs
+++ b/src/librustc/ty/maps/on_disk_cache.rs
@@ -176,7 +176,7 @@ impl<'sess> OnDiskCache<'sess> {
                 let index = FileMapIndex(index as u32);
                 let file_ptr: *const FileMap = &**file as *const _;
                 file_to_file_index.insert(file_ptr, index);
-                file_index_to_stable_id.insert(index, file.stable_id);
+                file_index_to_stable_id.insert(index, StableFilemapId::new(&file));
             }
 
             (file_to_file_index, file_index_to_stable_id)
diff --git a/src/librustc_metadata/decoder.rs b/src/librustc_metadata/decoder.rs
index aa7eee366d2..49a017535ff 100644
--- a/src/librustc_metadata/decoder.rs
+++ b/src/librustc_metadata/decoder.rs
@@ -1124,7 +1124,6 @@ impl<'a, 'tcx> CrateMetadata {
             let syntax_pos::FileMap { name,
                                       name_was_remapped,
                                       src_hash,
-                                      stable_id,
                                       start_pos,
                                       end_pos,
                                       lines,
@@ -1156,7 +1155,6 @@ impl<'a, 'tcx> CrateMetadata {
                                                                    name_was_remapped,
                                                                    self.cnum.as_u32(),
                                                                    src_hash,
-                                                                   stable_id,
                                                                    source_length,
                                                                    lines,
                                                                    multibyte_chars,
diff --git a/src/libsyntax/codemap.rs b/src/libsyntax/codemap.rs
index 07bba29ca4b..2c91d60ce9d 100644
--- a/src/libsyntax/codemap.rs
+++ b/src/libsyntax/codemap.rs
@@ -23,7 +23,9 @@ pub use syntax_pos::hygiene::{ExpnFormat, ExpnInfo, NameAndSpan};
 pub use self::ExpnFormat::*;
 
 use rustc_data_structures::fx::FxHashMap;
+use rustc_data_structures::stable_hasher::StableHasher;
 use std::cell::{RefCell, Ref};
+use std::hash::Hash;
 use std::path::{Path, PathBuf};
 use std::rc::Rc;
 
@@ -100,6 +102,24 @@ impl FileLoader for RealFileLoader {
     }
 }
 
+// This is a FileMap identifier that is used to correlate FileMaps between
+// subsequent compilation sessions (which is something we need to do during
+// incremental compilation).
+#[derive(Copy, Clone, PartialEq, Eq, Hash, RustcEncodable, RustcDecodable, Debug)]
+pub struct StableFilemapId(u128);
+
+impl StableFilemapId {
+    pub fn new(filemap: &FileMap) -> StableFilemapId {
+        let mut hasher = StableHasher::new();
+
+        filemap.name.hash(&mut hasher);
+        filemap.name_was_remapped.hash(&mut hasher);
+        filemap.unmapped_path.hash(&mut hasher);
+
+        StableFilemapId(hasher.finish())
+    }
+}
+
 // _____________________________________________________________________________
 // CodeMap
 //
@@ -197,7 +217,7 @@ impl CodeMap {
 
         self.stable_id_to_filemap
             .borrow_mut()
-            .insert(filemap.stable_id, filemap.clone());
+            .insert(StableFilemapId::new(&filemap), filemap.clone());
 
         filemap
     }
@@ -226,7 +246,6 @@ impl CodeMap {
                                 name_was_remapped: bool,
                                 crate_of_origin: u32,
                                 src_hash: u128,
-                                stable_id: StableFilemapId,
                                 source_len: usize,
                                 mut file_local_lines: Vec<BytePos>,
                                 mut file_local_multibyte_chars: Vec<MultiByteChar>,
@@ -257,7 +276,6 @@ impl CodeMap {
             crate_of_origin,
             src: None,
             src_hash,
-            stable_id,
             external_src: RefCell::new(ExternalSource::AbsentOk),
             start_pos,
             end_pos,
@@ -270,7 +288,7 @@ impl CodeMap {
 
         self.stable_id_to_filemap
             .borrow_mut()
-            .insert(stable_id, filemap.clone());
+            .insert(StableFilemapId::new(&filemap), filemap.clone());
 
         filemap
     }
diff --git a/src/libsyntax_pos/lib.rs b/src/libsyntax_pos/lib.rs
index c3d2f0de21d..8d5d7c81c0e 100644
--- a/src/libsyntax_pos/lib.rs
+++ b/src/libsyntax_pos/lib.rs
@@ -678,8 +678,6 @@ pub struct FileMap {
     pub src: Option<Rc<String>>,
     /// The source code's hash
     pub src_hash: u128,
-    /// The stable id used during incr. comp.
-    pub stable_id: StableFilemapId,
     /// The external source code (used for external crates, which will have a `None`
     /// value as `self.src`.
     pub external_src: RefCell<ExternalSource>,
@@ -695,34 +693,12 @@ pub struct FileMap {
     pub non_narrow_chars: RefCell<Vec<NonNarrowChar>>,
 }
 
-// This is a FileMap identifier that is used to correlate FileMaps between
-// subsequent compilation sessions (which is something we need to do during
-// incremental compilation).
-#[derive(Copy, Clone, PartialEq, Eq, Hash, RustcEncodable, RustcDecodable, Debug)]
-pub struct StableFilemapId(pub u128);
-
-impl StableFilemapId {
-    pub fn new(name: &FileName,
-               name_was_remapped: bool,
-               unmapped_path: &FileName)
-               -> StableFilemapId {
-        use std::hash::Hash;
-
-        let mut hasher = StableHasher::new();
-        name.hash(&mut hasher);
-        name_was_remapped.hash(&mut hasher);
-        unmapped_path.hash(&mut hasher);
-        StableFilemapId(hasher.finish())
-    }
-}
-
 impl Encodable for FileMap {
     fn encode<S: Encoder>(&self, s: &mut S) -> Result<(), S::Error> {
         s.emit_struct("FileMap", 8, |s| {
             s.emit_struct_field("name", 0, |s| self.name.encode(s))?;
             s.emit_struct_field("name_was_remapped", 1, |s| self.name_was_remapped.encode(s))?;
             s.emit_struct_field("src_hash", 2, |s| self.src_hash.encode(s))?;
-            s.emit_struct_field("stable_id", 3, |s| self.stable_id.encode(s))?;
             s.emit_struct_field("start_pos", 4, |s| self.start_pos.encode(s))?;
             s.emit_struct_field("end_pos", 5, |s| self.end_pos.encode(s))?;
             s.emit_struct_field("lines", 6, |s| {
@@ -790,8 +766,6 @@ impl Decodable for FileMap {
                 d.read_struct_field("name_was_remapped", 1, |d| Decodable::decode(d))?;
             let src_hash: u128 =
                 d.read_struct_field("src_hash", 2, |d| Decodable::decode(d))?;
-            let stable_id: StableFilemapId =
-                d.read_struct_field("stable_id", 3, |d| Decodable::decode(d))?;
             let start_pos: BytePos =
                 d.read_struct_field("start_pos", 4, |d| Decodable::decode(d))?;
             let end_pos: BytePos = d.read_struct_field("end_pos", 5, |d| Decodable::decode(d))?;
@@ -839,7 +813,6 @@ impl Decodable for FileMap {
                 end_pos,
                 src: None,
                 src_hash,
-                stable_id,
                 external_src: RefCell::new(ExternalSource::AbsentOk),
                 lines: RefCell::new(lines),
                 multibyte_chars: RefCell::new(multibyte_chars),
@@ -866,11 +839,6 @@ impl FileMap {
         let mut hasher: StableHasher<u128> = StableHasher::new();
         hasher.write(src.as_bytes());
         let src_hash = hasher.finish();
-
-        let stable_id = StableFilemapId::new(&name,
-                                             name_was_remapped,
-                                             &unmapped_path);
-
         let end_pos = start_pos.to_usize() + src.len();
 
         FileMap {
@@ -880,7 +848,6 @@ impl FileMap {
             crate_of_origin: 0,
             src: Some(Rc::new(src)),
             src_hash,
-            stable_id,
             external_src: RefCell::new(ExternalSource::Unneeded),
             start_pos,
             end_pos: Pos::from_usize(end_pos),