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
This commit is contained in:
commit
7ce8246a23
4 changed files with 43 additions and 3 deletions
|
@ -363,8 +363,15 @@ impl<'tcx> pprust_hir::PpAnn for TypedAnnotation<'tcx> {
|
||||||
|
|
||||||
fn get_source(input: &Input, sess: &Session) -> (String, FileName) {
|
fn get_source(input: &Input, sess: &Session) -> (String, FileName) {
|
||||||
let src_name = input.source_name();
|
let src_name = input.source_name();
|
||||||
let src =
|
let src = String::clone(
|
||||||
String::clone(&sess.source_map().get_source_file(&src_name).unwrap().src.as_ref().unwrap());
|
&sess
|
||||||
|
.source_map()
|
||||||
|
.get_source_file(&src_name)
|
||||||
|
.expect("get_source_file")
|
||||||
|
.src
|
||||||
|
.as_ref()
|
||||||
|
.expect("src"),
|
||||||
|
);
|
||||||
(src, src_name)
|
(src, src_name)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -872,8 +872,10 @@ impl SourceMap {
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn get_source_file(&self, filename: &FileName) -> Option<Lrc<SourceFile>> {
|
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() {
|
for sf in self.files.borrow().source_files.iter() {
|
||||||
if *filename == sf.name {
|
if filename == sf.name {
|
||||||
return Some(sf.clone());
|
return Some(sf.clone());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1041,4 +1043,15 @@ impl FilePathMapping {
|
||||||
|
|
||||||
(path, false)
|
(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),
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
13
src/test/pretty/expanded-and-path-remap-80832.pp
Normal file
13
src/test/pretty/expanded-and-path-remap-80832.pp
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
#![feature(prelude_import)]
|
||||||
|
#![no_std]
|
||||||
|
#[prelude_import]
|
||||||
|
use ::std::prelude::v1::*;
|
||||||
|
#[macro_use]
|
||||||
|
extern crate std;
|
||||||
|
// Test for issue 80832
|
||||||
|
//
|
||||||
|
// pretty-mode:expanded
|
||||||
|
// pp-exact:expanded-and-path-remap-80832.pp
|
||||||
|
// compile-flags: --remap-path-prefix {{src-base}}=the/src
|
||||||
|
|
||||||
|
fn main() { }
|
7
src/test/pretty/expanded-and-path-remap-80832.rs
Normal file
7
src/test/pretty/expanded-and-path-remap-80832.rs
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
// Test for issue 80832
|
||||||
|
//
|
||||||
|
// pretty-mode:expanded
|
||||||
|
// pp-exact:expanded-and-path-remap-80832.pp
|
||||||
|
// compile-flags: --remap-path-prefix {{src-base}}=the/src
|
||||||
|
|
||||||
|
fn main() {}
|
Loading…
Add table
Add a link
Reference in a new issue