diff options
| author | bors <bors@rust-lang.org> | 2016-10-29 08:54:30 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2016-10-29 08:54:30 -0700 |
| commit | 69d364bc4fa44b9224e10d0a182e14800e3ed1e9 (patch) | |
| tree | a59bc3bd02bd1c74b2aa6ed29383232a59afe851 | |
| parent | 75a87c54d0d6a2fa0d5a576a2fa6e03ff23e5f03 (diff) | |
| parent | 3f639a0f11eda43d9a31ef407eaac793dd038a43 (diff) | |
Auto merge of #37449 - pnkfelix:fix-issue-37274, r=eddyb
Do not intern filemap to entry w/ mismatched length. Do not intern filemap to entry w/ mismatched length. Fix #37274 (I think). Beta-nominated; note that only the second commit needs to be cherry picked to beta branch. (The first just adds some debug instrumentation that I wish had been present.)
| -rw-r--r-- | src/librustc_metadata/decoder.rs | 18 | ||||
| -rw-r--r-- | src/libsyntax_pos/lib.rs | 3 |
2 files changed, 21 insertions, 0 deletions
diff --git a/src/librustc_metadata/decoder.rs b/src/librustc_metadata/decoder.rs index 0d42ff8ce27..7f36fa59830 100644 --- a/src/librustc_metadata/decoder.rs +++ b/src/librustc_metadata/decoder.rs @@ -1138,6 +1138,14 @@ impl<'a, 'tcx> CrateMetadata { match reusable_filemap { Some(fm) => { + + debug!("CrateMetaData::imported_filemaps reuse \ + filemap {:?} original (start_pos {:?} end_pos {:?}) \ + translated (start_pos {:?} end_pos {:?})", + filemap_to_import.name, + filemap_to_import.start_pos, filemap_to_import.end_pos, + fm.start_pos, fm.end_pos); + cstore::ImportedFileMap { original_start_pos: filemap_to_import.start_pos, original_end_pos: filemap_to_import.end_pos, @@ -1176,6 +1184,12 @@ impl<'a, 'tcx> CrateMetadata { source_length, lines, multibyte_chars); + debug!("CrateMetaData::imported_filemaps alloc \ + filemap {:?} original (start_pos {:?} end_pos {:?}) \ + translated (start_pos {:?} end_pos {:?})", + local_version.name, start_pos, end_pos, + local_version.start_pos, local_version.end_pos); + cstore::ImportedFileMap { original_start_pos: start_pos, original_end_pos: end_pos, @@ -1193,6 +1207,10 @@ impl<'a, 'tcx> CrateMetadata { } fn are_equal_modulo_startpos(fm1: &syntax_pos::FileMap, fm2: &syntax_pos::FileMap) -> bool { + if fm1.byte_length() != fm2.byte_length() { + return false; + } + if fm1.name != fm2.name { return false; } diff --git a/src/libsyntax_pos/lib.rs b/src/libsyntax_pos/lib.rs index e3feaee5369..d83d3a6c5cf 100644 --- a/src/libsyntax_pos/lib.rs +++ b/src/libsyntax_pos/lib.rs @@ -481,6 +481,9 @@ impl FileMap { self.src.is_none() } + pub fn byte_length(&self) -> u32 { + self.end_pos.0 - self.start_pos.0 + } pub fn count_lines(&self) -> usize { self.lines.borrow().len() } |
