diff options
| author | Dylan DPC <dylan.dpc@gmail.com> | 2021-01-13 03:20:21 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-01-13 03:20:21 +0100 |
| commit | 7ce8246a2393af53492d2c415f6f415099ce08d2 (patch) | |
| tree | dfb642e0da76e43afef1220c60e15d45e9d3b952 /compiler/rustc_span/src | |
| parent | 330e196c492ec22f50786bf75676dd837d61b967 (diff) | |
| parent | d7ce9d5b6d43a78cc6ac47d653b372fbada01edc (diff) | |
| download | rust-7ce8246a2393af53492d2c415f6f415099ce08d2.tar.gz rust-7ce8246a2393af53492d2c415f6f415099ce08d2.zip | |
Rollup merge of #80859 - jsgf:fix-pretty-remap, r=davidtwco
Fix --pretty=expanded with --remap-path-prefix Per https://github.com/rust-lang/rust/issues/80832, using --pretty=expanded and --remap-path-prefix results in an ICE. This is becasue the session source files table is stored in remapped form, whereas --pretty-expanded looks up unremapped files. This remaps the path prefixes before lookup. ~~There don't appear to be any existing tests for --pretty=expanded; I'll look into adding some.~~ Never mind, found the pretty tests. Fixes #80832
Diffstat (limited to 'compiler/rustc_span/src')
| -rw-r--r-- | compiler/rustc_span/src/source_map.rs | 15 |
1 files changed, 14 insertions, 1 deletions
diff --git a/compiler/rustc_span/src/source_map.rs b/compiler/rustc_span/src/source_map.rs index 6635d44496c..a7b8c8ba1d4 100644 --- a/compiler/rustc_span/src/source_map.rs +++ b/compiler/rustc_span/src/source_map.rs @@ -872,8 +872,10 @@ impl SourceMap { } pub fn get_source_file(&self, filename: &FileName) -> Option<Lrc<SourceFile>> { + // Remap filename before lookup + let filename = self.path_mapping().map_filename_prefix(filename).0; for sf in self.files.borrow().source_files.iter() { - if *filename == sf.name { + if filename == sf.name { return Some(sf.clone()); } } @@ -1041,4 +1043,15 @@ impl FilePathMapping { (path, false) } + + fn map_filename_prefix(&self, file: &FileName) -> (FileName, bool) { + match file { + FileName::Real(realfile) => { + let path = realfile.local_path(); + let (path, mapped) = self.map_prefix(path.to_path_buf()); + (FileName::Real(RealFileName::Named(path)), mapped) + } + other => (other.clone(), false), + } + } } |
