diff options
| author | Esteban Küber <esteban@kuber.com.ar> | 2020-01-15 09:57:06 -0800 |
|---|---|---|
| committer | Esteban Küber <esteban@kuber.com.ar> | 2020-01-16 18:14:26 -0800 |
| commit | 10a9ea4c2622544d52ecef47fea0404a7ce0ace4 (patch) | |
| tree | efa08d91a8cd3f999d0f39741222eb497b20ca04 /src/librustc_span/source_map.rs | |
| parent | ecbc222855c890c3aabe4848e8d8b312debcf0ff (diff) | |
Do not ICE on malformed suggestion spans
Diffstat (limited to 'src/librustc_span/source_map.rs')
| -rw-r--r-- | src/librustc_span/source_map.rs | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/src/librustc_span/source_map.rs b/src/librustc_span/source_map.rs index fb5fcf4a830..9c7c0f0c8b0 100644 --- a/src/librustc_span/source_map.rs +++ b/src/librustc_span/source_map.rs @@ -473,20 +473,23 @@ impl SourceMap { lo.line != hi.line } - pub fn span_to_lines(&self, sp: Span) -> FileLinesResult { - debug!("span_to_lines(sp={:?})", sp); - + pub fn is_valid_span(&self, sp: Span) -> Result<(Loc, Loc), SpanLinesError> { let lo = self.lookup_char_pos(sp.lo()); debug!("span_to_lines: lo={:?}", lo); let hi = self.lookup_char_pos(sp.hi()); debug!("span_to_lines: hi={:?}", hi); - if lo.file.start_pos != hi.file.start_pos { return Err(SpanLinesError::DistinctSources(DistinctSources { begin: (lo.file.name.clone(), lo.file.start_pos), end: (hi.file.name.clone(), hi.file.start_pos), })); } + Ok((lo, hi)) + } + + pub fn span_to_lines(&self, sp: Span) -> FileLinesResult { + debug!("span_to_lines(sp={:?})", sp); + let (lo, hi) = self.is_valid_span(sp)?; assert!(hi.line >= lo.line); let mut lines = Vec::with_capacity(hi.line - lo.line + 1); |
