about summary refs log tree commit diff
path: root/src/librustc_span/source_map.rs
diff options
context:
space:
mode:
authorEsteban Küber <esteban@kuber.com.ar>2020-01-15 09:57:06 -0800
committerEsteban Küber <esteban@kuber.com.ar>2020-01-16 18:14:26 -0800
commit10a9ea4c2622544d52ecef47fea0404a7ce0ace4 (patch)
treeefa08d91a8cd3f999d0f39741222eb497b20ca04 /src/librustc_span/source_map.rs
parentecbc222855c890c3aabe4848e8d8b312debcf0ff (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.rs11
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);