Do not ICE on multipart suggestions touching multiple files

When encountering a multipart suggestion with spans belonging to
different contexts, skip that suggestion.
This commit is contained in:
Esteban Küber 2020-01-24 18:03:09 -08:00
parent c2d141df59
commit b626202087
2 changed files with 7 additions and 6 deletions

View File

@ -185,16 +185,17 @@ impl CodeSuggestion {
!invalid
})
.cloned()
.map(|mut substitution| {
.filter_map(|mut substitution| {
// Assumption: all spans are in the same file, and all spans
// are disjoint. Sort in ascending order.
substitution.parts.sort_by_key(|part| part.span.lo());
// Find the bounding span.
let lo = substitution.parts.iter().map(|part| part.span.lo()).min().unwrap();
let hi = substitution.parts.iter().map(|part| part.span.hi()).max().unwrap();
let lo = substitution.parts.iter().map(|part| part.span.lo()).min()?;
let hi = substitution.parts.iter().map(|part| part.span.hi()).max()?;
let bounding_span = Span::with_root_ctxt(lo, hi);
let lines = cm.span_to_lines(bounding_span).unwrap();
// The different spans might belong to different contexts, if so ignore suggestion.
let lines = cm.span_to_lines(bounding_span).ok()?;
assert!(!lines.lines.is_empty());
// To build up the result, we do this for each span:
@ -244,7 +245,7 @@ impl CodeSuggestion {
while buf.ends_with('\n') {
buf.pop();
}
(buf, substitution.parts, only_capitalization)
Some((buf, substitution.parts, only_capitalization))
})
.collect()
}

View File

@ -10,7 +10,7 @@ error: internal compiler error: mutable allocation in constant
LL | const MUTABLE_BEHIND_RAW: *mut i32 = &UnsafeCell::new(42) as *const _ as *mut _;
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
thread 'rustc' panicked at 'no errors encountered even though `delay_span_bug` issued', src/librustc_errors/lib.rs:356:17
thread 'rustc' panicked at 'no errors encountered even though `delay_span_bug` issued', src/librustc_errors/lib.rs:357:17
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
error: internal compiler error: unexpected panic